| Server IP : 54.36.91.62 / Your IP : 216.73.217.112 Web Server : Apache System : Linux webm013.cluster127.gra.hosting.ovh.net 5.15.206-ovh-vps-grsec-zfs-classid #1 SMP Fri May 15 02:41:25 UTC 2026 x86_64 User : coopiak ( 151928) PHP Version : 8.3.23 Disable Function : _dyuweyrj4,_dyuweyrj4r,dl MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /home/coopiak/dansnotreville-fr/plugins/hikashoppayment/payplug2/lib/Payplug/Core/ |
Upload File : |
<?php
namespace Payplug\Core;
use Payplug;
class HttpClient
{
public static $CACERT_PATH;
public static $REQUEST_HANDLER = null;
private static $defaultUserAgentProducts = array();
private $_configuration;
public function __construct(Payplug\Payplug $authentication = null)
{
$this->_configuration = $authentication;
}
public function post($resource, $data = null, $authenticated = true)
{
return $this->request('POST', $resource, $data, $authenticated);
}
public function patch($resource, $data = null)
{
return $this->request('PATCH', $resource, $data);
}
public function delete($resource, $data = null)
{
return $this->request('DELETE', $resource, $data);
}
public function get($resource, $data = null)
{
return $this->request('GET', $resource, $data);
}
public function testRemote() {
return $this->request('GET', APIRoutes::getTestRoute(), null, false);
}
public static function addDefaultUserAgentProduct($product, $version = null, $comment = null)
{
self::$defaultUserAgentProducts[] = array($product, $version, $comment);
}
private static function formatUserAgentProduct($product, $version = null, $comment = null)
{
$productString = $product;
if ($version) {
$productString .= '/' . $version;
}
if ($comment) {
$productString .= ' (' . $comment . ')';
}
return $productString;
}
public static function getUserAgent()
{
$curlVersion = curl_version(); // Do not move this inside $headers even if it is used only there.
$userAgent = self::formatUserAgentProduct('PayPlug-PHP',
Payplug\Core\Config::LIBRARY_VERSION,
sprintf('PHP/%s; curl/%s', phpversion(), $curlVersion['version']));
foreach (self::$defaultUserAgentProducts as $product) {
$userAgent .= ' ' . self::formatUserAgentProduct($product[0], $product[1], $product[2]);
}
return $userAgent;
}
public function getVersion()
{
return Payplug\Core\Config::API_VERSION;
}
private function request($httpVerb, $resource, array $data = null, $authenticated = true)
{
if (self::$REQUEST_HANDLER === null) {
$request = new CurlRequest();
}
else {
$request = self::$REQUEST_HANDLER;
}
$userAgent = self::getUserAgent();
$headers = array(
'Accept: application/json',
'Content-Type: application/json',
'User-Agent: ' . $userAgent
);
if ($authenticated) {
$headers[] = 'Authorization: Bearer ' . $this->_configuration->getToken();
}
$headers[] = 'PayPlug-Version: ' . $this->getVersion();
$request->setopt(CURLOPT_FAILONERROR, false);
$request->setopt(CURLOPT_RETURNTRANSFER, true);
$request->setopt(CURLOPT_CUSTOMREQUEST, $httpVerb);
$request->setopt(CURLOPT_URL, $resource);
$request->setopt(CURLOPT_HTTPHEADER, $headers);
$request->setopt(CURLOPT_SSL_VERIFYPEER, true);
$request->setopt(CURLOPT_SSL_VERIFYHOST, 2);
$request->setopt(CURLOPT_CAINFO, self::$CACERT_PATH);
if (!empty($data)) {
$request->setopt(CURLOPT_POSTFIELDS, json_encode($data));
}
$result = array(
'httpResponse' => $request->exec(),
'httpStatus' => $request->getInfo(CURLINFO_HTTP_CODE)
);
$errorCode = $request->errno();
$errorMessage = $request->error();
$request->close();
$curlStatusNotManage = array(
0, // CURLE_OK
22 // CURLE_HTTP_NOT_FOUND or CURLE_HTTP_RETURNED_ERROR
);
if (in_array($errorCode, $curlStatusNotManage) && substr($result['httpStatus'], 0, 1) !== '2') {
$this->throwRequestException($result['httpResponse'], $result['httpStatus']);
} // If there was an error with curl
elseif ($result['httpResponse'] === false || $errorCode) {
$this->throwConnectionException($result['httpStatus'], $errorMessage);
}
$result['httpResponse'] = json_decode($result['httpResponse'], true);
if ($result['httpResponse'] === null) {
throw new Payplug\Exception\UnexpectedAPIResponseException('API response is not valid JSON.', $result['httpResponse']);
}
return $result;
}
private function throwConnectionException($errorCode, $errorMessage)
{
throw new Payplug\Exception\ConnectionException(
'Connection to the API failed with the following message: ' . $errorMessage, $errorCode
);
}
private function throwRequestException($httpResponse, $httpStatus)
{
$exception = null;
if (substr($httpStatus, 0, 1) === '5') {
throw new Payplug\Exception\PayplugServerException('Unexpected server error during the request.',
$httpResponse, $httpStatus
);
}
switch ($httpStatus) {
case 400:
throw new Payplug\Exception\BadRequestException('Bad request.', $httpResponse, $httpStatus);
break;
case 401:
throw new Payplug\Exception\UnauthorizedException('Unauthorized. Please check your credentials.',
$httpResponse, $httpStatus);
break;
case 403:
throw new Payplug\Exception\ForbiddenException('Forbidden error. You are not allowed to access this resource.',
$httpResponse, $httpStatus);
break;
case 404:
throw new Payplug\Exception\NotFoundException('The resource you requested could not be found.',
$httpResponse, $httpStatus);
break;
case 405:
throw new Payplug\Exception\NotAllowedException('The requested method is not supported by this resource.',
$httpResponse, $httpStatus);
break;
}
throw new Payplug\Exception\HttpException('Unhandled HTTP error.', $httpResponse, $httpStatus);
}
}
HttpClient::$CACERT_PATH = realpath(__DIR__ . str_replace('/', DIRECTORY_SEPARATOR, '/../../certs/cacert.pem'));