cURL 错误:操作在 15001 毫秒后超时,收到 0 个字节的 woocomerce API

时间:2021-04-08 08:43:22

标签: laravel woocommerce hook-woocommerce laravel-8 woocommerce-rest-api

面临 cURL 错误:操作在 15001 毫秒后超时,0 字节收到了 Woocomerce API 创建产品的问题。

我正在使用 Laravel 包,即 https://github.com/Codexshaper/laravel-woocommerce 它运行良好并创建产品,但突然停止工作并开始抛出 PHP 错误。

以下是我用来从 laravel Controller 创建一本关于 Woocomerce 的书的方法:

public function addProductToWC(Request $request)
{
    set_time_limit(0);
    $response = '';     
    if ($request->isMethod('post')){
        if(!empty($request->get('book_id'))){
            $book = Book::find($request->get('book_id'));
            $coverImgPath = base_path('public/customize_book/'.Session::get('cover_image'));

            if (file_exists($coverImgPath)) {
                $imageurl = url('/public/customize_book/'.Session::get('cover_image'));
            } else {
                $imageurl = url('/images/'.$book->bookimage);
            }
            if(!empty($book->id)){
                $data = [
                    'name' => $book->title,
                    'type' => 'simple',
                    'regular_price' => number_format($request->get('book_price')),
                    'description' => (!empty($book->description) ? $book->description :''),
                    'short_description' => 'Simple product short description.',
                    'categories' => [
                        [
                            'id' => 1
                        ]
                    ],
                    'images' => [
                        [
                            'src' => 'http://demo.woothemes.com/woocommerce/wp-content/uploads/sites/56/2013/06/T_2_front.jpg'
                        ],
                        [
                            'src' => 'http://demo.woothemes.com/woocommerce/wp-content/uploads/sites/56/2013/06/T_2_back.jpg'
                        ]
                    ]
                ];
                
                $product = Product::create($data);
                
                if($product['id']){
                    $response = array('error' => false,'code' => '200', 'data' => array('product_id' => $product['id'], 'message' => 'Product created successfully.'));
                }else{
                    $response = array('error' => true,'code' => '401', 'data' => array('product_id' => $product['id'], 'message' => 'Product syncing failed please try again later.'));                 
                }
            }else{
                $response = array('error' => true,'code' => '401','message' => 'Invalid book detail please try again.');
            }
        }else{
            $response = array('error' => true,'code' => '401','message' => 'Invalid book detail please try again.');            
        }
    }else{
        $response = array('error' => true,'code' => '401','message' => 'Invalid method please try again.');         
    }
    // return response
    return response()->json($response);
}

1 个答案:

答案 0 :(得分:0)

查看位于 https://github.com/Codexshaper/laravel-woocommerce/blob/master/composer.json 的 composer.json,我可以看到他们正在使用 woocommerce 客户端 "automattic/woocommerce": "^3.0" 这默认为 15 秒的 request 超时,这就是为什么set_time_limit(0); 没有解决问题。

直接使用时,您可以在选项中设置超时

$woocommerce = new Client(
    env('MGF_WOOCOMMERCE_API_URL'), // Your store URL
    env('MGF_WOOCOMMERCE_API_KEY'), // Your consumer key
    env('MGF_WOOCOMMERCE_API_SECRET'), // Your consumer secret
    [
        'timeout' => 120, // SET TIMOUT HERE
        'wp_api' => true, // Enable the WP REST API integration
        'version' => 'wc/v3' // WooCommerce WP REST API version
    ]
);

查看库源 https://github.com/Codexshaper/laravel-woocommerce/blob/master/src/WooCommerceApi.php

        $this->client = new Client(
            config('woocommerce.store_url'),
            config('woocommerce.consumer_key'),
            config('woocommerce.consumer_secret'),
            [
                'version'           => 'wc/'.config('woocommerce.api_version'),
                'wp_api'            => config('woocommerce.wp_api_integration'),
                'verify_ssl'        => config('woocommerce.verify_ssl'),
                'query_string_auth' => config('woocommerce.query_string_auth'),
                'timeout'           => config('woocommerce.timeout'),
            ]
        );

看起来超时来自 Laravel 配置文件中的 woocommerce.timeout

相关问题