Тут вот хотел сделать себе WMSigner, а он только на C++ и .Net есть... На PHP тоже есть, но им уже больше года...не фурычат.. WMSigner можно сделать по статье: http://www.opennet.ru/base/dev/webmoney_pay.txt.html Нету перла? Переписал перл скрипт на PHP определение SignStr...: PHP: <?php $path = "/home/www/wm/"; $sign = "/home/www/wm/wmsigner"; $wmid = ""; #wmid $kwy = "": #key for wmid $base64 = ""; #base64 вашего ключа kwm..Чтобы узнать его запустите скрипт convert.php и запишите выведенные символы в эту строку... function space($str, $len) { $sum = $len - strlen($str); $hwost = ''; for ($i = 0; $i < $sum; $i++) { $hwost = $hwost.'0'; } $string = $hwost.$str; return $string; } function GetSign($inStr) { global $path, $sign, $key, $wmid, $base64; chdir($path); $desc = array( 0 => array("pipe", "r"), 1 => array("pipe", "w"), 2 => array("pipe", "r") ); $process = proc_open($sign." -w ".$wmid." -p ".$key." -K64 ".$base64, $desc, $ech); fwrite($ech[0], "$inStr\004\r\n"); fclose($ech[0]); $SignStr = fgets($ech[1], 133); fclose($ech[1]); $return_value = proc_close($process); return $SignStr; } $OrderID = '999'; # номер счета на Вашем сайте $PurseOfStores ='Z348176092735'; # кошелек сайта $LoginOfStores = '521142404582'; # WMID сайта $LoginOfCust = ''; # WMID покупателя, зададим как константу $InvAddress = 'INVADDRESS'; # адрес, после оплаты юзер придет сюда.. $Amount = '10'; #сумма счета, которую должен оплатить покупатель $Desc = 'DESC'; # описание $Period = '0'; #Срок протекции сделки $Experation = '3'; #Срок действия счета - 3 дня list($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time()); $request = (1900 + $year).space($mon, 2); $request .= space($mday, 2).space($hour, 2); $request .= space($min, 2).space($sec, 2).space($sec, 2); $PlanStr = $OrderID.$LoginOfCust.$PurseOfStores.$Amount; $PlanStr .= $Desc.$InvAddress.$Period.$Experation.$request; echo "Строка подписи \$PlanStr: ".$PlanStr."<br/><br/><br/>"; $SignStr = GetSign($PlanStr); print "Цифровая подпись (возвращена WMSigner'ом): ".$SignStr."<br><br><br>"; $url = "https://w3s.webmoney.ru/asp/Invoice.asp?SL=".$LoginOfStores."&"; $url .= "SP=".$PurseOfStores."&CL=".$LoginOfCust."&IN=".$OrderID."&D=".$Desc."&"; $url .= "AD=".$InvAddress."&A=".$Amount."&E=".$Experation."&P=".$Period."&"; $url .= "RN=".$request."&SS=".$SignStr; echo "HTTPS запрос к системе:<br/>".$url."<br/><br/><br/>"; ?> convert.php PHP: <?php $fn = "key.kwm"; #.kwm key file from your wmid $handle = fopen($fn,"r"); $contents = fread($handle, filesize($fn)); fclose($handle); echo base64_encode($contents); ?> Вообщем переписал и увидел ошибку... Пошел в гугль и увидел что WMSigner с недавнего времени сделали с минимальным персональным аттестатом... Мда Обновление 1.02.2008
Что значит больше года и не фурычат? Вообще последнее обновление было как раз за две недели до твоего поста и ПХП версия отлично "фурычит". Может быть не там и не то искали? http://my-tools.net/wmxi/
Хм, допустим... Посмотри сколько файлов требует их скрипт и сколько строк мой + в моем скрипте посл.апдейта не надо пихать файлы кипера на сервак... Так что хек
Все аргументы притянуты за уши ) Количество файлов - не проблема пересобрать в один файл. Файлы на сервак - ключ точно так же легко помещается в переменную. Достаточно было изучить функцию инициализации класса Но есть существенное преимущество: модуль Сигнера реализован на пхп, а это не требует компиляции и запуска бинарника на сервере, из-за чего либа может работать даже в сейфмоде и с кучей прочих жёстких ограничений. есть только неудобное требование - необходим bcmath, не всегда всюду устанавливаемый. а так же вроде бы ещё не до конца отловлены ньюансы с 64-разряными платформами (в частноти правильнось мд4 хэшей).