Ошибка cURL: время ожидания операции истекло через 15001 миллисекунду при получении 0 байт woocommerce API

#laravel #woocommerce #hook-woocommerce #laravel-8 #woocommerce-rest-api

#laravel #woocommerce #перехват -woocommerce #laravel-8 #woocommerce-rest-api

Вопрос:

Ошибка cURL: время ожидания операции истекло через 15001 миллисекунду при получении 0 байт проблемы с Woocommerce API для создания продуктов.

Я использую пакет Laravel, т.е. https://github.com/Codexshaper/laravel-woocommerce Он работал нормально и создавал продукты, но внезапно перестал работать и начал выдавать ошибки PHP.

Ниже приведен метод, который я использую для создания книги по Woocommerce с помощью контроллера laravel:

 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:

Глядя на composer.json в https://github.com/Codexshaper/laravel-woocommerce/blob/master/composer.json , я вижу, что они используют клиент woocommerce "automattic/woocommerce": "^3.0" , у которого по умолчанию время ожидания запроса составляет 15 секунд, следовательно, почему 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'),
            ]
        );
 

Похоже, что тайм-аут исходит из woocommerce.timeout вашего конфигурационного файла Laravel.