PayPal Orders v2调用approveurl返回302重定向问题求助
解决PayPal Orders v2 API捕获订单时的302重定向问题
你遇到的302重定向问题根源在于调用了错误的API端点——你POST的https://www.sandbox.paypal.com/checkoutnow?token=...是PayPal提供给用户在浏览器中打开的前端授权页面,不是后端用来完成订单捕获的API接口,所以返回重定向是这个页面的正常行为。
正确的订单捕获流程
当你成功创建订单并获取到approve_url后,正确的步骤是:
- 将用户引导到这个
approve_url,让用户在PayPal页面完成授权操作; - 用户授权完成后,PayPal会跳转回你在
application_context中设置的return_url,并在URL参数中带回token(即订单ID)和PayerID; - 后端此时需要调用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
相关产品推荐
相关产品推荐

