友朋运营商开放平台
  1. 业务场景
友朋运营商开放平台
  • 友朋运营商平台第三方开放平台接口文档
  • 业务场景
    • 场景:自取柜第三方支付业务逻辑
    • 场景:异步通知第三方业务回调地址
    • 场景:自取柜售货机订单同步给第三方
  • API 列表
    • api.test
      POST
    • cabinet.list
      POST
    • cabinet.product.stock
      POST
    • cabinet.open.door
      POST
    • cabinet.order.refund.apply
      POST
    • cabinet.order.user.appeal
      POST
    • cabinet.order.list
      POST
    • cabinet.order.get
      POST
    • consumer.order.list
      POST
    • consumer.order.get
      POST
  1. 业务场景

场景:自取柜第三方支付业务逻辑

💡
使用背景:运营商购买友朋自取柜后,想自己研发APP或小程序及选择自己合作的支付渠道或自有的电子钱包或会员内部员工等逻辑,实现自有消费者终端的业务场景。

01. 开通自取柜第三方支付功能#

前置动作:根据 友朋运营商平台第三方开放平台接口文档 完成开发者的appid、appSecret的创建,回调地址配置,及所需权限勾选。
请在登录运营后台,在【系统管理】-【支付配置】购买开通第三方支付功能。完成付费后,请联系商务进行技术参数配置。
请开发者准备好以下两样资料,提供参数给到商务或友朋群内的技术口同事。
1. 【支付回调URL】: 需带SSL证书的域名
2. 【支付签名密钥】: 字符串
注意事项:
1.
运营商开放平台的appid配置的【回调URL】(免费) 和 【支付回调URL】(付费)是两个不同业务场景使用,开发支付业务的开发者可设置开放平台对应appid的 回调URL 和 支付回调URL 为同一个目标地址,由友朋向开发者的目标地址发送请求。
2.
开发者需按文档要求构建自己的异步通知接收服务(即上述回调URL),并确保该服务的持续可用性。
3.
本文档中还有一个【业务回调地址】,是单独跟某一个业务接口独立的、由开发者向友朋发送通知使用的。

02. 支付业务流程及业务时序图#

① 开发者通过 cabinet.list 获取设备ID制作成固定二维码 :#

二维码需要在内容最后带参数 cid=设备ID,用于识别补货扫码开门时识别唯一设备。

② 开发者通过 cabinet.product.stock 获取柜子商品和价格:#

用于展示自取柜内的商品图片、名称、价格、库存等。(消费者扫码后在APP/小程序上展示使用)

③ 开发者通过 cabinet.open.door创建订单和开门 :#

请在创建订单前完成用户的扣款授权和自有业务逻辑。

④ 友朋回调开发者 notify.close.door 关门结果 :#

当设备上报关门后进行通知 (设备门锁和网络会影响结果及时效)

⑤ 友朋回调开发者 cabinet.order.vi.result.notify 识别商品结果:#

当友朋完成商品识别后通知,(设备网络情况会影响上传视频的速度,上传完后再到算法服务中进行识别)

⑥ 开发者回调支付结果给友朋该订单的NotifyUrl:#

NotifyUrl 为 第三步创建订单 cabinet.open.door 时,友朋提供的该订单回调地址 (请务必回调支付结果,否则友朋系统内订单会一直处于待支付状态,影响财务对账)
业务接口对应的时序图
从消费者扫码,开门,拿取商品,关门,上传视频识别,结算全流程业务链路。

03 消费者主动申诉业务逻辑说明#

消费者主动申诉场景根据开发者自身业务需求来判断需要对接哪些场景接口
1.
【API支持】在订单完成支付后,全额退款业务
2.
【API支持】在订单未完成支付前,进行申诉
3.
【API支持】在订单完成支付后,订单识别错误(有误、少扣,多扣):在友朋运营系统中,当发生订单识别错误会重新发起一笔新订单,原订单全额退款。

3.1 完成支付后全额退款业务#

全额退款业务逻辑图
此业务为第三方为消费者提供订单申诉全额退款的入口时使用,第三方需到友朋运营后台进行退款订单审核后才会发起退款通知 。如未完成此流程对接,第三方自行退款给消费者,会出现财务对账问题。
① 开发者通过 cabinet.order.refund.apply 发起退款:开发者允许消费者申请直接退款的情况下使用。
② 友朋回调开发者 cabinet.order.refunds.result.notify: 开发者需同步返回退款结果给友朋。

3.2 未完成支付前进行申诉#

【支付前】发起申诉逻辑图
此业务为第三方为消费者提供在支付前进行订单申诉
① 开发者通过 cabinet.order.user.appeal 发起申诉:开发者在APP中提供了订单确定(非立即扣款)情况下使用。
② 友朋回调开发者 cabinet.order.vi.result.notify商品识别结果: 此结果需要开发者的客服到友朋运营商后台处理异常订单后才会进行回调。
③ 开发者回调支付结果给友朋该订单的NotifyUrl:NotifyUrl 为创建订单cabinet.open.door时,友朋提供的该订单回调地址 (请务必回调支付结果,否则友朋系统内订单会一直处于待支付状态,影响财务对账)

3.3 支付后进行申诉#

【支付后】发起申诉逻辑图
此业务为第三方为消费者提供在支付后进行订单申诉使用
① 开发者通过 cabinet.order.user.appeal 发起申诉:已支付的订单的售后处理,会产生一个新订单,原订单退款。
② 友朋回调开发者 cabinet.order.product.modify 新订单的识别结果:此结果需要开发者的客服到友朋运营商后台处理异常订单后才会进行回调。
② 友朋回调开发者 cabinet.order.refunds.result.notify 原订单的退款:此结果需要开发者的客服到友朋运营商后台处理异常订单后才会进行回调
③ 开发者回调支付结果给新订单的PaySuccessNotifyUrl:在第②步友朋会提供新订单的回调地址PaySuccessNotifyUrl,请务必回调该新订单的支付结果,否则友朋系统内订单会一直处于待支付状态,影响财务对账。

04 开发者异步回调友朋所需实现逻辑#

4.1 开发者回调规则#

业务回调URL: 是在调用友朋业务接口,接口返回参数中的业务回调URL地址,例如创建支付订单。
回调请求方式:【POST】
所有参数区分大小写
友朋采用 HTTP POST Content-Type:application/x-www-form-urlencoded 方式请求第三方回调接口
appSecret: 开发者提供给友朋的密钥(注意区分非友朋提供给开发者appSecret)

4.2 签名与校验签名#

1.
除 sign 参数外所有参数必须参与签名,参数以文本方式字典排序,排序后使用 key=value&key=value 方式拼接字符串
2.
得到字符串 tmpString
3.
签名:md5(tmpString+"&"+appSecret) 得出的结果转换为小写字母

4.3 第三方支付业务回调参数说明#

NotifyUrl 开发者通知友朋订单支付结果
示例URL: https://c.yopoint.com/thirdpay/gateway/cabinet_notify/[xxxxx]
前置逻辑: 每次调用 cabinet.open.door 接口开门后,友朋接口会同步返回 回调地址【NotifyUrl】,请务必保存每笔订单的回调地址。
实现业务: 第三方开发者接入自有支付通道,每笔开门订单完成支付(扣款)后,进行【异步回调 】。如回调接口失败,请确保重试补偿机制,确保两边的订单状态同步避免对账问题出现。
回调请求参数:
参数名称类型是否必须参考值
receipt_nostringY友朋业务订单号全局唯一
trade_nostringY支付渠道交易流水号 (尽可能采用支付通道的业务流水号,避免二次对账)
trade_statusintY支付结果 1=支付成功 -1=交易关闭
trade_raw_dataobjectN支付渠道回调的所有参数以 JSON 字符串方式传递,如果没值请传递 {} 空对象字符串
complete_statusstringY完成状态
pay_timeintY支付时间 YYYYMMDDHHMMSS, 示例:20210122112001
signstringY签名
友朋同步响应:
success
注意
友朋收到请求并校验,处理成功后返回 success 纯文本,对于非 success 的返回视为业务处理失败,第三方需要对此回调发起重试,直到返回 success 为止
trade_raw_data 如果没值请传递 {} 字符串且参与签名
complete_status 如果没值请传递 "" 字符串且参与签名

05 友朋异步回调开发者所需实现逻辑#

5.1 开发者需要实现的接口#

支付回调URL: 是指开发者提供的一个 API 请求入口,此 API 接口的请求和响应需要按照以下文档进行开发,并将接口URL提供给友朋。
请求方式:【POST】
所有参数区分大小写
友朋采用 HTTP POST Content-Type:application/x-www-form-urlencoded 方式请求第三方回调接口
签名与校验签名
除 sign 参数外所有参数必须参与签名,参数以文本方式字典排序,排序后使用 key=value&key=value 方式拼接字符串
得到字符串 tmpString
签名:md5(tmpString+"&"+appSecret) 得出的结果转换为小写字母
appSecret 由品牌商在后台配置(此文档里接口 appSecret 用的是支付配置中的签名秘钥,非支付业务接口签名均用开放平台 appSecret)
通知参数:
参数名称类型是否必须说明
methodstringY业务方法,以下每个接口表示每个业务方法 (字母小写)
biz_contentstringY业务参数 json 字符串
timestampintYunix 时间戳到秒
sign_typestringY签名方式,md5 (小写)
signstringY签名(小写)
开发者返回结果:
参数名称类型是否必须说明
error_codeint是错误代码 =0 正常(操作成功,接口调用成功) !=0 异常错误
error_msgstring是错误描述
dataobject是返回业务内容
售前回调通知
notify.close.door

5.2 接口通知 notify.close.door#

接口通知说明
【前置条件】:在调用cabinet.open.door接口后,友朋服务器收到机器关门后,异步触发通知开发者appid对应设置的回调 URL
【回调URL】: 免费 (开发者appid对应设置的回调URL)
【响应要求】: 无
业务参数
参数名称类型是否必须说明
StatusintY1=机器有开门 2=机器没有开门
ReceiptNostringY单号
MsgstringY消息文案

售中回调通知
cabinet.order.vi.result.notify

5.3 通知接口 cabinet.order.vi.result.notify#

接口通知说明:
【前置条件】: 此接口是用于当自取柜开门后,识别商品回调。当商品识别为异常状态时不会发起通知,需要运营商客服上运营商平台处理异常订单,完成后会发起回调。
【回调URL】: 付费 (开发者提供给友朋的支付回调URL)
【响应要求】: 同步返回
业务参数:
参数名称类型是否必须说明
ReceiptNostringY友朋订单号
ProductsarrayY商品列表
Products: [{
		"Qty": 1,
		"BarCode": "6925303723910",
		"Name": "\u7edf\u4e00\u51b0\u7ea2\u83361L",
		"Price": 1,
		"CostPrice": 0,
		"TotalPrice": 1
	}]
第三方返回要求示例
//成功
{
  "error_code": 0, //业务逻辑成功返回0 不成功返回非0
  "error_msg": "SUCCESS",
  "data": {
  }
}

//失败
{
  "error_code": -1,
  "error_msg": "业务失败原因的描述",
}

售后回调通知
cabinet.order.product.modify
cabinet.order.refunds.result.notify

5.4 通知接口 cabinet.order.product.modify#

接口通知说明:
【前置条件】: 此接口是用于消费者申诉时,运营商修改订单的识别结果后进行通知。
【回调URL】: 付费 (开发者提供给友朋的支付回调URL)
【响应要求】: 异步返回 (开发需保存PaySuccessNotifyUrl,用于异步回调通知友朋,参考 4.3 第三方支付业务回调参数说明)
业务参数:
参数名称类型是否必须说明
ReceiptNostringY友朋原订单号
originalOrderRowobjectY原订单
newOrderRowobjectY调整后订单
PaySuccessNotifyUrlstringY调整后的订单支付成功后回调链接
originalOrderRow
originalOrderRow 对象类型是否必须说明
CIDstring是设备ID
OIDstring是运营商ID
BIDstring是品牌商ID
UserIDstring是用户ID
OpenIDstring是平台的OpenID, 如小程序的AppID,支付宝
PayTypeinteger是支付方式 0=未知 1=微信(支付分) 2=支付宝 201=品牌商微信代收 99=第三方支付
- PayExtendobject是支付商户的扩展
ClientIPAddressstring是客户端ip
ScenesTypeinteger是支付场景 0=扫码支付 1=友朋刷脸 2=微信刷脸 3=支付宝刷脸 4=密码购
ServiceStatusinteger是服务状态 0=未开始服务 1=服务中 2=服务结束 (通过回调来更新) 3=价格计算完成 4=价格已确认
TradeNostring是第三方交易流水号
ThirdpartyAppIDstring是开放平台调用的AppID
ReceiptNostring是单据编号 唯一
- TradeRawDataobject是交易具体信息
-- nointeger是
PayTimeinteger是支付时间
- Productsarray是商品信息
-- Qtyinteger是数量
-- BarCodestring是
-- Namestring是
-- Priceinteger是单价 单位:分
-- CostPriceinteger是成本 单位:分
-- TotalPriceinteger是总价 单位:分
DoorStatusinteger是开门状态 -1=没有开门 0=已关门 1=已开门
TradeStatusinteger是交易状态 0=等待结算 1=已支付成功 2=已退款成功 -1=已取消订单
Priceinteger是实收金额 单位分
IsSuspiciousinteger是订单是否可疑
- RefundsProductsarray是退款商品
RefundsPriceinteger是退款金额 单位分
- RefundsRawDataobject是退款具体信息
UserRefundsStatusinteger是用户退款申请状态 0=未申请 1=申请退款 -1=拒绝退款 2=通过退款
UserRefundsTimeinteger是用户退款申请时间
UserRefundsReasonstring是用户退款原因
UserRefundsRemarksstring是用户退款备注
- UserRefundsImageUrlarray是用户退款上传的图片URL
UserRefundsMobilestring是用户退款时手机号码
UserOrderInfostring是用户对于 => 异常订单的 => 订单信息补充
RefundsTimeinteger是退款时间
OpAccountIDstring是退款操作的AccountID
OpRefundsRemarksstring是运营商 => 退款处理备注
DealResultStatusinteger是运营商 => 处理结果 0=未知 1=本单未产生消费 2=修改订单明细结算 3=恶意行为
DealTimeinteger是运营商 => 处理时间
DealRemarksstring是运营商 => 处理意见
SOpAccountIDstring是异常订单操作的AccountID
CompleteStatusnull是订单完成状态 SUCCESS=完成
CreateAtinteger是创建时间
UpdatedAtinteger是更新时间
idstring是订单ID
newOrderRow对象
newOrderRow 对象类型是否必须说明
CIDstring是设备ID
OIDstring是运营商ID
BIDstring是品牌商ID
UserIDstring是用户ID
OpenIDstring是平台的OpenID, 如小程序的AppID,支付宝
PayTypeinteger是支付方式 0=未知 1=微信(支付分) 2=支付宝 201=品牌商微信代收 99=第三方支付
- PayExtendobject是支付商户的扩展
ClientIPAddressstring是客户端ip
ScenesTypeinteger是支付场景 0=扫码支付 1=友朋刷脸 2=微信刷脸 3=支付宝刷脸 4=密码购
ServiceStatusinteger是服务状态 0=未开始服务 1=服务中 2=服务结束 (通过回调来更新) 3=价格计算完成 4=价格已确认
TradeNostring是第三方交易流水号
ThirdpartyAppIDstring是开放平台调用的AppID
ReceiptNostring是单据编号 唯一
- TradeRawDataobject是交易具体信息
-- nointeger是
PayTimeinteger是支付时间
- Productsarray是商品信息
-- Qtyinteger是数量
-- BarCodestring是
-- Namestring是
-- Priceinteger是单价 单位:分
-- CostPriceinteger是成本 单位:分
-- TotalPriceinteger是总价 单位:分
DoorStatusinteger是开门状态 -1=没有开门 0=已关门 1=已开门
TradeStatusinteger是交易状态 0=等待结算 1=已支付成功 2=已退款成功 -1=已取消订单
Priceinteger是实收金额 单位分
IsSuspiciousinteger是订单是否可疑
- RefundsProductsarray是退款商品
RefundsPriceinteger是退款金额 单位分
- RefundsRawDataobject是退款具体信息
UserRefundsStatusinteger是用户退款申请状态 0=未申请 1=申请退款 -1=拒绝退款 2=通过退款
UserRefundsTimeinteger是用户退款申请时间
UserRefundsReasonstring是用户退款原因
UserRefundsRemarksstring是用户退款备注
- UserRefundsImageUrlarray是用户退款上传的图片URL
UserRefundsMobilestring是用户退款时手机号码
UserOrderInfostring是用户对于 => 异常订单的 => 订单信息补充
RefundsTimeinteger是退款时间
OpAccountIDstring是退款操作的AccountID
OpRefundsRemarksstring是运营商 => 退款处理备注
DealResultStatusinteger是运营商 => 处理结果 0=未知 1=本单未产生消费 2=修改订单明细结算 3=恶意行为
DealTimeinteger是运营商 => 处理时间
DealRemarksstring是运营商 => 处理意见
SOpAccountIDstring是异常订单操作的AccountID
CompleteStatusnull是订单完成状态 SUCCESS=完成
CreateAtinteger是创建时间
UpdatedAtinteger是更新时间
idstring是订单ID
示例数据
originalOrderRow
{
	"CID": "5f519ebf4405f00010750ef5", // 设备ID
	"OID": "5db266d87bd4810010954b0e",  // 运营商ID
	"BID": "5d254c16683ead0011492950",    // 品牌商ID
	"UserID": "5fcf260311ab6d0010c8b20e",   // 用户ID
	"OpenID": "13715352279",   // 平台的OpenID, 如小程序的AppID,支付宝
	"PayType": 99,   // 支付方式 0=未知 1=微信(支付分) 2=支付宝 201=品牌商微信代收 99=第三方支付
	"PayExtend": {},   // 支付商户的扩展
	"ClientIPAddress": "127.0.0.1", // 客户端ip
	"ScenesType": 0,  // 支付场景 0=扫码支付 1=友朋刷脸 2=微信刷脸 3=支付宝刷脸 4=密码购
	"ServiceStatus": 2,   // 服务状态 0=未开始服务 1=服务中 2=服务结束 (通过回调来更新) 3=价格计算完成 4=价格已确认
	"TradeNo": "9927749809022",  // 第三方交易流水号
	"ThirdpartyAppID": "106267743528",   // 开放平台调用的AppID
	"ReceiptNo": "OD210122112202688925", // 单据编号 唯一
	"TradeRawData": { // 交易具体信息
		"no": 1
	},
	"PayTime": 1611285601, // 支付时间
	"Products": [// 商品信息
		{
			"Qty": 1, // 数量
			"BarCode": "6902538004045",
			"Name": "脉动青柠口味瓶装600ml",
			"Price": 2, // 单价 单位:分
			"CostPrice": 0, // 成本 单位:分
			"TotalPrice": 2 // 总价 单位:分
		}
	],
	"DoorStatus": 0, // 开门状态  -1=没有开门 0=已关门 1=已开门
	"TradeStatus": 1,  // 交易状态 0=等待结算 1=已支付成功 2=已退款成功 -1=已取消订单
	"Price": 0,   // 实收金额 单位分
	"IsSuspicious": 0,   // 订单是否可疑
	"RefundsProducts": [],   // 退款商品
	"RefundsPrice": 0,  // 退款金额 单位分
	"RefundsRawData": {}, // 退款具体信息
	"UserRefundsStatus": 1,   // 用户退款申请状态 0=未申请 1=申请退款 -1=拒绝退款 2=通过退款
	"RefundsType": 1, // 退款处理方式 => 1=拒绝退款 2=仅退款 3=补扣新订单、原订单退款 4=补扣新订单支付成功后,原订单退款
	"UserRefundsTime": 1611285756,  // 用户退款申请时间
	"UserRefundsReason": "REFUNDS_REASON_PRODUCT_NOT_MATCH", // 用户退款原因 REFUNDS_REASON_PRODUCT_VI_MORE = 多识别商品 REFUNDS_REASON_PRODUCT_EXPIRED = 商品已过期 REFUNDS_REASON_PRODUCT_NOT_MATCH = 识别错商品 REFUNDS_REASON_PRODUCT_VI_LESS = 算漏商品 REFUNDS_REASON_OFFLINE_PAYMENT = 线下收款 REFUNDS_REASON_WECHAT_COMPLAINT = 微信投诉
	"UserRefundsRemarks": "20e10122001",  // 用户退款备注
	"UserRefundsImageUrl": [],  // 用户退款上传的图片URL
	"UserRefundsMobile": "13715352279",  // 用户退款时手机号码
	"UserOrderInfo": "",  // 用户对于 => 异常订单的 => 订单信息补充
	"RefundsTime": 0, // 退款时间
	"OpAccountID": "",  // 退款操作的AccountID
	"OpRefundsRemarks": "",    // 运营商 => 退款处理备注
	"DealResultStatus": 0, // 运营商 => 处理结果 0=未知 1=本单未产生消费 2=修改订单明细结算 3=恶意行为罚款
	"DealTime": 0,   // 运营商 => 处理时间
	"DealRemarks": "",  // 运营商 => 处理意见
	"SOpAccountID": "",  // 异常订单操作的AccountID
	"CompleteStatus": null, // 订单完成状态 SUCCESS=完成
	"CreateAt": 1611285723, // 创建时间
	"UpdatedAt": 1611285756, // 更新时间
	"id": "600a44db524b3420fc218c2c" // 订单ID
}

newOrderRow
{
	"CID": "5f519ebf4405f00010750ef5", // 设备ID
	"OID": "5db266d87bd4810010954b0e",  // 运营商ID
	"BID": "5d254c16683ead0011492950",    // 品牌商ID
	"UserID": "5fcf260311ab6d0010c8b20e",   // 用户ID
	"OpenID": "13715352279",   // 平台的OpenID, 如小程序的AppID,支付宝
	"PayType": 99,   // 支付方式 0=未知 1=微信(支付分) 2=支付宝 201=品牌商微信代收 99=第三方支付
	"PayExtend": {},   // 支付商户的扩展
	"ClientIPAddress": "127.0.0.1", // 客户端ip
	"ScenesType": 0,  // 支付场景 0=扫码支付 1=友朋刷脸 2=微信刷脸 3=支付宝刷脸 4=密码购
	"ServiceStatus": 2,   // 服务状态 0=未开始服务 1=服务中 2=服务结束 (通过回调来更新) 3=价格计算完成 4=价格已确认
	"TradeNo": "9927749809022",  // 第三方交易流水号
	"ThirdpartyAppID": "106267743528",   // 开放平台调用的AppID
	"ReceiptNo": "OD210122112202688925", // 单据编号 唯一
	"TradeRawData": { // 交易具体信息
		"no": 1
	},
	"PayTime": 1611285601, // 支付时间
	"Products": [// 商品信息
		{
			"Qty": 1, // 数量
			"BarCode": "6902538004045",
			"Name": "脉动青柠口味瓶装600ml",
			"Price": 2, // 单价 单位:分
			"CostPrice": 0, // 成本 单位:分
			"TotalPrice": 2 // 总价 单位:分
		}
	],
	"DoorStatus": 0, // 开门状态  -1=没有开门 0=已关门 1=已开门
	"TradeStatus": 1,  // 交易状态 0=等待结算 1=已支付成功 2=已退款成功 -1=已取消订单
	"Price": 0,   // 实收金额 单位分
	"IsSuspicious": 0,   // 订单是否可疑
	"RefundsProducts": [],   // 退款商品
	"RefundsPrice": 0,  // 退款金额 单位分
	"RefundsRawData": {}, // 退款具体信息
	"UserRefundsStatus": 1,   // 用户退款申请状态 0=未申请 1=申请退款 -1=拒绝退款 2=通过退款
	"UserRefundsTime": 1611285756,  // 用户退款申请时间
	"UserRefundsReason": "REFUNDS_REASON_PRODUCT_NOT_MATCH", // 用户退款原因 REFUNDS_REASON_PRODUCT_VI_MORE = 多识别商品 REFUNDS_REASON_PRODUCT_EXPIRED = 商品已过期 REFUNDS_REASON_PRODUCT_NOT_MATCH = 识别错商品 REFUNDS_REASON_PRODUCT_VI_LESS = 算漏商品 REFUNDS_REASON_OFFLINE_PAYMENT = 线下收款 REFUNDS_REASON_WECHAT_COMPLAINT = 微信投诉
	"UserRefundsRemarks": "20210122001",  // 用户退款备注
	"UserRefundsImageUrl": [],  // 用户退款上传的图片URL
	"UserRefundsMobile": "13715352279",  // 用户退款时手机号码
	"UserOrderInfo": "",  // 用户对于 => 异常订单的 => 订单信息补充
	"RefundsTime": 0, // 退款时间
	"OpAccountID": "",  // 退款操作的AccountID
	"OpRefundsRemarks": "",    // 运营商 => 退款处理备注
	"DealResultStatus": 0, // 运营商 => 处理结果 0=未知 1=本单未产生消费 2=修改订单明细结算 3=恶意行为罚款
	"DealTime": 0,   // 运营商 => 处理时间
	"DealRemarks": "",  // 运营商 => 处理意见
	"SOpAccountID": "",  // 异常订单操作的AccountID
	"CompleteStatus": null, // 订单完成状态 SUCCESS=完成
	"CreateAt": 1611285723, // 创建时间
	"UpdatedAt": 1611285756, // 更新时间
	"id": "600a44db524b3420fc218c2c" // 订单ID
}
第三方返回要求示例
//业务成功
{
  "error_code": 0, //业务逻辑成功返回0 不成功返回非0
  "error_msg": "SUCCESS"
}

//业务失败
{
  "error_code": -1,
  "error_msg": "业务失败原因的描述",
}

5.5 通知接口 cabinet.order.refunds.result.notify#

接口通知说明:
【前置条件】: 此接口是用于消费者申诉退款(或修改订单原订单退款)时,运营商进行订单全额退款通知。
【回调URL】: 付费 (开发者提供给友朋的支付回调URL)
【响应要求】: 同步返回
业务参数:
参数名称类型是否必须说明
ReceiptNostringY订单交易编号
UserRefundsStatusNumberY退款状态 -1=拒绝退款 2=通过退款
OpRefundsRemarksstringY审核备注
RefundsPriceNumberN退款金额 单位:分
RefundsTimeNumberN退款时间
第三方返回要求示例
//业务成功
{
  "error_code": 0, //业务逻辑成功返回0 不成功返回非0
  "error_msg": "SUCCESS"
}

//业务失败
{
  "error_code": -1,
  "error_msg": "业务失败原因的描述",
}
修改于 2024-02-28 10:15:28
上一页
友朋运营商平台第三方开放平台接口文档
下一页
场景:异步通知第三方业务回调地址
Built with