PHP 循环 cURL API 调用


PHP looping on cURL API call

我是一个新手程序员,这是我第一次使用PHP和cURL。我正在进行一个 API 调用,我已经为其设置了一个 cURL 请求,让我返回一个 JSON 对象。

我现在要做的是将 cURL 调用设置为循环遍历一个包含多个 $payer_id 的 $payers 数组,我想一次发出和单个请求,打印出一个PRETTY_PRINT JSON 对象,然后从 $payers 数组中发出下一个 $payer_id 的下一个请求。

这是我设置的代码,显然出于安全目的,信息和 api url 是假的,但这是我现在使用的结构。就像我之前提到的,如果你删除代码的foreach部分并手动输入$payer_id号到我拥有的代码中,它会起作用并返回我想要的JSON对象......但我希望能够设置代码以使用$payers数组并为我打印出 JSON 对象。

任何帮助,指导将不胜感激。谢谢!

<?php
  /* API url*/
  $url = 'https://testapi.com/cov/all.json';
  $payers = array("00002", "00112");
  /* Assign parameter values here */
  foreach ($payers as $payer) {
  $api_key = '1111122222233333';
  $payer_id = echo "$payer"; 
  $provider_first_name = 'laura';
  $provider_last_name = 'brown';
  $provider_npi = '444445555';
  $member_first_name = 'billy';
  $member_last_name = 'bob';
  $dependent_ssn = '111-22-3333';
  $member_dob  = '1988-11-11';
  /* $_GET Parameters to Send */
  $params = array( 
    'api_key'           =>   $api_key,
    'payer_id'          =>   $payer_id,
    'provider_first_name'  =>   $provider_first_name,
    'provider_last_name'   =>   $provider_last_name,
    'provider_npi'       =>   $provider_npi,
    'member_first_name'          =>   $member_first_name,
    'member_last_name'           =>   $member_last_name,
    'dependent_ssn'                 =>   $dependent_ssn,
    'member_dob'                 =>   $member_dob
  ); 
  /* Update URL to container Query String of Paramaters */
  $url .= '?' . http_build_query($params);
  /* cURL Resource */
  $ch = curl_init();
  /* Set URL */
  curl_setopt($ch, CURLOPT_URL, $url);
  /* Tell cURL to return the output */
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  /* Execute cURL, Return Data */
  $curl_response = curl_exec($ch);
  curl_close($ch);
  $decoded = json_decode($curl_response, true);
  echo '<pre>';
    echo json_encode($decoded, JSON_PRETTY_PRINT);
  echo '</pre>';
  }
?>

正如我在上面的评论中指出的那样,变量$payer的声明中有一个小错误 - 回声是有问题的。

此外,我认为您应该能够为数组中的各种付款人重复使用 curl 句柄 - 在循环外声明并在每次迭代时为新 url 分配参数。

[ 从 curl.haxx.se 下载cacert.pem ]

<?php
    /* API url*/
    $baseurl = 'https://testapi.com/cov/all.json';
    $payers = array("00002", "00112");
    $data=array();

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    /* when ever I have to use curl to an ssl host I always include these options */
    curl_setopt( $ch, CURLOPT_USERAGENT, 'Mozilla-whatever-ua-string' );
    curl_setopt( $ch, CURLOPT_CAINFO, realpath('c:/wwwroot/cacert.pem') ); 
    curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false );
    curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, 2 );

    /* Assign parameter values here */
    foreach( $payers as $payer ) {
        $api_key = '1111122222233333';
        $payer_id = $payer; 
        $provider_first_name = 'laura';
        $provider_last_name = 'brown';
        $provider_npi = '444445555';
        $member_first_name = 'billy';
        $member_last_name = 'bob';
        $dependent_ssn = '111-22-3333';
        $member_dob  = '1988-11-11';
        /* $_GET Parameters to Send */
        $params = array( 
            'api_key'               =>   $api_key,
            'payer_id'              =>   $payer_id,
            'provider_first_name'   =>   $provider_first_name,
            'provider_last_name'    =>   $provider_last_name,
            'provider_npi'          =>   $provider_npi,
            'member_first_name'     =>   $member_first_name,
            'member_last_name'      =>   $member_last_name,
            'dependent_ssn'         =>   $dependent_ssn,
            'member_dob'            =>   $member_dob
        ); 
        /* Update URL to container Query String of Paramaters */
        $url = $baseurl . '?' . http_build_query($params);
        curl_setopt( $ch, CURLOPT_URL, $url );
        $curl_response = curl_exec( $ch );
        $decoded = json_decode($curl_response, true);
        /* store all responses for later consumption */
        $data[]=$curl_response;
        /* for debug, show responses */
        echo '<pre>',json_encode( $decoded, JSON_PRETTY_PRINT ),'</pre>';
    }
  curl_close($ch);
  if( !empty( $data ) ) print_r( $data );

?>
/* output from print_r($data) */
Array
(
    [0] => {"0":{"api_key":"1111122222233333","payer_id":"00002","provider_first_name":"laura","provider_last_name":"brown","provider_npi":"444445555","member_first_name":"billy","member_last_name":"bob","dependent_ssn":"111-22-3333","member_dob":"1988-11-11","section":"curlapi"},"errors":[],"info":[]}
    [1] => {"0":{"api_key":"1111122222233333","payer_id":"00112","provider_first_name":"laura","provider_last_name":"brown","provider_npi":"444445555","member_first_name":"billy","member_last_name":"bob","dependent_ssn":"111-22-3333","member_dob":"1988-11-11","section":"curlapi"},"errors":[],"info":[]}
)
$url = 'https://testapi.com/cov/all.json';

其次

$url .= '?' . http_build_query($params);

在foreach 循环中,每次都将新参数附加到字符串中,我会这样做:

$base_url = 'https://testapi.com/cov/all.json';

其次

$url =  $base_url . '?' . http_build_query($params);
这是

错误的:

$payer_id = echo "$payer"; 
           ^^^

echo是一种语言结构。它不是一个函数,也没有返回值。它只是执行输出。如此有效地使代码运行为

$payer_id = null;

尝试

$payer_id = $payer;

相反。请注意缺乏"。如果您只是尝试将值从一个变量复制到另一个变量而不进行更改,则它们是完全不必要的。