使用paypal/rest-api-sdk-php执行支付时遇400错误及银行拒付问题
问题排查与解决办法
错误原因
当银行拒绝支付时,PayPal API会抛出**PayPal\Exception\PayPalConnectionException**异常,但你的代码没有添加异常捕获逻辑,直接执行后续代码导致脚本报错终止。
解决步骤
添加异常捕获逻辑
在执行支付的代码块外层包裹try-catch,捕获PayPal抛出的异常,处理拒付等错误场景:try { $payment = Payment::get($payment_id, $this->apiContext); $execution = new PaymentExecution(); $execution->setPayerId($request->PayerID); // 执行支付 $result = $payment->execute($execution, $this->apiContext); if ($result->getState() == 'approved') { $paypalPaymentInfos->payment_status = 1; $paypalPaymentInfos->transaction_id = $payment_id; $paypalPaymentInfos->save(); } } catch (\PayPal\Exception\PayPalConnectionException $ex) { // 获取PayPal返回的错误详情 $errorData = json_decode($ex->getData(), true); // 根据错误信息更新支付状态为失败 $paypalPaymentInfos->payment_status = 0; $paypalPaymentInfos->error_msg = $errorData['message'] ?? '支付被银行拒绝'; $paypalPaymentInfos->save(); // 可根据业务需求返回错误提示给用户 // echo '支付失败:' . $errorData['message']; } catch (\Exception $ex) { // 捕获其他未知异常 $paypalPaymentInfos->payment_status = 0; $paypalPaymentInfos->error_msg = $ex->getMessage(); $paypalPaymentInfos->save(); }建议迁移到新版SDK
你当前使用的paypal/rest-api-sdk-php已被PayPal官方弃用,不再维护。推荐迁移到官方最新的PayPal Checkout SDK(v2)(包名paypal/paypal-checkout-sdk),新版SDK更稳定,支持更多新特性,能避免旧版本的潜在问题。
内容的提问来源于stack exchange,提问作者Karthikvijayaveni
相关产品推荐
相关产品推荐

