WebMoney-кофейня
Топик в форуме: Во что играем?Топик в форуме: Вывод WMZ за USD весь мир
Поставить музыку в Кофейне:
Louis Armstrong - Go down, Moses
  ОтветитьНовая тема

> Проблема с авторизацией Login
Egor123
Post #1 (Отправлено: 15.12.2015 15:47)     Быстрое цитирование
Цитировать


Прохожий
*

Сообщений: 2
Регистрация: 15.12.2015
Использую код взятый с http://owebmoney.ru/articles/login.shtml
Ввожу все данные, сертификат тоже есть:

$urlid="XXXXXXXX"; // УКАЖИТЕ URLID, СООТВЕТСТВУЮЩИЙ ВАШЕМУ URL
$mywmid="XXXXXXXXXXXX"; // УКАЖИТЕ ВАШ WMID, ЗАРЕГИСТРИРОВАННЫЙ В LOGIN.WEBMONEY
$CertPath="/home/site.ru/data/сеrts/WMunited.cer"; // УКАЖИТЕ ПУТЬ К КОРНЕВОМУ СЕРТИФИКАТУ LOGIN.WEBMONEY НА ВАШЕМ СЕРВЕРЕ


if (!$_POST[´WmLogin_WMID´]) {
echo "<a href=´https://login.wmtransfer.com/GateKeeper.aspx?RID=".$urlid."&lang=ru-RU´><span>Авторизация</span></a>";
}

далее идет проверка полученного $_POST[´WmLogin_UrlID´] и $urlid а также $testticket и вот тут-то проблема. Мне выдает "=== Ошибка при получении тикета ===":

else {
$testticket=preg_match(´/^[a-zA-Z0-9\$\!\/]{32,48}$/i´, $_POST[´WmLogin_Ticket´]);
if($_POST[´WmLogin_UrlID´]==$urlid && $testticket==1) {
// Формируем запрос для проверки тикета
$xml="
<request>
<siteHolder>".$mywmid."</siteHolder>
<user>".$_POST[´WmLogin_WMID´]."</user>
<ticket>".$_POST[´WmLogin_Ticket´]."</ticket>
<urlId>".$urlid."</urlId>
<authType>".$_POST[´WmLogin_AuthType´]."</authType>
<userAddress>".$_POST[´WmLogin_UserAddress´]."</userAddress>
</request>
";
// Отправляем запрос и получаем ответ
$resxml=_GetAnswer($xml);
// Разбираем XML-ответ
$xmlres = simplexml_load_string($resxml);
if(!$xmlres) echo "Не получен XML-ответ";
$result=strval($xmlres->attributes()->retval);
// Если результат не равен 0 - прерываем и выдаем ошибку
if($result!=0) echo "Тикет ошибочный sad.gif";
else {
$WmLogin_WMID = $_POST[´WmLogin_WMID´];
echo "<a href=´private-office.php´><span>Личный кабинет</span></a>";
// Выполняем необходимые действия, например, авторизуем пользователя, начинаем сессию и т.д.
// ...
}
} else echo "=== Ошибка при получении тикета ===";
}


Решил проверить полученные данные $_POST[´WmLogin_UrlID´] и $testticket. $testticket равен 1, но вот $_POST[´WmLogin_UrlID´] отличается от $urlid.
При регистрации сайта на WebMoney Login мне выдали url ID страницы типа 1XX1XXX1-1111-111X-1111-X11111X11X1X. Выходит:

$urlid=1XX1XXX1-1111-111X-1111-X11111X11X1X
Но пришедшая $_POST[´WmLogin_UrlID´]=1xx1xxx1-1111-111x1111-x11111x11x1x

Т. е. все WebMoney Login выдает мне url ID с заглавными буквами, а при регистрации пользователя присылает тот же url ID, но уже все буквы маленькие. Из-за чего такое происходит? Я пробовал заменить все буквы в $urlid на маленькие, но тогда выдает ошибку:

Curl Error number = 60, Error desc = error setting certificate verify locations: CAfile: /www/webmoneta.kz/data/certificates/WMunited.cer CApath: none
Не получен XML-ответ

Вот остальной код:

// Функция передает XML-запрос на сервер Login.WebMoney и получает от него ответ
function _GetAnswer($xml){
global $CertPath;
// Инициализируем сеанс CURL
$ch = curl_init("https://login.wmtransfer.com/ws/authorize.xiface");
// В выводе 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);
// Задаем корневой сертификат для проверки
curl_setopt($ch, CURLOPT_CAINFO, $CertPath);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, TRUE);
// Выполняем запрос, ответ помещаем в переменную $result;
$result=curl_exec($ch);
if(curl_errno($ch)) echo "Curl Error number = ".curl_errno($ch).", Error desc = ".curl_error($ch)."<br>";
curl_close($ch);
return $result;
}

Я так понял что "Curl Error number = 60" - якобы "Сертификат не проходит проверку подлинности с известными сертификатами CA". А "error setting certificate verify locations" - "ошибка определения местоположения сертификата".
Я пробовал разные сертификаты ничего не помогло.

Пожалуйста помогите! Где я ошибся? В чем проблема? Я все перерыл не нашел решения обоих проблем!


Написать приватное сообщениеНаписать по email
Niksen
Post #2 (Отправлено: 15.12.2015 21:02)     Быстрое цитирование
Цитировать


Главный кофейщик
*******

Сообщений: 1592
Регистрация: 7.01.2005
Откуда: Киев
Участник WM-Клуба # 1
Да просто вместо curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, TRUE);

напишите

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);


==================
Написать приватное сообщениеНаписать по emailВебсайт
Egor123
Post #3 (Отправлено: 16.12.2015 09:31)     Быстрое цитирование
Цитировать


Прохожий
*

Сообщений: 2
Регистрация: 15.12.2015
Огромное спасибо! Все работает!


Написать приватное сообщениеНаписать по email
ibni
Post #4 (Отправлено: 4.02.2016 02:06)     Быстрое цитирование
Цитировать


Прохожий
*

Сообщений: 3
Регистрация: 31.01.2016
Привет! Мне нужен скрипт для авторизации юзеров через Login Wm, я попробовал скрипты которые выложены на этом сайте, в ответ получаю: Ошибка при получении тикета. Поможешь?


Написать приватное сообщениеНаписать по email
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции этого топика ОтветитьНовая тема

 





Powered by Invision Power Board © 2003 IPS, Inc.