#laravel #api #paypal #payment #guzzle
Вопрос:
Я пытаюсь использовать PayPal в качестве способа оплаты на своем веб-сайте. Я использую фреймворк Laravel и пакет GuzzleHttp. Создание заказа проходит гладко. Проблема возникает при попытке захватить заказ с помощью идентификатора.
php artisan tinker
>>> $paypal = new AppServicesPayPalService;
=> AppServicesPayPalService {#3447}
>>> $paypal->createOrder(500.00, 'EUR');
=> {#3478
"id": "3NK71944KB9544808",
"status": "CREATED",
"links": [
{#3476
"href": "https://api.sandbox.paypal.com/v2/checkout/orders/3NK71944KB9544808",
"rel": "self",
"method": "GET",
},
{#3461
"href": "https://www.sandbox.paypal.com/checkoutnow?token=3NK71944KB9544808",
"rel": "approve",
"method": "GET",
},
{#3472
"href": "https://api.sandbox.paypal.com/v2/checkout/orders/3NK71944KB9544808",
"rel": "update",
"method": "PATCH",
},
{#3465
"href": "https://api.sandbox.paypal.com/v2/checkout/orders/3NK71944KB9544808/capture",
"rel": "capture",
"method": "POST",
},
],
}
>>> $paypal->capture("3NK71944KB9544808");
TypeError: strtolower(): Argument #1 ($string) must be of type string, int given
Использование кода API:
public function makeRequest($method, $requestURL, $queryParams = [], $formParams = [], $headers = [], $isJSONRequest = false)
{
$client = new Client([
'base_uri' => $this->baseUri,
]);
if (method_exists($this, 'resolveAuthorization')) {
$this->resolveAuthorization($queryParams, $formParams, $headers);
}
$response = $client->request($method, $requestURL, [
$isJSONRequest ? 'json' : 'form_params' => $formParams,
'headers' => $headers,
'query' => $queryParams,
]);
if (method_exists($this, 'decodeResponse')) {
return $this->decodeResponse($response->getBody()->getContents());
}
return $response->getBody()->getContents();
}
Захват кода заказа:
public function captureOrder($id)
{
return $this->makeRequest('POST', "/v2/checkout/orders/$id/capture", [], [], [
"Content-Type: application/json",
]);
}
Комментарии:
1. Я обнаружил ошибку, возможно, проблема в изменении
"/v2/checkout/orders/$id/capture"
на"/v2/checkout/orders/{$id}/capture"
Ответ №1:
Ну, я переключился на HTTP-клиент PayPal, и он работал просто отлично.