2014-05-22 4 views
0

아마존 mws 마켓 플레이스에 XML 파일을 보내려하고 있습니다. 마켓 플레이스 ID, 액세스 키 등과 같은 쿼리 매개 변수를 보내고 있습니다. 아래 코드 스 니펫은이 스 니펫을 테스트하고 있습니다. 로컬 나는 다음과 같은 오류가 발생하고,PHP를 사용하여 아마존 mws xml 파일을 보내는 방법

오류 : 401

$file = "C:\\ListOrdersResponse.xml"; 
    $fopen = fopen($file,"r"); 

    $urluse = "https://mws.amazonservices.in"; 


    $postArray = array(); 
    $postArray['AWSAccessKeyId'] = 'MYKEY'; 
    $postArray['Action']   = 'SubmitFeed'; 
    $postArray['FeedType']   = '_POST_PRODUCT_PRICING_DATA_'; 
    $postArray['SellerId']   = 'MYSELLERID'; 
    $postArray['SignatureMethod'] = 'HmacSHA256'; 
    $postArray['SignatureVersion'] = 2; 
    $postArray['Timestamp']   = gmdate("Y-m-d\TH:i:s.\\0\\0\\0\\Z", time()); 
    $postArray['Version']   = '2011-10-01'; 

    $url_string  = http_build_query($postArray); 
    //signature 
    $signature  = $postArray['Action'] . $postArray['Timestamp']; 
    $actualSig  = base64_encode(hash_hmac("sha256", $signature, $postArray['AWSAccessKeyId'], true)); 

    $postArray['Signature']   = $actualSig; 

    $httpHeader  = array(); 
    $httpHeader[] = 'Transfer-Encoding: chunked'; 
    $httpHeader[] = 'Content-Type: text/xml'; 
    $httpHeader[] = 'Content-MD5: ' . base64_encode(md5_file($file, true)); 
    $httpHeader[] = 'Expect:'; 
    $httpHeader[] = 'Accept:'; 

    $curl_options = array(
     CURLOPT_UPLOAD => true, 
     CURLOPT_INFILE => $fopen, 
     CURLOPT_RETURNTRANSFER => true, 
     //CURLOPT_PUT  => TRUE, 
     //CURLOPT_POST => true, 
     //CURLOPT_PORT => 443, 
     //CURLOPT_SSLVERSION => 3, 
     CURLOPT_SSL_VERIFYHOST => false, 
     CURLOPT_SSL_VERIFYPEER => false, 
     //CURLOPT_FOLLOWLOCATION => 1, 
     //CURLOPT_PROTOCOLS => CURLPROTO_HTTPS, 
     CURLINFO_HEADER_OUT => TRUE, 
     CURLOPT_HTTPHEADER => $httpHeader, 
     //CURLOPT_CUSTOMREQUEST => 'POST', 
     //CURLOPT_POSTFIELDS => $url_string, 
     CURLOPT_HTTPAUTH => CURLAUTH_ANY, 
     CURLOPT_USERPWD => "snapdeal:snapdeal", 
     CURLOPT_VERBOSE => true, 
     CURLOPT_CUSTOMREQUEST => 'PUT', 
     CURLOPT_HEADER => true 
    ); 

    $ch = curl_init($urluse.'/?'.$url_string); 
    curl_setopt_array($ch,$curl_options); 
    $response = curl_exec($ch); 


    /*$fp = fopen("C:/result.xml","wb"); 
    fwrite($fp,$response); 
    fclose($fp);*/ 
    if (curl_errno($ch)) { 
     print "Error: " . curl_error($ch); 
     print_r(curl_getinfo($ch, CURLINFO_HTTP_CODE)); 
    } else { 
     // Show me the result 
curl_close($ch); 
    } 

이 하나가이 문제를 해결하는 데 도움 수 : 필요한 데이터 되감기는 오류 코드 수 없었습니다.

+0

답을 찾았습니까? –

답변

0

은 중 사용되지

방법을 (here 참조 HTTP 코드 301 또는 302)에 에러 메시지가 HTTP 리디렉션과 함께 CURLOPT_INFILE 사용과 관련된 것으로 보인다 "필요한 데이터 리와인드 불가능했던" 스트림 (예 : INFILE 대신 POSTFIELDS 사용) 또는 컬링이 SEEKFUNCTION을 통해 스트림을 리와인드 할 수 있도록 인터페이스를 제공하십시오.

다음 발췌 문장은 MWS를 통해 XML 데이터를 전송하는 데 적극적으로 사용되는 코드입니다 (차이점이 있다면 아마존 인도는 아닙니다). 스트림을 사용하지 않으므로 더 큰 메모리 오버 헤드가 있습니다.

$ch = curl_init(); 
curl_setopt($ch,CURLOPT_URL, 'https://'.$AmazonMWShost.'/'.$apiurl.'?'.FieldsToURL($fields)); 
curl_setopt($ch,CURLOPT_POST, 1); 
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); 
curl_setopt($ch,CURLOPT_POSTFIELDS, $data); 
curl_setopt($ch,CURLOPT_HTTPHEADER, array("Content-Type: text/xml","Content-MD5: ".$contentmd5,"x-amazon-user-agent: MyScriptName/1.0")); 
$result = curl_exec($ch); 
curl_close($ch); 
+0

답장을 보내 주셔서 감사합니다. 필드를 통해 무엇을 보내야합니까? 필드를 통해 조치, 판매자 ID 등을 보내고 있습니다. 맞습니까? –

+0

@NagarajuVadlamudi 위의 스 니펫에있는 '$ data'는 전송할 XML을 포함하는 문자열이며 $ fields는 $ postArray와 비슷한 배열입니다. – Hazzit

관련 문제