Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
WebMoney кофейня > Программистам > WMSigner PHP edition


Автор: DKameleon 14.02.2007 01:28
УРРРРА!!!! Я наконец-то их домучил! wub.gif

В общем, Представляю вашему вниманию мою реализацию ВМСигнера на ПХП:
http://my-tools.net/wmxi/

Преимущества:
- Нет необходимости что либо компилировать, устанавливать. Доступно для понимания пользователям не столь продвинутым.
- Работает как на Winows так и на Linux платформах victory.gif

Недостатки:
- Пока не заметил blush.gif

Требования к ПХП:
- наличие MHash.
- наличие BCMath.


Попутно в комплекте идёт моя реализация ХМЛ интерфейсов.

Требования к ПХП:
- наличие CURL.
- наличие MBString.

Возможности:
- Реализованы X1-X11 интерфейсы.
- Поддержка WMK Classic, WMK Lite.
- Поддержка многострочных кириллических сообщений.

Недостатки:
- не реализовывал парсинг ответа сервера blush.gif В принципе, тут можно подключить любой, уже существующий парсер из любого ранее использованного набора интерфейсов.

==============================================

2010.08.05

Обратите внимание на существование версии №2. Возможности по сравнению с первой расширены smile.gif

Автор: DKameleon 24.02.2007 00:15
Не интересно, чтоли? unsure.gif

Автор: Kredit 24.02.2007 00:41
DKameleon сказал
Не интересно, чтоли?

Великолепно good.gif
Наверное все ждут когда будет реализован парсинг ответа сервера...

Автор: DKameleon 24.02.2007 01:43
Наверное все ждут когда будет реализован парсинг ответа сервера...

Окей. Дописал парсер biggrin.gif
Пример в комплекте.

Автор: Yuriy Apostol 24.02.2007 01:46
Интересно. Записал себе в блокнотике. Как разгребусь с текущими проектами - обязательно посмотрю на ваши скрипты.

Автор: tolik777 24.02.2007 07:54
Я вчера скачивал посмотрел. Работы сделано много. Досконально изучать все не стал конечно.
Вещь очень полезная будет многим я думаю.
Себе не стал ставить, т.к. юзаю WMSigner+XML и уже настроено все + много чего сам переделывал под свои задачи. Если будет следующий проект, где нужны будут автоматизированные интерфейсы, то обязательно попробую.

Автор: Kredit 25.02.2007 02:19
Проверил из example Х6 работает как часы.
Прорабатывались ли Вами пути вероятного взлома и меры защиты?

Автор: DKameleon 25.02.2007 02:48
Прорабатывались ли Вами пути вероятного взлома и меры защиты?

А что там прорабатывать?
Точно такая же схема, как и с вмсигнером:
- на вход строка, на выходе подпись.
получается, что всё точно так же зависит от сохранности файла ключей.

в ХМЛ интерфейсах - там часть почерпнул из уже готовых примеров - реализация с сертификатами, защита от подмены ДНС.

Кроме того, можно использовать и свою реализацию, интерфейсов, а не мою smile.gif

Парсер ХМЛ, ну, вроде работает. но он и так только после получения ответа сервера используется.


А вцелом, мне, как разработчику сложно искать недостатки wink.gif Может кто подсобит? smile.gif

Автор: LAW 2.03.2007 20:19
Чтото не могу я найти описание кодов ошибок на сайте вебманевском, ссылочку не подкинете?

Автор: DKameleon 2.03.2007 20:57
Чтото не могу я найти описание кодов ошибок на сайте вебманевском, ссылочку не подкинете?


тут есть:
http://www.webmoney.ru/rus/developers/inte...rse/index.shtml

Так понимаю, вопрос качается как-то данной темы? wink.gif

Автор: LAW 2.03.2007 21:15
Да, скачал предложенные вами варианты работы с XML, пробую.

Когда был закрыт IP нормально писало что аксесс денай smile.gif

Баланс по кошелькам проверяется нормально.
На интерфейсе Х6 отправка сообщения (в саппорт писал чтобы включили) выдается ошибка:
retval [value] => 110
retdesc [value] => create error step=13


Остальные еще не проверил, надеюсь за сегодняшний вечер все перепробовать.

Автор: DKameleon 2.03.2007 21:44
Остальные еще не проверил, надеюсь за сегодняшний вечер все перепробовать.

Тогда сейчас залью обновление.
Я там Х7 подправил wink.gif

etval [value] => 110 retdesc [value] => create error step=13

110  нет доступа к интерфейсу

Так что видимо ещё не включили.

UPD. Залил.

Автор: LAW 3.03.2007 00:37
И еще вопросик, у кого нить остались старые примеры который были на сайте вебманевском для https интерфейсов?

Автор: Niksen 3.03.2007 00:57
Для PHP остались. Давать?

Автор: LAW 3.03.2007 01:58
Niksen сказал
Для PHP остались. Давать?

Спасибо, уже у себя в старом бэкапе нарыл, просто поиск по четырем гигам в архиве долго шел smile.gif


Автор: anighr 5.03.2007 14:32
Niksen сказал
Для PHP остались. Давать?

дайте мне пожалуйста smile.gif

Автор: LAW 5.03.2007 18:11
2 anighr cпросите у Niksen потому как я то свои нашел, но они правленные, а оригиналов не осталось.

2 DKameleon, а нет ли рабочего примерчика для авторизации пользователя на стороннем сайте?

Автор: DKameleon 5.03.2007 18:22
а нет ли рабочего примерчика для авторизации пользователя на стороннем сайте?


А в чём возникают проблемы? Там же всё одинаково, что для моей версии скриптов, что для стандартных, что для ещё чьей-то. smile.gif

1. сгенерить на сервере строку.
2. подсунуть киперу её подписать.
3. отправитьна сервер.
4. на сервере переподписать по верху и отравить вебманевцам.

Для примера есть здесь:
http://forum.webmoney.ru/Default.aspx?g=posts&t=2836

Или интересует именно с моей реализацией интерфейсов?

Автор: Niksen 5.03.2007 18:54
дайте мне пожалуйста

Автор: anighr 5.03.2007 20:01
Ну тогда еще вопрос. На основании этого можно сделать интерфейс открытия ТЛ с нужными параметрами?? Видимо да, но есть куда подглядеть?

А в идеале нужно еще и вот это:

3. Проверка наличия положительных и отрицательных фидбэков и их соотношение.
4. Проверка наличия невыплаченных кредитов.
5. Проверка наличия невозвращённых кредитов.

2Niksen - спасибо.

Автор: Niksen 5.03.2007 21:31
Нет, нету таких интерфейсов. Кое-что можно почерпнуть из интерфейса X11 http://passport.webmoney.ru/asp/infoXMLGetWMPassport.asp

Автор: anighr 5.03.2007 22:20
впринципе все необходимая информация находиться здесь http://credit.webmoney.ru/LoanOffice.aspx . Только я не могу даже в броузере увидеть информацию по нужному мне вмиду . Ну в частности по моему 239850783614 . Используя поиск. Как я понял там инф-я по всем вмидам, засветившимся на бирже. Как эту информацию увидеть?

Автор: Expert 5.03.2007 23:49
У меня к великому сожалению вот такая басня:

CURL: passed [+].
BCMath: passed [+].
MHash: failed [-].
MBString: passed [+].
XML support: passed [+].

А... И ещё хотел бы посоветовать не использовать сокращенных записей типа:
<? ( Нужно использовать: <?php )

и т.д. ...

Причиной этому есть несльколько факторов.
1. На некоторых хостингах отключена эта опция PHP...
2. В PHP 6 хотят вообще избавиться от такой формы записи...

И ещё момент... Что вернёт ваш X8 если указать только кошелёк?

Автор: LAW 6.03.2007 01:30
И еще вопрос про Х7
В коде:
$result = $wmxi->X7("000000000000", "123", $wmxi->_sign("123"));


000000000000 - wmid кипера ключи от которого лежат на сервере?
123 - в обоих случаях подписанная строка полученная от авторизуемого посетителя?

Автор: DKameleon 6.03.2007 01:31
MHash: failed [-].

В таком случае необходимо раздобыть постороннюю реализацию md4.
Именно из-за него и используется данное расширение.
Если есть предложения - выслушаю.

посоветовать не использовать сокращенных записей типа:

старая привычка smile.gif сложно отказаться.

Что вернёт ваш X8 если указать только кошелёк?

<?xml version="1.0"?>
<w3s.response>
<testwmpurse>
<wmid>058016335779</wmid>
<purse>Z533988343993</purse>
</testwmpurse>
<retval>1</retval>
<retdesc> step=13</retdesc>
</w3s.response>

Автор: DKameleon 6.03.2007 01:41
000000000000 - wmid кипера ключи от которого лежат на сервере?

Нет. Это ВМИД клиента.

ВМИД, подписывающий запрос, задаётся только единожды, при инициализации и далее используется постоянно.

123 - в обоих случаях подписанная строка полученная от авторизуемого посетителя?

123 - строка, которую ваши скрипты предлагают посетителю подписать.

$wmxi->_sign("123") - результат подписания этой строки посетителем сайта.

https://passport.webmoney.ru/asp/signedlogi...SP=aProcess.asp?
Смотрим код страницы:

1.

<object ID="AcceptWM" WIDTH="1" HEIGHT="1"
 CLASSID="CLSID:463ED66E-431B-11D2-ADB0-0080C83DA4EB"
 codebase="https://w3s.webmoney.ru/WMAcceptor.dll#Version=3,0,0,0"
onreadystatechange="readyStateChange()"
 VIEWASTEXT>

 <param NAME="nState" VALUE="2">
</object>


2.
var sSString="<access><url>passport.webmoney.ru</url><datetime>06.03.2007 1:37:07</datetime><marker>571562089</marker></access>";


3. При клике на кнопку, вызывааем АктивХ и подписываем строку:
       window.signedloginform.signString.value = AcceptWM.SignString(sSString);
       window.signedloginform.WMID.value = AcceptWM.strLoginName;

вставляем подписанную строку в поле и отправляем на ваш сервер.

Далее:
1. ВМИД подписавшего
2. Строку, которую предложили подписать.
3. Подпись этой строки.
В качестве трёх параметров в Х7, шлём на сервер ВМ.
Получаем результат и на основании него разрешаем или нет логин тому, кто подписывал.

Автор: Expert 6.03.2007 11:40
DKameleon сказал
В таком случае необходимо раздобыть постороннюю реализацию md4.
Именно из-за него и используется данное расширение.
Если есть предложения - выслушаю.

А предложение такое. Можно было бы вмонтировать его сразу как один из методов, т.к. я посмотрел уже у нескольких хостеров, в их стандартном PHP такой красоты (md4) в составе доп. модулей не обнаружено. И тогда скрипт стал бы более кроссплатформенным smile.gif Ну а скорость его работы я думаю от этого никак бы не изменилась.

Автор: DKameleon 6.03.2007 13:26
А предложение такое. Можно было бы вмонтировать его сразу как один из методов,

Можно. Но ключевое слово - раздобыть wink.gif
Я бы и сам давно интегрировал, если бы нашёл.

Хочу заметить, сейчас весь код занимает пару десятков килобайт. собственно сигнер, юзающий мд4 - 6 килобайт.
очень не хочется, чтобы реализация одной функции была сравнимо большой по отношению к существующему коду.

Автор: Expert 7.03.2007 16:29
Можно. Но ключевое слово - раздобыть
Я бы и сам давно интегрировал, если бы нашёл.

Хочу заметить, сейчас весь код занимает пару десятков килобайт. собственно сигнер, юзающий мд4 - 6 килобайт.
очень не хочется, чтобы реализация одной функции была сравнимо большой по отношению к существующему коду.


Что ж Вы сразу не сказали smile.gif Тогда займусь поиском в свободное время smile.gif

Автор: DKameleon 7.03.2007 17:41
Что ж Вы сразу не сказали

а кто спрашивал? wink.gif

Автор: Expert 16.03.2007 01:03
DKameleon, а где же мне взять ту самую мою любимую библиотеку, которая MHash: failed [-]. Для PHP. Есть?

Автор: DKameleon 16.03.2007 01:26
DKameleon, а где же мне взять ту самую мою любимую библиотеку, которая MHash: failed [-]. Для PHP. Есть?

она и есть для ПХП.
расширение.
php_mhash.dll - под виндой.

Автор: Expert 16.03.2007 02:00
А не под виндой?

Автор: DKameleon 16.03.2007 03:48
Например:
http://www.experts-exchange.com/OS/Linux/A...Q_21449354.html

Зависит от твоих прав на сервере.

Автор: Expert 16.03.2007 17:53
DKameleon сказал
Например:
http://www.experts-exchange.com/OS/Linux/A...Q_21449354.html

Зависит от твоих прав на сервере.

Большое спасибо.

У меня свой сервер на Fedora Core 4 + Plesk 8.1
Так что каких прав не хватит, сразу подкинем smile.gif

Автор: DKameleon 16.03.2007 19:09
У меня свой сервер

Вопрос снимается biggrin.gif

Автор: igorvolf 3.04.2007 13:59
Здравствуйте. Я впервые сталкиваюст с разработкой скриптов, взаимодейвствующих с платёжными системами, поэтому возможно задам глупый вопрос.

Используя данный API
для тестировнаия написал следуйший код:

<?
header("Content-Type: text/plain;");

include_once("wmxi.php");

$wmxi = new WMXI(realpath("WebMoneyCA.crt"));
$wmxi->Classic("Мой wm id", "Мой пароль", "Мой файл .kwm");


$result = $wmxi->X1("1", "000000000000", "Z000000000000", "0.01", "test2 bill", "My address 99/99", "0", "0");


print($result);
print("\n");
print("Parsed result:\n");

include_once("wmxiparser.php");
$parser = new WMXIParser();
$result = $parser->Parse($result);

print_r($result);
?>


При запуске, скрипт вывод следуйщее:
[1] => Array
(
[name] => retval
[value] => -12
)

[2] => Array
(
[name] => retdesc
[value] => signature is incorrect. planstr=|1000000000000Z0000000000000.01test billMy address 99/9900117560162723983| step=5
)

На сайте вебмани написанно что ошибка -12 означет что wmid не зарегистрирвоан. Но вроде я ввёл верные данные.
Для выписки счетов ведь не нужно никаих аттестаторв и разршений. Или же они необходимы?
Если можно осушевствить данную операцию только при их наличие, как мне произвести тестирование?

Заранее спасибо

Автор: DKameleon 3.04.2007 16:03
Попробуй вызвать для начала:
$result = $wmxi->_sign("123");
print($result);
подпишет ли оно строку?

так же лучше указать реальные данные:
"000000000000", "Z000000000000"

проще всего для теста свой ВМИД и кошелёк.

Автор: igorvolf 3.04.2007 20:36

Попробуй вызвать для начала:
$result = $wmxi->_sign("123");
print($result);

Следуйший код ничё не выводит


<?
header("Content-Type: text/plain;");

include_once("wmxi.php");

$wmxi = new WMXI(realpath("WebMoneyCA.crt"));
wmxi->Classic("Мой wm id", "Мой пароль", "Мой файл .kwm");
$result = $wmxi->_sign("123");
print($result);
?>

Значит я не верно ввёл свои данные?

С реальными данными тоже самое

[2] => Array
(
[name] => retdesc
[value] => signature is incorrect. planstr=|1299403560327Z9832831291930.01test billMy address 99/9900117562536911525| step=5
)

Автор: DKameleon 3.04.2007 22:11
Как был создан?
Мой файл .kwm

Какого он размера?
В какой директории находится?

Что выводит файл check.php?

Автор: igorvolf 3.04.2007 22:54
Создан через keeper classic при регистрации.

Размер 164 байт
Находиться в той же директории, где и скрипты

check.php выводит
CURL: passed [+].
BCMath: passed [+].
MHash: passed [+].
MBString: passed [+].
XML support: passed [+].

Тестирую под денвером

Автор: DKameleon 4.04.2007 00:07
Создан через keeper classic при регистрации.

не уверен, что это тот, который нужен.

Попробуй:
Настроить - Параметры программы - Безопасность - Сохранить ключи.

Запросит пароль для сохранения и сохранит резервную копию файла ключей.

Укажи путь к резервной копии файла ключей и пароль от него же.

Автор: igorvolf 4.04.2007 01:59
Помогло!
Спасибо тебе большое за то что помог разобраться и конечно за сам API спасибо!! smile.gif

Автор: Voden 4.04.2007 18:43
А можно в этот интерфейс добавить возможность отладочного вывода? Т.е. чтобы можно было получить не только ответ сервера, но и сам запрос, что был ему послан?

Автор: DKameleon 4.04.2007 21:14
Для отладки можно в функцию

function _request($url, $xml) {

вставить

print($xml);

Автор: DJ_Petrovich 5.04.2007 19:10
Так что все таки делать, если:

CURL: passed [+].
BCMath: passed [+].
MHash: failed [-].
MBString: passed [+].
XML support: passed [+].

Автор: DKameleon 5.04.2007 22:07
Так что все таки делать, если:

это довольно печальная ситуация, так как пока не искал простой замены для md4

можете попробовать найти простую реализацию md4 на ПХП, тогда я попробую её интегрировать.

хочу напомнить, что эта функция необходима только для сигнера.
Если использовать сертификаты от кипера Лайт, то сигнер не нужен вообще.
Если всё же ключи от кипера классик, то возможно прийдётся таки компилировать вмсигнер и отредактировать в файле wmsigner.php функцию подписывания (Sign) так, чтобы она использовала не класс, а бинарный скомпилированный модуль

Автор: DJ_Petrovich 5.04.2007 22:23
нужно именно по кипер классик.
где искать то?

P.S. Это нужно только для Вашего wmsignera или для родного тоже? или они идентичны?

Автор: DKameleon 5.04.2007 23:47
P.S. Это нужно только для Вашего wmsignera или для родного тоже? или они идентичны?

это нужно только для моего.

для родного необходима возможность запуска на сервере ELF-приложений. так же его очень желательно скомпилировать на сервере из исходных кодов.


ПС. пробовали обращаться к хостеру, чтобы он MHash установил?

Автор: DJ_Petrovich 6.04.2007 08:52
пробовал = не хочет устанавливать

dntknw.gif

Автор: DJ_Petrovich 6.04.2007 10:19
ладно, придется искать другие варианты sad.gif

Автор: DKameleon 6.04.2007 15:55
2 Expert, DJ_Petrovich

скоро проблема с MHash будет решена. Пости сделал реализацию md4 на ПХП.

Автор: bon 6.04.2007 17:27
DKameleon сказал
Пости сделал реализацию md4 на ПХП.

good.gif

Автор: DJ_Petrovich 6.04.2007 18:05
DKameleon, good.gif

Автор: DJ_Petrovich 6.04.2007 18:40
Еще один вопрос по ходу: кто как решает такую задачку:

" Помните, файла с ключами и пароля (который также будет расположен на компьютере) достаточно для того, чтобы получить полный доступ к средствам на кошельках. Возможно, будет необходимо продумать схему ежедневного перевода накапливающихся на кошельке ресурса средств на другой кошелек, расположенный в недоступном для посторонних месте;"

Есть ли какие то способы защиты от недобросовестных админов хостинга?

Автор: DKameleon 6.04.2007 19:23
Есть ли какие то способы защиты от недобросовестных админов хостинга?

свой сервер.

Автор: DJ_Petrovich 6.04.2007 19:55
свой сервер пока не получается
других надежных вариантов, типа шифрования, нет?

Автор: DKameleon 7.04.2007 01:57
других надежных вариантов, типа шифрования, нет?

усложняющие жизнь - есть.
стопроцентно надёжные - нет.

Для использования данных их необходимо таки как-то расшифровать.
если может расшифровать скрипт, то может расшифровать и админ.

Автор: DKameleon 7.04.2007 02:38
Тэкс... похоже готово. Сам проверил буквально на X1 и несколько хэшей сравнил. Так что должно всё работать.
Забирать там же.

Автор: LAW 7.04.2007 15:07
MHash есть практически на всех хостингах где предоставляется РНР5, например SWEB.
А за реализацию МД4 на РНР огромное спасибо!

Автор: DKameleon 7.04.2007 15:25
MHash есть практически на всех хостингах где предоставляется РНР5, например SWEB.

как оказалось, у двоих нету smile.gif
Кроме того, скрипты расчитаны на ПХП от 4 версии.

Автор: DJ_Petrovich 7.04.2007 19:33
ок, забрал
буду проверять
victory.gif

Автор: ~Joker~ 13.04.2007 15:32
скачал.
когда попробывал оказалось что не генерит подпись =(
ключ считывается но подписи почемуто нет...
куда глянуть подскажите

Автор: DKameleon 13.04.2007 16:19
Сначала результаты из файла check.php

Автор: ~Joker~ 14.04.2007 00:24
DKameleon сказал
Сначала результаты из файла check.php

CURL: passed [+].
BCMath: passed [+].
MHash: passed [+].
MBString: passed [+].
XML support: passed [+].

функция Sign() из wmsigner.php отдает пустое значение.
содержимое ключа в переменную забирается.

изза чего такое может быть?

Автор: DKameleon 14.04.2007 00:51
Правильный ли файл ключей используется?

Кстати, обратите внимание на обновлённую версию, не использующую MHash
(хоть это в данном случае и не играет роли)

Автор: ~Joker~ 14.04.2007 10:28
версия обновленная.
ключ правильный.
даже интерфейсы в службе поддержки на ip свой уже активировал

функция Sign() из wmsigner.php отдает пустое значение.

Автор: ~Joker~ 14.04.2007 11:11
ключ точно рабочий т.к. до того как хостинг перестарался с безопастностью все работало
а потом " proc_open() has been disabled for security reasons "
и т.д.

функция Sign() из wmsigner.php отдает пустое значение.
после строки запуска функции Init($this->kwm, $key_test, $sign_keys)
в $sign_keys ничего не остается

Автор: ~Joker~ 14.04.2007 11:26
чтото накопал:

файл wmsigner.php
WMSigner class
функция Init($this->kwm, $key_test, $sign_keys)

срабатывает по строке
if (strcmp($digest, $key_data["crc"])) {return -1;}

это что означает?

Автор: DKameleon 14.04.2007 11:37
неправильная контрольная сумма ключа.

Это может быть в следующих случаях:
- неправильный ключ.
- неправильный пароль.
- ошибка в алгоритме разбора ключа.

С третьим вариантом разобраться будет наиболее проблематично.


попробуй вывести перед этой строкой:
print("Digest: ". bin2hex($digest). "\n");
будет ли отображена нормальная сигнатура?

Автор: ~Joker~ 14.04.2007 11:47
DKameleon сказал

попробуй вывести перед этой строкой:
print("Digest: ". bin2hex($digest). "\n");
будет ли отображена нормальная сигнатура?

вот вывело на это 2 раза:
Digest: a8094fc1000000800000008009ecace1
Digest: 6c664f6a315dc6b90000008000000080

Автор: DKameleon 14.04.2007 11:51
хм... забавно.
а как выглядит функция
function _md4($data) {
?

какая версия ПХП на сервере?



Попробуй где-то вконце кода вызвать:
print(md4("123")."\n");

Автор: ~Joker~ 14.04.2007 11:57
# md4 wrapper
function _md4($data) {
return pack("H*", md4($data));
# old code with MHash usage
# return mhash(MHASH_MD4, $data);
}

PHP Version 4.4.4

print(md4("123")."\n");
a7eedd1d105467d9000000805724b163

Автор: DKameleon 14.04.2007 11:59
должно быть:
c58cda49f00748a3bc0fcfa511d516cb


У тебя пожохе не работает тот мд4, который я переписал. sad.gif
может, на хостинге что-то не так, например проц 64 разрядный... или ещё что.

Тогда, если есть MHash, то раскомментируй эту строку:
# return mhash(MHASH_MD4, $data);
и закомментируй эту:
return pack("H*", md4($data));

Автор: ~Joker~ 14.04.2007 12:03
раскоментировал.
готово.
заработало.
спасибо =)

Автор: DKameleon 14.04.2007 15:49
2 ~Joker~

не могли бы вы детальнее рассказать о хостинге, на котором пробовали?
я бы хотел исправить продлему с мд4.

Автор: dry 15.04.2007 18:27
DKameleon сказал
не могли бы вы детальнее рассказать о хостинге, на котором пробовали?
я бы хотел исправить продлему с мд4.

Аналогичная проблема

data = 123
md4(data) = a7eedd1d105467d9000000805724b163

Проявилось на домашнем серваке.

# uname -a
Linux seagull.lan22.lan 2.6.10 #1 Sun Sep 17 21:14:41 MSD 2006 i686 i686 i386 GNU/Linux

# php -v
PHP 5.0.4 (cli) (built: Dec 10 2005 23:29:49)
Copyright © 1997-2004 The PHP Group
Zend Engine v2.0.4-dev, Copyright © 1998-2004 Zend Technologies

Если нужны дополнительные данные, буду рад предоставить.

Автор: DKameleon 15.04.2007 20:09
dry сказал
Аналогичная проблема

data = 123
md4(data) = a7eedd1d105467d9000000805724b163

Проявилось на домашнем серваке.

# uname -a
Linux seagull.lan22.lan 2.6.10 #1 Sun Sep 17 21:14:41 MSD 2006 i686 i686 i386 GNU/Linux

# php -v
PHP 5.0.4 (cli) (built: Dec 10 2005 23:29:49)
Copyright © 1997-2004 The PHP Group
Zend Engine v2.0.4-dev, Copyright © 1998-2004 Zend Technologies

Если нужны дополнительные данные, буду рад предоставить.

Спасибо за помощь в решении victory.gif


2 алл

md4 теперь работает как положено wub.gif

Автор: ~Joker~ 16.04.2007 11:46
проверил. работает md4 исправленный.
спасибо.

ЗЫ: у меня возникла ошибка при добавлении описания к платежу в кирилице в несколько слов. решил проблему заменой пробела на его html код: '%20'
$memo = str_replace(" ","%20",$memo);
на всякий случай может еще у кого всплывет =)
кстати у DKameleon данный глюк отсутствует.

Автор: DKameleon 16.04.2007 16:51
~Joker~ сказал
проверил. работает md4 исправленный.
спасибо.

ЗЫ: у меня возникла ошибка при добавлении описания к платежу в кирилице в несколько слов. решил проблему заменой пробела на его html код: '%20'
$memo = str_replace(" ","%20",$memo);
на всякий случай может еще у кого всплывет =)
кстати у DKameleon данный глюк отсутствует.

лучше выкладывать больший кусок кода.

Например, форму, делающую ПОСТ на страницу example.php
и в файле примера раскомментированный Х2, принимающий параметры ПОСТ.

Автор: ~Joker~ 18.04.2007 14:07
DKameleon сказал
лучше выкладывать больший кусок кода.

Например, форму, делающую ПОСТ на страницу example.php
и в файле примера раскомментированный Х2, принимающий параметры ПОСТ.

сейчас смотрел параметры... короче ничего толком не решилось с описаниями транзакций.

с формы данный принимаются нормально.
потом делаю
$result = $wmxi->X2 ( $reqn, $from, $to, $count, $period, $protection_code, $text, $wminvid);

в переменной $text лежит текст "тестовая%20операция"

далее в классе WMXI формируется xml для запроса но уже с отсутствием описания на русском

<w3s.request>
<reqn>117689031086976</reqn>
<wmid>000000000000</wmid>
<sign>b169b ...многа букав... a021d</sign>
<trans>
<tranid>1176890310</tranid>
<pursesrc>R000000000000</pursesrc>
<pursedest>R111111111111</pursedest>
<amount>200</amount>
<period>0</period>
<pcode></pcode>
<desc>%20</desc>
<wminvid>0</wminvid>
</trans>
</w3s.request>

вот такая ситуёвина.

в идеале должно быть
<desc>тестовая%20операция</desc>

глюк появляется после
$this->_change_encoding($v, "HTML-ENTITIES");

интересно выходит только у меня такой ошибка или все отмалчиваются? =)

Автор: DKameleon 18.04.2007 14:42
интересно выходит только у меня такой ошибка или все отмалчиваются? =)

Нужно однозначно разобраться с кодировками.

Скрипты написаны так, чтобы функционировать с кодировкой UTF-8.
Вы же скорее всего валите всё в 1251.

Автор: DKameleon 23.04.2007 13:47
Выпущена обновлённая версия smile.gif
Претерпел небольшие изменения механизм парсинга, поэтому новые скрипты немного не полностью совместимы со старыми sad.gif
Это была необходимая мера.

Изменения:
    *  Добавлена обработка спецсимволов.
    * Установлена кодировка по умоланию для парсера.
    * Добавлена возможность конвертирования кодировки после парсинга.
    * Изменён механизм парсера. К сожалению, не совместим с форматом данных предыдущей версии.
    * Проект опубликован на sourceforge.
    * Написана документация по классам.
    * Существенно детализированы примеры реализации интерфейсов.


1. Ранее нельзя было в текстах и комментариях отправлять спецсимволы типа "<", ">" и некоторые другие, так как это нарушало структуру XML. Провтыкал blush.gif Теперь работает victory.gif
2. Чтобы не возникало нестыковок с разными кодировками ответа, документа и т.п.
3. Чтобы результат всё же был в кодировке сайта и пользователь потом не возился с перекодированием.
4. Необходимо было разделить подструктуру и текстовую часть. Парсер барахлил, и я всё просто тримал - терялись пробелы sad.gif
5. victory.gif
6. Не уверен, что кому-то понадобится эта дока. Разве что экспериментаторам.
7. Примеры, собственно, написаны умышленно в кодировке windows-1251, чтобы пользователь видел, что и как надо конвертить и указывать. На самом деле, просто в двух местах кодировку указать. Ну и вцелом, это готовые куски кода, которые можно копипейстом использовать в своих проектах.

Автор: LAW 23.04.2007 17:29
А у вас на сайте обновленная версия лежит???
А то с http://belnet.dl.sourceforge.net/sourcefor...xi-20070422.zip не получается скачать....

   [Склеено в [mergetime]1177338623[/mergetime]]

Пардон, скачалось раза с восьмого...

Автор: DKameleon 23.04.2007 17:37
Да. на данный момент стараюсь зеркалировать версии.
На сорсфорже можно выбирать зеркала в случае чего.

Автор: LAW 25.04.2007 12:39
Странно но Х7 у меня не работает.
После авторизации кипером все равно пишет:
WM-идентификатор: не авторизован


и внизу где отладочная информация:
Результат: no
Код ошибки: 0
Описание ошибки:

Автор: DKameleon 25.04.2007 13:57
Странно но Х7 у меня не работает. После авторизации кипером все равно пишет:

Хм.... перепроверю ещё раз, когда домой прийду.


Опишите свои условия проведения эксперимента.

Автор: LAW 25.04.2007 18:00
Пардон, все заработало.
Ввело в заблуждение то, что авторизация тем же кипером ключи от которого лежат на хосте - не проходит, со всеми остальными WMID все в порядке.
Хотя странно, раньше (на https) у меня получалось авторизовывать самого себя.

Автор: DKameleon 25.04.2007 19:48
Ввело в заблуждение то, что авторизация тем же кипером ключи от которого лежат на хосте - не проходит, со всеми остальными WMID все в порядке.

Это странно, так как я то и тестировал с тем же ВМИДом, которым и подписывал.

Только что проверил - сам себя опять успешно авторизовал.
Попробуйте в строке для подписи указать свой домен:
<url>dkameleon.com</url>

Автор: LAW 25.04.2007 21:05
dkameleon.com сменил на свои в первую же очередь

Автор: DKameleon 25.04.2007 21:37
LAW сказал
dkameleon.com сменил на свои в первую же очередь

хм..... dntknw.gif

Автор: Matvey 1.05.2007 04:47
О Никсен, спасибо, как раз искал!!!
То, что нужно!

Автор: Expert 1.05.2007 11:11
Matvey сказал
О Никсен, спасибо, как раз искал!!!
То, что нужно!

А за что Вы благодарите Никсена?
За такой хороший форум?

Автор: nezzy 18.05.2007 06:36
Господа!
Расширения BCMath реализованного на php никто не встречал?
Очень надо...

Автор: DKameleon 19.05.2007 02:42
Расширения BCMath реализованного на php никто не встречал? Очень надо...

Посмотрел на него пристальнее.
Вряд ли его можно написать малой кровью smile.gif

Автор: dmitrykukushkin 20.05.2007 04:24
Понимаю вас, кода вы говорите домучал!

Посмотрите мою реализацию WMSigner для платформы .Net на C#. Подробности здесь: http://www.wmsigner.com/

ЗЫ

Уже создал тему на форуме, но думаю здесь тоже это актуально в качестве ответа.

Автор: Yuriy Apostol 16.06.2007 20:06
DKameleon сказал
Вряд ли его можно написать малой кровью

Дмитрий, гляньте на исходники модуля:
http://ftp.mikron.ru/pub/unix/php-4.0.2/ext/bcmath/
http://www.astro.auth.gr/~simos/php-5.1.6/ext/bcmath/

Я бы переписал в виде класса весь модуль, а также засунул в отдельный класс MD4. А то у вас куча функций вспомогательных в библиотеке, которые по отдельности больше нигде не нужны.

Автор: DKameleon 16.06.2007 20:24
это конечно здорово и о существовании такого модуля в исходных кодах я в курсе smile.gif
Но вот переписывать компилируемый код с чёткой типизацией данных на интерпретируемом с нечёткой типизацией нет ну абсолютно никакого желания smile.gif

Кроме того, это бесполезная работа, тиак как хостингов с bcmath благо предостаточно.

Я бы переписал в виде класса весь модуль

Без проблем smile.gif Буду ждать с нетерпением и включу в комплект после тестирования wink.gif

Класс, не класс... главно, чтоб не мешали, функции эти smile.gif

Автор: Expert 16.06.2007 21:40
DKameleon, я думаю тут речь об универсальности, на моём хосте, например, не нашлось MHash: failed

Автор: DKameleon 16.06.2007 23:33
DKameleon, я думаю тут речь об универсальности, на моём хосте, например, не нашлось MHash: failed

Проблема с МХэшем уже давно решена smile.gif

В любом случае, я считаю, что предлагаемый кусок работы слишком объёмен и неэффективен.

Да и кушать хочется. smile.gif Не только ж за идею работать biggrin.gif

Автор: Aquila 20.08.2007 15:12
Пробую интерфейс X9.
Выдает:
Код ошибки: -4
Описание ошибки: w3s.request/reqn is incorrect step=2

Может быть дело в PHP Version 5.2.3?
Тестировались ли скрипты на php5?

Автор: DKameleon 20.08.2007 15:26
Только Х9 выдаёт такое? А остальные?

Автор: Aquila 20.08.2007 15:37
DKameleon сказал
Только Х9 выдаёт такое? А остальные?

Остальные так же (пробовал только те интерфейсы, которые не требуют авторизации у какого-то wmid).

Автор: Niksen 20.08.2007 15:47
Может быть дело в PHP Version 5.2.3?
Тестировались ли скрипты на php5?


Тестировались. В частности, тут: http://owebmoney.ru/xml2.shtml
Дело не в версии PHP, а в том, что неправильно формируется reqn. Он должен быть каждый раз больше предыдущего, должен состоять только из цифр (15 цифр максимум).
Возьмите по ссылке выше функцию для генерации reqn отталкиваясь от метки времени - она отлично работает.

Автор: DKameleon 20.08.2007 15:48
Остальные так же (пробовал только те интерфейсы, которые не требуют авторизации у какого-то wmid).

Выложите здесь полный ХМЛ запрос, который отправляется на сервер.
Справитесь?

Я тестирую и пишу пока под ПХП4 - для обеспечения большей обратной совместимости.
До вас никто пока не жаловался smile.gif Неужели все на ПХП 4 только пробовали?...

Автор: DarkDragon 20.08.2007 16:39
PHP4 мертв. На оффсайте висит анонс.
Прекращайте его использовать.

Ваши интерфейсы сам потестю, если надо - перепишу под PHP5.

Автор: DKameleon 20.08.2007 17:29
PHP4 мертв. На оффсайте висит анонс.

Он будет мёртв, когда его не будет на хостингах smile.gif

Ваши интерфейсы сам потестю, если надо - перепишу под PHP5.

Переписывать можете под что хотите smile.gif Лицензия вроде не мешает smile.gif

Автор: DarkDragon 20.08.2007 23:53
Так не для себя. А на хостингах его уже не должно быть. С тех пор как анонс висит, прошел месяц.
У меня лично хостер еще полгода назад убил последний кластер с PHP4. Месяц назад убит MySQL 4, сейчас на всех кластерах стоит 5-й.

Автор: DKameleon 21.08.2007 00:00
не должно

но есть. и это факт.

Автор: DarkDragon 21.08.2007 00:13
Значит, надо пинать хостера, чтобы чесался уже сейчас, а не тогда, когда все будут писать только под PHP5, а у него еще стоит PHP4 и клиенты вынуждены искать новый хостинг из-за этого.

Автор: globik 26.08.2007 17:36
Привет, у меня проблема: похоже не подписывается строка
Check.php возврашает одни плюсики

При это на "денвере" строка подписывается, а на хостинге нет.

Версия последняя: качал как и с сайта, так и с sorceforge(вроде так =) )

Автор: DKameleon 26.08.2007 17:46
Привет, у меня проблема: похоже не подписывается строка

Какие интерфейсы? Какое сообщение об ошибке?

Есть подозрение на мд4.

ПРоверьте наличие MHash и
в wmsigner.php восстановите старый код.
# md4 wrapper
function _md4($data) {
 return pack("H*", md4($data));
#  old code with MHash usage
#  return mhash(MHASH_MD4, $data);
}

Автор: globik 26.08.2007 18:05
mhash похоже нет, но есть другой модуль, именуемы в phpinfo() как "HASH":
md2 md4 md5 sha1 sha256 sha384 sha512 ripemd128 ripemd160 ripemd256 ripemd320 whirlpool tiger128,3 tiger160,3 tiger192,3 tiger128,4 tiger160,4 tiger192,4 snefru gost adler32 crc32 crc32b haval128,3 haval160,3 haval192,3 haval224,3 haval256,3 haval128,4 haval160,4 haval192,4 haval224,4 haval256,4 haval128,5 haval160,5 haval192,5 haval224,5 haval256,5


но я без понятия, как его использовать =)


А код простой, взят из example.php:


<?php
header("Content-Type: text/plain;");

include_once("wmxi.php");

$wmxi = new WMXI(realpath("WebMoneyCA.crt"));
$wmxi->Classic("***", "***", "***.kwm");
$result = $wmxi->_sign("123");
print($result);

?>

Автор: DKameleon 26.08.2007 18:10
mhash похоже нет, но есть другой модуль, именуемы в phpinfo() как "HASH":

покажите ссылку на пхпинфо.


но я без понятия, как его использовать =)

я написал выше smile.gif

Автор: globik 26.08.2007 18:13
в личке )



я написал выше 

Прочитал всю тему, что то не заметил dntknw.gif

Автор: DKameleon 26.08.2007 18:31
в личке )

Посмотрел. это оно.

Прочитал всю тему, что то не заметил

Пишу ещё раз:

Проверьте наличие MHash и
в wmsigner.php восстановите старый код.
# md4 wrapper
function _md4($data) {
return pack("H*", md4($data));
#  old code with MHash usage
#  return mhash(MHASH_MD4, $data);
}


   [Склеено в [mergetime]1188142453[/mergetime]]

Э.... что-то у меня появились нездоровые подозрения после внимательного просмотра кода.

Жду конкретного объяснения, почему вы решили, что строка не подписывается?
А то гадать на кофейной гуще - это не ко мне.

   [Склеено в [mergetime]1188142589[/mergetime]]

ПС. Кажется промахнулся, и это всё же не МХэш sad.gif
Надо подумать, что это за либа и как её вызывать...

   [Склеено в [mergetime]1188142759[/mergetime]]

Похоже надо так:

 return hash('md4', $data);

Это немного другое расширение, но для наших целей сгодится smile.gif

Автор: globik 26.08.2007 18:50
вот что возвратила эта функция hash();
c58cda49f00748a3bc0fcfa511d516cb



header("Content-Type: text/plain;");

include_once("wmxi.php");

$wmxi = new WMXI(realpath("WebMoneyCA.crt"));
$wmxi->Classic("*", "*", "*.kwm");
$result = $wmxi->_sign("123");
print($result);



Этот код вообще ни чего не возвращает (белый экран)

Автор: DKameleon 26.08.2007 18:54
Этот код вообще ни чего не возвращает (белый экран)

Варианты:
1. включить отображение ошибок, варнингов и нотисов.
2. Дать мне доступ, чтобы я сам посмотрел. С таким уровнем предоставляемой информации, как сейчас, всем будет явно проще.

Автор: globik 26.08.2007 19:00
Отображение ошибок и замечаний работает...

[font=Courier]   [Склеено в [mergetime]1188144455[/mergetime]][/font]

Похоже, что не выполняется этот код:

 if (isset($sign_keys["ekey"]) && isset($sign_keys["nkey"])) {
  echo "5";
  $digest = $this->_md4($data);
  echo "6";
  $to_encrypt = $digest;
  echo "7";
  for($i = 0; $i < 10; ++$i) { $to_encrypt .= pack("V", mt_rand()); }
  echo "8";
  $to_encrypt = pack("v", strlen($to_encrypt)).$to_encrypt;
  echo "9";
  $m = $this->_hex2dec(bin2hex(strrev($to_encrypt)));
  $e = $this->_hex2dec(bin2hex(strrev($sign_keys["ekey"])));
  $n = $this->_hex2dec(bin2hex(strrev($sign_keys["nkey"])));
  echo "10";
  $a = $this->_bcpowmod($m, $e, $n);
  echo "11";
  $result = $this->_shortunswap($this->_dec2hex($a));
 }



Он находиться в функции:

# sign data
function Sign($data) {
 $result = "";
 $key_data = unpack("vreserved/vsignflag/a16crc/Vlen/a*buf", $this->kwm);
 $sign_keys = array();
 echo "1";
 $key_test = $this->SecureKeyByIDPW($this->wmid, $this->pass, $key_data, true);
 echo "2";
 $key_test["signflag"] = 0;
 echo "3";
 if ($this->Init($this->kwm, $key_test, $sign_keys) != 0) {
  $key_test = $this->SecureKeyByIDPW($this->wmid, $this->pass, $key_data, false);
  $key_test["signflag"] = 0;
  if ($this->Init($this->kwm, $key_test, $sign_keys) != 0) { }
 }
 echo "4";
 if (isset($sign_keys["ekey"]) && isset($sign_keys["nkey"])) {
  echo "5";
  $digest = $this->_md4($data);
  echo "6";
  $to_encrypt = $digest;
  echo "7";
  for($i = 0; $i < 10; ++$i) { $to_encrypt .= pack("V", mt_rand()); }
  echo "8";
  $to_encrypt = pack("v", strlen($to_encrypt)).$to_encrypt;
  echo "9";
  $m = $this->_hex2dec(bin2hex(strrev($to_encrypt)));
  $e = $this->_hex2dec(bin2hex(strrev($sign_keys["ekey"])));
  $n = $this->_hex2dec(bin2hex(strrev($sign_keys["nkey"])));
  echo "10";
  $a = $this->_bcpowmod($m, $e, $n);
  echo "11";
  $result = $this->_shortunswap($this->_dec2hex($a));
 }

 return strtolower($result);
}


}



ps: В оригинале echo"*"; нет =))

Автор: DKameleon 26.08.2007 19:34
А пароль вы правильный указали?
От резервной копии файла ключей нужно.

Файл ключей тоже правильный залили?

Автор: globik 26.08.2007 19:39
Да, пасс от ключей.

Создавал через меню "безопасность"

Автор: DKameleon 26.08.2007 19:51
Да, пасс от ключей.

в пассе случаем нет кириллицы?

Автор: globik 26.08.2007 19:55
Были одни цифры, теперь для надежности цифры и буквы. все латиницей.

Автор: DKameleon 26.08.2007 20:00
покажите функцию md4. Всё в ней правильно сделали?

Автор: globik 26.08.2007 20:03
Вот:
function _md4($data) {
#  return pack("H*", md4($data));
return hash('md4', $data);
#  old code with MHash usage
#  return mhash(MHASH_MD4, $data);
}



У меня появился вопросик: в вашей версии хэш выдавался в верхнем или нижнем регистре?

Автор: DKameleon 26.08.2007 20:05
У меня появился вопросик: в вашей версии хэш выдавался в верхнем или нижнем регистре?

точно так же как и в мхеш smile.gif в нижнем.

ПС. у меня варианты закончились.

Автор: globik 26.08.2007 20:07
блин =(

Тогда еще вопрос: за что это условие отвечает? ( То, что не выполняется)

Автор: DKameleon 26.08.2007 20:09
Тогда еще вопрос: за что это условие отвечает? ( То, что не выполняется)


Судя по всему, не выполняется "$this->Init()"
а он собственно проверяет правильность пароля и
выделяет из файла ключа мантиссу и экспоненту.

Автор: globik 26.08.2007 20:17
Появились цифры: 9876 (они бы появились, если б не выполнялся "$this->Init()"?)



function Sign($data) {
 $result = "";
 $key_data = unpack("vreserved/vsignflag/a16crc/Vlen/a*buf", $this->kwm);
 $sign_keys = array();

 $key_test = $this->SecureKeyByIDPW($this->wmid, $this->pass, $key_data, true);

 $key_test["signflag"] = 0;
 
 if ($this->Init($this->kwm, $key_test, $sign_keys) != 0) {
  echo "9";
  $key_test = $this->SecureKeyByIDPW($this->wmid, $this->pass, $key_data, false);
  echo "8";
  $key_test["signflag"] = 0;
  echo "7";
  if ($this->Init($this->kwm, $key_test, $sign_keys) != 0) { echo "6"; }
 }

 if (isset($sign_keys["ekey"]) && isset($sign_keys["nkey"])) {
  $digest = $this->_md4($data);
  $to_encrypt = $digest;
  for($i = 0; $i < 10; ++$i) { $to_encrypt .= pack("V", mt_rand()); }
  $to_encrypt = pack("v", strlen($to_encrypt)).$to_encrypt;
  $m = $this->_hex2dec(bin2hex(strrev($to_encrypt)));
  $e = $this->_hex2dec(bin2hex(strrev($sign_keys["ekey"])));
  $n = $this->_hex2dec(bin2hex(strrev($sign_keys["nkey"])));
  $a = $this->_bcpowmod($m, $e, $n);
  $result = $this->_shortunswap($this->_dec2hex($a));
 }

 return strtolower($result);
}

Автор: DKameleon 26.08.2007 20:21
Инит должен возвращать ноль.
В нём и пишите эхо.

Автор: globik 26.08.2007 20:41
Плиз, напиши сам, я не очень понимаю, о каком ините идет речь...

Автор: DKameleon 26.08.2007 21:05
Если выводит 9876 значит
$this->Init()

не возвращает ноль ни в одном из двух случаев.

Автор: globik 26.08.2007 21:31
я проверил: срабатывает это условие в функции init()

if (strcmp($digest, $key_data["crc"])) { return -1;  }


При этом $digest = нормальному md4

$key_data["crc"])) = LkЂ#ЬWФиdS#фъ& (крокозябики =) )

   [Склеено в [mergetime]1188153192[/mergetime]]

т.е. вероятно что то не так в функции sign(), строке

$key_data = unpack("vreserved/vsignflag/a16crc/Vlen/a*buf", $this->kwm);

Автор: DKameleon 26.08.2007 22:47
$key_data["crc"])) = LkЂ#ЬWФиdS#фъ& (крокозябики =) )

Точно. невнимательно смотрел.

Вот тут. Один то мд4 пакуем:
return pack("H*", md4($data));

Знач и второй надо:
return pack("H*", hash('md4', $data));

Автор: DKameleon 27.08.2007 01:15
Небольшой апдейт. Учтены пожелания, багрепорты и просто внесены мелкие правки:
http://my-tools.net/files/wmxi-20070827.zip


   * MD4. Cобран в один класс.
   * MD4. Добавлена возможность самотестирования.
   * WMXI. Довавлена проверка существования сертификата на диске.
   * WMSigner. Автоматическое переключение между доступными MD4 реализациями.
   * WMSigner. Добавлено информирование об ошибках.
   * WMSigner. Добавлена возможность передачи ключа в виде бинарных данных.
   * check.php. Расширен код тестера.
   * X7. Добавлена поддержка Firefox.

Как обычно, отзеркалено на сорсфорже smile.gif
https://sourceforge.net/project/showfiles.p...ckage_id=229330

Автор: globik 27.08.2007 07:58
гыг =) Большое спасибо


ps только зря убрали такую хорошую штуку, как example.php

Автор: DKameleon 27.08.2007 12:13
ps только зря убрали такую хорошую штуку, как example.php

там есть папка examples - в ней все примеры есть.

Автор: barlone 28.08.2007 14:14
Наткнулся на хостинг, где нет bcmath, но есть gmp. Можно добавить в начало function _bcpowmod:
if (function_exists("gmp_powm")) {
$result = gmp_strval(gmp_powm($m, $e, $n));
}

Автор: DKameleon 28.08.2007 15:39
спасибо, посмотрю smile.gif

Автор: Cerber 14.09.2007 17:57
Так народ только не кричите.
Я ну никак не могу понять как в интерфейсе Х7 получить строку от клиента. Т.е. что именно надо ему переслать или это делаеться как нить по другому. Объясните пожалуйса.

Автор: DKameleon 14.09.2007 18:17
в комплекте есть пример.
Строка клиенту передаётся через АктивХ. Смотрите яваскрипты в примере.

Автор: Cerber 20.09.2007 07:46
DKameleon сказал
в комплекте есть пример.
Строка клиенту передаётся через АктивХ. Смотрите яваскрипты в примере.

Как я понимаю. Данный пример работает при авторизации через Keeper Clessic версию. А как можно сделать запрос на авторизацию Light версии?

Автор: DKameleon 20.09.2007 12:29
Как я понимаю. Данный пример работает при авторизации через Keeper Clessic версию. А как можно сделать запрос на авторизацию Light версии?

Так и есть. про лайт версию я как-то не задумывался smile.gif
поищу материалы по возможности. может, что-то и найду полезное.

Автор: DKameleon 20.09.2007 13:08
Поискал. Вам нужно настраивать Веб-сервер:
http://www.webscript.ru/stories/04/05/29/2604693

Автор: bespalov 22.11.2007 13:14
Перенесём обсуждение сюда.

Предыдущее обсуждение. Продолжаем по теме.





print("Digest: ". bin2hex($digest). "\n");

перед

if (strcmp($digest, $key_data["crc"])) {return -1;}

Вывело:
Digest: c54c95c5e81c619b06b9a219845cbf9d
Digest: 0b313f8c129c27e723957c14c92ece00 Checksum failed. KWM password invalid.


Автор: DKameleon 22.11.2007 16:33
Что выдаёт check.php?

Автор: bespalov 22.11.2007 23:44
Все плюсы .

Автор: DKameleon 23.11.2007 00:50
Лучше отвечать максимально подробно, а то так до второго пришествия играться будем. Какие из MD4 реализаций найдены?

Наиболее часто возникающая проблема - не срабатывает класс MD4 на 64-разрядных системах.
Если можете самостоятельно - заодно и это проверьте.

Автор: bespalov 24.11.2007 01:00

максимально подробно


> CURL: passed [+].
> BCMath: passed [+].
> MBString: passed [+].
> XML support: passed [+].
> Looking for available MD4 implementations:
+ MHash
+ Hash
+ MD4 Class
Summary: passed [+].



Наиболее часто возникающая проблема - не срабатывает класс MD4 на 64-разрядных системах.
Если можете самостоятельно - заодно и это проверьте.


Что это значит и как это сделать ?

Спасибо, за внимание

Автор: DKameleon 24.11.2007 01:22
Что это значит и как это сделать ?

Судя по наличию MHash и Hash, это го делать не понадобится.

Есть подозрение, что вы указали не тот пароль. Необходим пароль от резервной копии файла ключей. Заливать на сервер надо так же резервную копию файла ключей.
Попробуйте установить более короткий пароль на резервную копию.
Я не вижу других проблемных мест.

Ещё так же можете попробовать на другом хостинге.

В крайнем случае можете предоставить мне доступ или резервную копию - я проверю самостоятельно.

Автор: bespalov 24.11.2007 01:29

Есть подозрение, что вы указали не тот пароль. Необходим пароль от резервной копии файла ключей. Заливать на сервер надо так же резервную копию файла ключей.
Попробуйте установить более короткий пароль на резервную копию.
Я не вижу других проблемных мест.


Раскажу всё по порядку:
1. Зашёл в Вебмани Кипер.
2. Сохранил ключи, указал самый лёгкий пароль из одной цифры
3. Залил ключи на хостинг (файл *.kwm) в бинарном режиме
4. Изменил пароль в wmsinger.php.
5. Зашёл вспомощью браузера на examples/x11.php
6. Ввёл идентификатор и нажал проверить
7. Получил результат:

Digest: 4ce5734f2d4f8390c55899559a0c9305 Digest: 06b75a462dd4556d7910c0ed0695681d Checksum failed. KWM password invalid.

Что делать дальше ?
Помогите если можете...

Автор: bespalov 24.11.2007 01:41
А если я сижу в кипере на этом wmid + хочу его использовать на сервере.

Может в этом ошибка ?

Автор: DKameleon 24.11.2007 02:24
А если я сижу в кипере на этом wmid + хочу его использовать на сервере.

Нет. Это не влияет.

4. Изменил пароль в wmsinger.php.

Почему там?
Все параметры, в том числе и пароли и пути и ВМИД указываются в
_header.php

файлы md4.php, wmsigner.php, wmxi.php, wmxiparser.php
редактировать не надо.
Видимо ваш пароль был успешно затёрт настройками из _header.php

Автор: DKameleon 5.12.2007 03:52
Версия скриптов обновлена smile.gif
Добавил X13 - X16 интерфейсы.

Автор: Random 12.12.2007 23:00
Мааленький вопрос. Как пользоваться функцией подписи запросов Sign($data, $wmid, $pass, $kwm) ?
То есть я эмулирую оплату вебманями на каком-то сайте, дохожу до момента, где есть кнопка "Далее >>" и тут мне нужно отправить данные формы с подписанной строкой.
Соответственно вопрос состоит в том, что пихать в $data? Что конкретно нужно подписать в таком случае? Какой передаваемый параметр?

Автор: DKameleon 12.12.2007 23:36
То же, что и передаётся в AcceptWM.SignString() яваскриптом

Автор: Random 12.12.2007 23:48
Нашёл в коде такое:
var PlanString = '<access><url>merchant.webmoney.ru</url><datetime>2007-12-12 23:15:12</datetime><marker>425531472</marker></access>';

Потом эта переменная отдаётся в AcceptWMObj.SignString();
Я так понимаю это как раз то, что мне нужно

ээ... только ничего что оно в xml формате? Sign тоже принимает $data в xml формате?

Автор: DKameleon 13.12.2007 00:07
функция принимает любую строку в любом формате.

Автор: Random 13.12.2007 00:28
По ходу работы возникла проблема.
Sing() отвечает "KWM file not found or KWM data invalid"
Путь до файла указан правильный, 164 байта, залит на фтп в бинарном режиме. Пробовал указывать как путь к файлу, так и file_get_contents(путь).
В чём может быть проблема?

Автор: DKameleon 13.12.2007 05:17
Хм... ну это сообщение выводится вот в этой проверке:

 $this->kwm = file_exists($kwm) ? file_get_contents($kwm) : $kwm;
 if (strlen($this->kwm) != 164) {
  die("KWM file not found or KWM data invalid");
 }


То есть указанный файл не был обнаружен. И передаваемые данные не были указанной длины.

Автор: Random 13.12.2007 21:25
Мда, оказывается эта ошибка выводилась в другом месте, от wmxi, у которого был неправильно указан кошелёк smile.gif Сейчас всё работает, но вебманя упорно не хочет кушать подписанную строчку, говорит - неправильно. Посмотрел у вас в примере x7 сделано так же, то есть на подпись отдаётся xml.

Ну да ладно, думаю здесь уже придётся самому ковыряться. Спасибо за помощь, отличные скрипты.

Автор: Niksen 14.12.2007 05:04
Мда, оказывается эта ошибка выводилась в другом месте, от wmxi, у которого был неправильно указан кошелёк  Сейчас всё работает, но вебманя упорно не хочет кушать подписанную строчку, говорит - неправильно. Посмотрел у вас в примере x7 сделано так же, то есть на подпись отдаётся xml.

Я не сильно слежу за темой, так что может вообще не по делу скажу.
Передавайте в xml-запросе строку для подписи так: <![CDATA[$string]]>

Автор: Random 18.12.2007 13:14
XML сервисы вроде даже не понадобились. Практически сделал всё, то есть думал что сделал, но неожиданно вебманя стала делать финт ушами.
Если запустить на компе кипер, затем уже на сервере запустить скрипт, эмулирующий оплату, то всё проходит нормально, а если кипер выключить, то он как-то его палит. Все куки, которые вебманя шлёт я ловлю и показываю.
Вопрос, как она палит кипер в онлайне?

Автор: DKameleon 18.12.2007 16:32
Вопрос, как она палит кипер в онлайне?

гы smile.gif) ну и спросили же!
Кипер авторизуется на сервере! smile.gif

Автор: Random 18.12.2007 22:36
DKameleon сказал
гы smile.gif) ну и спросили же!
Кипер авторизуется на сервере! smile.gif

Эм) Ну да, глупый вопрос. Это тогда нужно использовать авторизацию из X7 перед тем как нажимать кнопку "Далее >>"?

Автор: DKameleon 18.12.2007 22:39
При чём тут интерфейсы вообще?
Кипер должен быть подключен и авторизован на сервере по своему протоколу.

Автор: Random 21.12.2007 20:58
Грустно. Как это сделать пхпой на сервере - не представляю.

Автор: DKameleon 21.12.2007 21:13
Как это сделать пхпой на сервере - не представляю.

судя по всему - никак smile.gif

Автор: Random 21.12.2007 21:56
Попробую ещё покурить WM Keeper Light, но там скорее всего тоже свои заморочки

Автор: smile 28.01.2008 01:06
Неработает X4 sad.gif

X1 буквально проверил работает. X4 в examples не выдаёт ничего.

$result = curl_exec($ch); выдаёт:

Error converting data type numeric to int. step=125

Помогите, пожалуйста, c этим чудом. Что это такое?

Автор: DKameleon 28.01.2008 01:20
Error converting data type numeric to int. step=125

Помогите, пожалуйста, c этим чудом. Что это такое?

Какие параметры Вы передаёте?

Автор: smile 28.01.2008 02:00
Номер кошелька продавца: R401435851399

WMID получателя 111678365068

Номер чека: 2

Точное время: 20080128 01:49:43

поэтому минимальное и максимальное время соотсветсвенно проверяю:

20080128 01:48:43 и 20080128 01:50:43

Отдачи никакой.

Автор: DKameleon 28.01.2008 02:10
Отдачи никакой.

форма примера, на который Вы ссылаетесь, содержит другой список параметров.

Автор: smile 28.01.2008 13:05
номер кошелька для оплаты на который которого выписывался счет : R401435851399
номер счета (в системе WebMoney): 111678365068
номер счета: 2
минимальное время и дата создания счета: 20080128 01:48:43
максимальное время и дата создания счета: 20080128 01:50:43

Вот эти параметры и их значения, передаваемые, в форме к интерфейсу X4

Автор: DKameleon 28.01.2008 13:23
номер счета (в системе WebMoney): 111678365068

Это должен быть не ВМИД, а именно внутренний номер счёта. если не знаете - оставляйте пустым.

Автор: smile 28.01.2008 13:29
Спасибо за реализацию, спасибо за помощь.

Иногда в голову вдаривает даже такую мелочь неразличаю как внутренний номер счёта и wmid smile.gif

Автор: idestr 6.03.2008 19:17
У меня непонятная ошибка в интерфейсе Х4...
номер кошелька для оплаты на который которого выписывался счет : U910122614213
номер счета (в системе WebMoney): 0
номер счета: 0
минимальное время и дата создания счета: 20080301 18:00:00
максимальное время и дата создания счета: 20080401 18:00:00

После обработки запроса переменная $response содержит ответ системы с перечнем счетов. Но при выполнении функции $structure = $parser->Parse($response, DOC_ENCODING) в переменной $structure содержится пустой массив.

После ковыряния класса WMXIParser я добавил вывод информации про ошибку XML парсера. Получил следующий ответ:

$this->error_code = 4
$this->error_string = not well-formed (invalid token)
$this->current_line = 2
$this->current_column = 272

Вот что содержится в переменной $response:


<?xml version="1.0" encoding="windows-1251" ?><w3s.response><reqn>120481985425188</reqn><outinvoices cnt="15" cntA="0">
<outinvoice id="43892059" ts="43892124"><orderid>0</orderid><storepurse>U910122614213</storepurse><customerwmid>286576521774</customerwmid><amount>100</amount><datecrt>20080305 19:24:12</datecrt><dateupd>20080305 19:25:10</dateupd><state>3</state><address><![CDATA[69067, г.Запорожье, ул.ХХХХХХХХХХ, кв.ХХХ]]></address><desc><![CDATA[Оплата за интернет]]></desc><period>0</period><expiration>3</expiration><wmtranid>0</wmtranid><customerpurse></customerpurse></outinvoice>
<outinvoice id="43894091" ts="43896518"><orderid>10</orderid><storepurse>U910122614213</storepurse><customerwmid>286576521774</customerwmid><amount>0.01</amount><datecrt>20080305 19:48:10</datecrt><dateupd>20080305 20:16:22</dateupd><state>3</state><address><![CDATA[мой адрес не дом и не улица]]></address><desc><![CDATA[тестирование X1 wmxi]]></desc><period>0</period><expiration>1</expiration><wmtranid>0</wmtranid><customerpurse></customerpurse></outinvoice>
<outinvoice id="43896401" ts="43896528"><orderid>101</orderid><storepurse>U910122614213</storepurse><customerwmid>286576521774</customerwmid><amount>0.01</amount><datecrt>20080305 20:14:49</datecrt><dateupd>20080305 20:16:29</dateupd><state>3</state><address><![CDATA[69067, г.Запорожье, ул.ХХХХХХХХХХ, кв.ХХХ]]></address><desc><![CDATA[Оплата за интернет]]></desc><period>0</period><expiration>3</expiration><wmtranid>0</wmtranid><customerpurse></customerpurse></outinvoice>
<outinvoice id="43897088" ts="43898458"><orderid>101</orderid><storepurse>U910122614213</storepurse><customerwmid>286576521774</customerwmid><amount>0.01</amount><datecrt>20080305 20:22:59</datecrt><dateupd>20080305 20:38:18</dateupd><state>3</state><address><![CDATA[69067, г.Запорожье, ул.ХХХХХХХХХХ, кв.ХХХ]]></address><desc><![CDATA[Оплата за интернет]]></desc><period>0</period><expiration>3</expiration><wmtranid>0</wmtranid><customerpurse></customerpurse></outinvoice>
<outinvoice id="43897371" ts="43898457"><orderid>101</orderid><storepurse>U910122614213</storepurse><customerwmid>286576521774</customerwmid><amount>0.01</amount><datecrt>20080305 20:26:14</datecrt><dateupd>20080305 20:38:17</dateupd><state>3</state><address><![CDATA[69067, г.Запорожье, ул.ХХХХХХХХХХ, кв.ХХХ]]></address><desc><![CDATA[Оплата за интернет]]></desc><period>0</period><expiration>3</expiration><wmtranid>0</wmtranid><customerpurse></customerpurse></outinvoice>
<outinvoice id="43897517" ts="43898424"><orderid>101</orderid><storepurse>U910122614213</storepurse><customerwmid>286576521774</customerwmid><amount>0.01</amount><datecrt>20080305 20:27:41</datecrt><dateupd>20080305 20:38:00</dateupd><state>3</state><address><![CDATA[69067, г.Запорожье, ул.ХХХХХХХХХХ, кв.ХХХ]]></address><desc><![CDATA[Оплата за интернет]]></desc><period>0</period><expiration>3</expiration><wmtranid>0</wmtranid><customerpurse></customerpurse></outinvoice>
<outinvoice id="43897623" ts="43898454"><orderid>101</orderid><storepurse>U910122614213</storepurse><customerwmid>286576521774</customerwmid><amount>0.01</amount><datecrt>20080305 20:28:33</datecrt><dateupd>20080305 20:38:15</dateupd><state>3</state><address><![CDATA[69067, г.Запорожье, ул.ХХХХХХХХХХ, кв.ХХХ]]></address><desc><![CDATA[Оплата за интернет]]></desc><period>0</period><expiration>3</expiration><wmtranid>0</wmtranid><customerpurse></customerpurse></outinvoice>
<outinvoice id="43897838" ts="43898449"><orderid>1</orderid><storepurse>U910122614213</storepurse><customerwmid>286576521774</customerwmid><amount>0.01</amount><datecrt>20080305 20:30:51</datecrt><dateupd>20080305 20:38:14</dateupd><state>3</state><address><![CDATA[мой адрес не дом и не улица]]></address><desc><![CDATA[тестирование X1 wmxi]]></desc><period>0</period><expiration>1</expiration><wmtranid>0</wmtranid><customerpurse></customerpurse></outinvoice>
<outinvoice id="43898205" ts="43898448"><orderid>102</orderid><storepurse>U910122614213</storepurse><customerwmid>286576521774</customerwmid><amount>0.01</amount><datecrt>20080305 20:35:32</datecrt><dateupd>20080305 20:38:12</dateupd><state>3</state><address><![CDATA[69067, г.Запорожье, ул.ХХХХХХХХХХ, кв.ХХХ]]></address><desc><![CDATA[Оплата за интернет]]></desc><period>0</period><expiration>3</expiration><wmtranid>0</wmtranid><customerpurse></customerpurse></outinvoice>
<outinvoice id="43942874" ts="43944073"><orderid>1</orderid><storepurse>U910122614213</storepurse><customerwmid>286576521774</customerwmid><amount>0.01</amount><datecrt>20080306 13:51:58</datecrt><dateupd>20080306 14:07:27</dateupd><state>3</state><address><![CDATA[мой адрес не дом и не улица]]></address><desc><![CDATA[тестирование X1 wmxi]]></desc><period>0</period><expiration>1</expiration><wmtranid>0</wmtranid><customerpurse></customerpurse></outinvoice>
<outinvoice id="43943274" ts="43944070"><orderid>2</orderid><storepurse>U910122614213</storepurse><customerwmid>286576521774</customerwmid><amount>0.01</amount><datecrt>20080306 13:57:02</datecrt><dateupd>20080306 14:07:25</dateupd><state>3</state><address><![CDATA[мой адрес не дом и не улица]]></address><desc><![CDATA[тестирование X1 wmxi]]></desc><period>0</period><expiration>1</expiration><wmtranid>0</wmtranid><customerpurse></customerpurse></outinvoice>
<outinvoice id="43943334" ts="43944065"><orderid>3</orderid><storepurse>U910122614213</storepurse><customerwmid>286576521774</customerwmid><amount>0.01</amount><datecrt>20080306 13:57:59</datecrt><dateupd>20080306 14:07:24</dateupd><state>3</state><address><![CDATA[мой адрес не дом и не улица]]></address><desc><![CDATA[тестирование X1 wmxi]]></desc><period>0</period><expiration>1</expiration><wmtranid>0</wmtranid><customerpurse></customerpurse></outinvoice>
<outinvoice id="43943526" ts="43944058"><orderid>4</orderid><storepurse>U910122614213</storepurse><customerwmid>286576521774</customerwmid><amount>0.01</amount><datecrt>20080306 14:00:21</datecrt><dateupd>20080306 14:07:23</dateupd><state>3</state><address><![CDATA[мой адрес не дом и не улица]]></address><desc><![CDATA[тестирование X1 wmxi]]></desc><period>0</period><expiration>1</expiration><wmtranid>0</wmtranid><customerpurse></customerpurse></outinvoice>
<outinvoice id="43943751" ts="43944055"><orderid>5</orderid><storepurse>U910122614213</storepurse><customerwmid>286576521774</customerwmid><amount>0.01</amount><datecrt>20080306 14:03:26</datecrt><dateupd>20080306 14:07:21</dateupd><state>3</state><address><![CDATA[мой адрес не дом и не улица]]></address><desc><![CDATA[тестирование X1 wmxi]]></desc><period>0</period><expiration>1</expiration><wmtranid>0</wmtranid><customerpurse></customerpurse></outinvoice>
<outinvoice id="43943912" ts="43944046"><orderid>6</orderid><storepurse>U910122614213</storepurse><customerwmid>286576521774</customerwmid><amount>0.01</amount><datecrt>20080306 14:05:42</datecrt><dateupd>20080306 14:07:19</dateupd><state>3</state><address><![CDATA[мой адрес не дом и не улица]]></address><desc><![CDATA[тестирование X1 wmxi]]></desc><period>0</period><expiration>1</expiration><wmtranid>0</wmtranid><customerpurse></customerpurse></outinvoice>
</outinvoices>
<retval>0</retval><retdesc></retdesc></w3s.response>


Как с таким воевать?

Автор: idestr 7.03.2008 17:40
Не знаю почему, но после того, как я преобразовал ответ сервера из кодировки Вин-1251 в УТФ-8, то все заработало...

было:


               $structure = $parser->Parse($response,DOC_ENCODING);


стало:

               $response = iconv('CP1251','UTF-8',$response);
               $structure = $parser->Parse($response,DOC_ENCODING);

Автор: DKameleon 9.03.2008 02:52
Можно и так конечно.
А ещё можно в классе парсера указать принудительно кодировку 1251

Автор: samland 21.03.2008 09:37
Подскажите, как через x3.php получать уникальный номер платежа в системе учета WebMoney в виде переменной?

Автор: DKameleon 21.03.2008 11:09
в примере раскомментируйте строку 85
<!--pre><?=htmlspecialchars(print_r(@$structure, true), ENT_QUOTES);?></pre-->

вы получите полностый массив с данными.

или вот тут сделайте вывод:
  $items = @$structure["0"]["node"]["1"]["node"];
  $items = is_array($items) ? $items : array();
  foreach($items as $k => $v) {
   $vv = $parser->Reindex($v["node"], true);
print_r($v);

тогда увидите, откуда брать это значение. оно будет с ключом "@id"

Автор: samland 21.03.2008 11:27
значение-то вижу, а вот как его через парсер получить?
например как можно сразу получить $vv["pursesrc"]...

Автор: DKameleon 21.03.2008 12:39
массив тут покажите. я не помню по памяти.

Автор: samland 21.03.2008 14:43
<?
$items = @$structure["0"]["node"]["1"]["node"];
$items = is_array($items) ? $items : array();
foreach($items as $k => $v) {
$vv = $parser->Reindex($v["node"], true);
print_r($v);
?>

выдает:

Array
(
[name] => operation
[data] =>
[@] => Array
(
[ID] => 90004534
[TS] => 90004534
)

[node] => Array
(
[0] => Array
(
[name] => pursesrc
[data] => Z418504270373
)

[1] => Array
(
[name] => pursedest
[data] => Z156781808881
)
....

[13] => Array
(
[name] => rest
[data] => 349.30
)

)

)


<?
$items = @$structure["0"]["node"]["1"]["node"];
$items = is_array($items) ? $items : array();
foreach($items as $k => $v) {
$vv = $parser->Reindex($v["node"], true);
print_r($vv);
?>

выдает:

Array
(
[pursesrc] => Z....
[pursedest] => Z....
[amount] => 1000.00
[comiss] => 8.00
[opertype] => 0
[wminvid] => 0
[orderid] => 0
[tranid] => 0
[period] => 0
[desc] => ...
[datecrt] => 20080321 00:03:46
[dateupd] => 20080321 00:03:46
[corrwm] => 190558282370
[rest] => 49.30
)

в ооп пхп не силен, понятно что в wmxiparser.php нужно видимо функцию добавлять, а вот как...

Автор: DKameleon 21.03.2008 15:00
вот и отлично.


<?
$items = @$structure["0"]["node"]["1"]["node"];
$items = is_array($items) ? $items : array();
foreach($items as $k => $v) {
$vv = $parser->Reindex($v["node"], true);
print_r($v["data"]["@"]["ID"]);
?>

Автор: samland 21.03.2008 15:24
точнее - print_r($v["@"]["ID"]);

огромное спасибо!!!

Автор: samland 23.03.2008 17:43
Еще один вопрос...
Пытаюсь сделать интерфейс просмотра своих заявок на бирже wm.exchanger.

В инструкции значит:

Описание тэгов запроса:
wmid - 12 цифр - ВМ-идентификатор, чьи новые заявки необходимо вернуть в результате запроса
signstr - 132-символьная цифровая подпись (ключами .kwm идентификатора wmid) значений 3-х тэгов запроса склееных в одну строку без пробелов "wmid + type + queryid" (формирование цифровой подписи см. в описании общих ВМ-интерфейсов для разработчиков)
type - тип запроса, число:
0 - вернуть только неоплаченные заявки
1 - вернуть оплаченные заявки, но еще не погашенные (по которым еще идет обмен)
2 - вернуть только уже погашенные заявки
3 - вернуть все заявки независимо от сосотояния
queryid - номер (id) новой заявки идентификатора wmid, информацию по которой необходимо вернуть, если параметр не указан, то возвращаются последние 20 новых заявок данного идентификатора по типу запроса


Сделал функцию в wmxi.php:

# interface ñïèñêà ñâîèõ çàÿâîê íà áèðæå
function X006($wmid, $type, $queryid) {

$data["wmid"] = $wmid;
$data["type"] = $type;
$data["queryid"] = $queryid;
$data["signstr"] = $this->_sign($data["wmid"].$data["type"].$data["queryid"]);
print_r($data);

$xml = $this->_xml2($data);
$url = $this->classic ? WMXI_URL_CLASSIC_X006 : WMXI_URL_LITE_X006;
$result = $this->_request($url, $xml);
return $result;
}

Работает, только когда указываешь queryid,
если не указывать, выдает ошибку:
(в запросе wmid=425844354718 , type=3, queryid=)

Код ошибки: -10
Описание ошибки: - Подпись не прошла проверку. Вы уверены что производили цифровую подпись ключами ВМ-идентификатора 425844354718 и подписывали строку 4258443547183-1


Как победить? Интересно именно выдрать список своих последних заявок, без указания queryid

Спасибо заранее!

Автор: DKameleon 23.03.2008 18:58
у вас не ясно, что именно вы указываете, но судя по описанию ошибки всё же "-1"

передавайте ноль, или пустую строку ""


   [Склеено в [mergetime]1206287983[/mergetime]]

Кстати, если протестируете все интерфейсы и скинете мне - могу в новой версии добавить в комплект и опубликовать wink.gif

Автор: samland 23.03.2008 19:20
непонятно, откуда берется -1

указывал и пустую строку,
выдает ошибку, указанную выше,
и 0, выдает
Array ( [wmid] => 425844354718 [type] => 3 [queryid] => 0 [signstr] => 6df09540f34b00fdfcd2522af1c20e0749534daba16a73163371ffc0223c72d8d2dcd909cc399f643b61ac140a56669a64c02967a1589cf61c30f16203725e250113 )
Warning: Invalid argument supplied for foreach() in /.../wmxiparser.php on line 62


пробовал даже из функции в wmxi.php совсем убирать передачу $data["queryid"] в _sign, выдает все равно
"Код ошибки: -10
Описание ошибки: - Подпись не прошла проверку. Вы уверены что производили цифровую подпись ключами ВМ-идентификатора 425844354718 и подписывали строку 4258443547183-1"

Автор: DKameleon 23.03.2008 20:12
попробуйте для начала внутри функции:
$this->_sign()
вывести то, что поступает на вход.

Автор: Nazaret2005 23.03.2008 20:57
Как понять это examples/x7.php

Результат: no
Код ошибки: 0
Описание ошибки:

?

Автор: DKameleon 23.03.2008 23:14
http://wiki.webmoney.ru/wiki/show/%D0%98%D...%D0%B9%D1%81+X7

0 – запрос выполнен
no – аутентификация не выполнена (неверная подпись клиента)

Автор: samland 23.03.2008 23:42
а там и стоит print_r($data);

Array ( [wmid] => 425844354718 [type] => 3 [queryid] => 0 [signstr] => 6df09540f34b00fdfcd2522af1c20e0749534daba16a73163371ffc0223c72d8d2dcd9
09cc399f643b61ac140a56669a64c02967a1589cf61c30f16203725e250113 )

Автор: Nazaret2005 24.03.2008 00:30
DKameleon сказал
http://wiki.webmoney.ru/wiki/show/%D0%98%D...%D0%B9%D1%81+X7

0 – запрос выполнен
no – аутентификация не выполнена (неверная подпись клиента)

Что я не понял,где мне её взять ? и куда вписать ?

спасибо за ответ

Автор: DKameleon 24.03.2008 00:43
Что я не понял,где мне её взять ?

а зачем вам тогда х7 ? smile.gif

а там и стоит print_r($data);

не там стоит smile.gif если бы стояло там, то просто получилась бы строка, которая БУДЕТ подписываться, а не сама подпись smile.gif

Автор: samland 24.03.2008 08:55
Точно...
# external sign function
function _sign($data) {
print_r($data);
$text = $this->_change_encoding($data, "windows-1251");
return Sign($text, $this->wmid, $this->pass, $this->kwm);
}


Выдает просто 4258443547183

Автор: DKameleon 24.03.2008 13:57
Выдает просто 4258443547183

вот там вконце нет нолика. попробуйте чтобы он там был.
например задайте "0" в кавычках в качестве queryid

Автор: samland 24.03.2008 14:33
42584435471830
Warning: Invalid argument supplied for foreach() in /home/.../wmxiparser.php on line 62

Автор: DKameleon 24.03.2008 14:44
ещё бы промежуточный результат между этими двумя строками smile.gif ХМЛка с сервера.

Автор: samland 24.03.2008 14:53
хм...

<!--pre>&lt;?xml version=&quot;1.0&quot;?&gt;&lt;wm.exchanger.response&gt;An error occurred on the server when processing the URL. Please contact the system administrator.</pre-->
<!--pre>Array

оно?

Автор: DKameleon 24.03.2008 14:59
оно?

оно. судя по ответу, ошибка где-то на сервере.
к сожалению, с этими интерфейсами я не работал, поэтому о подводных камнях не в курсе.

Автор: samland 24.03.2008 20:33
пробую общаться с саппортом эксчейнжера, просыт прислать запрос, отсылаемый на интерфейс, как его посмотреть в чистом виде?

Автор: DKameleon 24.03.2008 21:30
Запрос в чистом виде вы передаёте сюда:
$result = $this->_request($url, $xml);
вторым параметром.

Автор: barlone 25.03.2008 07:11
samland сказал
непонятно, откуда берется -1

Я тоже не понимаю, откуда берется -1, однако если передавать в queryid -1 и подписывать соответственно строку с -1, то все работает - проверено smile.gif

Автор: samland 25.03.2008 10:03
попробовал с -1
<!--pre>&lt;?xml version=&quot;1.0&quot;?&gt;&lt;wm.exchanger.response&gt;An error occurred on the server when processing the URL. Please contact the system administrator.</pre-->
<!--pre>Array

тоже самое(

Автор: barlone 25.03.2008 14:08
Это у вас когда выдается ?

"Код ошибки: -10
Описание ошибки: - Подпись не прошла проверку. Вы уверены что производили цифровую подпись ключами ВМ-идентификатора 425844354718 и подписывали строку 4258443547183-1"

Верните всё к тому состоянию, когда выдвалась эта ошибка. Потом поставьте -1 в queryid.

Автор: barlone 25.03.2008 14:24
Попробуйте по-простому:
<?
include("wmsigner.php");

$wmid='425844354718';
$password='mypassword';
$type=1;
$queryid=-1;

$signstr=Sign($wmid.$type.$queryid,$wmid,$password,"$wmid.kwm");

$qry="<wm.exchanger.request>
<wmid>$wmid</wmid>
<signstr>$signstr</signstr>
<type>$type</type>
<queryid>$queryid</queryid>
</wm.exchanger.request>";
$r=curl_init('https://wm.exchanger.ru/asp/XMLWMList2.asp');
curl_setopt($r,CURLOPT_SSL_VERIFYHOST,1);
curl_setopt($r,CURLOPT_SSL_VERIFYPEER,'');
curl_setopt($r,CURLOPT_POST,1);
curl_setopt($r,CURLOPT_POSTFIELDS,$qry);
curl_exec($r);
?>

У меня это работает.

Автор: barlone 28.03.2008 09:12
Сапорт работает smile.gif http://forum.webmoney.ru/Default.aspx?g=posts&t=8224

Автор: samland 31.03.2008 21:04
интерфейс x3 сегодня начал выдавать Type mismatch step=7
у всех так, или что-то у меня сломалось?

Автор: samland 31.03.2008 21:41
попробовал на другом хостинге - работает.
и на моем (мастерхост) работало днем
что могло случиться?

Автор: DKameleon 31.03.2008 21:46
а ХМЛ запроса не покажете целиком?

Автор: samland 31.03.2008 21:56
print_r($xml);

<w3s.request>
<reqn>120698828714878</reqn>
<getoperations>
<purse>Z418504270373</purse>
<wmtranid>0</wmtranid>
<tranid>0</tranid>
<wminvid>0</wminvid>
<orderid>0</orderid>
<datestart>20080331 00:00:00</datestart>
<datefinish>20080331 23:59:00</datefinish>
</getoperations>
</w3s.request>

   [Склеено в [mergetime]1206989835[/mergetime]]

остальные интерфейсы (перевод средств, определение кошеля по вмид) работают

Автор: DKameleon 31.03.2008 22:07
попробуйте вместо нулей указывать пустую строку.
возможно внесли какие-то изменения, но в вике они ещё не описаны.

Автор: samland 31.03.2008 22:16
тоже самое...

Автор: Yuriy 1.04.2008 10:52
Аналогичная стуация.

отвтет на запрос приходит такой

RETVAL = -2146828275
RETDESC = Type mismatch step=7

причем только если на https://w3s.wmtransfer.com/asp/XMLOperationsCert.asp
запрос с авторизацией по ключами WM Keeper Light и только Х3 интерфейс

перешел на ключи от классика, запрос на https://w3s.webmoney.ru/asp/XMLOperations.asp

Так работает без проблем.

отписал в суппорт ... жду ответа...

Автор: samland 1.04.2008 13:33
заработало само...

Автор: samland 5.04.2008 15:22
Новая проблема )

Интерфейс Х11.php. Через ключи лайта

<request>
<passportwmid>425844354718</passportwmid>
<params>
<dict>0</dict>
<info>1</info>
<mode>0</mode>
</params>
</request>


Выдает <!--pre>&lt;?xml version='1.0' encoding='windows-1251'?&gt;&lt;response retval='11' retdesc='ошибка при проверке входных параметров. не указан один из параметров'&gt;&lt;/response&gt;</pre-->

Код ошибки 11.

В чем проблема?

Автор: DKameleon 5.04.2008 15:38
В чем проблема?

и как вы их только находите? smile.gif

попробуйте сформировать запросы согласно примеров:
http://passport.webmoney.ru/asp/infoXMLGetWMPassport.asp#ex


Автор: DKameleon 9.04.2008 00:04
Хакеры распоясались. Уже сканируют сайты на наличие стандартных файлов и директорий:
77.222.40.206 - - [08/Apr/2008:17:29:29 +0400] "GET /version/examples/x1.php HTTP/1.1" 404 14140 "-" "-"
77.222.40.206 - - [08/Apr/2008:17:29:29 +0400] "GET /wmxi/examples/x1.php HTTP/1.1" 404 14140 "-" "-"
77.222.40.206 - - [08/Apr/2008:17:29:30 +0400] "GET /version/wmxi/examples/x1.php HTTP/1.1" 404 15600 "-" "-"
77.222.40.206 - - [08/Apr/2008:17:29:30 +0400] "GET /wmxi.php HTTP/1.1" 404 14140 "-" "-"
77.222.40.206 - - [08/Apr/2008:17:29:30 +0400] "GET /version/wmxi.php HTTP/1.1" 404 14140 "-" "-"
77.222.40.206 - - [08/Apr/2008:17:29:31 +0400] "GET /wmxi/wmxi.php HTTP/1.1" 404 14140 "-" "-"
77.222.40.206 - - [08/Apr/2008:17:29:31 +0400] "GET /wmxi/version/wmxi.php HTTP/1.1" 404 12680 "-" "-"
77.222.40.206 - - [08/Apr/2008:17:29:31 +0400] "GET /WebMoneyCA.crt HTTP/1.1" 404 14140 "-" "-"
77.222.40.206 - - [08/Apr/2008:17:29:32 +0400] "GET /version/WebMoneyCA.crt HTTP/1.1" 404 14140 "-" "-"
77.222.40.206 - - [08/Apr/2008:17:29:32 +0400] "GET /wmxi/version/WebMoneyCA.crt HTTP/1.1" 404 14140 "-" "-"
77.222.40.206 - - [08/Apr/2008:17:29:32 +0400] "GET /WMSigner.ini HTTP/1.1" 404 14140 "-" "-"
77.222.40.206 - - [08/Apr/2008:17:29:33 +0400] "GET /config.ini HTTP/1.1" 404 14140 "-" "-"
77.222.40.206 - - [08/Apr/2008:17:29:33 +0400] "GET /config.inc HTTP/1.1" 404 14140 "-" "-"

Так что господа-товарищи, не оставляйте файлы и папки на виду со стандартными названиями и тем более с примерами smile.gif

Автор: smsserv 7.06.2008 22:38
DKameleon!
Спасибо за скрипты - работают хорошо и быстро.

У меня скорость работы повысилась в несколько раз по сравнению с версией с компиляцией и т.п.

Очень нужную вещь сделал.

Меня интересует вопрос: на основе твоих скриптов работу с кошельками БА сервиса capitaller может кто-то привести примеры?
Интересует больше всего перевод средств с кошельков БА в автоматьическом режиме.

Знаю, что на форуме было обсуждение уже этой темы - не надо меня пинать. Хочется примеры на основе скриптов DKameleona.

Заранее спасибо.

Автор: Ant0ha 20.06.2008 08:54
Здравствуйте.
DKameleon, огромное спасибо за сингер, но Ваш парсер не очень удобен, особенно при его модернизации постоянно путаешься с вечными node и т.д. Я сделал его через DOMxml в 30 строк, и он работает сейчас на много удобнее))).

//ПРЕОБРАЗОВАНИЕ XML ОТВЕТА В МАССИВ
function xml_to_array($response, $tag = "outinvoice"){

$doc = new Domdocumеnt();

$doc->load($response);

$poll_list = $doc->getElementsByTagname($tag);


foreach($poll_list as $poll_obj){

$id = $poll_obj->getAttribute("id");
$children = $poll_obj->childNodes;
foreach($children as $child_obj){
$key = $child_obj->nodeName;
$value = $child_obj->nodeValue;
if($key != '#text')
$orders[$id][$key] = $value;
}
}

return $orders;
}

Автор: DKameleon 20.06.2008 14:16
Я сделал его через DOMxml в 30 строк, и он работает сейчас на много удобнее))).

Дык нет проблем smile.gif)) Парсите кто чем хочет.
Вообще сам парсер там в довесок.
Кстати можно на simpleXML сделать - ещё прощк будет. Но только ПХП5.

Автор: samland 26.06.2008 08:54
Добрый день,
при большом количестве обращений к скрипту интерфейса выплат периодически вылетает create error step=13.
С чем это может быть связано и как бороться?

Автор: DKameleon 26.06.2008 14:49
периодически вылетает create error step=13.

это не код ошибки, а её описание. Давайте код ошибки.

Автор: samland 27.06.2008 00:01
109 помнится
может ли это быть связано с тем, что для уникального номера операции используется timestamp ?

Автор: DKameleon 27.06.2008 02:22
может ли это быть связано с тем, что для уникального номера операции используется timestamp ?

Вполне может быть. Только в моём коде вроде не таймстамп, а микросекунды, разве что вы что-то для себя меняли. например формируете номера операций на основании таймстампа.

ПС. Что-то не вижу я такого кода в списке.

Автор: samland 27.06.2008 07:02
уточнение,
103
create error step=13

Автор: DKameleon 27.06.2008 13:35
так и есть. видимо счётчик зависящий от секунд не меняется, если два платежа проходят в пределах 1 секунды. делайте от микросекунд или автоинкремент.

Или паузу после каждого платежа на секунду-две smile.gif

Автор: Niksen 28.06.2008 23:58
... либо отправка в два потока шла параллельно, и в какой-то момент коллизия произошла с этим счетчиком.

Автор: samland 8.07.2008 07:28
Пытаюсь эксперементировать со счетчиком...
Судя по описанию X2 reqn целое без знака, макс. количество цифр - 15
Но реально если больше 10 цифр, или даже если 10 цифр, но первая цифра не единица, выдает

2147352566 Out of present range. step=9

сейчас сделал уникальный номер так:
$time1=time();
$micro=microtime();
$tt=substr("$time1",2);
$zz=substr("$micro", 2, 2);
$uni=$tt.$zz;

но не дело это...

Автор: DKameleon 8.07.2008 09:44
напишите в техсапорт, ятоб для вашего вмида счётчик сбросили.

Автор: samland 10.09.2008 01:57
102 ошибки ни у кого не было в ближайшее время?
переезжаем на новый сервер, вроде вчера все работало, сегодня 102 выдает в X2.

Автор: DKameleon 10.09.2008 03:11
переезжаем на новый сервер, вроде вчера все работало, сегодня 102 выдает в X2.

на новом сервере оказалось неправильное время.
в пределах суток всё должно прийти в норму.

Автор: samland 10.09.2008 07:09
Кстати да, меняли время на сервере.
Никогда бы не подумал, спасибо!

Автор: samland 10.09.2008 22:55
А на сколько минут можно время корректировать на сервере безболезненно?

Автор: DKameleon 10.09.2008 23:52
samland сказал
А на сколько минут можно время корректировать на сервере безболезненно?

алгоритмически:
нельзя откручивать назад.

реально:
обеспечьте выполнение следующего запроса только ПОСЛЕ наступления времени в которое был отправлен предыдущий.

вариант:
создайте свой механизм автоинкрементации reqn, не зависящий от времени:
# generate reqn
function _reqn() {
 list($usec, $sec) = explode(" ", substr(microtime(), 2));
 return substr($sec.$usec, 0, 15);
}

wmxi.php

Автор: koket 12.09.2008 12:44
Здравствуйте! У меня вопрос! Делаю X9 по примеру который выложен на WebMoney.ru на JScript. У меня не получается авторизовать свой сертификат. Выводится следующее :
error:-7ff8d0f4
desc:A certificate is required to complete client authentication


Сертификат я импортировал к IE. В чем может быть проблемма?

Автор: DKameleon 12.09.2008 15:38
Делаю X9 по примеру который выложен на WebMoney.ru на JScript

вы явно темой ошиблись smile.gif

Автор: 2nik 15.09.2008 13:10
Добрый день
уже неделю читаю форум, но никак не могут найти ответ на свою проблему.
одним словом, когда отправляю пост запрос на сервер вебмани (в Х9 через вмсигнер DKameleon), от приходит ответ

Код ошибки: -5
    Описание ошибки: Неверная подпись:681326234411122147353534439 step=17


Сам запрос сформирован:


<w3s.request>
<reqn>122147353534439</reqn>
<wmid>xx45082836xx</wmid>
<sign>3044e21b53274409b7fd61eea57bbc7c8a8aa98a15288366db21a9a3a3db6fcbe510c67e602432ccb8851b9516961708494548edf5c8669ebf173cf66ce84d4a</sign>
<getpurses>
<wmid>xx13262344xx</wmid>
</getpurses>
</w3s.request>


Уважаемые форумчане! Помогите smile.gif

Автор: DKameleon 15.09.2008 14:42
а другие интерфейсы работают?

Автор: 2nik 15.09.2008 14:56
нет, на другом тоже:

Код ошибки: -5
Описание ошибки: Неверная подпись:<144508283631Z295899852188> step=17

Автор: DKameleon 15.09.2008 15:15
плохо. есть подозрение на некорректное формирование подписи.
не могли бы вы провести опыт на совершенно другом компьютере?

ВМИД, соответствует тому, который подписывает запрос?
что показывает check.php?

Автор: samland 15.09.2008 22:04
Уважаемый DKameleon,
подскажите по trans\tranid, как под него лучше всего формировать номер? какой вообще у него диапазон?
у меня было
$tt=substr("$time1",2);
$zz=substr("$micro", 2, 2);
$uni=$tt.$zz;
сегодня стало out of range.
а на сайте вм ничего не сказано ни о длинне, ни о максимальном значении
как работает masspay.wmtransfer.com при установки им доверия на свои кошельки, как они определяют этот tranid, ведь платят с наших кошелей?
спасибо!

Автор: 2nik 15.09.2008 22:05


> CURL: passed [+].
> BCMath: passed [+].
> MBString: passed [+].
> XML support: passed [+].
> Looking for available MD4 implementations:
+ MHash
- Hash
+ MD4 Class
Summary: passed [+].


   [Склеено в [mergetime]1221505589[/mergetime]]

я читал, что от хеш ниче не зависит, или это не так?
как можно его установить на сервер? я что-то не мог по нему ничего найти

Автор: DKameleon 15.09.2008 22:34
как можно его установить на сервер? я что-то не мог по нему ничего найти

ну точно так же, как вы сейчас и тестируете, только на сервере smile.gif

2 samland

по крайней мере вот тут написано:
http://wiki.webmoney.ru/wiki/show/%D0%98%D...%D0%B9%D1%81+X2
целое без знака, макс. количество цифр – 15; всегда должен быть больше номера предыдущего запроса на перевод средств!!!

Автор: samland 15.09.2008 22:44
я не reqn, я про tranid
reqn у вас в скриптах замечательно сделан)

Автор: DKameleon 15.09.2008 22:53
samland сказал
я не reqn, я про tranid
reqn у вас в скриптах замечательно сделан)

а.... просмотрел smile.gif
ну просто номер счёта или номер транзакции. свой, внутренний smile.gif
просто по нарастающией.
автоинкремент из базы подходит хорошо.

кажется можно ещё запросить обнуление счётчика.

Автор: 2nik 16.09.2008 02:50
DKameleon сказал
ну точно так же, как вы сейчас и тестируете, только на сервере smile.gif



ну точно так же, как вы сейчас и тестируете, только на сервере


Это уже на сервере))
вот, подпись вроде нормально генерируется, но при проверке с вебмани таки есть ошибка..
тестирую на сервере, адрес которого писал на сапорт вебани о включении услуги

Функции hash на сервере нету sad.gif. что делать?

Автор: DKameleon 16.09.2008 03:35
Функции hash на сервере нету sad.gif. что делать?

не страшно. там автоматически выбирается один из трёх вариантов.
разве что можете попробовать, чтобы существующие варианты давали одинаковый хэш.

Это уже на сервере))

тогда на другом попробуйте smile.gif) или локально.

Автор: 2nik 16.09.2008 09:49
попробывал на другом сервере - заработало, только написало что для IP Access denied, тоесть, точно подпись пропустило
смотрел phpinfo - что-то нету HASH (на других серверах есть).
как его можна установить, не переставляя весь php5?
или обращаццо к админам smile.gif

Автор: 2nik 16.09.2008 15:06
ну вот, устнановил на сервер hash

> CURL: passed [+].
> BCMath: passed [+].
> MBString: passed [+].
> XML support: passed [+].
> Looking for available MD4 implementations:
  + MHash
  + Hash
  + MD4 Class
  Summary: passed [+].


Но все-равно, пишет, что подпись неверная sad.gif


Код ошибки: -5
  Описание ошибки: Неверная подпись:681326234411122156668465706 step=17


тоесть, может, всетаки, сервер неверно генерирует подпись.. или что это может быть? помогите, плиз..

Автор: 2nik 16.09.2008 16:17
удалось сделать правильную подпись, но вот - возникла новая ошибка smile.gif

Код ошибки: 111
Описание ошибки: Server Error step=13

Автор: 2nik 16.09.2008 17:29
ура! удалось smile.gif
я просто интегрировал подпись через wmsigner.ini, а не через функции мд4, и все заработало smile.gif
спасибо, DK, за помощь smile.gif
с меня пиво smile.gif

Автор: studovnet 16.09.2008 21:20
ААААААААААААА!!!! люди!!!! помогите! Не работает WMXI вообще! ....

Вот что выдало при проверке:

> CURL: passed [+].
> BCMath: failed [-].
> MBString: passed [+].
> XML support: passed [+].
> Looking for available MD4 implementations:
- MHash
+ Hash
+ MD4 Class
Summary: passed [+].

т.е. я так понял должно работать? "Summary: passed [+].";
Так вот я пытаюсь выполнить какое нить действие (из экземплов), так мне вообще выдаёт 500-ю ошибку. Не работать начинает кокрас с того момента когда выполняется функция посылки запроса. У меня PHP 5.2.6. В чём может быть дело?

Автор: DKameleon 16.09.2008 21:29
т.е. я так понял должно работать? "Summary: passed [+].";

нет, это только для MD4

вот:
> BCMath: failed [-].


Автор: 100chuk 22.09.2008 15:11
Респекты DKameleon

Вопрос - из-за чего X3 для одного кошелька может работать, а для другого, в этом же WMID - нет? dntknw.gif

Автор: DKameleon 22.09.2008 17:52
Вопрос - из-за чего X3 для одного кошелька может работать, а для другого, в этом же WMID - нет? dntknw.gif

может не было операций в указанный период времени?

Автор: 100chuk 22.09.2008 18:09
Да нет, я проверил. Еще немножко потестирую..

Автор: samland 15.10.2008 15:32
код ошибки 58 кто-нибудь знает что значит при переводе через X2?

Автор: barlone 15.10.2008 15:49
http://wiki.webmoney.ru/wiki/show/%D0%98%D...%D0%B9%D1%81+X2

Автор: samland 15.10.2008 16:10
Спасибо. А то тут http://webmoney.ru/rus/developers/interfac...rse/index.shtml забыли добавить

Автор: LAW 6.11.2008 01:23
А можно добавить в интерфейс получения истории операций по кошельку сортировку ?

Автор: DKameleon 6.11.2008 03:30
А можно добавить в интерфейс получения истории операций по кошельку сортировку ?

сначала необходимо распарсить, затем отсортировать.
непарсеный ХМЛ отсортировать не ппредставляется возможныхм sad.gif
а сам парсинг уже не относится к интерфейсной части sad.gif

в лучшем случае написать пример для сортировки уже распарсеых данных.

Автор: boav 10.11.2008 23:16
Специально зарегестрировался на форуме чтобы поблагодарить разработчика!
Вообще классная разработка! переехал на другой хост... Неделю переписывался с хостером чтобы тот скомпилировал сингера, включил proc_open() и прочее, результата ноль!!!...
В итоге случайно нашел эту тему и за 20 минут настроил интерфейс!
Еще раз огромное спасибо!!!

Автор: kvasilov 28.11.2008 17:44
Я еще не разбирался в WMSinger но уже нада. Подскажите если мне нужен только вмсингер то из вашего архива wmxi-20080917.zip мне можно оставить только файлы wmsinger.php, md4.php ?

Автор: DKameleon 28.11.2008 20:07
Я еще не разбирался в WMSinger но уже нада. Подскажите если мне нужен только вмсингер то из вашего архива wmxi-20080917.zip мне можно оставить только файлы wmsinger.php, md4.php ?

именно так smile.gif

Автор: kvasilov 1.12.2008 12:16
Плиз подскажите, если мне нужна подпись WMsigner, я могу просто через include () подключить файл wmsigner.php и воспользоваться функцией Sign() забить туда данные, и в ответ получу подпись запроса которую нужно отправлять в поле Sign ?

Автор: DKameleon 1.12.2008 13:13
Плиз подскажите, если мне нужна подпись WMsigner, я могу просто через include () подключить файл wmsigner.php и воспользоваться функцией Sign() забить туда данные, и в ответ получу подпись запроса которую нужно отправлять в поле Sign ?

можете.

Автор: kvasilov 1.12.2008 16:27
Спасибо smile.gif DKameleonу респект smile.gif

Автор: kvasilov 4.12.2008 01:53
А у меня в денвере:
KWM file not found or KWM data invalid
и все sad.gif
путь прописал var $kwm = "key/************.kwm";
ключи резервной копии 164байта,
что делать ?

Автор: DKameleon 4.12.2008 03:39
что делать ?

gопробуйте указать полный путь к фалу от корня диска.
вы в пути где-о ошиблись.

Автор: kvasilov 4.12.2008 11:08
Работает, но только с вашими интерфейсами, как мне wmsigner.php под себя переделать. Где и как там вмид,пасс,ключи прописать ?
Мне бы просто оставить файлы wmsigner.php md4.php и подключить к своим скриптам и пользоваться ф-цией Sign (), как это зделать ?

Автор: DKameleon 4.12.2008 13:46
там же всё просто как божий день:
Sign($data, $wmid, $pass, $kwm)

передать строку для подписи, вмид, пароль, и путь к файлу.


Автор: kvasilov 4.12.2008 15:18
Ок спс попробую розобраться, просто так: Sign($data, $wmid, $pass, $kwm) никак ключей найти не хочет sad.gif
KWM file not found or KWM data invalid и все тут.
Вечером продолжу попытки smile.gif

Автор: kvasilov 4.12.2008 20:55
Заработало. Теперь echo Sign($data, $wmid, $pass, $kwm); выводит строку типа 1ffa3abce77bfc84f36eb4107e750bc6b1931a8ec43495fc05f426f8c0334f891a55761920bc14f9d9ee338aa4b1e937dc33058e165fcf0b3996b51373e191404717
При обновлении страницы эта строка постоянно меняеться, так должно быть ?

Автор: DKameleon 4.12.2008 23:07
да

Автор: ZeNoN 19.12.2008 13:56
Всем привет, если я правильно понял, то это все работает без установки модуля? Если да, то не "тыкните" меня в мануал по установке, я как не пытаюсь, у меня все врем пишет, что нет файла ключа или неверные данные.
* Как правильно указывать путь к файлам ключей? (может я здесь ошибся) но пробовал и /home/bla/bla/bla/keys/111111111.kwm и просто /keys/1111111.kwm
помогите пожалуйста с установкой (

Автор: DKameleon 19.12.2008 17:14
* Как правильно указывать путь к файлам ключей?

если вы укажете полный путь к файлу ключей, то всё будет работать.
размер файла ключей = 164 байта.
заливать их на фтп надо в БИНАРНОМ режиме.

Автор: ZeNoN 20.12.2008 00:11
Спасибо. все нормально работает, мой бок был, менял параметры в wmsigner.php ю Прочитав ветку от начала до конца, понял, что параметры задаются опционально... все заработало.. за исключением самого интерфейса... Не в курсе, могут и по какой-то причине не активировать xml интерфейс по каким либо причинам? В остальном, Вам низки

   [Склеено в [mergetime]1229721120[/mergetime]]

* низкий поклон! Спасибо за очень полезную разработку!

Автор: DKameleon 20.12.2008 01:06
Не в курсе, могут и по какой-то причине не активировать xml интерфейс

интерфейсы активируются по запросу в кипер к техсапорту.

Автор: ZeNoN 20.12.2008 16:36
Я запрос делал на активацию всех интерфейсов, мне в ответ пришло сообщение с вопросом, зчем мне интерфейс х6, я ответил, что на данном этапе мне нужен х2 для автоматизации выплат, после чего тишина. Я послал повторный запрос на активацию х2 =)
Почему и поинтересовался, могут ли не активировать в силу каких либо обстоятельств... подожду до понедельника.. Спасибо Вам. Много интересного и полезного нашел у Вас.

Автор: ZeNoN 24.12.2008 01:20
Прошу прощения, если не в тему, все заработало, но есть вопрос, я не сталкивался с xml прежде, мне нужно, после успешного выполнения перевода средств (x2) мне нужно выполнить ряд действий, таких как:
занесение данных в БД
отправка почты юзеру с кодом протекции

Как все это реализовать знаю и умею, но вот не знаю, как проверить успешно ли выполнено действие, или с ошибкой.... Я не прошу Вас за меня что-то делать, просто подскажите ключик... =)



что мне нужно проверить и как, чтоб выполнить свои действия?
хоть намекните, я сам разберусь...

например:

If ($status == 'ok'){

мои действия

}

чему в данной ситуации равняется $status ?

спасибо за помощь.

   [Склеено в [mergetime]1230070916[/mergetime]]

точнее $status равняется ok, что он из себя представляет, не могу составить условие =( т.к. не знаю, что нужно проверять... как выглядит ошибка и как успешное действие. Не судите строго, все когда-то начинали... учусь сам...

Автор: adviser 24.12.2008 01:27
http://webmoney.ru/rus/developers/interfac...rse/index.shtml

Проверить надо retval из ответа, если равно 0, то запрос выполнен

Автор: ZeNoN 24.12.2008 02:01
спасибо огромное, я это понял, но ответ приходит в виде xml ? если бы шел постом или гетом, я бы реализовал, мне нужно вытащить retval как-то, а я не знаю как =(

   [Склеено в [mergetime]1230073492[/mergetime]]

например:
$staus = htmlspecialchars(@$transformed["w3s.response"]["retval"], ENT_QUOTES);

и после чего
if ($status == 0){}

правильно ли это? я пока не освоил (

   [Склеено в [mergetime]1230073868[/mergetime]]

вроде бы так, добился желаемого результата, но нге уверен, что правильно. Спросил у знающих людей..

Автор: adviser 24.12.2008 02:12
preg_match_all ("|<retval>(.*)</retval>|U", $XML, $retval, PREG_PATTERN_ORDER);
$retval = $retval[1];

   [Склеено в [mergetime]1230074252[/mergetime]]

А вообще вот тут http://owebmoney.ru/xml2.shtml подробно все раписано

Автор: ZeNoN 24.12.2008 02:20
спасибо, вот смотрю и ничего не понимаю, понял, что $retval дальше выполняет ту функцию, которая необходима мне, но как ее вытащить, учиться мне и учиться ) удивительно, что тот Вариаант, что я написал, работает... =) ничего общего с Вашим вариантом нет, как я и думал... Низкий поклон, спасибо за помощь.

   [Склеено в [mergetime]1230074562[/mergetime]]

ведь $retval[1] это и есть значение true (0 в нашем случае), мы из масива вытаскиваем первое значение? так? или совсем неправильно мыслю? не смейтесь. обидно, когда не понимаешь, а очень хочется...)

Автор: adviser 24.12.2008 02:30
ZeNoN сказал
спасибо, вот смотрю и ничего не понимаю, понял, что $retval дальше выполняет ту функцию, которая необходима мне, но как ее вытащить, учиться мне и учиться ) удивительно, что тот Вариаант, что я написал, работает... =) ничего общего с Вашим вариантом нет, как я и думал... Низкий поклон, спасибо за помощь.

[font=Courier]   [Склеено в [mergetime]1230074562[/mergetime]][/font]

ведь $retval[1] это и есть значение true (0 в нашем случае), мы из масива вытаскиваем первое значение? так? или совсем неправильно мыслю? не смейтесь. обидно, когда не понимаешь, а очень хочется...)

yes.gif

$XML - это то что пришло в ответ от сервера WM

Автор: ZeNoN 24.12.2008 02:47
Я конечно нуб, как бы не оскорбительно это узвучало, но я научусь... и танца с бубном (именно так это у меня и называется) привели вот к чему:

вариант 1(неверный):

$status = htmlspecialchars(@$transformed["w3s.response"]["retval"], ENT_QUOTES);

if ($status == 0){

$secc=$_POST['pcode'];
 $adminemail = 'support@bux4u.org.ua';
 $text="код протекции:\nТема: КОД ПРОТЕКЦИИ \n Раздел: $topic \n Сообщение: код протекции для завершения операции: $secc \n E-mail отправителя:   ";
 mail($adminemail, convert_cyr_string("КОД ПРОТЕКЦИИ [bux4u.org.ua]",w,k), convert_cyr_string($text,w,k),
    "From: robot@bux4u.org.ua,ua\r\nContent-Type: text/plain; charset=\"koi8-r\"");
}

парадокс, но при ошибке код протекции на мыло не шлет, а при удачной операции шлет.

а этот не работает =)

preg_match_all ("|<retval>(.*)</retval>|U", $XML, $retval, PREG_PATTERN_ORDER);
$retval = $retval[1];

if ($retval == 0){

$secc=$_POST['pcode'];

 $adminemail = 'support@bux4u.org.ua';
 $text="код протекции:\nТема: КОД ПРОТЕКЦИИ \n Раздел: $topic \n Сообщение: код протекции для завершения операции: $secc \n E-mail отправителя:   ";
 mail($adminemail, convert_cyr_string("КОД ПРОТЕКЦИИ",w,k), convert_cyr_string($text,w,k),
    "From: robot@bux4u.org.ua,ua\r\nContent-Type: text/plain; charset=\"koi8-r\"");
}


понимаю, что косяк мой, кому нужен помощник? Я готов быть помощьником програмиста, дабы научиться ) Многое делал сам, но с xml столкнулся впервые, вру, один раз sitemap генерировал LOL =)

   [Склеено в [mergetime]1230076138[/mergetime]]

Перечитал пост, он очень содержательный, но не понятен мне, хотя бы потому, что он относится к скомпилированному модулю, мне показалось, что здесь все немного иначе и проще... Видимо ошибаюсь, но не без этого же )

   [Склеено в [mergetime]1230076195[/mergetime]]

я про этот пост http://owebmoney.ru/xml2.shtml

Автор: DKameleon 24.12.2008 04:42
2 ZeNoN

при использовании переменной в коде лучше так:
$status = @$transformed["w3s.response"]["retval"];

htmlspecialchars - это только для вывода хтмл.

и ниже лучше проверять так:
if ($status === "0"){

Автор: ZeNoN 24.12.2008 05:15
Спасибо большое, т.е. интуитивно правильно догадался, а обрезку спецсимволов убрал.. это я копил просто.. Огромное спасибо!

   [Склеено в [mergetime]1230085011[/mergetime]]

Уже все настроил, работает, доволен как паравоз =)

Автор: maksimov 25.12.2008 16:25
В результате попытки протестировать интерфейс x16, я получаю следующую ошибку:

Код ошибки: -7
Описание ошибки: w3s.request/wmid not found step=5



Что это значит, и что я делаю неправильно?

Автор: DKameleon 25.12.2008 17:15
классик или лайт?
как выглядит запрос?

Автор: maksimov 25.12.2008 19:37
DKameleon сказал
классик или лайт?
как выглядит запрос?

классик.

запрос осуществляется поредством скрипта x16.php (входящего в пакет обсуждаемого тут WMXI на php)

Автор: DKameleon 25.12.2008 19:51
запрос осуществляется поредством скрипта x16.php (входящего в пакет обсуждаемого тут WMXI на php)

ладно, тогда какие параметры запроса?
ВМИД, выполняющий запрос?

Автор: maksimov 25.12.2008 20:08
DKameleon сказал
ладно, тогда какие параметры запроса?
ВМИД, выполняющий запрос?

wmid: 142971000900

параметры, стандартные, задаю через форму упомянутого скрипта (WMID кошелька:: 142971000900, тип кошелька: Z, название кошелька: new)

Автор: DKameleon 25.12.2008 20:50
Хм... сложно мне что-то сказать по этому поводу....

Автор: maksimov 29.12.2008 19:42
что-то у меня вообще ни один из интерфейсов не работает. что делаю не так - непонятно =(

например, интерфейс x7 (examples/x7.php) выдаёт следующую ошибку:

Результат:
Код ошибки: -2
Описание ошибки: bad w3s.request/testsign/wmid step=3

(ну и естественно, авторизация не происходит =( )

Автор: DKameleon 29.12.2008 20:29
х7 - авторизация?
на неё лучше вообще не расчитывать, так как способ авторизации устарел.

давайте ошибку из Х1-Х2

Автор: barlone 30.12.2008 08:22
Тестируется на скриптах из каталога examples ? По-моему, товарищ свой wmid в _header.php не написал (или неправильно написал).

Автор: ZeNoN 29.01.2009 00:57
Помогите решить проблему, реалтзовал с помощью ч2 автовыплаты на сайте, человек использует поддельную форму у себя на компьютере, и каждый раз меняя transid переводит хоть 100 раз, одну и ту же сумму =( Как можно решить вопрос с подменой формы?
Если кому интересно, вот ссылка на видео как он это делает
http://uploadbox.com/files/96ddcdfdd1

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)