⚝
One Hat Cyber Team
⚝
Your IP:
216.73.216.94
Server IP:
178.33.27.10
Server:
Linux cpanel.dev-unit.com 3.10.0-1160.108.1.el7.x86_64 #1 SMP Thu Jan 25 16:17:31 UTC 2024 x86_64
Server Software:
Apache/2.4.57 (Unix) OpenSSL/1.0.2k-fips
PHP Version:
8.2.11
Buat File
|
Buat Folder
Eksekusi
Dir :
~
/
home
/
id
/
hrms.dev-unit.com
/
app
/
Xendit
/
HttpClient
/
View File Name :
GuzzleClient.php
<?php /** * GuzzleClient.php * php version 7.2.0 * * @category Class * @package Xendit\HttpClient * @author Ellen <ellen@xendit.co> * @license https://opensource.org/licenses/MIT MIT License * @link https://api.xendit.co */ namespace App\Xendit\HttpClient; use GuzzleHttp\Client as Guzzle; use GuzzleHttp\Exception\RequestException; use GuzzleHttp\RequestOptions; use App\Xendit\Exceptions\ApiException; use App\Xendit\Xendit; /** * Class GuzzleClient * * @category Class * @package Xendit\HttpClient * @author Ellen <ellen@xendit.co> * @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); } }