![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/job-board.corals.io/vendor/xendit/xendit-php/src/HttpClient/ |
<?php /** * GuzzleClient.php * php version 7.2.0 * * @category Class * @package Xendit\HttpClient * @author Ellen <[email protected]> * @license https://opensource.org/licenses/MIT MIT License * @link https://api.xendit.co */ namespace Xendit\HttpClient; use GuzzleHttp\Client as Guzzle; use GuzzleHttp\Exception\RequestException; use GuzzleHttp\RequestOptions; use Xendit\Exceptions\ApiException; use Xendit\Xendit; /** * Class GuzzleClient * * @category Class * @package Xendit\HttpClient * @author Ellen <[email protected]> * @license https://opensource.org/licenses/MIT MIT License * @link https://api.xendit.co */ class GuzzleClient implements ClientInterface { private static $_instance; protected $http; /** * XenditClient constructor */ public function __construct() { if (Xendit::getHttpClient()) { $this->http = Xendit::getHttpClient(); } else { $baseUri = strval(Xendit::$apiBase); $this->http = new Guzzle( [ 'base_uri' => $baseUri, 'verify' => false, 'timeout' => 60 ] ); } } /** * Create Client instance * * @return GuzzleClient */ public static function instance() { if (!self::$_instance) { self::$_instance = new self(); } return self::$_instance; } /** * Create a request to execute in _executeRequest * * @param string $method request method * @param string $url url * @param array $defaultHeaders request headers * @param array $params parameters * * @return array * @throws ApiException */ public function sendRequest($method, string $url, array $defaultHeaders, $params) { $method = strtoupper($method); $opts = []; $opts['method'] = $method; $opts['headers'] = $defaultHeaders; $opts['params'] = $params; $response = $this->_executeRequest($opts, $url); $rbody = $response[0]; $rcode = $response[1]; $rheader = $response[2]; return [$rbody, $rcode, $rheader]; } /** * Execute request * * @param array $opts request options (headers, params) * @param string $url request url * * @return array * @throws ApiException */ private function _executeRequest(array $opts, string $url) { $headers = $opts['headers']; $params = $opts['params']; $apiKey = Xendit::$apiKey; $url = strval($url); try { if (count($params) > 0) { $isQueryParam = isset($params['query-param']) && $params['query-param'] === 'true'; // additional condition to check if the requestor is imposing query param, otherwise default json if($isQueryParam) unset($params['query-param']); $response = $this->http->request( $opts['method'], $url, [ 'auth' => [$apiKey, ''], 'headers' => $headers, $isQueryParam ? RequestOptions::QUERY : RequestOptions::JSON => $params ] ); } else { $response = $this->http->request( $opts['method'], $url, [ 'auth' => [$apiKey, ''], 'headers' => $headers ] ); } } catch (RequestException $e) { $response = $e->getResponse(); $rbody = json_decode($response->getBody()->getContents(), true); $rcode = $response->getStatusCode(); $rheader = $response->getHeaders(); self::_handleAPIError( array('body' => $rbody, 'code' => $rcode, 'header' => $rheader) ); } $rbody = $response->getBody(); $rcode = (int) $response->getStatusCode(); $rheader = $response->getHeaders(); return [$rbody, $rcode, $rheader]; } /** * Handles API Error * * @param array $response response from GuzzleClient * * @return void * @throws ApiException */ private static function _handleAPIError($response) { $rbody = $response['body']; $rhttp = strval($response['code']); $message = $rbody['message']; $rcode = $rbody['error_code']; throw new ApiException($message, $rhttp, $rcode); } }