Как совместить 2 json респинса в одном хите из запроса 2 URL - PullRequest
1 голос
/ 07 марта 2019

У меня есть 2 json ответа от 2 разных URL, первый шаг один, если пользователь заполняет customernumber методом post, чтобы получить значение billNo, как показано ниже:

{  
   "Customer":[  
      { 
         "billNo":"1001337"
      }
   ],
}

Второй ответ другому пользователю URL fillbillNo (полученный из первого шага выше) в форме с методом post для получения подробного ответа на результат, подобного этому:

{  
   "Billing":[  
      { 
         "billAccName":"John Doe",
         "billAccStatus":"Active"
      }
   ],
}

Мой вопрос, возможно ли объединить этот результат только с использованием только первого шага?номер клиента?В рамках ожидаемого результата:

{  
       "Billing":[  
          { 
             "billAccName":"John Doe",
             "billAccStatus":"Active"
          }
       ],
    }

Я использую Curl с PHP для получения этих ответов, есть ли другой способ добиться этого, возможно, сначала нужно вставить в таблицу временной БД?

Отредактировано добавление скрипта.

<form class="form-response" method="POST" action="postform.php">
    <h2 class="form-response-heading">get Response</h2>
    <input name="customernumber" class="form-control" type="text" autofocus="" required="" placeholder="phonenumber"customernumber">
    <button class="btn btn-lg btn-primary btn-block" type="submit">Get Response</button>
    </form>



<?php
$customernumber = $_POST['customernumber'];
$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://api.example.com/AccountDetails",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS   => "{ \"customernumber\":\"" .$customernumber . "\"}",
 CURLOPT_HTTPHEADER => array(
    "accept: application/json;charset=UTF8",
    "api-key: myapikeynumbers",
    "cache-control: no-cache",
    "content-type: application/json"
  ),
));

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

curl_close($curl);

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

Обновление скрипта:

<?php
$phone = $_POST['customernumber'];
$curl = curl_init();
$data = array("customernumber" => $phone);

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://api.example.com/AccountDetails",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS   =>  json_encode($data),
 CURLOPT_HTTPHEADER => array(
    "accept: application/json;charset=UTF8",
    "api-key: myapikey",
    "cache-control: no-cache",
    "content-type: application/json"
  ),
));

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

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  $result = json_decode($response);
  $billno = $result->Customer[0]->billNo;
  //now here, make your second API call using the Bill Number retrieved from the response

  $billAccNo = $_POST['billNo'];



$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://api.example.com/getBillingDetails",

  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => "{ \"billAccNo\":" .$billAccNo . "}",
  CURLOPT_HTTPHEADER => array(
    "accept: application/json;charset=UTF8",
    "api-key: myapike",
    "cache-control: no-cache",
    "content-type: application/json"
  ),
));

$response = curl_exec($curl);



$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo header('Content-Type: application/json');
  echo json_encode($response, JSON_PRETTY_PRINT);
}

}

Спасибо за любые предложения

1 Ответ

1 голос
/ 07 марта 2019

Вам просто нужно программно получить номер счета из данных, возвращаемых первым запросом, а затем поместить его в переменную, которая будет включена во второй запрос. Вы можете сделать это, расшифровав данные JSON в объект PHP и затем извлекая из него правильное поле.

Я предположил, что вы либо получите только одного Клиента обратно по первому запросу, либо что вас интересует только первая возвращенная запись Клиента. Если это не так, вам придется соответствующим образом изменить код.

Кроме того, вы не предоставили код, используемый для запуска второго запроса, поэтому мне придется предоставить вам право использовать переменную $billno подходящим образом в этом запросе.

Изменение происходит в операторе else в нижней части кода, где вместо простого отображения необработанного ответа мы вместо этого декодируем его и получаем из него номер счета.

<?php
$phone = $_POST['customernumber'];
$curl = curl_init();
$data = array("customernumber" => $phone);

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://api.example.com/AccountDetails",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS   =>  json_encode($data),
 CURLOPT_HTTPHEADER => array(
    "accept: application/json;charset=UTF8",
    "api-key: myapikeynumbers",
    "cache-control: no-cache",
    "content-type: application/json"
  ),
));

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

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  $result = json_decode($response);
  $billno = $result->Customer[0]->billNo;
  //now here, make your second API call using the Bill Number retrieved from the response
}

P.S. Я также изменил ваши входные данные JSON для надежного создания с помощью json_encode. Сборка JSON вручную, даже простая строка, подобная этой, потенциально подвержена сбоям из-за непредвиденных синтаксических ошибок, опечаток и т. Д. Вместо этого использовались инструменты, предоставляемые для преобразования переменной PHP с заведомо исправной структурой в действительную строку JSON в надежной Повторяемый способ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...