簡體   English   中英

Amazon MWS(PHP)-報告請求API函數返回沒有數據,沒有引發錯誤

[英]Amazon MWS (PHP) - Report Request API functions return without data, no error thrown

我目前正在與亞馬遜MWS合作,以通過插件將某些功能集成到wordpress中。 我正在使用由Amazon提供的客戶端庫,可在此處找到:

https://developer.amazonservices.com/api.html?group=bde&section=reports&version=latest

使用這些客戶端庫和包括的示例php文件,我將插件設置為進行兩個API調用。 首先是requestReport

public function requestInventoryReport() {
    AWI_Amazon_Config::defineCredentials(); // Defines data for API Call
    $serviceUrl = "https://mws.amazonservices.com";
    $config = array (
            'ServiceURL' => $serviceUrl,
            'ProxyHost' => null,
            'ProxyPort' => -1,
            'MaxErrorRetry' => 3,
    );
    $service = new MarketplaceWebService_Client(
            AWS_ACCESS_KEY_ID,
            AWS_SECRET_ACCESS_KEY,
            $config,
            APPLICATION_NAME,
            APPLICATION_VERSION);
    $request = new MarketplaceWebService_Model_RequestReportRequest();
    $request->setMerchant(MERCHANT_ID);
    $request->setReportType('_GET_MERCHANT_LISTINGS_DATA_');
    self::invokeRequestReport($service, $request);
}

private function invokeRequestReport(MarketplaceWebService_Interface $service, $request) {
    try {
        $response = $service->requestReport($request);
        if ($response->isSetRequestReportResult()) {
            // Print Out Data
        }
    } catch (MarketplaceWebService_Exception $ex) {
        // Print Out Error
    }
}

第二個是getReportRequestList ,其代碼類似於第一個函數。 我能夠運行這些功能而沒有任何錯誤。 我遇到的問題是$response->isSetRequestReportResult()返回false。 從我的理解和調查響應對象來看,這表明響應對象沒有結果。 (在打印出響應對象時,我可以看到結果數組的FieldValue為NULL。)但是,該調用不會引發錯誤,但也不會產生結果。

我對代碼進行了一些挖掘,發現結果實際上是從api調用中返回的,但是當庫嘗試從XML解析它時,它從未設置為返回對象。 我已經將錯誤跟蹤到了這段代碼(我從未修改過此代碼,而直接從amazon mws報告庫中獲取了該代碼)。

private function fromDOMElement(DOMElement $dom)
{
    $xpath = new DOMXPath($dom->ownerDocument);
    $xpath->registerNamespace('a', 'http://mws.amazonaws.com/doc/2009-01-01/');

    foreach ($this->fields as $fieldName => $field) {
        $fieldType = $field['FieldType'];   
        if (is_array($fieldType)) {
            if ($this->isComplexType($fieldType[0])) {
                // Handle Data
            } else {
                // Handle Data 
            }
        } else {
            if ($this->isComplexType($fieldType)) {
                // Handle Data   
            } else {
                $element = $xpath->query("./a:$fieldName/text()", $dom);
                $data = null;
                if ($element->length == 1) {
                    switch($this->fields[$fieldName]['FieldType']) {
                        case 'DateTime':
                            $data = new DateTime($element->item(0)->data, 
                                new DateTimeZone('UTC'));
                            break;
                        case 'bool':
                            $value = $element->item(0)->data;
                            $data = $value === 'true' ? true : false;
                            break;
                        default:
                            $data = $element->item(0)->data;
                            break;
                    }
                  $this->fields[$fieldName]['FieldValue'] = $data;
                }
            }
        }
    }
}

應放入RequestReportResult的數據作為dom元素中的節點存在於此函數的開頭。 邏輯流程將其帶入foreach內部的最后else語句。 代碼運行查詢並返回$element但是在我的情況下$element->length = 13導致它失敗if語句,並且從不將數據設置為對象。 我還研究了$element->item(0)來查看其中的內容,它似乎是一個與原始dom對象匹配的dom對象,但帶有一堆空字符串。

現在,我是使用MWS的新手,我的直覺是我在api調用中某處丟失了一個參數,該參數弄亂了數據的返回方式並導致了這個奇怪的錯誤,但是我沒有主意這一點。 如果有人有任何想法或可以指出正確的方向,我將不勝感激。

謝謝你的時間!

**另外請注意,Amazon Scratchpad會使用我在代碼中使用的相同參數來正確返回所有內容**

這些對我有用,請檢查您是否缺少任何東西。 對於RequestReportRequest我正在這樣做:

$request = new MarketplaceWebService_Model_RequestReportRequest();
$marketplaceIdArray = array("Id" => array($pos_data['marketplace_id']));
$request->setMarketplaceIdList($marketplaceIdArray);
$request->setMerchant($pos_data['merchant_id']);
$request->setReportType($this->report_type);

對於GetReportRequestList,我正在這樣做:

$service = new MarketplaceWebService_Client($pos_data['aws_access_key'], $pos_data['aws_secret_access_key'], $pos_data['config'], $pos_data['application_name'], $pos_data['application_version']);
$report_request = new MarketplaceWebService_Model_GetReportRequestListRequest();
$report_request->setMerchant($pos_data["merchant_id"]);
$report_type_request = new MarketplaceWebService_Model_TypeList();
$report_type_request->setType($this->report_type);
$report_request->setReportTypeList($report_type_request);
$report_request_status = $this->invokeGetReportRequestList($service, $report_request, $report_requestID);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM