2011-10-02 4 views
3

나는 fastspring 구독 결제 처리 설정하려고합니다.PHP에서 cURL - 내가 seperatly 작동하지만 두 번째 결합 된 두 번째 함수는 첫 번째 호출에서 결과를 출력합니다

나는 2 개의 기능을 포함하는 다음 파일을 가지고 있습니다. 첫 번째 API는 cURL을 통해 API를 호출하고 기본 주문 정보를 가져옵니다. 두 번째 함수는 order 함수에 의해 반환 된 subscription reference를 열거하고 subscription 정보를 얻습니다.

이 두 기능은 모두 별도로 실행하면 올바르게 작동합니다. 하지만 함께 실행하면 두 번째 함수가 작동하지 않고 첫 번째 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'을 사용해야합니다. 항상 전역 변수 사용을 막으십시오. –

답변

3

define ('XML_POST_URL', $requrl);을 (를) 사용했기 때문에 2 개의 요청을 할 수 없습니다.

정의를 사용하여 덮어 쓸 수 없으며 항상 첫 번째 값을 유지합니다. 이 스크립트의 어딘가에서 사용하지 않는 한 (그리고 일반 변수로 변수를 전송할 수없는 경우) define을 사용하지 않아야합니다.

define()은 많은 다른 장소에서 사용해야하는 URL을 설정 파일 (예 : 구성 파일)에 사용하기에 좋은 기능입니다. 이러한 변수는 상수이어야하며 변경해서는 안됩니다.

참고 : 전역 변수를 사용하면 안되며 배열이나 변수에 함수 값을 반환해야합니다.

+0

도움을 주셔서 대단히 감사합니다. 문제가 해결되었습니다. 벽에 머리를 두들 기는 2 주간이 마침내 끝났다 !! –

+1

친절한 분이라면 최선의 답변으로 upvote & mark하시기 바랍니다. 감사합니다 –

+0

나는 받아 들여진 대답으로 표시했다 그러나 unfortunatly 나는 위치에 새로운 IM으로 upvote를 기울이고 그것을하기 위하여 15 점이 필요하다는 것을 말했다. 도와 줘서 고마워. 그것은 완전히 생명의 은인이었습니다. –

관련 문제