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

使用@paypal/react-paypal-js时PayPal捕获API缺失汇率问题排查

问题分析与解决方案

PayPal Capture API返回汇率信息的前提是买家支付的货币与订单设置的货币不一致,此时seller_receivable_breakdown字段下会出现exchange_rate节点。从你提供的Capture响应来看,金额货币是USD,但你提到商家账户默认EUR、npm包配置默认EUR,这里存在明显的货币配置矛盾,这大概率是问题根源。

排查步骤

1. 确认订单创建时的货币参数

检查你使用@paypal/react-paypal-js创建订单的代码,确保purchase_units[0].amount.currency_code明确设置为EUR,而非USD。示例代码参考:

createOrder: (data, actions) => {
  return actions.order.create({
    purchase_units: [{
      amount: {
        value: '25.00',
        currency_code: 'EUR' // 必须设置为商家默认货币EUR
      }
    }]
  });
}

你当前的Capture响应显示货币为USD,说明订单创建时实际用了USD作为交易货币,这会导致后续的货币转换逻辑不符合预期。

2. 查看订单详情获取关键信息

使用Capture响应中的order_id(37B87843KP680035N)调用订单详情API:GET /v2/checkout/orders/{order_id},重点查看以下字段:

  • purchase_units[0].amount.currency_code:确认订单实际使用的货币
  • payment_source.paypal.payer_info.payer_currency:验证买家账户的默认货币是否为PLN
  • purchase_units[0].payments.captures[0].seller_receivable_breakdown:检查是否存在exchange_rate字段

3. 验证商家账户转换设置

登录Sandbox商家账户,确认:

  • 店铺默认货币已设置为EUR
  • “按店铺默认货币转换付款”的选项已开启(路径:账户设置 → 付款设置 → 币种接受选项)

4. 重新测试正确场景

创建一个明确设置为EUR货币的订单,使用PLN账户完成付款,之后再次调用Capture API,此时响应中应该会包含exchange_rate字段,示例格式如下:

"seller_receivable_breakdown": {
  "gross_amount": {
    "currency_code": "EUR",
    "value": "22.50"
  },
  "paypal_fee": {
    "currency_code": "EUR",
    "value": "1.50"
  },
  "net_amount": {
    "currency_code": "EUR",
    "value": "21.00"
  },
  "exchange_rate": {
    "source_currency_code": "PLN",
    "target_currency_code": "EUR",
    "value": "0.225"
  }
}

关键说明

如果订单货币与商家账户默认货币不同(比如你当前的USD vs EUR),PayPal会在资金结算时将订单货币转换为商家账户货币,但这个转换的汇率不会出现在Capture响应中——Capture响应仅返回买家支付货币到订单货币的汇率。因此必须确保订单货币与商家默认货币一致,才能在买家使用其他货币付款时获取到预期的汇率信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 15:55:07