Amazon APIの認証をPHPなSOAPで対応する

Amazon APIの認証をPHPSOAPで対応する

 なんかSOAPを使ってたのがあったので、いちおう(RESTな記事しか見かけなかったので)。

 たぶんこんな感じ。

 SOAPのリクエスト部分は手抜き(元々使ってるはずなので、いらないでしょ?)。



$wsdl = 'http://webservices.amazon.com/AWSECommerceService/JP/AWSECommerceService.wsdl';
$soap_options = array();
$access_key = '';
$secure = '';  // 追加
$associate = '';

$action = 'ItemSearch';
$request = array(
);
$params = array(
  'AWSAccessKeyId' => $access_key,
  'AssociateTag' => $associate,
  'Request' => $request,
);

$soap = new SoapClient($wsdl, $soap_options);

// ヘッダ追加:ここから
// create signature
$timestamp = gmstrftime('%Y-%m-%dT%TZ', $_SERVER['REQUEST_TIME']);
$signature = base64_encode(hash_hmac('sha256', ($action . $timestamp), $secure, true));

// create soap header
$namespace = 'http://security.amazonaws.com/doc/2007-01-01/';
$header_data = array(
  'AWSAccessKeyId' => $access_key,
  'Timestamp' => $timestamp,
  'Signature' => $signature,
);
$headers = array();
foreach ($header_data as $name => $val) {
  $headers[] = new SoapHeader($namespace, $name, $val);
}
$soap->__setSoapHeaders($headers);
// ヘッダ追加:ここまで

$soap->$action($params);

 どうでもいいけど、SOAPを使った場合ってSSLが必要になってたのねぇ。知らなかった。

 PerlSOAP::Liteを使った場合とかも需要あるのかな?