Webhooks 回调概述
为了便于客户系统或者第三方系统处理客户的交易信息,Justap 支付系统支持 Webhooks 功能来发送异步通知,可以按照客户要求把特定的事件结果推送到指定的地址以便于客户做后续处理。目前支持的事件包括周期性交易汇总信息、支付结果、和退款结果。 以下是关于接收 Webhooks 通知的说明:
- Webhooks 是 Justap 和你服务器间的交互,相比页面跳转同步通知可以在页面上显示出来,这种交互方式是不可见的。
- Webhooks 通知是以 POST 形式发送的 JSON ,放在请求的 body 里。
- 你需要监听并接收 Webhooks 通知,接收到 Webhooks 后需要返回服务器状态码 2xx 表示接收成功,否则请返回状态码 500。
- 若返回的服务器状态码不是 2xx,Justap 服务器会在 25 小时内向你的服务器不断重发通知,最多 10 次。
通知的数据结构如下:
属性 | 描述 |
---|---|
data | 加密后的通知对象 |
is_encrypted | 是否加密 |
event | 事件类型 |
Event 事件类型
每个通知类型的作用域都是单个应用,目前支持的事件包括:
事件类型 | 描述 |
---|---|
charge.created | Charge 创建成功后触发。通常可忽略处理 |
charge.paid | Charge 支付成功后触发 |
charge.pending | Charge 处于支付中时出发,通常发生在线下用户扫码付款中间状态 |
charge.canceled | Charge 被用户取消付款时触发,通常发生在线下用户扫码付中并取消时触发 |
charge.refunded | Charge 退款成功椒触发。注意,Charge 可以被多次申请退款,每次成功都会触发该通知 |
charge.closed | Charge 关闭后触发 |
charge.completed | Charge 完成后触发。通常可忽略处理 |
charge.finished | Charge 结束后触发 |
charge.reversed | Charge 撤销后触发。如果撤销时发生退款,则同步触发 charge.refunded 事件 |
royalty.created | Royalty 创建成功后触发。通常可忽略处理 |
royalty.failed | Royalty 失败时触发 |
royalty.completed | Royalty 完成时触发,通常情况下等同于 royalty.succeeded |
royalty.canceled | Royalty 取消时触发 |
royalty.partially_succeeded | Royalty 部分成功时触发 |
royalty.succeeded | Royalty 成功时触发 |
Event 对象加密
为确保数据安全,Justap 服务器通过 webhook 给商户服务器发送通知时,会对通知的数据进行加密,目前支持的2种加密方式:
平台私钥加密
此为系统默认的加密方式。
加密算法为 rsa-sha256,加密结果为 base64 编码的字符串。
商户公钥加密
商家可在后台配置公钥,并设置为加密方式为 “商家公钥加密”。
加密算法为:
- 生成一个随机 8 位字符串作为 key 作为加密 key
- DES-ECB 加密通知对象并将加密结果 base64 编码
- 使用商家公钥加密 key,并将加密结果 base64 编码
charge.paid、charge.completed、charge.finished 三者的区别
- charge.paid 用户付款完成后触发,随后订单进入 completed 状态
- completed 指定订单完成。只是一个中间状态,处理完成状态的订单可申请退款、分账等操作
- charge.finished 是一个终结状态,处理该状态的订单不能进行任何操作
回调通知 json 数据示例:
{
"data": "json对象",
"is_encrypted": true,
"event": "charge.paid",
"encrypted_key": "公钥加密key base64编码"
}
请使用php生成一解密代码,解密算法如下:
- 使用商家私钥解密 encrypted_key, 得到 8 位字符串的key
- base64 解码data, 然后使用 key 用 DES-ECB 解密 data, 得到 json 对象