2015-09-02 2 views
1

Раньше я использовал XML-способ для получения данных из внешнего API. Теперь внутренние правила политики компании используют JSON для связи с API. Я знаю, какие данные я должен отправить в запрос и как данные я вернусь, но я понятия не имею, как звонить с помощью API от JSON.Вызов JSON API с параметрами в PHP (с примером)

  • Мой сервер PHP localhost.
  • Сообщите об этом JSON API https://api.example.com/service-api, и я уверен, что он отлично работает.
  • Запрос { "действие": "разрешение", "арг": { "имя пользователя": "[email protected]", "пароль": "qpujy676"}}
  • Ответный {» статус «:» OK»,„маркер“:„8hsa77hh687y3sbdha7ah3dajknfa93“}

Я нашел пример, но я не знаю, что это Http_client(), что это роль и то, что он будет делать.

$http = new Http_Client(); 
    $http->setUri('https://api.example.com/service-api'); 
    $postdata = array(
     'action' => 'authorization', 
     'args' => array(
      'username' => '[email protected]', 
      'password' => 'qpujy676', 
     ) 
    ); 
    if (CRYPT_KEY_API) { //if encrypted data 
     $postdata ['rand'] = md5(time() . rand(2303, 85500)); 
     $postdata = json_encode($postdata); 
     $postdata = Crypt::encrypt($postdata); 
    } else { 
     $postdata = json_encode($postdata); 
    } 
    $http->setRawData($postdata, 'application/json'); 
    $response = $http->request(POST); 
    if ($response->isSuccessful()) { 
     $responseData = $response->getBody(); 
     if (CRYPT_KEY_API) { //if encrypted data 
      $responseData = Crypt::decrypt($responseData); 
     } 
     $results = json_decode($responseData, true); 
    } else { 
     $error_message = "<p>Error</p>\n"; 
     $error_message .= "HTTP Status: " . $response->getStatus() . "\n"; 
     $error_message .= "HTTP Headers:\n"; 
     $responseHeaders = $response->getHeaders(); 
     foreach ($responseHeaders as $responseHeaderName => $responseHeaderValue) { 
      $error_message .= "$responseHeaderName: $responseHeaderValue\n"; 
     } 
     throw new Exception($error_message); 
    } 

Практически я нужен только в качестве примера http_client класса, чтобы решить мою проблему :-) Особенно

  • setRawData ($ PostData, 'применение/JSON')
  • запроса (POST)
  • getBody()

Я создал метод autorization_test(), t шляпа якобы должна отвечать внешним API. Возможно, потому что выход:

Предупреждение: file_get_contents (https://api.example.com/service-api): не удалось открыть поток: HTTP запрос не удалось! HTTP/1.1 404 Not Found в C: \ XAMPP \ HTDOCS \ prestashop1611 \ модули \ miniwa \ miniwa.php на линии 180 Ошибка

public function authorization_test() 
    { 
     $domain = MINIWA_DOMAIN; 
     $username = '[email protected]'; 
     $password = '12345'; 

     $postData = array(
      'action' => 'authorization', 
      'args' => array(
       'domain' => $domain, 
       'username' => $username, 
       'password' => $password, 
      ), 
     ); 

     $postData = json_encode($postData); 
     //$postData = Crypt::encrypt($postData); 

     $context = stream_context_create(array(
      'http' => array(
      // http://www.php.net/manual/en/context.http.php 
      'method' => 'POST', 
      'header' => 'Content-Type: application/json', 
      'content' => $postData, 
      ) 
     )); 

     // Send the request 
     $response = file_get_contents('https://api.example.com/service-api', FALSE, $context); 

     // Check for errors 
     if($response === FALSE){ 
      die('Error'); 
     } 

     //$response= Crypt::decrypt($response); 

     // Decode the response 
     $responseData = json_decode($response, TRUE); 

     // send the output data to view 
     $smarty->assign(array(
      'json_decoded_output' => $responseData, 
     )); 

     return $smarty; 

Почему нет никакого положительного вывода?

+0

Возможно, посмотрите пример, в котором вместо этого используется завиток? – Jasen

+0

Могу ли я выполнить запрос без http_client? Нужно ли это для этого? – Bejkrools

ответ

0

API был отключен, теперь все в порядке, код правильный.

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