2016-02-04 115 views
0

我是一個新手編碼器,這是我第一次使用PHP和cURL。我正在進行一個API調用,爲此我已經設置了一個cURL請求,讓我返回一個JSON對象。PHP循環cURL API調用

我現在要做的是設置cURL調用來循環$ payers數組,這個$ payers數組包含多個$ payer_id,我希望一次創建和個別請求,打印出一個PRETTY_PRINT JSON對象並從$ payers數組中創建下一個$ payer_id的下一個請求。

這是我設置的代碼,顯然是爲了安全目的info和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>'; 
    } 
?> 
+0

這裏有個錯誤'$ payer_id = echo「$ payer」; ' – RamRaider

+0

沒有必要做'echo'$ payer「'。 '$ payer'就足夠了。 此外,您可以使用'compact('api_key','payer_id',...)'而不是分配相同的名稱鍵/值對。 您應該確保爲API請求設置正確的上下文(無論是POST,GET,PUT [,DELETE,..])。 – Gearloose

+0

謝謝你們[email protected]我在你的帖子下面做了你的建議,現在它訪問數組,但它只返回第一個$ payer_id的第一個JSON。還有什麼可以讓它循環到數組中的下一個payer_id?或者你認爲它是一個很大的JSON對象是有限的嗎? – DanB

回答

1

正如我在上面的評論中指出的那樣,在聲明變量$payer時出現了一個小錯誤 - 回聲有問題。

此外,我認爲你應該能夠重複使用curl句柄爲數組中的各種付款人 - 在循環外聲明並在每次迭代中爲參數指定新的url。

[download cacert.pem from curl.haxx.se]

<?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":[]} 
) 
+0

謝謝@RamRaider我在你的帖子下面建議了你的建議,現在它可以訪問數組,但它只返回第一個$ payer_id的第一個JSON。還有什麼可以讓它循環到數組中的下一個payer_id?或者你認爲它是一個很大的JSON對象是有限的嗎? ......其實我只是檢查了API,它正在處理這兩個調用,但只有第一個正在打印出來。您如何認爲可以打印出兩個JSON對象? – DanB

0
$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); 
+0

謝謝@ Raz0rwire我在你的帖子下面做了你的建議,現在它訪問數組,但它只返回第一個$ payer_id的第一個JSON。還有什麼可以讓它循環到數組中的下一個payer_id?或者你認爲它是一個很大的JSON對象是有限的嗎? – DanB

0

這是錯誤的:

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

echo是一個語言結構。它不是一個函數,並且沒有返回值。它只是執行輸出。因此,有效的代碼運行的

$payer_id = null; 

嘗試

$payer_id = $payer; 

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