Обновление инвентаря Walmart не работает перед 400 - PullRequest
0 голосов
/ 11 октября 2018

Я пытаюсь обновить инвентарь walmart с помощью curl api, но сталкиваюсь с проблемой с кодом ответа об ошибке 400.

Вот мой пример кода: я следовал walmart doc , посетил код ошибки, связанныйWalmart документы и обнаружили, что они просят представить билет, так что публичное решение не найдено.

$URL = "https://marketplace.walmartapis.com/v2/inventory?sku=xxxxx";
$RequestMethod = 'PUT';
$Timestamp = round(microtime(true) * 1000); //Current system timestamp
$WalmartConsumerID = "xxxxxxxxxxxxxxxxxxxxxxx";  

$Signature = _GetWalmartAuthSignature($URL, $RequestMethod, $Timestamp); 



$headers = array();
   $headers[] = "Accept: application/xml";
   $headers[] = "Content-type: application/xml";
   $headers[] = "WM_SVC.NAME: Walmart Marketplace";
   $headers[] = "WM_QOS.CORRELATION_ID: ".mt_rand();
   $headers[] = "WM_SEC.TIMESTAMP: ".$Timestamp;
   $headers[] = "WM_SEC.AUTH_SIGNATURE: ".$Signature;
   $headers[] = "WM_CONSUMER.ID: ".$WalmartConsumerID;
   $headers[] = "WM_CONSUMER.CHANNEL.TYPE: 0f3e4dd4-0514-4346-b39d-af0e00ea";




 $data = file_get_contents('inventory.xml');
   $ch = curl_init($URL);
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
   curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
   curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
   curl_setopt($ch, CURLOPT_POSTFIELDS,$data);
   $response = curl_exec($ch);
   echo $erroe = curl_error($ch);
   echo $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);   

Ответ: 400

Это именно то, что объяснено в Walmart Api Doc.

PS: Получите инвентарь, получите заказ и обновите цену, работающую хорошо с тем же ключом и подписью.Вот мои данные XML

 <?xml version="1.0" encoding="UTF-8"?>
 <inventory xmlns:ns2="http://walmart.com/">
    <sku>Cxxxx2</sku>
    <quantity>
    <unit>EACH</unit>
    <amount>7</amount>
    </quantity>
    <fulfillmentLagTime>1</fulfillmentLagTime>
    </inventory>

1 Ответ

0 голосов
/ 12 октября 2018

Правильно ли работают другие API?Причина, по которой я спрашиваю, заключается в том, что я вижу, что в примере кода для _GetWalmartAuthSignature вы не передаете идентификатор потребителя и закрытый ключ, который необходим для создания подписи.

Кроме того, вы можете опубликовать всю ошибку,Получение?

У них также есть новый метод аутентификации на основе токенов, который намного проще.

https://developer.walmart.com/#/apicenter/marketPlace/latest#apiAuthentication

Кроме того, проверьте, работает ли инвентарь GET нормально или нет для того же номера

--- ОБНОВЛЕНИЕ ----

Похоже, что полезная нагрузка запроса отсутствует

<?xml version="1.0" encoding="UTF-8"?>

--- ОБНОВЛЕНИЕ ---

Ваш xml не соответствует xsd Используйте это (удаление: ns2)

<?xml version="1.0" encoding="UTF-8"?>
<inventory xmlns="http://walmart.com/">
<sku>Cxxxx2</sku>
<quantity>
<unit>EACH</unit>
<amount>7</amount>
</quantity>
<fulfillmentLagTime>1</fulfillmentLagTime>
</inventory>
...