为了账号安全,请及时绑定邮箱和手机立即绑定

支付宝接口可以支付成功,但是有时会重复写入支付成功数据,我想通过判断订单号解决

支付宝接口可以支付成功,但是有时会重复写入支付成功数据,我想通过判断订单号解决

PHP
桃花长相依 2019-03-10 16:27:25
支付宝接口可以支付成功,但有时会重复写入支付成功数据,我想通过判断订单号是否重复来解决,应该怎么写?代码如下:if($_GET['trade_status'] == 'TRADE_FINISHED' || $_GET['trade_status'] == 'TRADE_SUCCESS') { //写入支付数据 $paylog=M("alipaylog"); //实例化数据表 $datapaylog['userid']=$_SESSION ['USER_KEY_ID']; //用户ID $datapaylog['fee']=$_GET['total_fee']; //充值金额 $datapaylog['dingdanhao']=$_GET['out_trade_no']; //交易订单号 $datapaylog['is_time']=$_GET['notify_time']; //支付时间 $datapaylog['liushuihao']=$_GET['trade_no']; //交易流水号 $paylog->add($datapaylog); $tot=M("member"); $total_fee=$_GET['total_fee']; $tot->where('member_id='.$_SESSION ['USER_KEY_ID'])->setInc('rmb',$total_fee); }
查看完整描述

4 回答

?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

支付宝异步通知过来一切以订单号为基准,根据其他参数,去你的数据库检查订单是否已经处理,未处理更新订单状态已处理则忽略异步通知,直接输出success告诉支付宝异步通知数据已处理。

查看完整回答
反对 回复 2019-03-18
?
PIPIONE

TA贡献1829条经验 获得超9个赞

你不给支付宝返回success,支付宝是会认为你没有收到,而重复给你请求的

查看完整回答
反对 回复 2019-03-18
?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

你的思路错了,并不是一接收回调success的时候就进行处理.
1.在发起请求的时候判断支付状态,先杜绝重复发起支付的问题.
2.在支付回调页面中收到支付成功时先判断订单付款状态,一旦收到支付成功则对InnoDB表进行订单状态更改为已支付并通知支付宝success且在前台页面转向成功页.即可杜绝因回调处理不当引起的重复支付.

这样,不管是用户不慎重复请求,还是你回调重复都不会影响订单状态了.

简要的流程;
发起(判断状态)=支付=回调(收到支付成功时,先判断订单状态)=更改订单状态(一般订单表应该为事务表)=通知回调结果给支付宝与用户付款页=支付结束.

你的问题出在了你收到回调时就进行了写入而不先订单状态.这样是不明智的做法.

查看完整回答
反对 回复 2019-03-18
  • 4 回答
  • 0 关注
  • 668 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信