如何解决贝宝PayPal订单第2版:请求格式不正确,语法错误或违反架构
我正在尝试使用PayPal API。这是Curl用法的参考:https://developer.paypal.com/docs/api/orders/v2/
在Google中搜索后,我发现了一个链接,该链接显示了类似的错误:但是,没有给出修复它的提示。 https://www.paypal-community.com/t5/REST-APIs/Request-is-not-well-formed-syntactically-incorrect-or-violates/td-p/2090480
我在PHP和Laravel中有以下代码
$client = new \GuzzleHttp\Client();
$response = $client->request('POST',$uri,[
'headers' => [
'Accept' => 'application/json','Accept-Language' => 'en_US','Content-Type' => 'application/json','Authorization' => "Bearer " . $this->token
],'form_params' => [
"intent" => "CAPTURE","purchase_units" => [
"amount" => [
"currency_code" => "USD","value" => "100.00"
]
]
]
]
);
运行代码时,出现以下错误
GuzzleHttp \ Exception \ ClientException客户端错误:
POST https://api.sandbox.paypal.com/v2/checkout/orders
导致400 Bad Request
响应:{“ name”:“ INVALID_REQUEST”,“ message”:“请求为 格式不正确,语法错误或违反 模式。”,“ debug_id(已截断...)
更新1-修改了代码,如答案中所述,但仍然是相同的错误消息
$response = $client->request('POST',"purchase_units" => [
[
"amount" => [
"currency_code" => "USD","value" => "100.00"
]
]
]
]
]
);
解决方法
下面的代码对我有用。
$client = new \GuzzleHttp\Client();
$response = $client->request('POST',$uri,[
'json' => [
"intent" => "CAPTURE","purchase_units" => [
[
"amount" => [
"currency_code" => "USD","value" => "100.00"
]
]
]
],'headers' => [
'Accept' => 'application/json','Accept-Language' => 'en_US','Content-Type' => 'application/json','Authorization' => "Bearer " . $this->token
]
]
);
,
文件说:
purchase_units:数组(包含purchase_unit对象) 一组购买单位。每个购买单位在客户和商人之间建立合同。每个购买单位代表客户打算从商家购买的全部或部分订单。
您的purchase_units现在是purchase_unit,而不是purchase_unit数组,请尝试将form_params更改为
[
"intent" => "CAPTURE","purchase_units" => [
[
"amount" => [
"currency_code" => "USD","value" => "100.00"
]
]
]
]
,
'form_params' => [
PayPal REST API不使用表单参数。
您需要发送一个“ json”数据对象。参见GuzzleHttp client documentation。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。