2013-03-19 2 views
0

мне нужно передать эти заголовки в переменную $context, я попытался с помощью ввода значений в массив, а затем передать его в stream_context_create() функцию, но я получаю HTTP предупреждения от file_getcontents функциипрохождение заголовков в file_get_contents() для запроса JSon

$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]: failed to open stream: HTTP request failed! HTTP/1.1 400 Bad Request`

Вот ошибки я получаю, может кто-нибудь, пожалуйста, помогите с окончательным примером.

+1

OPS, [основной источник] (http://stackoverflow.com/questions/15497253/passing-headers-into-file-get-contents) не существует! –

+0

Страница не найдена на дублированных ссылках ... – urban

ответ

2

У вас есть несколько ошибок в коде.

Сервер возвращает 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: type=application/json\r\n" 
     . "X-Api-Signature: $hash" 
    ) 
) 
); 

Пожалуйста, обратите внимание:X-Api-Signature это только пример - это зависит от API, который вы используете, как назван заголовок ключа API и как вычисляется хеш. Вы должны найти эту информацию в Документах вашего API!

+0

спасибо за ответ, вот что у меня есть $ options = array ( 'http' => array ( 'header' => "Content-Type: application/json », 'UserAgent' => $ агент, 'Hash' => $ хэш ) ), но до сих пор не получает правильный ответ –

+0

это то, что они хотят получить https://test_server.com/test_paydirect/api /v1/gettransaction.json?productid=$prod_id&transactionreference=$txnRef&amount=$amount HTTP/1.1 UserAgent: Mozilla/blah blah blah (blah) Хеш: myhash –

+0

@ user1872101: 1. имя заголовка - 'User-Agent'. Кроме того, для этого есть отдельный параметр контекста потока, который я использовал в моем примере. Просто используйте его, как есть! 2. Я уверен, что это из-за вашего заголовка «Хэш». Пойдите, прочитайте документы вашего API или разместите их здесь, чтобы люди могли действительно помочь вам. – Kaii

Смежные вопросы