2016-12-22 9 views
2

私は、承認されたヘッダを持つAPIへのPHPリクエストの使用方法をお尋ねしたいと思います。あなたが言及として承認されたヘッダを持つAPIエンドポイントへのPHPリクエスト

APIエンドポイントの例は、

Quotation Service : ­ POST https://api.website.com/v4/quotation 

Content­type: application/json; charset=utf­8 
Accept: application/json 
Authorization: hmac $id:$milliSeconds:$signature 
{ 
"serviceType": "CARD", 
"specialRequests": [ 
"ROUNDTRIP" 
]} 

でヘッダーとリクエストパラメータの承認がサービス種別、specialRequest

あるとして、彼らは私が要求を行うPHPCurlを使用してみてくださいしかし、私HMACを使用しますそれはいいことではない。このAPIでCurlの使い方を教えてください。

編集:

<?php 

    $customerId = "585a-SAMPLE-980dfe0097"; //by provider 

    $privKey = "MC4CAQACBQDSk4ghAgMB---SAMPLE---QIDAOPFAgMAk7QIDAMYq"; //by provider 

    $requestTime = (int)(microtime(true) * 1000); 

    $signature = hash_hmac('sha256', $requestTime, $privKey); 

    $headers = array(
     "Authorization: hmac $customerId:$requestTime:$signature" 
    ); 

    $params = array(
     'serviceType' => 'CARD', 
     'specialRequests' => array('ROUNDTRIP') 
    ); 

    $curl = curl_init(); 

    curl_setopt_array($curl, array(
     CURLOPT_URL => "https://api.samplesite.com/v1/quotations", 
     CURLOPT_RETURNTRANSFER => true, 
     CURLOPT_ENCODING => "", 
     CURLOPT_MAXREDIRS => 10, 
     CURLOPT_TIMEOUT => 30, 
     CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, 
     CURLOPT_CUSTOMREQUEST => "POST", 
     CURLOPT_HTTPHEADER => $headers, 
    )); 

    curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($params)); 
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); 

    $response = curl_exec($curl); 
    $err = curl_error($curl); 

    curl_close($curl); 

    if ($err) { 
     echo "cURL Error #:" . $err; 
    } else { 
     echo $response; 
    } 

よろしく、

+0

申し訳ありませんが、私はミスの情報を追加します。 – Giffary

答えて

0

うーん...多分このような何か:

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, 'https://api.website.com/v4/quotation'); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_FAILONERROR, true); 

/* if you want to use SSL certificate, otherwise delete this */ 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); 
curl_setopt($ch, CURLOPT_CAPATH , '/path/to/certificate'); 

$auth = hash_hmac('sha1', $id.':'.$milisecond.':'.$signature, <ENCRYPTION KEY>, true); 

$headers = array(
    'Authorization: '.$auth 
); 

$params = array(
    'serviceType' => 'CARD', 
    'specialRequests' => array('ROUNDTRIP') 
); 

curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params)); 

curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 

$result = curl_exec($ch); 
+0

こんにちは。あなたの答えをありがとう。私はあなたのコードを使用しようとするが、それはサーバーの401認証エラーを返すようです。私は私の質問に私のコードを更新します。助けてください。 – Giffary

+0

cURLエラーはありません。これは、cURLを呼び出す方法が正しいことを意味します。エラー401は、署名の作成/認証の作成に何らかの問題が残っていることを示します。プロバイダのドキュメントを再度確認してください。 また、いくつかのAPIエンドポイントでは、時間と時間が一定の時間(例えば5分)を超えないようにする必要があります。 –

関連する問題