PHP: Get the Product Price using Amazon API

Updated on     Kisan Patel

<?php

class Amazon
{
     function getAmazonPrice($region, $asin) {
  
        $xml = $this->aws_signed_request($region, array(
            "Operation" => "ItemLookup",
            "ItemId" => $asin,
            "IncludeReviewsSummary" => False,
            "ResponseGroup" => "Medium,OfferSummary",
        ));

        $item = $xml->Items->Item;
        $title = htmlentities((string) $item->ItemAttributes->Title);
        $url = htmlentities((string) $item->DetailPageURL);
        $price = htmlentities((string) $item->OfferSummary->LowestNewPrice->Amount);
        $code = htmlentities((string) $item->OfferSummary->LowestNewPrice->CurrencyCode);
 
        if ($qty !== "0") {
            $response = array(
             "code" => $code,
             "price" => number_format((float) ($price / 100), 2, '.', ''),
             "url" => $url,
             "title" => $title
            );
        }
        else{
            return false;
        }
 
        return $response;
   }
 
   function getPage($url) {
        $curl = curl_init($url);
        curl_setopt($curl, CURLOPT_FAILONERROR, true);
        curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        $html = curl_exec($curl);
        curl_close($curl);
        return $html;
  }  
 
  function aws_signed_request($region, $params) {
 
        $public_key = "PUBLIC_KEY";
        $private_key = "PRIVATE_KEY";
 
        $method = "GET";
        $host = "ecs.amazonaws." . $region;
        $host = "webservices.amazon." . $region;
        $uri = "/onca/xml";
 
        $params["Service"] = "AWSECommerceService";
        $params["AssociateTag"] = "affiliate-21"; // Put your Affiliate Code here
        $params["AWSAccessKeyId"] = $public_key;
        $params["Timestamp"] = gmdate("Y-m-d\TH:i:s\Z");
        $params["Version"] = "2011-08-01";
 
        ksort($params);
 
        $canonicalized_query = array();
        foreach ($params as $param => $value) {
            $param = str_replace("%7E", "~", rawurlencode($param));
            $value = str_replace("%7E", "~", rawurlencode($value));
            $canonicalized_query[] = $param . "=" . $value;
        }
 
        $canonicalized_query = implode("&", $canonicalized_query);
 
        $string_to_sign = $method . "\n" . $host . "\n" . $uri . "\n" . $canonicalized_query;
        $signature = base64_encode(hash_hmac("sha256", $string_to_sign, $private_key, True));
        $signature = str_replace("%7E", "~", rawurlencode($signature));
 
         $request = "http://" . $host . $uri . "?" . $canonicalized_query . "&Signature=" . $signature;
         $response = $this->getPage($request);
 
         $pxml = @simplexml_load_string($response);
         if ($pxml === False) {
              return False;// no xml
         } else {
              return $pxml;
         }
    }
}

// Region code and Product ASIN
//$response = getAmazonPrice("in", "B00DGTOUEY");

?>

PHP

Leave a Reply