laravel - Laravel HTTP 客户端不适用于空正文,但 Postman 有效
问题描述
因此,在尝试访问 PayPal 的 API 端点时,我遇到了 Laravel HTTP 客户端的一个有趣问题。
我可以让 Laravel HTTP 客户端在我所有使用数据 POST 的端点上工作,但是这个只需要标头(没有数据在正文中传递)的端点因错误而失败。
{
"name":"INVALID_REQUEST",
"message":"Request is not well-formed, syntactically incorrect, or violates schema.",
"debug_id":"609388c4ddfe4",
"details":[
{
"field":"\/",
"location":"body",
"issue":"INVALID_SYNTAX",
"description":"MALFORMED_REQUEST_JSON"
}
],
"links":[
{
"href":"https:\/\/developer.paypal.com\/docs\/api\/orders\/v2\/#error-INVALID_SYNTAX",
"rel":"information_link",
"encType":"application\/json"
}
]
}
当我在 Postman 中到达同一个端点时,一切正常
我到达端点的方法如下所示
public static function capture($order)
{
$token = Paypal::fetchToken();
$api_url = config('services.paypal.api_url') . '/v2/checkout/orders/' . $order['id'] . '/capture';
$headers = [
'Content/Type' => 'application/json',
];
$response = Http::withToken($token)
->withHeaders($headers)
->post($api_url)
->json();
return $response;
}
- 我曾尝试在这样的发布请求中传递一个空数组,
->post($api_url, [])
但这也不起作用。 - 我已经对 $api_url 进行了硬编码,以防万一我的变量格式出现错误。导致同样的问题。
- 我尝试将
'Content/Type'
标题中的 更改为'none'
. 这也不起作用,也没有意义,因为我在邮递员中设置了相同的标题并且它工作正常(PayPal 文档还说要传递此内容/类型)
根据我收到的错误,我只能假设请求正确地到达端点,但是当我将其留空时,HTTP 包装器或 guzzle 本身正在向正文添加一些内容,这导致 PayPal 抛出错误。我真的不知道我还能尝试什么。
是否有一个参数我忽略了在发布请求中指定空正文?
任何帮助表示赞赏。
解决方案
我有同样的问题,但我用一个简单的技巧解决了它。
我在https://docs.guzzlephp.org/en/stable/request-options.html#json上找到了解决方案。
这段代码应该可以工作。
$response = Http::withToken($token)
->withHeaders($headers)
->post($api_url,['json' => []])
->json();
空数组现在被视为 JSON 中的空数组/主体。
推荐阅读
- git - 如何区分自己的git remote和github?
- docker - OCI 运行时执行失败
- android - 如何在存储库级别发出多个流值作为对象?
- ssl - 远程服务器的“PKIX 路径构建失败:”“无法找到到所请求目标的有效证书路径”
- python - 来自 AMS 的 TMF8701 ToF 距离传感器与 Python
- python - 程序只读取一次文件
- entity-framework - 向数据库添加新记录,键始终为零
- visual-studio - 移动选项卡或对内部窗口进行排序时,Visual Studio 2015 崩溃
- arrays - 使用指针数组在 C 中初始化二维数组
- css - 如何同步两个 CSS 动画时间