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

Postman可运行的PayPal v2订单捕获Curl,PHP调用报400无效请求

问题排查与修复方案

你的PHP代码和Postman的curl请求核心差异在于POST请求体缺失及部分curl选项设置问题,导致PayPal服务器返回broken content-length header错误。以下是具体排查点和修复步骤:

1. 必须提交空JSON请求体

PayPal v2订单捕获接口要求Content-Type: application/json,即便无需业务参数,也必须发送空JSON对象{}。你的curl命令中,curl会自动处理空POST请求的Content-Length,但PHP的curl在设置CURLOPT_POST => true却未指定CURLOPT_POSTFIELDS时,会导致Content-Length头异常,触发服务器的格式错误。

2. 调整CURLOPT_ENCODING设置

CURLOPT_ENCODING => ""会让curl自动添加Accept-Encoding头,但部分服务器对这种自动处理的兼容性不佳。建议显式设置为gzip,deflate,和Postman的默认行为保持一致。

修复后的PHP代码片段

修改curl选项部分,添加空JSON请求体并调整编码设置:

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "gzip,deflate", // 显式设置编码格式
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_POST => true,
  CURLOPT_POSTFIELDS => "{}", // 添加空JSON请求体
  CURLOPT_HTTPHEADER => array(
    "Authorization: Bearer " . $accessToken,
    "Content-Type: application/json",
    "PayPal-Request-Id: " . uniqid(),
    "Prefer: return=representation",
    "PayPal-Client-Metadata-Id: " . time() . "-" . $orderID
  ),
));

额外验证点

  • 确认generateAccessToken.php返回的token有效,且与Postman使用的环境(沙箱/生产)一致。
  • 检查$orderID是否正确传递,无特殊字符或URL编码问题(可使用urlencode($orderID)确保URL格式合规)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 19:05:10