<?
// БЛОК КОНСТАНТ
$Path_Folder = "/var/www/magazin/data/wmsigner/"; // Путь к директории, в которой лежит .kwm
$Path_Signer = "/var/www/magazin/data/wmsigner/wmsigner"; // Путь к WMSigner
$Global_WMID = $system['wmid'];

$Path_Certs = "/var/www/magazin/data/wmsigner/WMunited.cer";

// URL интерфейсов
$XML_addr[1]="https://w3s.webmoney.ru/asp/XMLInvoice.asp";
$XML_addr[2]="https://w3s.webmoney.ru/asp/XMLTrans.asp";
$XML_addr[3]="https://w3s.webmoney.ru/asp/XMLOperations.asp";
$XML_addr[4]="https://w3s.webmoney.ru/asp/XMLOutInvoices.asp";
$XML_addr[5]="https://w3s.webmoney.ru/asp/XMLFinishProtect.asp";
$XML_addr[6]="https://w3s.webmoney.ru/asp/XMLSendMsg.asp";
$XML_addr[7]="https://w3s.webmoney.ru/asp/XMLClassicAuth.asp";
$XML_addr[8]="https://w3s.webmoney.ru/asp/XMLFindWMPurse.asp";
$XML_addr[9]="https://w3s.webmoney.ru/asp/XMLPurses.asp";
$XML_addr[10]="https://w3s.webmoney.ru/asp/XMLInInvoices.asp";
$XML_addr[11]="https://passport.webmoney.ru/asp/XMLGetWMPassport.asp";
$XML_addr[13]="https://w3s.webmoney.ru/asp/XMLRejectProtect.asp";
$XML_addr[14]="https://w3s.webmoney.ru/asp/XMLTransMoneyback.asp";
$XML_addr[151]="https://w3s.webmoney.ru/asp/XMLTrustList.asp";
$XML_addr[152]="https://w3s.webmoney.ru/asp/XMLTrustList2.asp";
$XML_addr[153]="https://w3s.webmoney.ru/asp/XMLTrustSave2.asp";
$XML_addr[16]="https://w3s.webmoney.ru/asp/XMLCreatePurse.asp";
$XML_addr[171]="https://arbitrage.webmoney.ru/xml/X17_CreateContract.aspx";
$XML_addr[172]="https://arbitrage.webmoney.ru/xml/X17_GetContractInfo.aspx";
$XML_addr[18]="https://merchant.webmoney.ru/conf/xml/XMLTransGet.asp";
$XML_addr[19]="https://passport.webmoney.ru/XML/XMLCheckUser.aspx";


// ФУНКЦИЯ ФОРМИРУЕТ УНИКАЛЬНЫЙ УВЕЛИЧИВАЮЩИЙСЯ REQN
function _GetReqn(){
    $time=microtime();
    $int=substr($time,11);
    $flo=substr($time,2,5);
    return $int.$flo;
};

// ФУНКЦИЯ ФОРМИРОВАНИЯ ПОДПИСИ
// На входе: строка для подписи. На выходе: строка с результатом подписывания
function _GetSign($inStr) { 
	global $Path_Folder, $Path_Signer;
	chdir($Path_Folder);
	$descriptorspec = array(
	0 => array("pipe", "r"),
	1 => array("pipe", "w"),
	2 => array("pipe", "r") );
	$process = proc_open($Path_Signer, $descriptorspec, $pipes);
	fwrite($pipes[0], "$inStr\004\r\n");
	fclose($pipes[0]);
	$s = fgets($pipes[1], 133);
	fclose($pipes[1]);
	$return_value = proc_close($process);
	return $s;
}

// ОТПРАВКА POST-ЗАПРОСА ЧЕРЕЗ CURL
// На входе: URL для отправки и содержимое XML-запроса. На выходе: XML-ответ от WebMoney
function _GetAnswer($address, $xml){
	global $Path_Certs;
	// Инициализируем сеанс CURL
	$ch = curl_init($address);
	// В выводе CURL http-заголовки не нужны
	curl_setopt($ch, CURLOPT_HEADER, 0);
	// Возвращать результат, а не выводить его в браузер
	curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
	// Метод http-запроса - POST
	curl_setopt($ch, CURLOPT_POST,1);
	// Что передаем?
	curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
	// Проверяем корневой сертификат сервера WebMoney
	curl_setopt($ch, CURLOPT_CAINFO, $Path_Certs);
	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, TRUE);
	// Выполняем запрос, ответ помещаем в переменную $result;
	$result=curl_exec($ch);
	return $result;
}


// ИНТЕРФЕЙС X1. ВЫПИСКА СЧЕТА.
// На выходе: массив ['retval'=>код выполнения, 'retdesc'=>описание результата, 'date'=>дата и время, 'wminvid'=>уникальный номер счета]
function _WMXML1 ($orderid,$wmid,$purse,$amount,$desc,$address,$period,$expiration) {
	global $Global_WMID, $XML_addr;
	$reqn=_GetReqn();
	$desc=trim($desc); $address=trim($address); $amount=floatval($amount);
	$rsign=_GetSign($orderid.$wmid.$purse.$amount.$desc.$address.$period.$expiration.$reqn);
	$address=htmlspecialchars($address, ENT_QUOTES);
	$desc=htmlspecialchars($desc, ENT_QUOTES);
	$address=iconv("CP1251", "UTF-8", $address);
	$desc=iconv("CP1251", "UTF-8", $desc);
	$xml="
	<w3s.request>
		<reqn>$reqn</reqn>
		<wmid>$Global_WMID</wmid>
		<sign>$rsign</sign>
		<invoice>
			<orderid>$orderid</orderid>
			<customerwmid>$wmid</customerwmid>
			<storepurse>$purse</storepurse>
			<amount>$amount</amount>
			<desc>$desc</desc>
			<address>$address</address>
			<period>$period</period>
			<expiration>$expiration</expiration>
		</invoice>
	</w3s.request>";
	$resxml=_GetAnswer($XML_addr[1], $xml);
	//echo $resxml;
	$xmlres = simplexml_load_string($resxml);
	if(!$xmlres) {
		$result['retval']=1000;
		$result['retdesc']="Не получен XML-ответ";
		return $result;
	}
	$result['retval']=strval($xmlres->retval);
	$result['retdesc']=iconv("UTF-8", "CP1251", strval($xmlres->retdesc));
	$result['date']=strval($xmlres->invoice->datecrt);
	$result['wminvid']=strval($xmlres->invoice->attributes()->id);
	return $result;
}