|
Server : Apache/2.4.18 (Ubuntu) System : Linux canvaswebdesign 3.13.0-71-generic #114-Ubuntu SMP Tue Dec 1 02:34:22 UTC 2015 x86_64 User : oppastar ( 1041) PHP Version : 7.0.33-0ubuntu0.16.04.15 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority, Directory : /var/www/mesinpolesshinemate.com/application/third_party/Veritrans/ |
Upload File : |
<?php
/**
* Send request to Veritrans API
* Better don't use this class directly, use Veritrans_VtWeb, Veritrans_VtDirect, Veritrans_Transaction
*/
class Veritrans_ApiRequestor {
/**
* Send GET request
* @param string $url
* @param string $server_key
* @param mixed[] $data_hash
*/
public static function get($url, $server_key, $data_hash)
{
return self::remoteCall($url, $server_key, $data_hash, false);
}
/**
* Send POST request
* @param string $url
* @param string $server_key
* @param mixed[] $data_hash
*/
public static function post($url, $server_key, $data_hash)
{
return self::remoteCall($url, $server_key, $data_hash, true);
}
/**
* Actually send request to API server
* @param string $url
* @param string $server_key
* @param mixed[] $data_hash
* @param bool $post
*/
public static function remoteCall($url, $server_key, $data_hash, $post = true)
{
$ch = curl_init();
$curl_options = array(
CURLOPT_URL => $url,
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'Accept: application/json',
'Authorization: Basic ' . base64_encode($server_key . ':')
),
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_CAINFO => dirname(__FILE__) . "/../data/cacert.pem"
);
// merging with Veritrans_Config::$curlOptions
if (count(Veritrans_Config::$curlOptions)) {
// We need to combine headers manually, because it's array and it will no be merged
if (Veritrans_Config::$curlOptions[CURLOPT_HTTPHEADER]) {
$mergedHeders = array_merge($curl_options[CURLOPT_HTTPHEADER], Veritrans_Config::$curlOptions[CURLOPT_HTTPHEADER]);
$headerOptions = array( CURLOPT_HTTPHEADER => $mergedHeders );
} else {
$mergedHeders = array();
}
$curl_options = array_replace_recursive($curl_options, Veritrans_Config::$curlOptions, $headerOptions);
}
if ($post) {
$curl_options[CURLOPT_POST] = 1;
if ($data_hash) {
$body = json_encode($data_hash);
$curl_options[CURLOPT_POSTFIELDS] = $body;
} else {
$curl_options[CURLOPT_POSTFIELDS] = '';
}
}
curl_setopt_array($ch, $curl_options);
// For testing purpose
if (class_exists('VT_Tests') && VT_Tests::$stubHttp) {
$result = self::processStubed($curl_options, $url, $server_key, $data_hash, $post);
} else {
$result = curl_exec($ch);
// curl_close($ch);
}
if ($result === FALSE) {
throw new Exception('CURL Error: ' . curl_error($ch), curl_errno($ch));
}
else {
$result_array = json_decode($result);
if (!in_array($result_array->status_code, array(200, 201, 202, 407))) {
$message = 'Veritrans Error (' . $result_array->status_code . '): '
. $result_array->status_message;
throw new Exception($message, $result_array->status_code);
}
else {
return $result_array;
}
}
}
private static function processStubed($curl, $url, $server_key, $data_hash, $post) {
VT_Tests::$lastHttpRequest = array(
"url" => $url,
"server_key" => $server_key,
"data_hash" => $data_hash,
"post" => $post,
"curl" => $curl
);
return VT_Tests::$stubHttpResponse;
}
}