2011-10-02 25 views
3

我想要設置快速訂閱付款處理。cURL在PHP中 - 我有2個功能,獨立工作,但當合並第二個輸出結果從第一個捲曲呼叫

我有以下文件,其中包含2個功能。第一個通過cURL調用它們的API並獲取基本的訂單信息。訂單函數返回的訂閱引用中的第二個訂單並獲取一些訂閱信息。

這兩個函數在單獨運行時都能正常工作。但是當它們一起運行時,第二個函數不起作用並正在輸出第一個cURL調用的結果?

<?php 

//order reference.. 
$OrderReference = 'QUI110930-3371-94207B'; 

//UNCOMMENT THIS IF JUST WANT TO TEST getSubscriber function on its own.. 
//$SubscriptionReference1 = 'QUI110926-3371-68125S'; 

getOrder ($OrderReference); 

getSubscription ($SubscriptionReference1); 

//test our variaables for getOrder.. 
echo '<br/>1:' . $OrderReferrer; 
echo '<br/>2:' . $beginDate; 
echo '<br/>3:' . $display; 
echo '<br/>4:' . $value; 
echo '<br/>5:' . $productDisplay; 
echo '<br/>7:' . $SubscriptionReference; 
echo '<br/><br/><br/>'; 

//test our variaables for getSubscriber 
echo '<br/>1:' . $nextPeriodDate; 
echo '<br/>2:' . $subscriptionUrlDetail; 
echo '<br/><br/><br/>'; 
print_r ($test); 

function getOrder($OrderReference) { 

    $username = 'my_username'; 
    $pass = 'my_password'; 

    //Initialize handle and set options 


    $payload = '-i -X GET -u ' . $username . ':' . $pass; 
    $requrl = 'https://api.fastspring.com/company/quizba/order/' . $OrderReference; 

    define ('XML_PAYLOAD', $payload); 
    define ('XML_POST_URL', $requrl); 

    $ch = curl_init(); 
    curl_setopt ($ch, CURLOPT_URL, XML_POST_URL); 
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt ($ch, CURLOPT_TIMEOUT, 10); 
    curl_setopt ($ch, CURLOPT_USERPWD, $username . ':' . $pass); 
    curl_setopt ($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); 
    curl_setopt ($ch, CURLOPT_HTTPHEADER, array ('Content-type: Application/xml')); 
    curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0); 
    curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0); 

    //Execute the request and also time the transaction 


    $result = curl_exec ($ch); 
    if ($result == '') { 
     $result = curl_exec ($ch); 
    } 

    //Check for errors 


    if (curl_errno ($ch)) { 
     $resultMsg = 'ERROR -> ' . curl_errno ($ch) . ': ' . curl_error ($ch); 
    } else { 
     $returnCode = (int) curl_getinfo ($ch, CURLINFO_HTTP_CODE); 
     switch ($returnCode) { 
      case 404 : 
       $resultMsg = 'ERROR -> 404 Not Found'; 
       break; 
      case 200 : 
       break; 
      default : 
       $resultMsg = 'HTTP ERROR -> ' . $returnCode; 
       break; 
     } 
    } 

    //Assign the variables.. 

    $resultArray = simplexml_load_string ($result); 
    global $OrderReferrer; 
    $OrderReferrer = $resultArray->referrer [0]; 
    global $beginDate; 
    $beginDate = $resultArray->statusChanged [0]; //needs to be modified..    
    global $display; 
    $display = $resultArray->status [0]; 
    global $productDisplay; 
    $productDisplay = $resultArray->orderItems->orderItem [0]->productDisplay [0]; 
    global $value; 
    $value = $resultArray->total [0]; 
    global $SubscriptionReference; 
    $SubscriptionReference = $resultArray->orderItems->orderItem [0]->subscriptionReference [0]; 

    //Close the handle 


    curl_close ($ch); 
} 

//get the subscription details 

function getSubscription($SubscriptionReference) { 
    $username = 'my_username'; 
    $pass = 'my_password'; 

    $payload = '-i -X GET -u ' . $username . ':' . $pass; 
    $requrl = 'https://api.fastspring.com/company/quizba/subscription/' . $SubscriptionReference; 

    define ('XML_PAYLOAD', $payload); 
    define ('XML_POST_URL', $requrl); 

    $newCh = curl_init(); 
    curl_setopt ($newCh, CURLOPT_URL, XML_POST_URL); 
    curl_setopt ($newCh, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt ($newCh, CURLOPT_TIMEOUT, 10); 
    curl_setopt ($newCh, CURLOPT_USERPWD, $username . ':' . $pass); 
    curl_setopt ($newCh, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); 
    curl_setopt ($newCh, CURLOPT_HTTPHEADER, array ('Content-type: Application/xml')); 
    curl_setopt ($newCh, CURLOPT_SSL_VERIFYHOST, 0); 
    curl_setopt ($newCh, CURLOPT_SSL_VERIFYPEER, 0); 

    //Execute the request and also time the transaction 


    $newResult = curl_exec ($newCh); 
    if ($newResult == '') { 
     $newResult = curl_exec ($newCh); 
    } 

    //Check for errors 


    if (curl_errno ($newCh)) { 
     $newResultMsg = 'ERROR -> ' . curl_errno ($newCh) . ': ' . curl_error ($newCh); 
    } else { 
     $returnCode = (int) curl_getinfo ($newCh, CURLINFO_HTTP_CODE); 

     switch ($returnCode) { 
      case 404 : 
       $newResultMsg = 'ERROR -> 404 Not Found'; 
       break; 
      case 200 : 
       break; 
      default : 
       $newResultMsg = 'HTTP ERROR -> ' . $returnCode; 
       break; 
     } 
    } 

    //Assign the variables.. 


    global $test; 
    $test = $newResult; 
    //$newResultArray = new SimpleXMLElement($newResult, NULL, FALSE); 
    $newResultArray = simplexml_load_string ($newResult); 

    global $nextPeriodDate; 
    $nextPeriodDate = $newResultArray->nextPeriodDate [0]; //needs to be modified..     
    global $subscriptionUrlDetail; 
    $subscriptionUrlDetail = $newResultArray->customerUrl [0]; 

    //Close the handle 


    curl_close ($newCh); 
} 
+0

你真的應該開始在你的函數中使用'return'。總是防止使用'globals' –

回答

3

因爲您使用define ('XML_POST_URL', $requrl);您無法使用該請求執行2個請求。

你不能用一個定義覆蓋,它會始終保持第一個值。除非你在這個腳本之外的地方使用它(並且不能使用常規變量傳輸變量),否則你不應該使用define。

define()是一個很好的功能,用於(例如)一個配置文件,在那裏你設置一個URL,你需要在很多其他地方使用。這些變量應該是常量,不應該改變。

注意:您不應該使用全局變量,而是返回數組或變量中函數的值。

+0

非常感謝您的幫助。這已經解決了這個問題。 2周的時間,我的頭靠在牆上,終於結束了! –

+1

如果您會如此友善,可否請您註冊並將其標記爲最佳答案?謝謝 –

+0

我已經標記爲接受的答案,但不幸的是我不能upvote作爲即時通訊新的網站,它說我需要15分這樣做。再次感謝你的幫助。這是一個完全的救星。 –

相關問題