##webhooks通知
###什么是webhooks通知?
通过配置 webhooks,商户可订阅需要的事件,当这些事件发生时,Paymax会将对应的事件消息推送到商户指定的地址。Paymax现支持如下webhooks:
- 支付结果通知
- 退款结果通知
###如何订阅
- 从应用列表里点击某应用
- 点击左侧导航中webhooks
- 点击右上角添加按钮,开始添加webhooks
###可靠通知规则 由于网络等原因,商户可能未接收或未正常处理webhooks通知,Paymax会通过一定重发机制来保证通知的可靠性。
Paymax是否重发,取决于商户收到通知后response的结果是否为success字符串。若不是,才会按照一定机制重发,直到收到success为止。
当然,Paymax重发的时间间隔也会随着重发次数逐步变长。
对后台通知交互时,如果Paymax收到商户的应答不是成功或超时(正常的response是:http code 200 && content 为 success),Paymax认为通知失败,在36小时之内,一共发送17次,第一次发送失败之后,之后每次发送的间隔为:2s,4s,8s,16s,32s,64s,128s,256s,512s,1024s,2048s,4096s,8192s,16384s,32768s,65536s
###通知格式
支付示例
{
"data":{
"amount":7,
"amount_refunded":0,
"amount_settle":0,
"body":"测试商品",
"client_ip":"120.197.202.48",
"credential":{
"wechat_wap":{
"jsApiParams":"{"appId":"wxbtest9e022e2d07","timeStamp":"1478361807","signType":"MD5","package":"prepay_id=test211060003265e6f4f86970458446dd081","nonceStr":"06ZSHzTTeswakmu4","paySign":"BB4706E3F97174AAC1341F25dssw88DA16"}"
}
},
"currency":"CNY",
"description":"测试商品描述信息",
"extra":{
"terminal_id":"9223131",
"open_id":"oOOL0jdyiLwslASo7UmSwrtOCW4k",
"merchant_id":"8221023420011716"
},
"id":"ch_5d0eca3b8f707ed425122e56",
"livemode":false,
"metadata":{
"callbackUrl":"http://www.demo.com"
},
"order_no":"ch_828d6ef97f3c45a3acd41a59",
"refunds":[
],
"status":"SUCCEED",
"subject":"测试商品标题",
"time_created":1478361807000,
"time_expire":1478362046272,
"time_paid":1478361806000,
"transaction_no":"4004512001201611068876533536"
},
"notifyNo":"evt_7fb2378f457ewerwa9afe17a942ae389e",
"timeCreated":1478361840304,
"type":"CHARGE"
}
退款示例
{
"data":{
"amount":0.01,
"charge":"ch_6abba29e41edddd8b062dab",
"description":"协商一致退款",
"extra":{
"refundUrl":"http://www.demo.com/gateway.do?sign=251af6477bxxxxxxx"
},
"id":"re_06cfeewewe4dc14de10fe",
"metadata":{
"use_id":"12345678"
},
"order_no":"06cf59c008b004dc14de10fe",
"status":"SUCCEED",
"time_created":1478518692000,
"time_succeed":1478518705000,
"transaction_no":"2016110721001004480236849549"
},
"notifyNo":"evt_eff98bb453f0429b9b8fd5adfasdfc7c9",
"timeCreated":1478518708532,
"type":"REFUND"
}
参数说明
参数 | 类型 | 描述 |
---|---|---|
data | Charge对象或者Refund对象 | 详情见 API文档 中对Charge对象、Refund对象的说明 |
notifyNo | String | 通知事件唯一标识 |
timeCreated | Long | 时间戳,自1970年以后的毫秒数 |
type | String | 通知类型,共以下几种: CHARGE : 支付 REFUND : 退款 |
###如何验签
每一次事件通知,Paymax都会对request body整体做签名,并将签名后的结果放request header中,header名称sign。
签名算法为SHA1WithRSA,签名时会使用Paymax官方私钥做签名,所以商户验签时需要用Paymax官方公钥来做验签。
Paymax官方公钥可通过商户后台“开发信息”中获取。