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

PayPal Orders v2调用approveurl返回302重定向问题求助

解决PayPal Orders v2 API捕获订单时的302重定向问题

你遇到的302重定向问题根源在于调用了错误的API端点——你POST的https://www.sandbox.paypal.com/checkoutnow?token=...是PayPal提供给用户在浏览器中打开的前端授权页面,不是后端用来完成订单捕获的API接口,所以返回重定向是这个页面的正常行为。

正确的订单捕获流程

当你成功创建订单并获取到approve_url后,正确的步骤是:

  1. 将用户引导到这个approve_url,让用户在PayPal页面完成授权操作;
  2. 用户授权完成后,PayPal会跳转回你在application_context中设置的return_url,并在URL参数中带回token(即订单ID)和PayerID;
  3. 后端此时需要调用PayPal的Orders v2捕获API来完成订单的资金捕获,而不是直接POST那个前端授权URL。

修正后的Dart代码示例

替换你原来的POST请求代码,使用正确的API端点:

try {
  // 注意:orderId就是创建订单时返回的id,也是approve_url里的token参数值
  String captureUrl = "https://api-m.sandbox.paypal.com/v2/checkout/orders/${orderId}/capture";
  var response = await http.post(
    Uri.parse(captureUrl),
    headers: {
      "Content-Type": "application/json",
      'Authorization': 'Bearer ' + accessToken
    },
    // 注意:v2捕获API不需要传payer_id参数,订单ID已经关联了用户授权信息
  );
  final body = jsonDecode(response.body);
  if (response.statusCode == 200 || response.statusCode == 201) { 
    return body; 
  }
  // 可以在这里处理错误响应,比如打印body查看具体错误信息
  print("捕获失败: ${body}");
  return null;
} catch (e) { 
  rethrow; 
}

额外注意事项

  • 确保你的accessToken是通过PayPal的OAuth2接口获取的有效令牌,并且拥有capture订单的权限;
  • 捕获API的响应状态码通常是201 Created(成功捕获),所以判断条件最好包含201;
  • 如果需要调试,可以打印捕获API返回的响应体,里面会包含详细的错误信息(比如权限不足、订单状态不正确等)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 14:02:56