Paypal - 捕获订单 - 类型错误:strtolower():参数 #1 ($string) 必须是字符串类型,给定 int

Posted

技术标签:

【中文标题】Paypal - 捕获订单 - 类型错误:strtolower():参数 #1 ($string) 必须是字符串类型,给定 int【英文标题】:Paypal - Capture Order - TypeError: strtolower(): Argument #1 ($string) must be of type string, int given 【发布时间】:2021-10-19 05:59:02 【问题描述】:

我正在尝试在我的网站上使用 PayPal 作为付款方式。我正在使用 Laravel 框架和 GuzzleHttp 包。创建订单运行顺利。尝试使用 id 捕获订单时出现问题。

php artisan tinker
>>> $paypal = new App\Services\PayPalService;
=> App\Services\PayPalService #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",
   ]);

【问题讨论】:

我发现了一个错误,可能是问题将"/v2/checkout/orders/$id/capture"更改为"/v2/checkout/orders/$id/capture" 【参考方案1】:

嗯,我切换到 PayPal HTTP 客户端,它工作得很好。

【讨论】:

以上是关于Paypal - 捕获订单 - 类型错误:strtolower():参数 #1 ($string) 必须是字符串类型,给定 int的主要内容,如果未能解决你的问题,请参考以下文章

Paypal 按钮返回“无法捕获订单”

如何在捕获交易之前使用 Paypal 轻松更新订单?

PayPal Checkout:取消已批准订单的正确方法

PayPal:创建和获取订单

Paypal 结帐 - 订单捕获从服务器获得 PERMISSION-DENIED 但在 javascript 客户端中工作

PayPal + Node.js - 如果我与另一个用户登录并清除了浏览器缓存,则获取“已捕获订单”