Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   WMSigner PHP (https://forum.antichat.xyz/showthread.php?t=56208)

Isis 19.12.2007 21:22

WMSigner PHP
 
Тут вот хотел сделать себе 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(
        
=> array("pipe""r"),
        
=> array("pipe""w"),
        
=> 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($mon2);
    
$request    .= space($mday2).space($hour2);
    
$request    .= space($min2).space($sec2).space($sec2);

    
$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($handlefilesize($fn));
    
fclose($handle);
    echo 
base64_encode($contents);
?>

Вообщем переписал и увидел ошибку...
Пошел в гугль и увидел что WMSigner с недавнего времени сделали с минимальным персональным аттестатом...
Мда

Обновление 1.02.2008

Isis 01.02.2008 07:12

Обновление.....все через 1 функцию..безопасное хранение пароля

dkameleon 27.02.2008 05:13

Цитата:

Сообщение от Isis
На PHP тоже есть, но им уже больше года...не фурычат..

Что значит больше года и не фурычат?

Вообще последнее обновление было как раз за две недели до твоего поста и ПХП версия отлично "фурычит".

Может быть не там и не то искали? ;)
http://my-tools.net/wmxi/

Isis 27.02.2008 07:30

Хм, допустим...
Посмотри сколько файлов требует их скрипт и сколько строк мой :)

+ в моем скрипте посл.апдейта не надо пихать файлы кипера на сервак...
Так что хек

dkameleon 27.02.2008 11:45

Цитата:

Сообщение от Isis
Хм, допустим...
Посмотри сколько файлов требует их скрипт и сколько строк мой :)

+ в моем скрипте посл.апдейта не надо пихать файлы кипера на сервак...
Так что хек

Все аргументы притянуты за уши :))
Количество файлов - не проблема пересобрать в один файл.
Файлы на сервак - ключ точно так же легко помещается в переменную. Достаточно было изучить функцию инициализации класса :)

Но есть существенное преимущество:
модуль Сигнера реализован на пхп, а это не требует компиляции и запуска бинарника на сервере, из-за чего либа может работать даже в сейфмоде и с кучей прочих жёстких ограничений. ;)

есть только неудобное требование - необходим bcmath, не всегда всюду устанавливаемый.

а так же вроде бы ещё не до конца отловлены ньюансы с 64-разряными платформами (в частноти правильнось мд4 хэшей).

Isis 27.02.2008 14:58

Но все мой мой скрипт работает
За знания ловите плюс )


Время: 21:26