Paypal — Порядок захвата — Ошибка типа: strtolower(): Аргумент #1 ($string) должен иметь тип string, заданный int

#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, и он работал просто отлично.