Ошибка HTTP 400 при попытке выполнить платежный запрос PayPal.(file_get_contents) - PullRequest
0 голосов
/ 19 января 2019

Попытка сделать тестовый запрос на оплату без 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-запроса! HTTP / 1.0 400 Неправильный запрос в /storage/ssd5/910/7954910/public_html/paypal.php в строке 48 BOOL (ложь)

1 Ответ

0 голосов
/ 02 июня 2019

Добавить

'protocol_version' => '1.1'

в массив 'http' => ().

например. Изменить строку

'method'  => 'POST',

до

'protocol_version'  => '1.1',
'method'  => 'POST',

Это меняет протокол HTTP, используемый file_get_contents (), с HTTP / 1.0 на HTTP / 1.1, и HTTP / 1.1 требуется сервером API PayPal REST.

...