Файл: public_html/lib/wmxi/WMXICore.php
Строк: 133
<?php
################################################################################
# #
# Webmoney XML Interfaces by DKameleon (http://dkameleon.com) #
# #
# Updates and new versions: http://my-tools.net/wmxi/ #
# #
# Server requirements: #
# - cURL #
# - MBString or iconv #
# #
################################################################################
# including classes
if (!defined('__DIR__')) { define('__DIR__', dirname(__FILE__)); }
require_once(__DIR__ . DIRECTORY_SEPARATOR . 'WMXILogger.php');
if (file_exists(__DIR__ . DIRECTORY_SEPARATOR . 'WMSigner.php' )) { include_once(__DIR__ . DIRECTORY_SEPARATOR . 'WMSigner.php' ); }
if (file_exists(__DIR__ . DIRECTORY_SEPARATOR . 'WMXIResult.php')) { include_once(__DIR__ . DIRECTORY_SEPARATOR . 'WMXIResult.php'); }
# WMXICore class
class WMXICore {
private $cainfo = '';
private $encoding = 'UTF-8';
protected $classic = false;
protected $wmid = ''; # classic
private $signer = null; # classic
protected $light = false;
private $cert = array(); # light (key + cer + pass)
private $reqn = 0;
private $lastreqn = 0;
# constructor
public function __construct($cainfo = '', $encoding = 'UTF-8') {
if (!empty($cainfo) && !file_exists($cainfo)) { die("Specified certificates dir $cainfo not found."); }
$this->cainfo = $cainfo;
$this->encoding = $encoding;
}
# initialize classic
public function Classic($wmid, $key) {
$this->classic = true;
$this->light = false;
$this->wmid = $wmid;
if (!class_exists('WMSigner')) { die('WMSigner class not found.'); }
$this->signer = new WMSigner($wmid, $key);
}
# initialize light
public function Light($cert) {
$this->classic = false;
$this->light = true;
$this->cert = $cert;
}
# generate reqn
protected function _reqn() {
list($usec, $sec) = explode(' ', substr(microtime(), 2));
$this->lastreqn = ($this->reqn > 0) ? $this->reqn : substr($sec.$usec, 0, 15);
return $this->lastreqn;
}
# use own request number
public function SetReqn($value) {
$this->reqn = $value;
}
# use own request number
public function GetLastReqn($value) {
return $this->lastreqn;
}
# sign function
protected function _sign($text) {
if (!$this->classic) { die('Classic initialization required to sign the string.'); }
if (function_exists('mb_convert_encoding')) {
$text = mb_convert_encoding($text, 'windows-1251', $this->encoding);
} elseif (function_exists('iconv')) {
$text = iconv($this->encoding, 'windows-1251', $text);
}
return $this->signer->Sign($text);
}
# request to server
protected function _request($url, $xml, $scope = '') {
WMXILogger::Append($xml);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
if ($this->cainfo != '') {
curl_setopt($ch, CURLOPT_CAINFO, $this->cainfo);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
} else {
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
}
if (!$this->classic){
curl_setopt($ch, CURLOPT_SSLKEY, $this->cert['key']);
curl_setopt($ch, CURLOPT_SSLKEYPASSWD, $this->cert['pass']);
curl_setopt($ch, CURLOPT_SSLCERT, $this->cert['cer']);
};
$result = curl_exec($ch);
if (curl_errno($ch) != 0) {
$result = "<curl>n";
$result .= "<errno>".curl_errno($ch)."</errno>n";
$result .= "<error>".curl_error($ch)."</error>n";
$result .= "</curl>n";
$scope = 'cURL';
}
curl_close($ch);
WMXILogger::Append($result);
return class_exists('WMXIResult') ? new WMXIResult($xml, $result, $scope) : $result;
}
}
?>