一行代码解决paypal对接回调验证_notify-validate报INVALID错误

paypal支付状态有4种,预授权,完成收款,交易作废,退款。今天朋友联系我说他的网站,预授权和交易作废不能正常处理了。完成收款和退款的回调确都能正常处理。

我看了一下代码,支付回调的处理都在一个方法里面,而且他说之前都是可以正常处理的,最近一段时间才出现这种情况。

我看了一下代码,没什么异常,其中几行是这样:


        $post = request()->post();

        $url = 'https://' . config('paypal')['action'] . '/cgi-bin/webscr';
        $data['cmd'] = '_notify-validate';
        foreach ($post as $key => $item)  $data[$key] = ($item);

        $res = http($url, $data, 'POST');

$res返回的是INVALID,搜了一下PayPal的文档,其中有说到除了附加一个名为cmd,值为_notify-validate的变量,这里发送的所有表单变量必须与接收到的完全相同。PayPal通过检查加密字符串对交易进行认证。然后在响应正文中以一个词(VERIFIED或INVALID)发回确认。

看着个说明,好像没有什么问题,但“发送的所有表单变量必须与接收到的完全相同”引起了我的注意,于是试着把代码改成这样:

        $url = 'https://' . config('paypal')['action'] . '/cgi-bin/webscr';
        $data = 'cmd=_notify-validate&' . file_get_contents("php://input");
        $res = http($url, $data, 'POST');

经测试,paypal对接回调验证_notify-validate报INVALID问题完美解决。

原来的代码出现问题,可能是框架内置的处理方法对数据的编码或其他特殊字符产生了影响

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值