以前一直不知道这2种状态到底有什么不一样。支付宝中担保交易和即时到帐交易对其的描述为:网站
一头雾水。。。。。。OK,找例子来讲明吧:接口
例子一:支付宝
OK,开测。当用户在支付宝网站上充值完成后,这个时候支付宝的通知消息中,若是是即时到帐普通版,那么这时的交易状态值为: TRADE_FINISHED;若是是即时到帐高级版,此时的交易状态值就为:TRADE_SUCCESS。请求
我第一次接入的时候在我网站中判断用或来作,即若是是交易成功或者交易完成则发货。这时就错大了。。。。。。由于做为即时到帐高级版,在TRADE_SUCCESS完成后过了三个月,支付宝又会主动再推送一个消息为TRADE_FINISHED。因此若是我用以上的逻辑来作发货,那么我接入即时到帐高级版的话,就会发货2次。支付
这个问题是由于我没有完全理解清楚这2种关系形成的。推送
仔细琢磨了一下,发现了它们二者最本质的差异。TRADE_SUCCESS状态表明了充值成功,也就是说钱已经进了支付宝(担保交易)或卖家(即时到帐);这时候,这笔交易应该还能够进行后续的操做(好比三个月后交易状态自动变成TRADE_FINISHED),由于整笔交易尚未关闭掉,也就是说必定还有主动通知过来。而TRADE_FINISHED表明了这笔订单完全完成了,不会再有任何主动通知过来了。消息
综上所述,收到TRADE_FINISHED请求后,这笔订单就结束了,支付宝不会再主动请求商户网站了;收到TRADE_SUCCESS请求后,后续必定还有至少一条通知记录,即TRADE_FINISHED。因此,在作通知接口时,切记使用判断订单状态用或的关系。版本