本文指的重复生成团购券有以下几个前提:
1、使用支付宝接口
2、订单操作记录中会出现两个“团购券已经生成:交易完成” ,操作时间一样
在阅读修复方法之前,请先确认您的站点:
1、确认您的站点使用的是
支付宝即时到帐接口
2、已经升级到 2.9.1 版本
3、后台 “系统工具” - “数据库修复” 中没有待修复的项目(保证数据库结构正确)
4、确认 /include/logic/order.logic.php 文件版本为 1.1
5、确认 /include/logic/callback.logic.php 文件版本为 1.1
6、确认 /include/logic/recharge.logic.php 文件版本为 1.2
* 关于查看文件版本:记事本打开文件后查看 @version 后面的内容为文件版本
当您已经确认以上几点,但是站点还是会重复生成团购券的时候,您可以使用下面的方法
关闭对支付宝上层通知的处理,以免并发处理支付操作时造成的重复生成团购券的问题
1、修改文件 /include/driver/payment/alipay.php
找到 $trade['status'] = $this->__Trade_Status(logic('safe')->Vars($src, 'trade_status', 'txt'));
在后面添加一行 $trade['ntype'] = $this->__Is_Nofity() ? 'notify' : 'direct';
修改后的代码片段如下:
2、修改文件 /include/logic/callback.logic.php
找到 function Parse_TRADE_FINISHED (会搜索到2个结果,这里指的是第1个)
这行代码下面有一行 $trade = logic('pay')->TradeData($payment);
在后面添加这段代码
if ($trade['ntype'] == 'direct')
{
$this->master->Messager('我们已经在处理您的订单,请稍后!(您的订单可能会显示未付款,请不要担心,系统处理完您的支付后会自动变更订单状态)', '?mod=me&code=order');
}
修改后的代码片段如下:
PS 如果您担心用户会对此感到疑惑,或者不了解流程,您可以在后台 “全局设置” - “静态页面管理” 中专门添加一个说明页面,然后修改上面第2步中的
?mod=me&code=order 为 ?mod=html&code=静态页面的标记 ,这样的话,用户付款完成后跳回网站的时候系统就会自动转到说明页去了
=====
如果有其他问题,请跟帖提问