2017-01-14 156 views
0

我正在尝试使用MWS的PHP API获取我的配送清单。当我在便签簿上使用亚马逊给出的参数时,我得到了完美的答案,但是当我尝试使用我的代码时,它说签名不匹配,我做错了什么?亚马逊PHP API MWS获得配送

<?php 
$base_url = "https://mws.amazonservices.co.uk/FulfillmentInventory/2010-10-01"; 
$method = "POST"; 
$host = "mws.amazonservices.co.uk"; 
$uri = "/FulfillmentInventory/2010-10-01"; 

function amazon_xml() { 

    $params = array(
     'AWSAccessKeyId' => "123456788", 
     'Action' => "ListInventorySupply", 
     'SellerId' => "234234123412341", 
     'SignatureVersion' => "2", 
     //'Timestamp'=> gmdate("Y-m-d\TH:i:s.Z", time()), 
     'Timestamp'=> gmdate("Y-m-d\TH:i:s.\\0\\0\\0\\Z", time()), 
     'Version'=> "2010-10-01", 
     'SignatureMethod' => "HmacSHA256", 
     'SellerSkus.member.1' => '1EU-AMZ-FIRE-TV-MOUNT'); 

    // Sort the URL parameters 
    $url_parts = array(); 
    foreach(array_keys($params) as $key) 
     $url_parts[] = $key . "=" . str_replace('%7E', '~', rawurlencode($params[$key])); 

    sort($url_parts); 

    // Construct the string to sign 
    $url_string = implode("&", $url_parts); 
    $string_to_sign = "POST\nmws.amazonservices.co.uk\n/FulfillmentInventory/2010-10-01\n" . $url_string; 
    echo $string_to_sign."<br/>"; 

    // Sign the request 
    $signature = hash_hmac("sha256", $string_to_sign, 'sdgsdfgsdfgsdgsdgsdg', TRUE); 
    echo $signature."<br />"; 
    // Base64 encode the signature and make it URL safe 
    $signature = urlencode(base64_encode($signature)); 
    echo $signature."<br />"; 

    $url = "https://mws.amazonservices.co.uk/FulfillmentInventory/2010-10-01" . '?' . $url_string . "&Signature=" . $signature; 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL,$url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_TIMEOUT, 15); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); 
    $response = curl_exec($ch); 
    echo "La respuesta es ".$response; 
    $parsed_xml = simplexml_load_string($response); 

    //return ($parsed_xml); 
    echo $parsed_xml; 

} 


amazon_xml(); 

?> 

回答

1

你似乎是按值分类你的$url_parts数组,你应该按键排序。

ksort($url_parts); 

我在代码中看不到任何其他系统问题。另一点,我的代码与你的不同,但我的使用Merchant参数,而不是SellerId - 我还没有检查使用SellerId实际上是否也适用。