santosh limbu thebe
santosh limbu thebe

Reputation: 59

How to use guzzle in Laravel Project

I'm planning to use Guzzle to communicate with my XML web service. I am able to communicate with my XML web service using core PHP 5.6. I want to do this within my Laravel App using Guzzle to communicate with XML web service.

My xml config code is as follows:

$requestXmlBody  ='';
$requestXmlBody  = '<?xml version="1.0" encoding="UTF-8"?>';
$requestXmlBody = $requestXmlBody.'<FAB_PkgAvailRQ Target="test" Version="2002A" xmlns="https://localhost.com/find">';
$requestXmlBody = $requestXmlBody.'<SyndicatorInfo SyndicatorId="******" SyndicatorPassword="*****"/>';
$requestXmlBody = $requestXmlBody.'<SessionInfo CreateNewSession="true"/>';
$requestXmlBody = $requestXmlBody.'<HolidaySearchRequest ResponseTimeoutSecs="60" ExcludeNonBookableSuppliers="true">';
$requestXmlBody = $requestXmlBody.'<SearchCriteria FlightOnly="true" OneWayOnly="'.$journey_type.'" NumberOfAdults="'.$adults.'" NumberOfChildren="'.$children.'" NumberOfInfants="'.$infants.'">';
    
$requestXmlBody = $requestXmlBody.'<DepartureDateRange StartDate="'.$from.'" EndDate="'.$from.'"/>';
$requestXmlBody = $requestXmlBody.'<DepartureAirports><Airport>'.$origin.'</Airport></DepartureAirports>';
$requestXmlBody = $requestXmlBody.'<DestinationChoice><DestinationAirports><Airport>'.$destination.'</Airport></DestinationAirports></DestinationChoice>';
$requestXmlBody = $requestXmlBody.'<FlightPreferences/>';
    
$requestXmlBody = $requestXmlBody.'<HolidayDuration MinNumberOfNights="'.$ddays.'" MaxNumberOfNights="'.$ddays.'"/>';
$requestXmlBody = $requestXmlBody.'</SearchCriteria>';
// $requestXmlBody = $requestXmlBody.'<ResultSetPreferences MaxItems="'.$numberofsearch.'" SortCode="cost" SortAscending="true"/>';
// $requestXmlBody = $requestXmlBody.'<InitialViewInfo Length="'.$numberofsearch.'" Offset="0"/>';
$requestXmlBody = $requestXmlBody.'</HolidaySearchRequest>';
$requestXmlBody = $requestXmlBody.'</FAB_PkgAvailRQ>';
            
    
//My curl code is as follows
    
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"http://localhost.com/23");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $requestXmlBody);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, false);
    
$result = curl_exec($ch);
            
curl_close($ch);
$result1 = simplexml_load_string($result);
dd($result1);

I want to send a POST request using Guzzle to above xml configuration to my xml web service such as paxport/multicom. Any Idea How I can proceed?

Upvotes: 2

Views: 16791

Answers (2)

Krishnamoorthy Acharya
Krishnamoorthy Acharya

Reputation: 4244

Hi Please find the answer here

add it to composer file

"guzzlehttp/guzzle": "^6.2",

controller file

<?php 

/** add it at top **/
use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;
use Guzzle\Http\Exception\ClientErrorResponseException;
use GuzzleHttp\Exception\ServerException;
use GuzzleHttp\Exception\BadResponseException;
/*** end ***/
use App\Http\Controllers\Controller as Controller;

class ApiController extends Controller {

    function __construct() {
        $this->client = new \GuzzleHttp\Client();
    }

    public function stockBatch($id) {
        
        $apiKey = 'xyx';
        $url = 'https://www.alphavantage.co/query?function=BATCH_STOCK_QUOTES&symbols=QQQ,AAPL&apikey=' . $apiKey;
        $response = $this->client->get($url);
        $results = $response->getBody();
        $results = json_decode($results);
        return response()->json($results);
    }
}

Upvotes: 2

Alexey Shokov
Alexey Shokov

Reputation: 5010

It's simple.

use GuzzleHttp\Client;

$client = new Client();
$response = $client->post('http://localhost.com/23', ['body' => $requestXmlBody]);

$result = $response->getBody()->getContents();

$result1 = simplexml_load_string($result);

Upvotes: 4

Related Questions