异步消息¶
简介¶
针对交易结果,Adapay 系统会通过异步消息的方式通知客户系统。
实现异步消息处理对象¶
选择使用 Adapay Server SDK 接入时,您可以实现接收异步消息的处理类,并通过 SDK 指定方法完成设置。
代码示例
Java
// 实现您自己的异步消息处理类,启动异步消息的接收
AdaPay.startNotifyListener(new NotifyCallback());
异步消息的监听全过程都在 SDK 内部完成,无需做任何额外的处理,对于您的服务端来说是无感的。在交易或业务完成后,消息将自动推送,并使用预先设置的消息处理类进行处理。消息的内容包含在 Event对象 中。
异步消息将在队列中至少保存 24小时,在这段有效期内,如果您的服务端程序和 Adapay 发生了网络问题导致暂时无法连接,消息仍然不会丢失,一旦网络连接问题恢复,您还是能立刻收到。
为保证异步消息的到达率,当发生异步消息通知时,分布式部署的每个应用实例都会收到消息,请在您的程序中做好幂等处理。
注意事项¶
在实现异步消息接收的同时,都建议您在重要的业务环节,通过反查接口确认 非终态 支付订单的状态,以保证在发生异步消息延迟或无法送达情况下的支付结果一致性。
Event对象¶
异步消息内容是通过 Event对象 来传递的。其中包含了不同类型的 Event 以及对应的消息体。
对象的定义¶
属性 |
描述 |
---|---|
id |
事件 id , Adapay 系统内唯一 |
type |
事件类型,详见 Event事件类型 |
created |
事件发生的时间点,Unix 时间戳 |
livemode |
是否为生产环境事件 |
data |
消息数据,JSON格式 对象,根据事件类型不同对应的数据对象也不同,详见 Event事件 返回数据 |
Event事件类型¶
类型 |
描述 |
---|---|
charge.success |
支付成功 |
charge.failed |
支付失败 |
charge.close.success |
支付关单成功 |
charge.close.failed |
支付关单失败 |
refund.success |
退款成功 |
refund.failed |
退款失败 |
Event事件 返回数据¶
charge.success - 支付成功¶
data 参数中为一个 Charge对象
{
"id": "0003288641923153920",
"created": "1564736349",
"livemode": true,
"type": "charge.success",
"data": {
"id": "ch_Hm5uTSifDOuTy9iLeLPSurrD",
"created": 1410778843,
"order_no": "123456789",
"livemode": true,
"app_id": "sfjeijibbTe5jLGCi5rzfH4OqPW9KCif913",
"pay_channel": "alipay",
"amount": "998.00",
"currency": "cny",
"query_url": "https://AdaPay.cloudpnr.com/charge/tmp?token=5jLGCi5rzfH4OqPW9KCi",
"status": "pending",
"description": "Charge Discription",
"extra": {
"pay_info": "bax028781ovixf6i8xyf60be"
}
}
}
charge.failed - 支付失败¶
data参数中为一个 Charge对象
{
"id": "0003288641923153920",
"created": "1564736349",
"livemode": true,
"type": "charge.failed",
"data": {
"id": "ch_Hm5uTSifDOuTy9iLeLPSurrD",
"created": 1410778843,
"order_no": "123456789",
"livemode": true,
"app_id": "sfjeijibbTe5jLGCi5rzfH4OqPW9KCif913",
"pay_channel": "alipay",
"amount": "998.00",
"currency": "cny",
"query_url": "https://AdaPay.cloudpnr.com/charge/tmp?token=5jLGCi5rzfH4OqPW9KCi",
"status": "pending",
"description": "Charge Discription",
"extra": {
"pay_info": "bax028781ovixf6i8xyf60be"
}
}
}
charge.close.success - 支付关单成功¶
charge.close.failed - 支付关单失败¶
refund.success - 退款成功¶
data参数中为一个 Refund对象
{
"id": "0003288641923153920",
"created": "1564736349",
"livemode": true,
"type": "refund.success",
"data": {
"charge_id": "002112019072917310300001847119303360512",
"created": "1564736347000",
"failure_code": "",
"failure_msg": "",
"fee_amt": "0.00",
"id": "002112019080216590600003288632355946496",
"status": "success",
"amount": "0.04",
"type": ""
}
}
refund.failed - 退款失败¶
data参数中为一个 Refund对象
{
"id": "0003288641923153920",
"created": "1564736349",
"livemode": true,
"type": "refund.failed",
"data": {
"charge_id": "002112019072917310300001847119303360512",
"created": "1564736347000",
"failure_code": "channel_unexpected_error",
"failure_msg": "支付渠道遇到未知错误。",
"fee_amt": "0.00",
"id": "002112019080216590600003288632355946496",
"status": "failed",
"amount": "0.04",
"type": "channel_error"
}
}