Как вернуть функцию в локон - PullRequest
0 голосов
/ 23 декабря 2019

Мне нужно вызвать функцию API с помощью curl, но я не получил ответа.

Вот моя функция curl:

function get_result($url=''){
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
    curl_setopt($ch, CURLOPT_TIMEOUT, 5);
    $data = curl_exec($ch);
    echo $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
    return $this->hangup_api();
}

hangup_api () - это моя функция, и онане возвращается к этой функции.

Что может быть не так? Как я могу проверить возможную ошибку?

Ответы [ 2 ]

0 голосов
/ 23 декабря 2019
  public function cancelpnr() {
        $refId = $_POST['refId'];
        if($_POST['type'] == 'cancel'){
            $url = Config::get('app.cancelpnr_api_url');
            $node = 'CancelPNR';
        }elseif($_POST['type'] == 'sync'){
            $url = Config::get('app.syncpnr_api_url');
            $node = 'PNRDetails';
        }

        $date = new DateTime();
        $booking = DB::table('booking_masters')
                  ->select('BookingId','PNR', 'Channel')->where('BookingRef', $refId)->first();
        $PNR = $booking->PNR;

        $GDS = DB::table('flight_details')
               ->where('BookingId',$booking->BookingId)->value('GDS');

        $companydata = CompanyDetails::select('CurrencyCode','CompanyCode')->first();

        $query['Request']['Master']['SessionId'] = mt_rand(10000,92232).$date->format('dHisu');
        $query['Request']['Master']['CompanyCode'] = $companydata['CompanyCode'];
        $query['Request']['Master']['CompanyCurrency'] = $companydata['CurrencyCode'];
        $query['Request']['Master']['Channel'] = 'B2B';
        $query['Request']['Flight']['RequestCriteria'][$node]['GDS'] = $GDS;
        if($_POST['type'] == 'sync'){
            $query['Request']['Flight']['RequestCriteria'][$node]['PNRType'] = "";
        }

        $query['Request']['Flight']['RequestCriteria'][$node]['GDSPNR'] = $PNR;

        Log::info($node.'Request (RefId:'.$refId.') : '.json_encode($query));
        $curl = curl_init();
        curl_setopt_array($curl, array(
            CURLOPT_URL => $url,
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_ENCODING => "",
            CURLOPT_MAXREDIRS => 10,
            CURLOPT_TIMEOUT => 50000,
            CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
            CURLOPT_CUSTOMREQUEST => "POST",
            CURLOPT_POSTFIELDS => json_encode($query),
            CURLOPT_HTTPHEADER => array(
                // Set here required headers
                "accept: application/json",
                "content-type: application/json",
            ),
        ));

        $pnr_response = curl_exec($curl);
        Log::info($node.' Response (RefId:'.$refId.') : '.$pnr_response);
        $err = curl_error($curl);
        curl_close($curl);
        $resp = json_decode($pnr_response, true);
        if($_POST['type'] == 'cancel'){
            if(!empty($resp['Response']['Flight']['CancelPNR'])){
                if($resp['Response']['Flight']['CancelPNR']['Status'] == 'CL'){
                    DB::select('CALL MLSP_ManageBookingHistory(?,?,?,?,?,?)', array(
                        $booking->BookingId,
                        "Cancelled PNR against booking ID: ".$booking->BookingId." and created by Staff with Staff ID: ".session('user_id'),
                        "CL_PNR",
                        session('user_id'),
                        Helper::ip(),
                        $booking->Channel
                    ));
                    $this->mailSendConfimation($booking->BookingId);
                    return $resp['Response']['Flight']['CancelPNR']['Desc'];
                }else{
                    return "There was some problem in cancelling the PNR, please try again later!!";    
                }

            }else{
                return "There was some problem in cancelling the PNR, please try again later!!";
            }
        }elseif($_POST['type'] == 'sync'){
           //code here for sync//
        }
    }
0 голосов
/ 23 декабря 2019

если вам нужен ответ curl, который вы можете получить без использования функции hangup_api

function get_result($url=''){
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
    curl_setopt($ch, CURLOPT_TIMEOUT, 5);
    $data = curl_exec($ch);
    curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
    return $data;
}

Но если вам нужно сначала обработать ответ curl с помощью функции hangup_api, то вам нужно сохранить ответ в свойстве переменной, затемиспользуйте его в функции

function get_result($url=''){
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
    curl_setopt($ch, CURLOPT_TIMEOUT, 5);
    $this->data = curl_exec($ch);
    curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
    return $this->hangup_api();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...