Amazon Product Advertising API 5.0 с ошибкой возврата php SDK 500 - PullRequest
0 голосов
/ 27 октября 2019

В списке продуктов Amazon, которые я получаю, анализируя базу данных WordPress, у меня есть этот код, который позволяет мне получать по продуктам информацию об Amazon:

function get_product_infos(asin, ext){
			$.post(window.location.href, {
				activate: 'get-product-informations',
				asin: asin,
				ext: ext
			}, function(data){
				//var json = JSON.parse(data);
				console.log(data);
				/*if(json.response === 'alright'){
					var current_asin = json.current_asin;
						current_asin = $('#'+current_asin);
					var next_asin = current_asin.next().attr('id');
					var next_ext = current_asin.next().attr('data-domain-ext');
					current_asin.find('td').first().find('.progress').text('ok');

					if(typeof next_asin !== typeof undefined && next_asin !== false){
						get_product_infos(next_asin, next_ext);
					}
				}*/
			});
		}

Файл, вызванный с помощью $ .post () для получения информации о продукте из Amazon:

<?php
$autorisation = isset($_POST['activate']) ? $_POST['activate'] : '';
$current_asin = isset($_POST['asin']) ? $_POST['asin'] : '';
$current_ext = isset($_POST['ext']) ? $_POST['ext'] : '';

if($autorisation !== 'get-product-informations'){
    return;
}

use pa\src\com\amazon\paapi5\v1\api\DefaultApi;
use pa\src\ApiException;
use pa\src\Configuration;
use pa\src\com\amazon\paapi5\v1\GetItemsRequest;
use pa\src\com\amazon\paapi5\v1\GetItemsResource;
use pa\src\com\amazon\paapi5\v1\PartnerType;
use pa\src\com\amazon\paapi5\v1\ProductAdvertisingAPIClientException;

require_once(plugin_dir_url( __FILE__ . '/bundles/admin-pages/tool/crawling-system/pa/vendor/autoload.php' ));

function parseResponse($items){
    $mappedResponse = array();
    foreach ($items as $item) {
        $mappedResponse[$item->getASIN()] = $item;
    }
    return $mappedResponse;
}
function getItems(){
    global $wpdb;
    $prefix_table = $wpdb->prefix;
    $table_name = $prefix_table.'azon_lc';


    $result = ($wpdb->get_var("SHOW TABLES LIKE '$table_name'") === $table_name) ? $wpdb->get_results("SELECT * FROM $table_name") : '';
    $access_key = ($result !== '') ? $result[0]->access_key : '';
    $secret_key = ($result !== '') ? $result[0]->secret_key : '';
    $associate_tag = ($result !== '') ? $result[0]->associate_tag : '';

    $config = new Configuration();

    /*
     * Add your credentials
     * Please add your access key here
     */
    $config->setAccessKey($access_key);
    # Please add your secret key here
    $config->setSecretKey($secret_key);

    # Please add your partner tag (store/tracking id) here
    $partnerTag = $associate_tag;

    /*
     * PAAPI host and region to which you want to send request
     * For more details refer: https://webservices.amazon.com/paapi5/documentation/common-request-parameters.html#host-and-region
     */
    $config->setHost('webservices.amazon.'.$current_ext);
    $config->setRegion('us-east-1');

    $apiInstance = new DefaultApi(
    /*
     * If you want use custom http client, pass your client which implements `GuzzleHttp\ClientInterface`.
     * This is optional, `GuzzleHttp\Client` will be used as default.
     */
        new pa\vendor\GuzzleHttp\guzzle\src\Client(), $config);

    # Choose item id(s)
    $itemIds = array($current_asin);

    /*
     * Choose resources you want from GetItemsResource enum
     * For more details, refer: https://webservices.amazon.com/paapi5/documentation/get-items.html#resources-parameter
     */
   $resources = array(
        GetItemsResource::ITEM_INFOTITLE,
        GetItemsResource::OFFERSLISTINGSPRICE);

    # Forming the request
    $getItemsRequest = new GetItemsRequest();
    $getItemsRequest->setItemIds($itemIds);
    $getItemsRequest->setPartnerTag($partnerTag);
    $getItemsRequest->setPartnerType(PartnerType::ASSOCIATES);
    $getItemsRequest->setResources($resources);

    # Validating request
    $invalidPropertyList = $getItemsRequest->listInvalidProperties();
    $length = count($invalidPropertyList);
    if ($length > 0) {
        echo "Error forming the request", PHP_EOL;
        foreach ($invalidPropertyList as $invalidProperty) {
            echo $invalidProperty, PHP_EOL;
        }
        return;
    }

    # Sending the request
    try {
        $getItemsResponse = $apiInstance->getItems($getItemsRequest);

        echo 'API called successfully', PHP_EOL;
        echo 'Complete Response: ', $getItemsResponse, PHP_EOL;

        # Parsing the response
        if ($getItemsResponse->getItemsResult() != null) {
            echo 'Printing all item information in ItemsResult:', PHP_EOL;
            if ($getItemsResponse->getItemsResult()->getItems() != null) {
                $responseList = parseResponse($getItemsResponse->getItemsResult()->getItems());

                foreach ($itemIds as $itemId) {
                    echo 'Printing information about the itemId: ', $itemId, PHP_EOL;
                    $item = $responseList[$itemId];
                    if ($item != null) {
                        if ($item->getASIN()) {
                            echo 'ASIN: ', $item->getASIN(), PHP_EOL;
                        }
                        if ($item->getItemInfo() != null and $item->getItemInfo()->getTitle() != null
                            and $item->getItemInfo()->getTitle()->getDisplayValue() != null) {
                            echo 'Title: ', $item->getItemInfo()->getTitle()->getDisplayValue(), PHP_EOL;
                        }
                        if ($item->getDetailPageURL() != null) {
                            echo 'Detail Page URL: ', $item->getDetailPageURL(), PHP_EOL;
                        }
                        if ($item->getOffers() != null and
                            $item->getOffers()->getListings() != null
                            and $item->getOffers()->getListings()[0]->getPrice() != null
                            and $item->getOffers()->getListings()[0]->getPrice()->getDisplayAmount() != null) {
                            echo 'Buying price: ', $item->getOffers()->getListings()[0]->getPrice()
                                ->getDisplayAmount(), PHP_EOL;
                        }
                    } else {
                        echo "Item not found, check errors", PHP_EOL;
                    }
                }
            }
        }
        if ($getItemsResponse->getErrors() != null) {
            echo PHP_EOL, 'Printing Errors:', PHP_EOL, 'Printing first error object from list of errors', PHP_EOL;
            echo 'Error code: ', $getItemsResponse->getErrors()[0]->getCode(), PHP_EOL;
            echo 'Error message: ', $getItemsResponse->getErrors()[0]->getMessage(), PHP_EOL;
        }
    } catch (ApiException $exception) {
        echo "Error calling PA-API 5.0!", PHP_EOL;
        echo "HTTP Status Code: ", $exception->getCode(), PHP_EOL;
        echo "Error Message: ", $exception->getMessage(), PHP_EOL;
        if ($exception->getResponseObject() instanceof ProductAdvertisingAPIClientException) {
            $errors = $exception->getResponseObject()->getErrors();
            foreach ($errors as $error) {
                echo "Error Type: ", $error->getCode(), PHP_EOL;
                echo "Error Message: ", $error->getMessage(), PHP_EOL;
            }
        } else {
            echo "Error response body: ", $exception->getResponseBody(), PHP_EOL;
        }
    } catch (Exception $exception) {
        echo "Error Message: ", $exception->getMessage(), PHP_EOL;
    }
}

getItems();

exit;?>

Я протестировал файл несколькими способами, чтобы понять, когдапроизошла ошибка, и я решил, что при попытке использовать этот код происходит сбой:

$config = new Configuration();

Я хотел бы определить, почему при вызове возвращается ошибка 500? Очевидно, что я чего-то не понимаю.

...