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

React/NextJS集成PayPal遇多类报错:ERR_ADDRESS_UNREACHABLE等求助

React + Next.js 集成 react-paypal-js 点击PayPal按钮报错解决指南

报错信息

点击PayPal按钮时触发以下错误:

  • GET https://b.sbox.stats.paypal.com/v2/counter.cgi?... net::ERR_ADDRESS_UNREACHABLE
  • graphql_UpgradeFacilitatorAccessToken_error {err: 'Identitysecuretokenserv responded with status 401 for securityContext', ...}
  • upgrade_lsat_failure {error: 'Error: Identitysecuretokenserv responded with status...'}

核心问题分析

  • 第一个错误属于次要问题,是PayPal沙箱统计地址无法访问,多由网络环境(防火墙、代理)导致,一般不影响核心支付流程。
  • 后两个401错误是关键:说明PayPal身份验证失败,大概率是客户端ID/秘钥不匹配、沙箱/生产环境混用、后端API验证缺失导致。

解决方案

1. 校验客户端ID与环境匹配

  • 确认NEXT_PUBLIC_PAYPAL_CLIENT_ID是沙箱环境的客户端ID(当前使用PayPal沙箱),禁止混用生产环境ID。
  • 登录PayPal开发者平台,进入沙箱应用详情页复制正确的客户端ID,排查拼写错误。
  • 可在PayPalScriptProvider中显式指定环境,避免自动识别偏差:
    <PayPalScriptProvider
        options={{
            'client-id': process.env.NEXT_PUBLIC_PAYPAL_CLIENT_ID,
            'environment': 'sandbox' // 明确指定沙箱环境
        }}>
        {/* 组件内容 */}
    </PayPalScriptProvider>
    

2. 修复后端API的身份验证

前端调用的/api/paypal/pay10(创建订单)和/api/paypal/success/${data.orderID}(捕获订单)接口,必须正确配置PayPal身份凭证:

  • 后端使用对应沙箱应用的秘钥(Secret),与前端客户端ID配对。
  • 调用PayPal官方API时,添加Basic Auth验证:将客户端ID:秘钥进行Base64编码,放在请求头Authorization字段中,格式为Basic {base64编码值}。
  • 确保后端创建订单时,正确传递商品金额、币种等参数,避免因参数错误触发验证失败。

3. 前端代码优化(规避潜在问题)

  • CheckoutButton组件接收的product props未使用,建议将商品信息传给后端接口,确保订单金额准确:
    createOrder={(data, actions) => {
        return fetch('/api/paypal/pay10', {
            method: 'post',
            headers: { 'Content-Type': 'application/json' },
            body: JSON.stringify(product) // 传递商品信息至后端
        })
        .then(res => {
            if (!res.ok) throw new Error(`HTTP错误!状态码: ${res.status}`);
            return res.json();
        })
        .then(orderData => orderData.id)
        .catch(err => {
            console.error('创建订单失败:', err);
            throw err; // 抛出错误让PayPal按钮处理
        });
    }}
    
  • 在onApprove中添加响应状态校验,避免处理失败请求:
    onApprove={async (data, actions) => {
        return fetch(`/api/paypal/success/${data.orderID}`, { method: 'post' })
        .then(res => {
            if (!res.ok) throw new Error(`HTTP错误!状态码: ${res.status}`);
            return res.json();
        })
        .then(orderData => {
            handleApprove(data.orderID);
            return orderData.id;
        })
        .catch(err => {
            console.error('捕获订单失败:', err);
            throw err;
        });
    }}
    

4. 网络环境排查

如果本地开发时出现ERR_ADDRESS_UNREACHABLE,尝试:

  • 关闭代理工具或防火墙,切换至稳定网络环境。
  • 访问https://www.sandbox.paypal.com确认沙箱站点可正常访问。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 08:05:54