最近在做ecshop的二次开发,由于需要在跳转到支付宝时要展示用户购买的各种商品,所以就将原来的alipay的支付文件修改了一下
目录 /include/module/payment/alipay.php
将168行改为
subject => $order[str]...订单号(.$order[order_sn].),
其中$order[str]是从flow.php传过来的用户购买的信息。
原来的170行代码
out_trade_no => $order[order_sn] . $order[log_id],
这个记录了订单号,后面加了一个log_id。这个在开始的时候就感觉是有用的,但是不知道会用在那边,所以
当时没有在意。
等一切改完了。测试发现支付宝支付成功后,后台并没有更新订单状态,
这个时候突然想到肯定是178行的那个代码出的错误,
果然看了后面的respond里面有一段
在第217行左右
$order_sn = str_replace($_GET[subject], , $_GET[out_trade_no]);
通过这个替换来取得$order_sn
然后先更新pay_log数据表再去更新order表,所以把上面改了之后导致这边更新pay_log失败。
解决办法
将217这行代码改为
$order_sn=substr($_GET[out_trade_no], 13);
ecshop的订单机制是当前年月日加5位随机数,也就是固定的13位数字,所以可以使用这个方法来获取pay_log的id
到这问题解决了。
本文来自303Blog,欢迎转载,但请保留链接http://www.303blog.org
影子依旧可以相亲相爱。哪一块骨骼最温暖,总能一击即中。