更新日期:2018年08月31日

一、前言

捐赠系统具有回调功能,在捐赠订单被支付之后可以有回调以便于进行后续操作。

分为两种回调,异步和同步。

两种回调地址均能在系统里设置。

同步跳转的链接如下:

http://pay.test.zhaoj.in/redirect.php?amount=1&app_donation_id=849&app_info_id=29&created_at=2018-08-31+00%3A54%3A33&final_money=0.01&id=9685&is_paid=1&money=0.01&pay_method=alipay&pay_method_trade_no=2018083121001004950513231964&price=0.01&rate=0.6&updated_at=2018-08-31+00%3A54%3A43&user_id=0&sign=56baa50601ca25ea59b10b9a311a9697

异步 POST 地址收到的信息如下:

{“id”:9684,”app_info_id”:29,”amount”:1,”price”:0.01,”money”:0.01,”is_paid”:1,”created_at”:”2018-08-31 00:44:27″,”updated_at”:”2018-08-31 00:44:44″,”deleted_at”:null,”user_id”:0,”pay_method”:”alipay”,”pay_method_trade_no”:”2018083121001004950512962373″,”rate”:0.6,”final_money”:0.01,”app_donation_id”:848,”sign”:”56c66c3a6b719c4700c1320475788dc8″}

二、数据说明

  1. amount:  订单项目数,此处一直为1
  2. app_donation_id: 捐赠子系统 ID
  3. app_id:App ID
  4. created_at:订单创建时间
  5. deleted_at:一直为空,无需在意
  6. final_money:最终支付金额
  7. id:订单 ID
  8. is_paid:是否已支付,既然回调就一直为1
  9. money:应付总金额
  10. pay_method:支付方式,和创建时指定的方式对应
  11. pay_method_trade_no:支付方式的订单号
  12. price:单项目金额,既然上面项目数是1那么这里就应该和总金额一样了
  13. rate:支付方式费率,一般为相应渠道的总费率
  14. updated_at:支付完成时间
  15. user_id:用户 ID,一般一直为0
  16. sign:签名

三、注意点

0.sign 计算规则

sign 主要由 order 的相信信息拼接之后与 sign 拼接再 MD5 得到。

例如,订单信息为

amount=1

app_donation_id=76

app_id=10

created_at=2018-04-13%2B10%253A54%253A07

deleted_at=

final_money=0.01

id=3698

is_paid=1

money=0.01

pay_method=alipay

pay_method_trade_no=2018041321001004950520649352

price=0.01

rate=0.6

updated_at=2018-04-13%2B10%253A54%253A25

user_id=0

按照属性键字母升序排列后,确认其属性值都已经被 urlencode,然后拼接成如下字符串

amount=1&app_donation_id=76&app_id=10&created_at=2018-04-13%2B10%253A54%253A07&deleted_at=&final_money=0.01&id=3698&is_paid=1&money=0.01&pay_method=alipay&pay_method_trade_no=2018041321001004950520649352&price=0.01&rate=0.6&updated_at=2018-04-13%2B10%253A54%253A25&user_id=0

最后将这个字符串最后拼接上 App 的 签名 Key sign_key,得到 sign。请自行比对外部传来的 sign,用以保证请求没有被 伪造和篡改。

四、回调处理示例(PHP)

https://github.com/glzjin/extstars_donate_callback_example