I have been having the hardest time getting an item uploaded to walmart..
I get the following error**
_ INVALID_REQUEST_CONTENT.GMP_GATEWAY_APImoreThanOneFeedRequest content is invalid.ERRORDATA
**I believe it may have something to do with the payload/data however i tryed many differnt formats an am unable to get past this generic error.
my test url is
http://sandbox.gottires.com/api/walmart/senddata-walmart33.php
I would very much appreciate if someone can help.. this is driving me crazybelow is my code:
$URL = 'https://marketplace.walmartapis.com/v3/feeds?feedType=item'; $RequestMethod = 'POST';//Request method type i.e GET, POST $Timestamp = round(microtime(true) * 1000); //Current system timestamp $WalmartConsumerID = '66543541tedyhyde3t53.524'; function _GetWalmartAuthSignature($URL, $RequestMethod, $Timestamp) { $WalmartPrivateKey = 'dgjsdhsehsethsethsehsetjrdjrj';//Your Walmart Private Key; $WalmartConsumerID = 'djdrtudrturdtu';//Your Walmart Comsumer Id; // CONSTRUCT THE AUTH DATA WE WANT TO SIGN $AuthData = $WalmartConsumerID."\n"; $AuthData .= $URL."\n"; $AuthData .= $RequestMethod."\n"; $AuthData .= $Timestamp."\n"; // GET AN OPENSSL USABLE PRIVATE KEY FROMM THE WARMART SUPPLIED SECRET $Pem = _ConvertPkcs8ToPem(base64_decode($WalmartPrivateKey)); $PrivateKey = openssl_pkey_get_private($Pem); // SIGN THE DATA. USE sha256 HASH $Hash = defined("OPENSSL_ALGO_SHA256") ? OPENSSL_ALGO_SHA256 : "sha256"; if (!openssl_sign($AuthData, $Signature, $PrivateKey, $Hash)) { // IF ERROR RETURN NULL var_dump(base64_encode($Signature)); echo "</br> Failed signiture </br>"; return null; } //ENCODE THE SIGNATURE AND RETURN return base64_encode($Signature); } //echo _GetWalmartAuthSignature($URL, $RequestMethod, $Timestamp); function _ConvertPkcs8ToPem($der){ static $BEGIN_MARKER = "-----BEGIN PRIVATE KEY-----"; static $END_MARKER = "-----END PRIVATE KEY-----"; $key = base64_encode($der); $pem = $BEGIN_MARKER . "\n"; $pem .= chunk_split($key, 64, "\n"); $pem .= $END_MARKER . "\n"; return $pem; } function auth($url, $RequestMethod,$Timestamp,$WalmartConsumerID){ $qos = uniqid(); // $headers[] = 'POST /v3/feeds?feedType=item HTTP/1.1'; $headers[] = 'WM_SVC.NAME: Walmart Marketplace'; $headers[]= 'WM_QOS.CORRELATION_ID: '.$qos; $headers[]= 'WM_SEC.TIMESTAMP: '.$Timestamp; $headers[]= 'WM_SEC.AUTH_SIGNATURE: '._GetWalmartAuthSignature($url, $RequestMethod, $Timestamp); $headers[]= 'WM_CONSUMER.CHANNEL.TYPE: 0rduyrdturdrt0e005832524d'; $headers[]= 'WM_CONSUMER.ID: '.$WalmartConsumerID; $headers[]= 'Content-Type: multipart/form-data; boundary=12345'; $headers[]= 'Accept: application/xml'; // $headers[]= 'Host: https://marketplace.walmartapis.com'; //$headers[]= 'Host: marketplace.walmartapis.com'; //var_dump($headers); return $headers; } $val = file_get_contents('http://ak-websolutions.com/dev/walmart/product.xml'); $eol = "\r\n"; $data = ''; $mime_boundary="12345"; $data .= '--' . $mime_boundary . $eol; $data .= '' . $eol . $eol; $data .= '<?xml version="1.0 encoding="UTF-8""?>' . $eol; $data .= '<MPItemFeed xmlns=”http://walmart.com/” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xsi:schemaLocation=”http://walmart.com/ MPItem.xsd „">' . $eol; $data .= '<MPItemFeedHeader>' . $eol; $data .= '<version>3.1</version>' . $eol; //$data .= '<mart>WALMART_US</mart>' . $eol; //$data .= '<locale>en_US</locale>' . $eol; $data .= '</MPItemFeedHeader>' . $eol; $data .= '<MPItem>' . $eol; $data .= '<sku>UHP-8224-JH</sku>' . $eol; $data .= '<processMode>CREATE</processMode>' . $eol; $data .= '<productIdentifiers>' . $eol; $data .= '<productIdentifier>' . $eol; $data .= '<productIdType>UPC</productIdType>' . $eol; $data .= '<productId>849849004721</productId>' . $eol; $data .= '</productIdentifier>' . $eol; $data .= '</productIdentifiers>' . $eol; $data .= '<MPProduct>' . $eol; $data .= '<productName>295 30 R 22 103Y ANTARES MAJORIS M5 30 K MILES </productName>' . $eol; $data .= '<ProductIdUpdate>Yes</ProductIdUpdate>' . $eol; $data .= '<SkuUpdate>No</SkuUpdate>' . $eol; $data .= '<category>' . $eol; $data .= '<Vehicle>' . $eol; $data .= '<Tires>' . $eol; $data .= '<shortDescription>295 30 R 22 103Y ANTARES MAJORIS M5 30 K MILES</shortDescription>' . $eol; $data .= '<brand>ANTARES</brand>' . $eol; $data .= '<mainImageUrl>https://www.stuff4crafts.com/media/catalog/product/4/3/437764.jpg</mainImageUrl>' . $eol; $data .= '<tireSize>2953022</tireSize>' . $eol; $data .= '</Vehicle>' . $eol; $data .= '</Tires>' . $eol; $data .= '</category>' . $eol; $data .= '</MPProduct>' . $eol; $data .= '</MPItem>' . $eol; $data .= '</MPItemFeed>' . $eol; $data .= "--" . $mime_boundary . "--" . $eol . $eol; // finish with two eol's!! $ch = curl_init( $URL ); //echo $val; $ch = curl_init(); // Initialize the curl curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)"); curl_setopt($ch, CURLOPT_URL, $URL); // set the opton for curl curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);// set the option to transfer output from script to curl curl_setopt($ch, CURLOPT_HTTPHEADER, auth($URL,$RequestMethod,$Timestamp,$WalmartConsumerID)); // curl_setopt($ch, CURLINFO_HEADER_OUT, TRUE); if($data!="") { curl_setopt($ch, CURLOPT_POST, 1); // curl_setopt($ch, CURLOPT_PUT, true); // curl_setopt($ch, CURLOPT_POSTFIELDS, $val); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); }else{ curl_setopt($ch, CURLOPT_POSTFIELDS, $val); echo "Empty"; } curl_setopt($ch, CURLOPT_TIMEOUT, 0); //die(); $response = curl_exec($ch); $getinfo = curl_getinfo($ch); ; $responsecode = curl_getinfo($ch, CURLINFO_HTTP_CODE); if ($responsecode != '200'){ var_dump(curl_getinfo($ch, CURLINFO_EFFECTIVE_URL)); var_dump(curl_getinfo($ch, CURLINFO_HTTP_CODE)); var_dump(curl_getinfo($ch, CURLINFO_CONTENT_TYPE)); var_dump(curl_getinfo($ch, CURLINFO_PRIVATE)); var_dump(curl_getinfo($ch, CURLINFO_RESPONSE_CODE)); var_dump(curl_getinfo($ch, CURLINFO_HTTP_CONNECTCODE)); var_dump(curl_getinfo($ch, CURLINFO_HTTPAUTH_AVAIL)); var_dump(curl_getinfo($ch, CURLOPT_FOLLOWLOCATION)); var_dump(curl_getinfo($ch, CURLINFO_REDIRECT_URL )); var_dump(curl_getinfo($ch, CURLINFO_SIZE_UPLOAD)); //var_dump(curl_getinfo($ch, CURLINFO_HEADER_OUT)); var_dump($data); var_dump($getinfo); } if(curl_error($ch)){ echo "Curl Error: " . curl_error($ch); } curl_close($ch); echo '<pre> Error: '; print_r($response);