簡體   English   中英

PHP在cURL API調用上循環

[英]PHP looping on cURL API call

我是一個新手程序員,這是我第一次使用PHP和cURL。 我正在進行API調用,為此我已經建立了一個cURL請求,該請求使我返回JSON對象。

我現在想做的是將cURL調用設置為循環通過$ payers數組,該數組包含多個$ payer_id,我想一次針對它們進行make和單個請求,打印出PRETTY_PRINT JSON對象,然后進行make從$ 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;

代替。 請注意缺少""如果您只是試圖將值從一個變量復制到另一個變量而不進行任何更改,則它們完全沒有必要。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM