110 lines
3.2 KiB
PHP
110 lines
3.2 KiB
PHP
<?php
|
|
/**
|
|
* OpenPayU Standard Library
|
|
*
|
|
* @copyright Copyright (c) 2011-2016 PayU
|
|
* @license http://opensource.org/licenses/LGPL-3.0 Open Software License (LGPL 3.0)
|
|
* http://www.payu.com
|
|
* http://developers.payu.com
|
|
*/
|
|
|
|
class OpenPayU_HttpCurl
|
|
{
|
|
/**
|
|
* @var
|
|
*/
|
|
static $headers;
|
|
|
|
/**
|
|
* @param $requestType
|
|
* @param $pathUrl
|
|
* @param $data
|
|
* @param AuthType $auth
|
|
* @return array
|
|
* @throws OpenPayU_Exception_Configuration
|
|
* @throws OpenPayU_Exception_Network
|
|
*/
|
|
public static function doPayuRequest($requestType, $pathUrl, $auth, $data = null)
|
|
{
|
|
if (empty($pathUrl)) {
|
|
throw new OpenPayU_Exception_Configuration('The endpoint is empty');
|
|
}
|
|
|
|
$ch = curl_init($pathUrl);
|
|
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $requestType);
|
|
curl_setopt($ch, CURLOPT_ENCODING, 'gzip');
|
|
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
|
|
curl_setopt($ch, CURLOPT_HEADER, false);
|
|
curl_setopt($ch, CURLOPT_HTTPHEADER, $auth->getHeaders());
|
|
curl_setopt($ch, CURLOPT_HEADERFUNCTION, 'OpenPayU_HttpCurl::readHeader');
|
|
if ($data) {
|
|
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
|
|
}
|
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
|
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
|
|
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
|
|
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
|
|
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
|
|
|
|
if ($proxy = self::getProxy()) {
|
|
curl_setopt($ch, CURLOPT_PROXY, $proxy);
|
|
if ($proxyAuth = self::getProxyAuth()) {
|
|
curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxyAuth);
|
|
}
|
|
}
|
|
|
|
$response = curl_exec($ch);
|
|
$httpStatus = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
|
|
|
if($response === false) {
|
|
throw new OpenPayU_Exception_Network(curl_error($ch));
|
|
}
|
|
curl_close($ch);
|
|
|
|
return array('code' => $httpStatus, 'response' => trim($response));
|
|
}
|
|
|
|
/**
|
|
* @param array $headers
|
|
*
|
|
* @return mixed
|
|
*/
|
|
public static function getSignature($headers)
|
|
{
|
|
foreach($headers as $name => $value)
|
|
{
|
|
if(preg_match('/X-OpenPayU-Signature/i', $name) || preg_match('/OpenPayu-Signature/i', $name))
|
|
return $value;
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
/**
|
|
* @param resource $ch
|
|
* @param string $header
|
|
* @return int
|
|
*/
|
|
public static function readHeader($ch, $header)
|
|
{
|
|
if( preg_match('/([^:]+): (.+)/m', $header, $match) ) {
|
|
self::$headers[$match[1]] = trim($match[2]);
|
|
}
|
|
|
|
return strlen($header);
|
|
}
|
|
|
|
private static function getProxy()
|
|
{
|
|
return OpenPayU_Configuration::getProxyHost() != null ? OpenPayU_Configuration::getProxyHost()
|
|
. (OpenPayU_Configuration::getProxyPort() ? ':' . OpenPayU_Configuration::getProxyPort() : '') : false;
|
|
}
|
|
|
|
private static function getProxyAuth()
|
|
{
|
|
return OpenPayU_Configuration::getProxyUser() != null ? OpenPayU_Configuration::getProxyUser()
|
|
. (OpenPayU_Configuration::getProxyPassword() ? ':' . OpenPayU_Configuration::getProxyPassword() : '') : false;
|
|
}
|
|
|
|
}
|