quickxyan - все верно, но у вас ошибка в xml: <info& gt;ss</info>
Учитывая что юзается https не уверен что будет работать. Там ведь сертификат нужен.
_____________
Цитата (quickxyan @ 4.04.2011 - 09:49) |
та я пробовал юзать модуль wmsigner, но его надо компилировать через шелл на хостинге, а доступа к шеллу нет. как по другому я хз. судя из твоих слов я понял, что на вебмани можно попасть только через x11 !? |
<?php
// wmxml.inc.php - файл с функциями
// БЛОК ГЛОБАЛЬНЫХ ПЕРЕМЕННЫХ
$Global_WMID="145039166015"; // Ваш WMID
$Path_Folder = "/home/w/wmrub/public_html/sign/"; // Путь к директории, в которой лежит .kwm
$Path_Signer = "/home/w/wmrub/public_html/signer/wmsigner"; // Путь к WMSigner
$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";
// ФУНКЦИЯ ФОРМИРУЕТ УНИКАЛЬНЫЙ УВЕЛИЧИВАЮЩИЙСЯ 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?04rn");
fclose($pipes[0]);
$s = fgets($pipes[1], 133);
fclose($pipes[1]);
$return_value = proc_close($process);
return $s;
}
// АЛЬТЕРНАТИВНАЯ ФУНКЦИЯ ПОДПИСИ ДЛЯ PHP НИЖЕ 4.3.0
// На входе: строка для подписи. На выходе: строка с результатом подписывания
function _GetSign2($inStr){
global $Path_Folder, $Path_Signer;
chdir($Path_Folder);
$PlanStr = "$inStr?04rn";
$fp = popen($Path_Signer, "r+");
fwrite($fp,$PlanStr);
$s = fgets($fp, 133);
pclose($fp);
return $s;
}
// ОТПРАВКА POST-ЗАПРОСА ЧЕРЕЗ CURL
// На входе: URL для отправки и содержимое XML-запроса. На выходе: XML-ответ от WebMoney
function _GetAnswer($address, $xml){
// Инициализируем сеанс 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, "/public_html/sign/cert/WebMoneyCA.crt");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, TRUE);
// Выполняем запрос, ответ помещаем в переменную $result;
$result=curl_exec($ch);
return $result;
}
// ИНТЕРФЕЙС X11. ПОЛУЧЕНИЕ ИНФОРМАЦИИ ИЗ АТТЕСТАТА.
// На выходе: массив ['att'=>код аттестата, 'recalled'=>флаг отзыва аттестата,'retval'=>код выполнения, 'retdesc'=>описание результата]
function _WMXML11 ($wmid) {
global $XML_addr;
$xml="
<request>
<wmid></wmid>
<passportwmid>$wmid</passportwmid>
<sign></sign>
<span s class=mceItemParam></span>
<dict>1</dict>
<info>1</info>
<mode>0</mode>
</params>
</request>";
$resxml=_GetAnswer($XML_addr[11], $xml);
// echo $resxml;
$xmlres = simplexml_load_string($resxml);
if(!$xmlres) {
$result['att']=0;
$result['retval']=1000;
$result['retdesc']="Не получен XML-ответ";
return $result;
}
if($xmlres->certinfo->attestat->row)
$result['att']=strval($xmlres->certinfo->attestat->row->attributes()->tid);
else {
$result['att']=0;
$result['retval']=1001;
$result['retdesc']="Информация об аттестате не получена. Возможно, неверно указан WMID.";
return $result;
}
$result['recalled']=$xmlres->certinfo->attestat->row->attributes()->recalled;
$result['retval']=strval($xmlres->attributes()->retval);
return $result;
}
?>
<?php
// test.php - скрипт для тестирования
include("wmxml.inc.php");
$wmid="145039166015";
$r=_WMXML11($wmid);
echo "Код аттестата - ".$r['att']."<br>";
echo "Флаг отзыва (1 - отозван) - ".$r['recalled']."<br>";
echo "Результат (0 - успешно) - ".$r['retval']."<br>";
echo "Расшифровка - ".$r['retdesc']."<br>";
?>
Цитата |
Код аттестата - 0 Флаг отзыва (1 - отозван) - Результат (0 - успешно) - 1000 Расшифровка - Не получен XML-ответ |