异步回调
付呗商户设置回调链接增加回调链接验证的通知
- 本次功能的调整是为了规避一些在支付回调的时候出现无效链接的情况。
具体调整如下:
- 已经配置过回调链接的商户,修改回调链接需验证;
- 新添加的商户,配置回调链接需要验证。
验证规则如下:
在接口配置输入回调url,点击右侧的“验证”按钮进行链接有效性的验证:
- 有效链接:链接返回“success”,严格小写
- 无效链接:链接未返回“success”
鉴于上述需求,第三方设置回调地址时,需控制服务器返回“success”,以完成回调验证。
若出现服务器已返回“success”,仍然提示链接无效时,请检查代码是否是utf-8无BOM格式的,并且使用常用端口,如80,443.
回调地址设置
- 调用支付接口时传入call_back_url参数(第一优先级)
- 在商户平台设置回调地址(第二优先级)
- 在服务商平台设置回调地址(第三优先级)
回调机制
支付成功后,平台服务器将以POST表单(application/x-www-form-urlencoded)方式请求指定的回调地址;
第三方接受到回调,程序执行完后必须返回指定响应参数,如果返回的不是指定的参数,平台服务器会不断重发通知16次;
回调签名规则
- 对所有回调参数(剔除sign参数),根据参数名称的ASCII码表的顺序排序;
- 将排序好的参数名和参数值拼装在一起,用&符号连接;
- 在拼接好的字符串后面无缝添加商户密钥(商户平台Secret)
把拼装好的字符串采用utf-8编码,使用MD5算法,将字符串进行32位大写加密
签名字符串示例:
data={"merchant_order_sn":"201706061496744418150","total_fee":99}&result_code=200&result_message=成功4fdd3c041fa436f0d53fe869f9b9029d
回调参数:
参数 | 类型 | 是否必填 | 最大长度 | 描述 |
---|---|---|---|---|
result_code | int | 是 | 10 | 状态码 |
result_message | string | 是 | 32 | 状态信息 |
sign | string | 是 | 32 | 回调签名 |
data | string | 是 | 不定 | 回调业务参数的集合 |
- 回调业务参数:
参数 | 类型 | 是否必填 | 最大长度 | 描述 |
---|---|---|---|---|
merchant_order_sn | string | 是 | 32 | 第三方商户的订单号 |
platform_order_no | string | 是 | 32 | 平台方订单号 |
trade_no | string | 是 | 32 | 商户单号 |
total_fee | float | 是 | 10 | 实收金额(元) |
order_price | float | 是 | 10 | 订单金额 |
fee | float | 是 | 10 | 手续费(元) |
body | string | 否 | 128 | 对商品或交易的描述 |
attach | string | 否 | 127 | 附加数据 |
store_id | int | 是 | 10 | 付呗系统的门店id |
cashier_id | int | 否 | 16 | 付呗系统的收银员id |
device_no | string | 否 | 32 | 设备终端号 |
user_id | string | 否 | 32 | 微信顾客支付授权的“open_id”或者支付宝顾客的“buyer_user_id” |
user_logon_id | string | 否 | 32 | 支付宝顾客的账号 |
pay_time | int | 是 | 10 | 交易成功的时间(单位:秒) |
no_cash_coupon_fee | float | 否 | 10 | 免充值代金券金额(元) |
cash_coupon_fee | float | 否 | 10 | 预充值代金券金额(元) |
cash_fee | float | 是 | 10 | 顾客实际支付金额(元) |
discount_money | float | 否 | 10 | 折扣减掉的金额,在折扣开关开启状态下才有 |
平台服务器响应示例:
"data":"{"merchant_order_sn":"50N001456381505180625514131","platform_order_no":"982019071122001405111049469753",trade_no":"2018092616294901086756739438","total_fee":99,"attach":"","store_id":123,"cashier_id":0,"user_id":"","device_no":"123456","paytime":1557192409,"user_logon_id":"","no_cash_coupon_fee":2,"cash_fee":97,"fee":"1.11"}", "result_code":"200", "result_message":"成功", "sign":"9F4E2E841C71B2D3F24DB6C5C3711890"
第三方如果接收回调接口处理完成要返回如下格式(不区别大小写的success)让回调结束
success / SUCCESS
- 提示: 如果在商户后台设置的回调地址包含参数并且获取平台服务器回调的信息包含该参数,在拼接回调签名的字符串时需剔除sign参数以及回调地址携带的参数,否则签名无法通过。