1

これらのヘッダーを$context変数に渡す必要があります。値を配列に入れてから関数に渡してみましたが、関数 stream_context_create()から http 警告が表示されますfile_getcontents

$prod_id = 4322;
$tnxRef = "RT45635276GHF76783AC";
$mackey =  "ADECNH576748GH638NHJ7393MKDSFE73903673";
$agent = $_SERVER['HTTP_USER_AGENT'];
$hash = hash('SHA512', $prod_id.$txnRef.$mackey);

$headers = array(
    'http'=>(
        'method'=>'GET',
        'header'=>'Content: type=application/json \r\n'.
            '$agent \r\n'.
            '$hash'
        )
    )
stream_context_create($headers)

$url_returns = file_get_contents("https://test_server.com/test_paydirect/api/v1/gettransaction.json?productid=$prod_id&transactionreference=$txnRef&amount=$amount", false, $context);  

$json = json_decode($url_returns, true);

エラー:

[function.file-get-contents]: ストリームを開けませんでした: HTTP リクエストが失敗しました! HTTP/1.1 400 Bad Request`

それは私が得るエラーです、誰かが決定的な例を手伝ってくれませんか。

4

1 に答える 1

4

コードにいくつかのエラーがあります。

サーバーは を返します400 Bad Request。これは、コードが次の誤った HTTP 要求になるためです。

GET /test_paydirect/api/v1/gettransaction.json?productid=4322&transactionreference=RT45635276GHF76783AC&amount= HTTP/1.1
Host: test_server.com
Content: type=application/json
$agent
$hash

エラーは次のとおりです。

  1. 変数式は単一引用符内では評価されません
  2. $amountあなたのコード例では設定されていません
  3. ヘッダーはContent-Type:ありませんContent: type=
  4. すべてのヘッダー (エージェント、ハッシュ) には、対応する名前が必要です

動作するはずの例を次に示します。

$context = stream_context_create(array(
  'http' => array(
    'method' => 'GET',
    'agent'  => $agent,
    'header' => "Content-Type: application/json\r\n"
        . "X-Api-Signature: $hash"
    )
  )
);

注: X-Api-Signatureは単なる例です。API キー ヘッダーの名前の付け方とハッシュの計算方法は、使用している API によって異なります。この情報は、API のドキュメントで見つける必要があります。

于 2013-03-19T12:07:29.463 に答える