异步通知
- 只有通过API发起的申请,对应的结果才会通过API通知返回。
为保证数据的一致性,在交易处理完毕后Pyvio系统会按照商户调用预下单请求前对该事件的订阅地址,通过 POST
请求的形式将业务处理结果以 application/json
格式 通知 (opens new window) 到商户系统。
通常情况下,只有业务处理成功的订单才会触发异步通知,特殊情况会在具体的异步通知文档中提及。
注意
以下注意事项商户务必要明晰:
- “
幂等性
”:同样的通知可能会多次发送给商户系统,商户系统必须能够正确处理重复的通知。 推荐的做法是:当商户系统收到通知进行处理时,先检查对应业务数据的状态并判断该通知是否已经处理。如果未处理,则进行处理;如果已处理,则直接返回结果成功(http状态码200,报文体为字符串 OK)。在对业务数据进行状态检查和处理之前,要采用数据锁进行并发控制,以避免函数重入造成的数据混乱。 - “
时效性
”:在极少情况下可能发生异步通知无法正常通知到您服务器的情况,请务必对接主动查单接口。 根据业务场景设置合理的请求间隔,比如在支付后1小时还没有异步通知时可以发起主动查单请求。 - “
防抵赖
”:商户系统对异步通知的内容一定要做签名验证(签名验证的公钥为商户后台界面的Pyvio公钥),并校验通知的信息是否与商户侧的信息一致,防止数据泄漏导致出现“假通知”,造成资金损失。
# 通知频率
如果商户未按正常处理做出应答(http状态码200,报文体OK),Pyvio将认为该次通知是失败的,间隔一定时间后会尝试再次通知。 一般情况下,24小时以内会完成多次异步通知(通知的间隔频率一般是:5s、10s、15s、30s、240s、600s、2700s、3600s、14400s,即Pyvio处理成功后的 5s、15s、30s、1m、5m、30m、1h30m、5h30m)。
提示
- Pyvio可能根据系统负载和业务情况,在不通知商户的情况下调整异步通知的时间间隔和次数,请勿根据该时间间隔和次数做业务处理。
- 异步通知是最大可能交付,但不排除失败的情况。请务必对接主动查询接口,在合理的时间间隔后主动请求对应的查询接口(频繁调用可能受到配额限制)。
- Pyvio对商户侧的连接和读取超时时间均为5秒,请尽可能在此时间内返回结果,否则可能会导致延迟通知或重复通知。
# 通知地址
在商户后台订阅事件,一个通知链接可以订阅1个或多个事件,商户内部自己根据eventType
做好路由即可。
# 应答方式
正确处理的应答标准:
状态码:200
报文体:OK(纯文本)
异常处理的应答方式:
状态码:任意
报文体:非OK
# 常见问题
- 接收报文验签失败?
需要request流的整体数据参与签名,而非事件体data字段。
- 什么情况下会没有回调通知?
如果接口的返回状态是 Approved,就可能不会有回调,Pending 就会有回调。
- 回调的请求头里回有我们的商户的信息吗?
没有。