当支付宝处理完成后,支付宝会把处理结果以当前页面跳转同步通知和支付宝服务器主动通知商户网站两种形式,反馈给商户网站。商户可以从页面跳转同步通知页面或者从服务器异步通知页面中获得这些信息,并且在验证通过的判断中增加商户的业务逻辑处理程序。 商户对获得的数据必须进行如下处理。
首先必需验证签名(参见本文档“附录:签名与验签”),然后验证是否是支付宝发来的通知。
该处的验证是指,对支付宝通知回来的参数notify_id合法性验证。这个验证动作实际上是调用了支付宝的另一个接口“通知验证接口(notify_verify)”来完成的。这个接口请求时使用的是模拟远程HTTP提交,回调模式是“直接在当前页面输出结果”,返回的数据是纯文本格式。
请求的完整链接如下:
https://mapi.alipay.com/gateway.do?service=notify_verify&partner=2088002396712354¬ify_id=RqPnCoPT3K9%252Fvwbh3I%252BFioE227%252BPfNMl8jwyZqMIiXQWxhOCmQ5MQO%252FWd93rvCB%252BaiGg
得到的处理结果有两种:
商户需要验证该通知数据中的out_trade_no是否为商户系统中创建的订单号,并判断total_fee是否确实为该订单的实际金额(即商户订单创建时的金额),同时需要校验通知中的seller_id(或者seller_email) 是否为out_trade_no这笔单据的对应的操作方(有的时候,一个商户可能有多个seller_id/seller_email),上述有任何一个验证不通过,则表明本次通知是异常通知,务必忽略。在上述验证通过后商户必须根据支付宝不同类型的业务通知,正确的进行不同的业务处理,并且过滤重复的通知结果数据。在支付宝的业务通知中,只有交易通知状态为TRADE_SUCCESS或TRADE_FINISHED时,支付宝才会认定为买家付款成功。 如果商户需要对同步返回的数据做验签,必须通过服务端的签名验签代码逻辑来实现。如果商户未正确处理业务通知,存在潜在的风险,商户自行承担因此而产生的所有损失。
对于退款接口,以异步通知中的退款处理结果业务数据为准。 如果商户未正确处理业务通知,存在潜在的风险,商户自行承担因此而产生的所有损失。