Получение ошибки "InvalidAddress" при отправке Amazon MWS CreateInboundShipmentPlan - PullRequest
1 голос
/ 24 мая 2019

Я использую Amazon MWS CreateInboundShipmentPlan для создания плана доставки, и он работает довольно хорошо, если я ограничиваю свой продукт до 23-24, но если я пытаюсь отправить больше 24, это вызывает ошибку InvalidAddress.Я использую PHP API для отправки запроса в Amazon MWS.При первоначальном устранении неполадок я думаю, что все дело в длине URL, потому что, если я увеличу длину URL, добавив больше SKU, это вызовет проблемы.

  1. Если я попытаюсь с ограниченным количеством SKU, я получу успешный результат.
  2. Но если я попытаюсь с большим количеством SKU, это даст мне

    [Ошибка] => Массив ([Тип] => Отправитель [Код] => InvalidAddress [Сообщение] => Ресурс /errors / mws.amazonservices.com / 500.html не найден на этом сервере.)

Вот мой PHP-код.

function amazon_CreateInboundShipmentPlan($amazonAWSAccessKeyId,$amazonSellerId,$amazonMWSAuthToken,$amazonMarketPlaceId,$amazonSecretKey,$domain,$extras){
    $param = array();
    $param['AWSAccessKeyId']     = $amazonAWSAccessKeyId;
    $param['Action']             = 'CreateInboundShipmentPlan';
    $param['SellerId']           = $amazonSellerId;
    $param['MWSAuthToken']       = $amazonMWSAuthToken;
    $param['SignatureMethod']    = 'HmacSHA256';
    $param['SignatureVersion']   = '2';
    $param['Timestamp']          = gmdate("Y-m-d\TH:i:s.\\0\\0\\0\\Z", time());
    $param['Version']            = '2010-10-01';
    $param = array_merge($param,$extras);

    $secret = $amazonSecretKey;

    $url = array();
    foreach ($param as $key => $val) {

        $key = str_replace("%7E", "~", rawurlencode($key));
        $val = str_replace("%7E", "~", rawurlencode($val));
        $url[] = "{$key}={$val}";
    }

    $amazon_feed = '';

    sort($url);

    $arr   = implode('&', $url);

    $sign  = 'POST' . "\n";
    $sign .= 'mws.amazonservices.'.$domain.'' . "\n";
    $sign .= '/FulfillmentInboundShipment/'.$param['Version'].'' . "\n";
    $sign .= $arr;

    $signature      = hash_hmac("sha256", $sign, $secret, true);
    $httpHeader     =   array();
    $httpHeader[]   =   'Transfer-Encoding: chunked';
    $httpHeader[]   =   'Content-Type: application/xml';
    $httpHeader[]   =   'Content-MD5: ' . base64_encode(md5($amazon_feed, true));
    $httpHeader[]   =   'Expect:';
    $httpHeader[]   =   'Accept:';

    $signature      = urlencode(base64_encode($signature));

    $link  = "https://mws.amazonservices.".$domain."/FulfillmentInboundShipment/".$param['Version']."?";
    $link .= $arr . "&Signature=" . $signature;

    echo strlen($link)."\n";

    $ch = curl_init($link);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $httpHeader);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $amazon_feed);
    $response = curl_exec($ch);
    $info = curl_getinfo($ch);
    $errors=curl_error($ch);
    curl_close($ch);

    $xml = simplexml_load_string($response);
    $json = json_encode($xml);
    $array = json_decode($json,TRUE);
    return $array;
     }

Я думаю, что естьнекоторые проблемы с длиной URL.Пожалуйста, помогите мне выяснить, что именно не так с этим кодом.

1 Ответ

0 голосов
/ 29 мая 2019

Я наконец выясняю проблему. Это проблема с ограничением URL. Я изменил свой метод публикации данных с GET на POST, и это решило проблему.

...