感觉有点标题党,但是有些插件确实开发的不规范。
之前开发的支付宝支付模块直接下载的网上提供的支付宝插件,只是做了一些简单的修改。所以没有仔细阅读也就没有发现bug。
我开发的网站使用的是magento 框架。但是不论什么框架插件不规范的道理应该是一样的。
说了这么多其实就是 支付宝异步通知传回的通知状态中
TRADE_FINISHED 和 TRADE_SUCCESS 的区别(已经知道的大牛请不要嘲笑我这个刚过来开发支付模块的菜鸟了 )
其实 支付宝即时到帐接口的文档中也有总结状态的说明,但是我自己认为不明确啊(应该是我理解能力太差了吧 – -!)
BUG描述:开发完毕,支付等流程都正常。但是三个月后又会收到支付宝发来的异步通知。如果没有去明确判断TRADE_FINISHED还是
TRADE_SUCCESS 都统一做业务处理那么就会发生bug。
买家付款后,商家能够收到支付宝的 TRADE_SUCCESS 状态的说明你开通的是即时到帐高级接口。普通的是只能收到 TRADE_FINISHED 状态的,即不能进行退款等操作。
其实普通即时到帐接口在某些插件中应该都不会出现bug。因为他们就一个 TRADE_FINISHED 状态。
实际上这里面最重要的区别就是开通 高级即时到帐接口的商家,在买家付钱后会收到一个 TRADE_SUCCESS 的通知,这表示买家成功付钱,同时商家可以进行退款等操做,
之后会在三个月后支付宝再次发来通知 ,即发来TRADE_FINISHED 的通知。以为者交易结束,商家不能再做退款等操作了。
说说我下载的那个支付宝插件 处理异步通知的函数吧。
它在notify 那个函数中判断订单成功使用了 “或” 运算符
即
if ($postData['trade_status'] == 'TRADE_FINISHED' || $postData['trade_status'] == 'TRADE_SUCCESS'){ // 业务处理逻辑 // 例如修改订单状态 发送邮件通知等 }
那么 付款后没什么问题,但是三个月后买家又会收到邮件通知,以及订单状态又改为付完钱的状态。
因为我们有邮件抄送给管理员的操作才发现了这个问题。
其实问题描述起来就是这么简单。明白了怎么回事,解决办法不用说应该也都知道。
但是其实还有许多人不知道或者说没有明确意识到这里面的差别。 出问题后去网上搜索,就连支付宝论坛里面还有
开发者说这两个没什么区别。 重要的是当问道这两个状态的区别是应当具体描述出来三个月继续发送 TRADE_FINISHED 的通知这么一个点。
顺便提一下,支付宝文档里面明确的在商户业务处理注意事项中提出:
但是为什么不点出来 三个月后会发来 TRADE_FINISHED 的通知呢? (当然demo中有明确提出)
我只是觉得文档中有必要明确解释一下。(个人建议而已)
——————————————————————————————————————————–
这个同样适用于现在版本的 支付宝无线支付接口, 你可以将买家付款 发来的异步通知信息打印,主要是观察 trade_status 如果是 TRADE_FINISHED
说明你没有开通高级即时到帐接口,可以通过支付宝人工客服去修改。但要5个工作日才能改好。
——————————————————————————————————————————–
提一个问题:
用户下单,跳转到支付宝,登录支付宝账户但是不结账。此时去个人支付宝页面会看到在交易明细中有一个待付款的交易。
这里如果用户或者商家 将订单取消,但是用户从这个地方付款还是可以的。、
这种问题是怎么解决的呢?有没有什么接口通知支付宝这笔交易已取消呢?
此文章通过 python 爬虫创建,原文是自己的csdn 地址: 部分支付宝插件开发bug