laravel 中的 Paypal 集成在获取付款状态时出错(尽管交易成功)

Posted

技术标签:

【中文标题】laravel 中的 Paypal 集成在获取付款状态时出错(尽管交易成功)【英文标题】:Paypal integration in laravel giving error on get payment status (although transaction becomes successful) 【发布时间】:2021-01-31 15:30:29 【问题描述】:

enter image description here

这是我用于获取交易状态的代码....客户端 ID 和密码是相同的,并且从 PayPal 仪表板交易成功,并且此函数中使用的所有变量都不为空,并且这些都是准确的

 $paymentId  = Session::get('paypal_payment_id');
 /** clear the session payment ID **/
 Session::forget('paypal_payment_id');
 $payment = Payment::get($paymentId, $this->_api_context);
 $execution = new PaymentExecution();
 $payer_id=$request->input('PayerID');
 $execution->setPayerId($payer_id);
  $result = $payment->execute($execution, $this->_api_context);
 if ($result->getState() == 'approved') 
 \Session::put('success', 'Payment success');
             return Redirect::route('success');
 
 \Session::put('error', 'Payment failed');
         return Redirect::route('failed');

【问题讨论】:

看起来像 ``` Session::forget('paypal_payment_id'); $payment = Payment::get(Session::get('paypal_payment_id'), $this->_api_context);``` 是倒退的。你忘记了它,然后试图得到它。删除 session:forget() 并重试。 我已经替换变量但仍然是同样的问题 【参考方案1】:
$paymentId  = Session::get('paypal_payment_id');
Session::forget('paypal_payment_id');
$payment = Payment::get(Session::get('paypal_payment_id').....

由于您忘记了会话变量,因此最后一行应该是

$payment = Payment::get($paymentId.....

图像中出现AUTHENTICATION_FAILURE 响应的其他可能原因包括:

    api_context 缺失或无效 api_context 缺少 ClientID 和 Secret api_context 的 ClientID 和密码错误 为错误环境配置了错误的环境或客户端 ID 和密码(沙盒与实时/生产模式) 您使用的特定客户端 ID 和密码存在问题(生成一个新的 sandbox account,然后为它生成一个新的 sandbox app)

如果您仍然遇到问题,请使用 curl 或 Postman 等其他工具进行测试,然后:

如果可行,请尝试调试您的完整请求和响应,包括标头,以查看您做错了什么 如果其他工具也不起作用,请联系 PayPal 寻求支持

【讨论】:

访问api.sandbox.paypal.com/v1/payments/payment/… 时得到 Http 响应代码 400。创建新的沙盒帐户后出现同样的错误...我也在使用邮递员,但直到现在都无法修复 400 还是 401?这些是不同的情况。如果是 400,请检查您的请求是否存在问题,并尽可能记录完整的请求和响应 另外,我不明白您为什么要浪费时间将旧的 v1/payments API 与已弃用的 PayPal-php-SDK 集成。将新的 v2/checkout/orders 与当前的 Checkout-PHP/SDK 一起使用,如下所述:developer.paypal.com/docs/checkout/reference/server-integration。您需要两条新的服务器路由,一条用于“设置事务”,一条用于“捕获事务”,然后您可以将其与此审批流程配对:developer.paypal.com/demo/checkout/#/pattern/server 现在我正在使用 srmklive 插件,但我得到这个类 'Srmklive\PayPal\Services\ExpressCheckout' 找不到我已经发布了所有服务

以上是关于laravel 中的 Paypal 集成在获取付款状态时出错(尽管交易成功)的主要内容,如果未能解决你的问题,请参考以下文章

如何将paypal与laravel集成

使用 paypal/rest-api-sdk-php 的 laravel paypal 集成错误

Laravel Paypal API 单笔支付

在 WooCommerce 上获取 Paypal 付款详细信息

使用 python Paypal REST SDK 在 django 中动态获取付款和付款人 ID

多个接收方和一个发送方的 Paypal 集成