459 lines
11 KiB
PHP
459 lines
11 KiB
PHP
|
<?php
|
||
|
|
||
|
/**
|
||
|
* Class PaymentServicesClientAPI
|
||
|
*/
|
||
|
class PaymentServicesClientAPI {
|
||
|
protected $url = 'https://paymentservices.timetrex.com/api/soap/api.php';
|
||
|
|
||
|
protected $user_name = null;
|
||
|
protected $password = null;
|
||
|
|
||
|
protected $cookies = [];
|
||
|
|
||
|
//protected $session_id = NULL;
|
||
|
//protected $session_hash = NULL; //Used to determine if we need to login again because the URL or Session changed.
|
||
|
protected $class_factory = null;
|
||
|
protected $namespace = 'urn:api';
|
||
|
protected $protocol_version = 1;
|
||
|
|
||
|
protected $soap_obj = null; //Persistent SOAP object.
|
||
|
|
||
|
/**
|
||
|
* PaymentServicesClientAPI constructor.
|
||
|
* @param null $class
|
||
|
* @param null $user_name
|
||
|
* @param null $password
|
||
|
* @param null $url
|
||
|
* @param null $cookies
|
||
|
*/
|
||
|
function __construct( $class = null, $user_name = null, $password = null, $url = null, $cookies = null ) {
|
||
|
global $PAYMENTSERVICES_URL, $PAYMENTSERVICES_COOKIES, $PAYMENTSERVICES_USER, $PAYMENTSERVICES_PASSWORD;
|
||
|
|
||
|
ini_set( 'default_socket_timeout', 3600 );
|
||
|
|
||
|
if ( $url == '' ) {
|
||
|
$url = $PAYMENTSERVICES_URL;
|
||
|
}
|
||
|
|
||
|
if ( $cookies == '' && ( isset( $PAYMENTSERVICES_COOKIES ) && is_array( $PAYMENTSERVICES_COOKIES ) ) ) {
|
||
|
$cookies = $PAYMENTSERVICES_COOKIES;
|
||
|
}
|
||
|
|
||
|
if ( $url == '' ) {
|
||
|
$url = $PAYMENTSERVICES_URL;
|
||
|
}
|
||
|
|
||
|
if ( $user_name == '' ) {
|
||
|
$user_name = $PAYMENTSERVICES_USER;
|
||
|
}
|
||
|
|
||
|
if ( $password == '' ) {
|
||
|
$password = $PAYMENTSERVICES_PASSWORD;
|
||
|
}
|
||
|
|
||
|
$this->setCookies( $cookies );
|
||
|
$this->setUsername( $user_name );
|
||
|
$this->setPassword( $password );
|
||
|
$this->setURL( $url );
|
||
|
$this->setClass( $class );
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return SoapClient
|
||
|
*/
|
||
|
function getSoapClientObject() {
|
||
|
$url_pieces[] = 'Class=' . $this->class_factory;
|
||
|
|
||
|
if ( strpos( $this->url, '?' ) === false ) {
|
||
|
$url_separator = '?';
|
||
|
} else {
|
||
|
$url_separator = '&';
|
||
|
}
|
||
|
|
||
|
$url = $this->url . $url_separator . 'v=' . $this->protocol_version . '&' . implode( '&', $url_pieces );
|
||
|
|
||
|
//Try to maintain existing SOAP object as there could be cookies associated with it.
|
||
|
if ( !is_object( $this->soap_obj ) ) {
|
||
|
if ( PRODUCTION == false ) {
|
||
|
//Allow self-signed certificates to be accepted when not in production mode.
|
||
|
$stream_context_options = [
|
||
|
'ssl' => [
|
||
|
// set some SSL/TLS specific options
|
||
|
'verify_peer' => false,
|
||
|
'verify_peer_name' => false,
|
||
|
'allow_self_signed' => true,
|
||
|
],
|
||
|
];
|
||
|
} else {
|
||
|
$stream_context_options = [];
|
||
|
}
|
||
|
$steam_context = stream_context_create( $stream_context_options );
|
||
|
|
||
|
$retval = new SoapClient( null, [
|
||
|
'stream_context' => $steam_context,
|
||
|
'location' => $url,
|
||
|
'uri' => $this->namespace,
|
||
|
'encoding' => 'UTF-8',
|
||
|
'style' => SOAP_RPC,
|
||
|
'use' => SOAP_ENCODED,
|
||
|
'login' => $this->user_name, //Username
|
||
|
'password' => $this->password, //API Key
|
||
|
'connection_timeout' => 120,
|
||
|
'request_timeout' => 7200,
|
||
|
'compression' => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP,
|
||
|
'trace' => 1,
|
||
|
'exceptions' => 0,
|
||
|
]
|
||
|
);
|
||
|
|
||
|
if ( is_array( $this->cookies ) ) {
|
||
|
foreach ( $this->cookies as $key => $value ) {
|
||
|
$retval->__setCookie( $key, $value );
|
||
|
}
|
||
|
}
|
||
|
} else {
|
||
|
$retval = $this->soap_obj;
|
||
|
$retval->__setLocation( $url );
|
||
|
}
|
||
|
|
||
|
return $retval;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param $user_name
|
||
|
* @return bool
|
||
|
*/
|
||
|
function setUserName( $user_name ) {
|
||
|
if ( $user_name != '' ) {
|
||
|
$this->user_name = $user_name;
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param $password
|
||
|
* @return bool
|
||
|
*/
|
||
|
function setPassword( $password ) {
|
||
|
if ( $password != '' ) {
|
||
|
$this->password = $password;
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param $cookies
|
||
|
* @return bool
|
||
|
*/
|
||
|
function setCookies( $cookies ) {
|
||
|
if ( is_array( $cookies ) ) {
|
||
|
$this->cookies = $cookies;
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param $url
|
||
|
* @return bool
|
||
|
*/
|
||
|
function setURL( $url ) {
|
||
|
if ( $url != '' ) {
|
||
|
$this->url = $url;
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param $value
|
||
|
* @return bool
|
||
|
*/
|
||
|
function setClass( $value ) {
|
||
|
$this->class_factory = trim( $value );
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param $result
|
||
|
* @return mixed
|
||
|
*/
|
||
|
function isFault( $result ) {
|
||
|
return $this->getSoapClientObject()->is_soap_fault( $result );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param $function_name
|
||
|
* @param array $args
|
||
|
* @return bool|PaymentServicesClientAPIReturnHandler
|
||
|
*/
|
||
|
function __call( $function_name, $args = [] ) {
|
||
|
if ( is_object( $this->getSoapClientObject() ) ) {
|
||
|
$retval = call_user_func_array( [ $this->getSoapClientObject(), $function_name ], $args );
|
||
|
|
||
|
if ( is_soap_fault( $retval ) ) {
|
||
|
//trigger_error( 'SOAP Fault: (Code: ' . $retval->faultcode . ', String: ' . $retval->faultstring . ') - Request: ' . $this->getSoapClientObject()->__getLastRequest() . ' Response: ' . $this->getSoapClientObject()->__getLastResponse(), E_USER_NOTICE );
|
||
|
//Debug::Arr( array('last_request' => $this->getSoapClientObject()->__getLastRequest(), 'last_response' => $this->getSoapClientObject()->__getLastResponse()), 'SOAP Fault: '. $retval->faultstring .' Code: '. $retval->faultcode, __FILE__, __LINE__, __METHOD__, 10);
|
||
|
throw new Exception( 'SOAP Fault: ' . $retval->faultstring . ' (Code: ' . $retval->faultcode . ')', (int)$retval->faultcode );
|
||
|
|
||
|
//return false;
|
||
|
}
|
||
|
|
||
|
return new PaymentServicesClientAPIReturnHandler( $function_name, $args, $retval );
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @package API\PaymentServicesClientAPI
|
||
|
*/
|
||
|
class PaymentServicesClientAPIReturnHandler {
|
||
|
/*
|
||
|
'api_retval' => $retval,
|
||
|
'api_details' => array(
|
||
|
'code' => $code,
|
||
|
'description' => $description,
|
||
|
'record_details' => array(
|
||
|
'total' => $validator_stats['total_records'],
|
||
|
'valid' => $validator_stats['valid_records'],
|
||
|
'invalid' => ($validator_stats['total_records']-$validator_stats['valid_records'])
|
||
|
),
|
||
|
'details' => $details,
|
||
|
)
|
||
|
*/
|
||
|
protected $function_name = null;
|
||
|
protected $args = null;
|
||
|
protected $result_data = false;
|
||
|
|
||
|
/**
|
||
|
* PaymentServicesClientAPIReturnHandler constructor.
|
||
|
* @param $function_name
|
||
|
* @param $args
|
||
|
* @param $result_data
|
||
|
*/
|
||
|
function __construct( $function_name, $args, $result_data ) {
|
||
|
$this->function_name = $function_name;
|
||
|
$this->args = $args;
|
||
|
$this->result_data = $result_data;
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return bool
|
||
|
*/
|
||
|
function getResultData() {
|
||
|
return $this->result_data;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return null
|
||
|
*/
|
||
|
function getFunction() {
|
||
|
return $this->function_name;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return null
|
||
|
*/
|
||
|
function getArgs() {
|
||
|
return $this->args;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return string
|
||
|
*/
|
||
|
function __toString() {
|
||
|
$eol = "<br>\n";
|
||
|
|
||
|
$output = [];
|
||
|
$output[] = '=====================================';
|
||
|
$output[] = 'Function: ' . $this->getFunction() . '()';
|
||
|
if ( is_object( $this->getArgs() ) || is_array( $this->getArgs() ) ) {
|
||
|
$output[] = 'Args: ' . count( $this->getArgs() );
|
||
|
} else {
|
||
|
$output[] = 'Args: ' . $this->getArgs();
|
||
|
}
|
||
|
$output[] = '-------------------------------------';
|
||
|
$output[] = 'Returned:';
|
||
|
$output[] = ( $this->isValid() === true ) ? 'IsValid: YES' : 'IsValid: NO';
|
||
|
if ( $this->isValid() === true ) {
|
||
|
$output[] = 'Return Value: ' . $this->getResult();
|
||
|
} else {
|
||
|
$output[] = 'Code: ' . $this->getCode();
|
||
|
$output[] = 'Description: ' . $this->getDescription();
|
||
|
$output[] = 'Details: ';
|
||
|
|
||
|
$details = $this->getDetails();
|
||
|
if ( is_array( $details ) ) {
|
||
|
foreach ( $details as $row => $detail ) {
|
||
|
$output[] = 'Row: ' . $row;
|
||
|
foreach ( $detail as $field => $msgs ) {
|
||
|
$output[] = '--Field: ' . $field;
|
||
|
foreach ( $msgs as $key => $msg ) {
|
||
|
$output[] = '----Message: ' . $msg;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
$output[] = '=====================================';
|
||
|
$output[] = '';
|
||
|
|
||
|
return implode( $eol, $output );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return bool
|
||
|
*/
|
||
|
function isValid() {
|
||
|
if ( isset( $this->result_data['api_retval'] ) ) {
|
||
|
return (bool)$this->result_data['api_retval'];
|
||
|
}
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return bool
|
||
|
*/
|
||
|
function isError() { //Opposite of isValid()
|
||
|
if ( isset( $this->result_data['api_retval'] ) ) {
|
||
|
if ( $this->result_data['api_retval'] === false ) {
|
||
|
return true;
|
||
|
} else {
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return bool
|
||
|
*/
|
||
|
function getCode() {
|
||
|
if ( isset( $this->result_data['api_details'] ) && isset( $this->result_data['api_details']['code'] ) ) {
|
||
|
return $this->result_data['api_details']['code'];
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return bool
|
||
|
*/
|
||
|
function getDescription() {
|
||
|
if ( isset( $this->result_data['api_details'] ) && isset( $this->result_data['api_details']['description'] ) ) {
|
||
|
return $this->result_data['api_details']['description'];
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return bool
|
||
|
*/
|
||
|
function getDetails() {
|
||
|
if ( isset( $this->result_data['api_details'] ) && isset( $this->result_data['api_details']['details'] ) ) {
|
||
|
return $this->result_data['api_details']['details'];
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return bool|string
|
||
|
*/
|
||
|
function getDetailsDescription() {
|
||
|
$details = $this->getDetails();
|
||
|
if ( is_array( $details ) ) {
|
||
|
$retval = [];
|
||
|
|
||
|
foreach ( $details as $key => $row_details ) {
|
||
|
foreach ( $row_details as $field => $field_details ) {
|
||
|
foreach ( $field_details as $detail ) {
|
||
|
$retval[] = '[' . $field . '] ' . $detail;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return implode( ' ', $retval );
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return bool
|
||
|
*/
|
||
|
function getRecordDetails() {
|
||
|
if ( isset( $this->result_data['api_details'] ) && isset( $this->result_data['api_details']['record_details'] ) ) {
|
||
|
return $this->result_data['api_details']['record_details'];
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return bool
|
||
|
*/
|
||
|
function getTotalRecords() {
|
||
|
if ( isset( $this->result_data['api_details'] ) && isset( $this->result_data['api_details']['record_details'] ) && isset( $this->result_data['api_details']['record_details']['total_records'] ) ) {
|
||
|
return $this->result_data['api_details']['record_details']['total_records'];
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return bool
|
||
|
*/
|
||
|
function getValidRecords() {
|
||
|
if ( isset( $this->result_data['api_details'] ) && isset( $this->result_data['api_details']['record_details'] ) && isset( $this->result_data['api_details']['record_details']['valid_records'] ) ) {
|
||
|
return $this->result_data['api_details']['record_details']['valid_records'];
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return bool
|
||
|
*/
|
||
|
function getInValidRecords() {
|
||
|
if ( isset( $this->result_data['api_details'] ) && isset( $this->result_data['api_details']['record_details'] ) && isset( $this->result_data['api_details']['record_details']['invalid_records'] ) ) {
|
||
|
return $this->result_data['api_details']['record_details']['invalid_records'];
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return bool
|
||
|
*/
|
||
|
function getResult() {
|
||
|
if ( isset( $this->result_data['api_retval'] ) ) {
|
||
|
return $this->result_data['api_retval'];
|
||
|
} else {
|
||
|
return $this->result_data;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
?>
|