尝试执行 PayPal 付款请求时出现 HTTP 400 错误。 (file_get_contents)
Posted
技术标签:
【中文标题】尝试执行 PayPal 付款请求时出现 HTTP 400 错误。 (file_get_contents)【英文标题】:HTTP 400 error when trying to do a PayPal payment request. (file_get_contents) 【发布时间】:2019-06-13 16:58:51 【问题描述】:尝试发出测试无 cURL 的 Paypal 付款请求,但出现错误。 我正在使用来自 paypal Payment API 文档的示例请求。
$data = array (
0 =>
array (
'op' => 'replace',
'path' => '/transactions/0/amount',
'value' =>
array (
'total' => '18.37',
'currency' => 'EUR',
'details' =>
array (
'subtotal' => '13.37',
'shipping' => '5.00',
),
),
),
1 =>
array (
'op' => 'add',
'path' => '/transactions/0/item_list/shipping_address',
'value' =>
array (
'recipient_name' => 'Anna Gruneberg',
'line1' => 'Kathwarinenhof 1',
'city' => 'Flensburg',
'postal_code' => '24939',
'country_code' => 'DE',
),
),
);
$url = 'https://api.sandbox.paypal.com/v1/payments/payment';
$options = array(
'http' => array(
'header' => array(
"Content-type: application/json",
"Authorization: Bearer $access_token"
),
'method' => 'POST',
'content' => http_build_query($data)
)
);
print_r($options);
$context = stream_context_create($options);
$result = file_get_contents($url, false, $context);
var_dump($result);
返回:警告:file_get_contents(https://api.sandbox.paypal.com/v1/payments/payment):打开流失败:HTTP 请求失败!第 48 行 /storage/ssd5/910/7954910/public_html/paypal.php 中的 HTTP/1.0 400 错误请求 布尔(假)
【问题讨论】:
我认为你需要使用FALSE
(全部大写)作为第二个参数,或者0
。你试过吗?
【参考方案1】:
添加
'protocol_version' => '1.1'
到 'http' => 数组()。
例如换行
'method' => 'POST',
到
'protocol_version' => '1.1',
'method' => 'POST',
这将 file_get_contents() 使用的 HTTP 协议从 HTTP/1.0 更改为 HTTP/1.1,并且 PayPal REST API 服务器需要 HTTP/1.1。
【讨论】:
欢迎来到 SO。您的回答将受益于解释为什么此更改回答问题。以上是关于尝试执行 PayPal 付款请求时出现 HTTP 400 错误。 (file_get_contents)的主要内容,如果未能解决你的问题,请参考以下文章
PayPal REST API [沙盒] - 执行付款销售时出现 INTERNAL_SERVICE_ERROR
使用 paypal 高级而不是 paypal pro 定期付款
在 PayPal SandBox,MVC 中创建付款时出现 INTERNAL_SERVICE_ERROR