You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel8集成PayPal返回PaymentActionNotInitiated且沙箱无交易记录问题

PayPal沙箱无交易记录、返回PaymentActionNotInitiated问题解决

核心原因

CHECKOUTSTATUS返回PaymentActionNotInitiated的本质是你只走完了PayPal Express Checkout的授权流程,没有执行最终的资金划转操作,交易没有实际生成,因此沙箱后台查不到记录。你贴出的代码中重复调用两次setExpressCheckout也属于无效操作,会覆盖首次生成的token,可能额外引发流程异常。

具体解决步骤

    1. 清理重复的接口调用
      你现有代码中的两次setExpressCheckout调用仅保留第一行即可,第二个参数为true的调用仅用于需要后续自动扣费的订阅场景,普通单次支付不需要,修改后代码如下:
$response = $provider->setExpressCheckout($data);

调用成功后获取返回的token,引导用户跳转至PayPal授权页完成支付授权即可。

    1. 回调环节补充最终支付确认调用
      用户完成PayPal授权跳转回你的站点后,你当前应该只调用了getExpressCheckoutDetails拉取用户授权信息,该接口仅做信息查询,不会触发实际扣费,需要在信息校验无误后追加doExpressCheckoutPayment调用完成交易:
// 从回调参数中获取token和PayerID
$token = request()->get('token');
$payerId = request()->get('PayerID');

// 拉取授权详情,校验订单金额、商品信息是否匹配
$checkoutDetails = $provider->getExpressCheckoutDetails($token);

// 信息确认无误后发起支付确认请求
$paymentParams = [
    'TOKEN' => $token,
    'PAYERID' => $payerId,
    'PAYMENTACTION' => 'Sale',
    'AMT' => '30.00',
    'CURRENCYCODE' => 'USD'
];
$paymentResult = $provider->doExpressCheckoutPayment($paymentParams);
    1. 校验支付结果
      调用doExpressCheckoutPayment后,检查返回参数中ACK字段为Success、且PAYMENTINFO_0_PAYMENTSTATUS为Completed,即说明支付成功,此时登录沙箱后台即可查询到对应交易记录。

异常排查补充点

如果完成上述操作后仍有问题,可核对以下配置:

  • 沙箱商户账号、密钥配置正确,未和生产环境参数混淆
  • 调用doExpressCheckoutPayment时传入的金额、币种与setExpressCheckout时的参数完全一致
  • 沙箱账号无风控限制,可登录PayPal开发者后台检查账号状态

内容的提问来源于stack exchange,提问作者prem mithawala

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 05:42:01