支付宝接入文档中TRADE_SUCCESS和TRADE_FINISHED的本质区别
来源:互联网 发布:网络攻防技术 编辑:程序博客网 时间:2024/06/03 20:50
http://blog.lizhigang.net/archives/471
之前一直不知道这2种状态到底有什么不同。支付宝中担保交易和即时到账交易对其的描述为:
- TRADE_SUCCESS 交易成功(或支付成功)
- TRADE_FINISHED 交易完成
一头雾水。。。。。。OK,找例子来说明吧:
例子一:
- 即时到账普通版。 普通版不支持支付完成后的退款操作,即用户充值完成后,该交易就算是完成了,这笔交易就不能再做任何操作了。
- 即时到账高级版。 这个版本在用户充值完成后,卖家可以执行退款操作进行退款,即该交易还没有彻底完成,卖家还可以修改这笔交易。
OK,开测。当用户在支付宝网站上充值完成后,这个时候支付宝的通知消息中,如果是即时到账普通版,那么这时的交易状态值为: TRADE_FINISHED;如果是即时到账高级版,此时的交易状态值就为:TRADE_SUCCESS。
我第一次接入的时候在我网站中判断用或来做,即如果是交易成功或者交易完成则发货。这时就错大了。。。。。。因为作为即时到账高级版,在TRADE_SUCCESS完成后过了三个月,支付宝又会主动再推送一个消息为TRADE_FINISHED。所以如果我用以上的逻辑来做发货,那么我接入即时到账高级版的话,就会发货2次。
这个问题是因为我没有彻底理解清楚这2种关系造成的。
仔细琢磨了一下,发现了它们两者最本质的差别。TRADE_SUCCESS状态代表了充值成功,也就是说钱已经进了支付宝(担保交易)或卖家(即时到账);这时候,这笔交易应该还可以进行后续的操作(比如三个月后交易状态自动变成TRADE_FINISHED),因为整笔交易还没有关闭掉,也就是说一定还有主动通知过来。而TRADE_FINISHED代表了这笔订单彻底完成了,不会再有任何主动通知过来了。
综上所述,收到TRADE_FINISHED请求后,这笔订单就结束了,支付宝不会再主动请求商户网站了;收到TRADE_SUCCESS请求后,后续一定还有至少一条通知记录,即TRADE_FINISHED。所以,在做通知接口时,切记使用判断订单状态用或的关系。
- 支付宝接入文档中TRADE_SUCCESS和TRADE_FINISHED的区别
- 支付宝接入文档中TRADE_SUCCESS和TRADE_FINISHED的本质区别
- 支付宝接入文档中TRADE_SUCCESS和TRADE_FINISHED的本质区别
- 支付宝支付时,TRADE_SUCCESS和TRADE_FINISHED的区别
- TRADE_SUCCESS和TRADE_FINISHED的区别
- 关于支付宝第三方应用接入的API文档
- Android:微信和支付宝的APP支付接入
- 支付宝的app支付接入
- 支付宝支付的服务端接入流程
- 使用Python接入银联支付和支付宝支付的实现
- 支付宝支付和微信支付接入前要看的一些事
- iOS中支付宝的接入使用注意点
- Android 微信支付和支付宝支付 快速接入
- Android 微信支付和支付宝支付 快速接入
- Android 微信支付和支付宝支付 快速接入
- Android接入微信支付和支付宝支付(1)
- Android接入微信支付和支付宝支付(2)
- cocos2dx工程中接入支付宝sdk
- Web页面的请求历程
- Android自定义圆形和圆角图片
- 需求管理之项目经理与客户沟通的宜与忌
- python学习(1)启程
- [leetcode Q34&Q35] Search for a Range&Search Insert Position
- 支付宝接入文档中TRADE_SUCCESS和TRADE_FINISHED的本质区别
- iOS开发--UIWebView
- 项目经理之项目经理的基本特征
- C++调试时的错误例子及解决方法
- 103.Daikon Forge高级控件checkbox、dropdownlist、listbox、progressbar
- 1001. A+B Format
- javadoc: error - java.lang.reflect.InvocationTarget Exception java.lang.NullPointerException
- Android Activity学习 <二> Activity间通讯
- 移动智能终端可信环境分析