cURL в php - у меня есть 2 функции, которые работают отдельно, но при объединении вторая выдает результаты первого вызова cURL - PullRequest
3 голосов
/ 03 октября 2011

Я пытаюсь настроить обработку платежей по подписке fasttspring.

У меня есть следующий файл, который содержит 2 функции.первый вызывает их API через cURL и получает базовую информацию о заказе.вторая часть ссылки на подписку возвращается функциями заказа и получает некоторую информацию о подписке.

ОБА эти функции работают правильно при отдельном запуске.Но при совместном запуске вторая функция НЕ работает и выводит результаты первого вызова 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 );
}

1 Ответ

3 голосов
/ 03 октября 2011

Поскольку вы используете define ( 'XML_POST_URL', $requrl );, вы не можете сделать 2 запроса, используя это.

Вы не можете перезаписать, используя определение, оно всегда будет сохранять первое значение.Если вы не используете его где-то вне этого скрипта (и не можете передать переменные с обычными переменными), вы не должны использовать define.

define() - хорошая функция для использования в (например)Конфигурационный файл, где вы устанавливаете URL, который вам нужно использовать во многих других местах.Эти переменные должны быть константами и не должны изменяться.

Примечание. Не следует использовать глобальные переменные, а возвращать значение функции в массиве или переменной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...