集成PayPal Create Order API遇问题:返回/取消URL及请求ID报错
解决PayPal Orders v2 Create Order API的PAYPAL_REQUEST_ID_REQUIRED错误
问题分析
你遇到的PAYPAL_REQUEST_ID_REQUIRED错误,核心原因是请求缺少PayPal要求的幂等性请求头,和payment_source里的URL配置无关。PayPal Orders v2 API要求所有创建订单的请求必须携带PayPal-Request-Id头,这个值是唯一字符串(比如UUID),用来防止重复创建订单。
修复步骤
1. 添加必填请求头
在API请求中必须携带以下HTTP头:
PayPal-Request-Id: 生成一个唯一字符串(建议用UUID),每个请求的该值需唯一Content-Type: application/json(确保请求体为标准JSON格式)
2. 修正请求体格式
你之前的请求体混用了PHP数组语法和JSON语法,正确的JSON请求体如下:
{ "intent": "CAPTURE", "purchase_units": [ { "amount": { "currency_code": "USD", "value": "100.00" } } ], "payment_source": { "paypal": { "experience_context": { "return_url": "你的返回URL", "cancel_url": "你的取消URL" } } } }
3. 验证逻辑匹配需求
你的场景是创建订单引导用户进入结账页,当前配置完全符合要求:experience_context中的return_url和cancel_url就是用来指定用户完成/取消支付后的跳转地址,无需额外支付信息,只要订单金额配置正确即可。
示例请求(cURL)
curl -v POST https://api-m.sandbox.paypal.com/v2/checkout/orders \ -H "Content-Type: application/json" \ -H "Authorization: Bearer 你的访问令牌" \ -H "PayPal-Request-Id: 5f8a7d6c-4b3a-2s1d-0f9e-8g7h6j5k4l3m" \ -d '{ "intent": "CAPTURE", "purchase_units": [ { "amount": { "currency_code": "USD", "value": "100.00" } } ], "payment_source": { "paypal": { "experience_context": { "return_url": "https://yourdomain.com/return", "cancel_url": "https://yourdomain.com/cancel" } } } }'
内容的提问来源于stack exchange,提问作者Pankaj
相关产品推荐
相关产品推荐

