2012-07-27 13 views
11

मैं अगर वहाँ एक रास्ता API कॉलएपीआई के अमेज़न मेगावाट बिजली स्क्रैचपैड प्रश्नों परिवर्तित कॉल

उदा को scratchpad प्रश्नों मेरी अमेज़न मेगावाट बिजली में परिवर्तित करने के लिए है जानना चाहता हूँ जब मेगावाट बिजली Scratchpad का उपयोग कर रहा

"mws.amazonservices.co.uk" 
    ."/Products/2011-10-01" 
    ."AWSAccessKeyId=xxx&Action=ListMatchingProducts" 
    ."&MarketplaceId=xxx&Query=star%20wars&SellerId=xxx" 
    ."&SignatureMethod=HmacSHA256&SignatureVersion=2 
    ."&Timestamp=2012-07-27T18%3A59%3A30Z&Version=2011-10-01 

हस्ताक्षर करने के लिए काम करने के लिए मैं छोड़ दिया है और उम्मीद की गई है कि निम्नलिखित समारोह एक xml स्ट्रिंग वापसी होगी Amazons order API प्राप्त करने की कोशिश दिन बिताने के बाद एक स्ट्रिंग दिया हूँ ... लेकिन कोई भाग्य

function callAmazon(){ 
    $apicall = "mws.amazonservices.co.uk" 
    ."/Products/2011-10-01" 
    ."AWSAccessKeyId=xxx&Action=ListMatchingProducts" 
    ."&MarketplaceId=xxx&Query=star%20wars&SellerId=xxx" 
    ."&SignatureMethod=HmacSHA256&SignatureVersion=2 
    ."&Timestamp=2012-07-27T18%3A59%3A30Z&Version=2011-10-01 

    $resp = simplexml_load_file($apicall); //make the call 
} 

क्या किसी के पास कोई संभावित सुझाव है?

उत्तर

13

मैं भी एक लंबे समय के लिए इस के साथ संघर्ष किया यहाँ है मैं यह कैसे उत्पाद एपीआई के लिए हल:

<?php 
require_once('.config.inc.php'); 
$base_url = "https://mws.amazonservices.com/Products/2011-10-01"; 
$method = "POST"; 
$host = "mws.amazonservices.com"; 
$uri = "/Products/2011-10-01"; 

function amazon_xml($searchTerm) { 

    $params = array(
     'AWSAccessKeyId' => AWS_ACCESS_KEY_ID, 
     'Action' => "ListMatchingProducts", 
     'SellerId' => MERCHANT_ID, 
     'SignatureMethod' => "HmacSHA256", 
     'SignatureVersion' => "2", 
     'Timestamp'=> gmdate("Y-m-d\TH:i:s.\\0\\0\\0\\Z", time()), 
     'Version'=> "2011-10-01", 
     'MarketplaceId' => MARKETPLACE_ID, 
     'Query' => $searchTerm, 
     'QueryContextId' => "Books"); 

    // 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 = "GET\nmws.amazonservices.com\n/Products/2011-10-01\n" . $url_string; 

    // Sign the request 
    $signature = hash_hmac("sha256", $string_to_sign, AWS_SECRET_ACCESS_KEY, TRUE); 

    // Base64 encode the signature and make it URL safe 
    $signature = urlencode(base64_encode($signature)); 

    $url = "https://mws.amazonservices.com/Products/2011-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); 

    $parsed_xml = simplexml_load_string($response); 

    return ($parsed_xml); 
} 

?> 

.inc.config.php फ़ाइल मेरी पहुँच कुंजी है गुप्त कुंजी आदि

संपादित करें :
$searchterm आईएसबीएन है जो मैं अपने फॉर्म से गुजर रहा हूं।

+0

यह दिलचस्प लगता है कि मैं इसे एक शॉट दूंगा, मुझे बस इतना करना है कि मैं कॉन्फ़िगरेशन फ़ाइल को पकड़ लेता हूं जिसे मैं पहले –

+1

का उपयोग कर रहा था, मैंने नया एपिस के साथ आया था। – Jim

+0

फ़ंक्शन कुछ भी वापस नहीं कर रहा है? क्या मुझे कुछ और बदलना है? –

1

आपको वास्तव में API को कॉल करने की आवश्यकता है। जिस स्ट्रिंग का आप उपयोग कर रहे हैं वह यूआरएल के http: // भाग को निर्दिष्ट नहीं करता है।

+0

मैंने स्ट्रिंग –

+1

एसओ की शुरुआत में "https: //" जोड़ने की भी कोशिश की, जब वास्तव में http या https का उपयोग करते हैं, तो आपको $ resp resping में क्या परिणाम मिल रहा है? इसके अलावा आप इसे प्राप्त करते हैं कि आप उन URL को किसी ब्राउज़र में या अन्य पद्धतियों (यानी कर्ल, wget, आदि) पर कॉल करने का प्रयास करते हैं –

+0

$ resps त्रुटियों के अलावा कुछ भी नहीं देता है, लेकिन ब्राउज़र में एक XML स्ट्रिंग वापस आती है –

1

मुझे इस कोड के साथ थोड़ा परेशानी थी, मैंने होस्ट किए गए वेब सर्वर पर अपलोड करते समय यह काम किया था, लेकिन विंडोज़ और एक्सएम्पपी का उपयोग करते समय स्थानीय नहीं चल रहा था।

यदि आपको समस्याएं आ रही हैं, तो इसे कर्ल-सेटोपेट ब्लॉक के अंत में जोड़ने का प्रयास करें।

curl_setopt ($ ch, CURLOPT_SSL_VERIFYPEER, 0);

बीटीडब्ल्यू आपको कर्ल को सक्षम करने के लिए xmpp फ़ोल्डर में अपनी php.ini फ़ाइल को संशोधित करने की भी आवश्यकता है।

संबंधित मुद्दे