Ошибка Amazon MWS SubmitFeed: ключи могут не содержать & amp; lt;

У меня проблемы с отправкой канала в Amazon MWS. Я продолжаю получать следующую ошибку:Invalid query string provided - Keys may not contain <«

Это мой код:

$apicall = $this->build_url($function, $params);
$ch = curl_init($apicall);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
if ($this->xml) {
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, (string)$this->xml);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-type: text/xml"));
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-MD5: " . base64_encode(md5($this->xml))));
}
else {
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: text/xml'));
}
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
$response = curl_exec($ch);
$info = print_r(curl_getinfo($ch), true);
curl_close($ch);

$apicall формируется на лету и имеет вид:

https://mws.amazonservices.com/Feeds/2009-01-01?ASINList.ASIN.1=B00C5XBAOA&AWSAccessKeyId=***&Action=SubmitFeed&FeedType=_POST_PRODUCT_PRICING_DATA_&MWSAuthToken=***&SellerId=***&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2015-06-09T09%3A58%3A01.000Z&Version=2009-01-01&Signature=***

(который отлично работает с другими вызовами отчетов или заказов)

$this->xml хранится как поле «TEXT» в базе данных MySQL; это пример XML (я добавил строки, чтобы сделать его читаемым):

<?xml version="1.0"?>
<AmazonEnvelope xsi="http://www.w3.org/2001/XMLSchema-instance" noNamespaceSchemaLocation="amzn-envelope.xsd">
<Header>
<DocumentVersion>1.01</DocumentVersion>
<MerchantIdentifier>***</MerchantIdentifier>
</Header>
<MessageType>Price</MessageType>
<Message>
<MessageID>1</MessageID>
<OperationType>Update</OperationType>
<Price>
<SKU>***</SKU>
<StandardPrice currency="USD">33.5</StandardPrice>
</Price>
</Message>
</AmazonEnvelope>

Я, кажется, просматриваю каждую релевантную ссылку в Интернете и не могу найти ответ.

Может быть, кто-то может дать мне подсказку, что может пойти не так в приведенном выше коде?

Благодарю.

0

Решение

Нашел решения сам (выкопав больше суток):

1) Контент-MD5 должен быть рассчитан следующим образом:

base64_encode(md5($this->xml, **true**));

(благодаря этому ответу: https://sellercentral.amazon.com/forums/message.jspa?messageID=2767745)

2) передача параметров заголовка в cUrl должна быть одноразовой операцией, то есть все заголовки должны передаваться как массив.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector