brauche Webseite ideal für Vereine und Firmen
- Ad -
php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here!

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 24-08-2009, 09:40
Lennynero
 Registrierter Benutzer
Links : Onlinestatus : Lennynero ist offline
Registriert seit: Sep 2007
Beiträge: 121
Blog-Einträge: 1
Lennynero ist zur Zeit noch ein unbeschriebenes Blatt
Standard Amazon Webservices - SOAP nimmt Signature nicht

Hallo,

Amazon hat ja gerade seine Webservices umgestellt und erwartet beim Aufruf der Webservices nun eine Signature.

Mit REST ist mir die Verbindung gelungen, bei SOAP beschwert sich Amazon aber mit einem netten:

Zitat:
SoapFault exception: [aws:Client.SignatureDoesNotMatch] The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for details.
PHP-Code:
function getSOAPAmazon ($str_url$arr_signature)
{
    
$function "ItemSearch";

    
$client = new SoapClient("https://webservices.amazon.com/AWSECommerceService/AWSECommerceService.wsdl", array('exceptions' => 0));

    
$timestamp gmdate("Y-m-d\TH:i:s.000\Z");
    
//$timestamp_encoded = str_replace(":","%3A",str_replace(",","%2C",$timestamp));
    
$timestamp_encoded urlencode($timestamp);

    
$string 'AWSECommerceService'.$function.$timestamp_encoded;
    
    
$signature base64_encode(hash_hmac("sha256"$stringSECRETACCESSSKEYtrue));

    
$header_arr = array(
            new 
SoapHeader("http://security.amazonaws.com/doc/2007-01-01/""AWSAccessKeyId"ACCESSKEYID),
            new 
SoapHeader("http://security.amazonaws.com/doc/2007-01-01/""Signature"$signature),
            new 
SoapHeader("http://security.amazonaws.com/doc/2007-01-01/""Timestamp"$timestamp),
          );
/**/
     
$client->__setSoapHeaders($header_arr);

    
$params = array( 'Service' => 'AWSECommerceService',
            
'AssociateTag' => ASSOCTAG,
            
#'AWSAccessKeyId' => ACCESSKEYID,
            #'Signature' => $signature,
            
'Request' => array('Operation' => 'ItemSearchRequest',
                                      
'ItemPage' => 3,
                                      
'SearchIndex' => 'DVD',
                                      
'ResponseGroup' => 'Large',
                                      
'Keywords' => 'Karate')

            );

    return 
$client->__soapCall($function, array($params));

(Nicht wundern, die Variablen die Übergeben werden... werden in der Version nicht genutzt, bzw. stammen noch aus einem früherem Stand der Methode).

Encodierung des Timestamps hatte ich auch schon auf verschiedene Weisen getestet, führte aber immer zum gleichen Ergebnis (auch die drei "000" hatte ich weggelassen, auch keine Änderung).

Signaturübergabe im Array "params" wird nicht erkannt, im Header scheint das schon richtig zu sein.

Momentan fehlen mir die Ideen, zumal ich bei der Suche kreuz und quer durchs Netz feststellen musste, dass die meisten es dann mit REST lösen. Da wir aber bereits SOAP an mehreren Stellen nutzen, wäre es wünschtenswert das wir das auch hier wieder schaffen.

Hat jemand vielleicht eine Idee oder noch besser eine Lösung?
Mit Zitat antworten
  #2 (permalink)  
Alt 24-08-2009, 17:50
petro_0
 Registrierter Benutzer
Links : Onlinestatus : petro_0 ist offline
Registriert seit: Jan 2006
Ort: Fürth
Beiträge: 175
petro_0 ist zur Zeit noch ein unbeschriebenes Blatt
Smile

hast du dir mal den header response und deinen gesendeten Request angeschaut?

Die PHP SOAP Methode bieten dafür eigene Funktionen an.


Ich hatte auch schon so meine Problemchen mit SOAP und PHP.

Speziell auch mit SSL.

Ich musste imemr viel rum testen und einwas sag ich dir SOAP und PHP ist kein Zuckerschlecken....

Aber zu REST könntest du mir mal ein paar Links schicken ;o).
__________________
gruss pedro

Mit Zitat antworten
  #3 (permalink)  
Alt 24-08-2009, 19:27
PHP_Depp
 Registrierter Benutzer
Links : Onlinestatus : PHP_Depp ist offline
Registriert seit: Jul 2007
Beiträge: 9
PHP_Depp ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Vielleicht hilft das ja:

Amazon Web Services Developer Community : PHP SOAP Signature - ERROR ...

So ganz wissen die bei Amazon nicht, was sie da tun. Es gibt einige ziemlich derbe Beschwerden, vonwegen multi encoded database und jetzt dieser Schrott.

Bei mir liefs auch erst nicht, nachdem die heimlich(!) den Parameter Signatur in Signature umbenannt haben. Irgendwie idiotisch. Ich kann doch nicht jeden Tag nachsehen, ob die da was geändert haben

Das ist ja schon wie bei YouTube!
Mit Zitat antworten
  #4 (permalink)  
Alt 25-08-2009, 09:32
Lennynero
 Registrierter Benutzer
Links : Onlinestatus : Lennynero ist offline
Registriert seit: Sep 2007
Beiträge: 121
Blog-Einträge: 1
Lennynero ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hi,

hiermit funktioniert es nun:

PHP-Code:
function aws_call($action$body$locale 'US')
{
  
$access_key_id ACCESSKEYID;
  
$secret_access_key SECRETACCESSSKEY;


  
$locale_url '';
  if (
$locale != 'US'
  {
    
$locale_url "$locale/";
  }
  
$client = new SoapClient('http://ecs.amazonaws.co/AWSECommerceService/2009-06-01/' $locale_url 'AWSECommerceService.wsdl');

  
$timestamp gmdate("Y-m-d\TH:i:s\Z");
  
$signature $action $timestamp;
  
$signature base64_encode(hash_hmac("sha256"$signature$secret_access_keyTrue));
  
$headers = array();
  
$headers[] = new SoapHeader('http://security.amazonaws.com/doc/2007-01-01/''AWSAccessKeyId'$access_key_id);
  
$headers[] = new SoapHeader('http://security.amazonaws.com/doc/2007-01-01/''Timestamp'$timestamp);
  
$headers[] = new SoapHeader('http://security.amazonaws.com/doc/2007-01-01/''Signature'$signature);

  
$result $client->__soapCall($action, array($body), NULL$headers);
}


$body = array (
  
'Service' => 'AWSECommerceService',
  
'AssociateTag' => ASSOCTAG,
  
"Request" => array ('Operation' => 'ItemSearchRequest',
    
'ItemPage' => 3,
    
'SearchIndex' => 'DVD',
    
'ResponseGroup' => 'Large',
    
'Keywords' => 'Karate'
  
)
);

echo 
"<pre>".print_raws_call('ItemSearch'$body), true)."</pre>"
wieso... weiss ich nicht, zumal die Signature ja eigentlich gleich angelegt wird.

An anderer Stelle hatte ich gelesen, das man die Signature als letzten Header-Parameter übergeben sollte, aber auch das hatte ich schon versucht.. und wenn ich die Sache mit dem "array('exceptions' => 0)" aus der anderen Methode in die neue Eintrage... geht es auch.

Alles nicht wirklich zufriedenstellend.


Bzgl. REST

PHP-Code:
function sign_url($url){
  
$secret SECRETACCESSSKEY;
  
$host parse_url($url,PHP_URL_HOST);
  
$timestamp gmstrftime("%Y-%m-%dT%H:%M:%S.000Z");
  
$url $url "&Timestamp=" $timestamp;
  
// echo $url . "<BR>"; // display overridden url for testing

  
$paramstart strpos($url,"?");
  
$workurl substr($url,$paramstart+1);
  
$workurl str_replace(",","%2C",$workurl);
  
$workurl str_replace(":","%3A",$workurl);
  
// $workurl = urlencode($workurl);

  
$params explode("&",$workurl);

  
sort($params);

  
$signstr "GET\n" $host "\n/onca/xml\n" implode("&",$params);
  
$signstr base64_encode(hash_hmac('sha256'$signstr$secrettrue));
  
$signstr urlencode($signstr);
  
$signedurl $url "&Signature=" $signstr;
  
// echo $signedurl . "<BR>";  // display the signed URL for testing
  
return $signedurl;

Wobei dort dann die Accessid mit dem Methodenaufruf übergeben werden muss.

Ganz nett beim Entwickeln auch:

Signed Requests Helper - Amazon Product Advertising API
Mit Zitat antworten
  #5 (permalink)  
Alt 25-08-2009, 16:52
petro_0
 Registrierter Benutzer
Links : Onlinestatus : petro_0 ist offline
Registriert seit: Jan 2006
Ort: Fürth
Beiträge: 175
petro_0 ist zur Zeit noch ein unbeschriebenes Blatt
Standard ah rest

Danke dir bezüglich REST.

Is also wie einen GET manuell nachbasteln...

Aber schon komisch, das die amazon API immer wieder geändert wird.
Das ist echt Mist, man kann wirklich nicht jeden Tag nach sehen.
__________________
gruss pedro

Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Datenbank nimmt Daten nicht auf eno00 SQL / Datenbanken 5 27-11-2008 17:44
Nimmt bestimmte Emailadressen nicht? Astarte PHP Developer Forum 5 23-12-2005 16:12
Amazon Webservices Crake BRAINSTORMING PHP/SQL/HTML/JS/CSS 8 09-07-2004 16:49
HILFE -> Amazon Webservices! PHPler XML 5 07-03-2004 18:21
Amazon WebServices PictureArtist PHP Developer Forum 2 31-07-2003 23:12

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

MariaDB 5.5 veröffentlicht
MariaDB 5.5 veröffentlichtDie freie MySQL-Alternative MariaDB wurde in der stabilen Version 5.5.23 veröffentlicht und soll einige Verbesserungen gegenüber Oracles Communityversion von MySQL mitbringen.

16.04.2012 | Berni

Deutsche Yii Framework Community
Deutsche Yii Framework CommunitySeit dem 19.03.2012 gibt es für die Yii PHP Framework Community ein deutsches Zuhause.

20.03.2012 | dhcomputer

 

Aktuelle PHP Scripte

EM 2012 Tipp-Spiel ansehen EM 2012 Tipp-Spiel

Online Tipp-Spiel zur Fussball Europameisterschaft 2012, basierend auf php-Script mit hinterlegter mySql-Datenbank

27.05.2012 tippimnetz | Kategorie: PHP/ Spiele
Advanced Login ansehen Advanced Login

Login-System und Kundenverwaltung, die sich spielend leicht in bestehende Webseiten einbauen lässt und einen enormen Funktionsumfang bietet. Ihre eigene Webseite muss mit Advanced Login nicht umständlich an ein fertiges System angepasst werden.

25.05.2012 Madden | Kategorie: PHP/ Kundenverwaltung
BROM CMS/BelCal 3 ansehen BROM CMS/BelCal 3

Spezielles CMS für Betreiber von Ferienwohnungen. Komplette Seitenerstellung online, Verwaltung mehrerer Objekte, Reservierungssystem mit sofortigem Abgleich im Belegungskalender und vieles mehr bietet dieses Content Management System.

25.05.2012 belcal2 | Kategorie: PHP/ CMS
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 13:04 Uhr.