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

PayPal JS SDK v6沙盒环境onApprove未触发及FraudNet CORS错误问询

PayPal JavaScript SDK v6 沙盒环境onApprove回调未触发,CORS配置错误导致结账中断

将PayPal JavaScript SDK v6集成到Web应用后,沙盒环境下出现严重问题:买家点击PayPal弹窗的「立即付款」按钮后,onApprove回调从未触发,弹窗显示无限加载,整个结账流程中断。

环境信息

  • SDK地址:https://www.sandbox.paypal.com/web-sdk/v6/core
  • 集成类型:JS_SDK_V6(已通过弹窗URL参数确认)
  • 测试浏览器:Firefox 148、最新版Chromium
  • 沙盒账户:测试2个不同个人账户,结果一致

复现流程

  1. 服务器调用POST /v2/checkout/orders创建订单,返回CREATED状态及新orderId
  2. 前端调用createPayPalOneTimePaymentSession,传入onApprove/onCancel/onError回调
  3. 点击PayPal按钮,调用paymentSession.start({ presentationMode: "auto" })
  4. PayPal弹窗打开,买家登录并点击「立即付款」
  5. 预期:onApprove回调触发,执行后续订单捕获逻辑
  6. 实际:无任何回调触发,弹窗显示无限加载

已定位的根因

通过弹窗DevTools控制台发现,PayPal弹窗(hermes)因FraudNet(fb_fp.js)的CORS失败抛出「Interrupted」错误:

Access to XMLHttpRequest at 'https://c.paypal.com/v1/r/d/b/p1'
from origin 'https://www.sandbox.paypal.com' has been blocked by CORS policy:
Response to preflight request doesn't pass access control check:
The 'Access-Control-Allow-Origin' header has a value 'https://www.paypal.com'
that is not equal to the supplied origin.

相同错误出现在以下请求:

  • https://c.paypal.com/v1/r/d/b/p1
  • https://c.paypal.com/v1/r/d/b/p2
  • https://c.paypal.com/v1/r/d/b/w

问题核心:c.paypal.com响应的Access-Control-Allow-Origin硬编码为https://www.paypal.com,未包含沙盒环境的https://www.sandbox.paypal.com,导致跨域请求被拦截,FraudNet流程失败,进而中断整个结账流程。

此外还存在以下CSP错误:

CSP blocks 'unsafe-eval' in PayPal's own hermes page
CSP blocks blob: worker on sandbox.paypal.com

弹窗日志关联ID:1VU87823S2094644K

简化集成代码

const sdkInstance = await window.paypal.createInstance(
{
    clientId:   "MY_CLIENT_ID",
    components: ["paypal-payments"],
    pageType:   "checkout",
    locale:     "de-DE"
});

const paypalSession = sdkInstance.createPayPalOneTimePaymentSession(
{
    onApprove: async function (data)
    {
        // 从未执行到此处
        await fetch("/api/paypal/capture", { method: "POST", ... });
    },
    onCancel: function () { /* 取消逻辑 */ },
    onError:  function (error) { /* 错误处理逻辑 */ }
});

paypalBtn.addEventListener("click", async function ()
{
    await paypalSession.start(
        { presentationMode: "auto" },
        Promise.resolve({ orderId: serverGeneratedOrderId })
    );
});

服务器端创建订单请求

{
    "intent": "CAPTURE",
    "purchase_units": [{
        "amount": {
            "currency_code": "EUR",
            "value": "530.00",
            "breakdown": {
                "item_total": { "currency_code": "EUR", "value": "445.38" },
                "tax_total":  { "currency_code": "EUR", "value": "84.62"  },
                "shipping":   { "currency_code": "EUR", "value": "0.00"   }
            }
        }
    }]
}

已排除的可能原因

  • 重复使用旧orderId:每次测试都创建全新订单
  • 我方CSP配置问题:已添加所有必要的PayPal域名
  • 浏览器兼容性问题:在Firefox和Chromium中均复现
  • 沙盒账户异常:测试2个不同个人账户结果一致

请求帮助

目前判断这是PayPal沙盒环境的服务器配置错误,c.paypal.com的CORS策略未允许沙盒域名请求。恳请提供解决方案,或修复c.paypal.com的沙盒环境CORS配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.01 13:04:55