Перейти к содержимому


Фотография

Трабл с "Проверкой квитанции об оплате"


  • Пожалуйста, авторизуйтесь для ответа.
8 ответов в данной теме

#1 Новичок stealth (WMID 804962442684 )

  • Группа: Пользователи
  • сообщений 2
  • Регистрация: 19-июня 06
  • МестоположениеArmenia
  • Webmoney BL

Отправлено 19 июня 2006 - 23:32

Коллеги!

Я уже второй день не вылезаю из документации по ссылке https://merchant.web....asp#validation но до меня никак, ну никак не доходит, как все же проверять эту квитанцию?

Особенно эти несколько строк:
sign = md5(pci_wmtid+WMID+md5(Upper(url+purse+amount+desc+mode))+pci_pursesrc+pci_pursedest+pci_amount+pci_desc+pci_datecrt+mode+md5(passwd)), 
> где
sign - подпись квитанции;
md5 - способ формирования подписи MD5 (возвращает результат в верхнем регистре);
passwd - пароль продавца в системе WebMoney Transfer;
Upper - перевод строки в верхний регистр.
Я понимаю дело так: 
присланный от кипера параметр pci_marker должен соответствовать md5 перечисленных выше параметров, где: (только спорные моменты)
WMID - WMID продавца. 
url - что за УРЛ? тот, что я указал, при формировании "Платной ссылки?" 
purse - кошелек продавца
И самое главное: что означает это предложение?
md5 - способ формирования подписи MD5 (возвращает результат в верхнем регистре);
md5 во всех известных мне языках/системах возвращает результат в нижнем регистре, значит ли это, что все, полученное посредствам md5 надо тутже возводить в верхний регистр?
Любая инфа приветствиется! 
Разработчикам webmoney: было бы здорово, еслиб составители FAQ-а еще раз прочли, что написали...
Заранее благодарствую :) 
 

    • 0
  • Наверх

#2 Новичок stealth (WMID 804962442684 )

  • Группа: Пользователи
  • сообщений 2
  • Регистрация: 19-июня 06
  • МестоположениеArmenia
  • Webmoney BL

Отправлено 23 июня 2006 - 20:27

После долгих размышлений, проб и ошибок оказалось, что WMID, который, как сказано в документации, передается по URL, должен быть WMID покупателя, а не продавца, но он не передается, ни в тестовом режиме, ни в реальном.

    • 0
  • Наверх

#3 Участник S (WMID 482556879382 )

  • Группа: Пользователи
  • сообщений 13
  • Регистрация: 27-мая 06
  • МестоположениеУкраина
  • Webmoney BL

Отправлено 12 июля 2006 - 11:53

Хм с интерфейсом клик и бай я промучался бла 3 дня :((( но все же осилил ...

( хм. т.е спер с скрипта магазина wmshop 5 версии :)))) )

вот пример ссыки:

wmk:paylink?url=<https://merchant.web..._Test&mode=test

т.е чеб пахала надо  указать (в ссылке как выше) method=POST 

    • 0
  • Наверх

#4 Участник S (WMID 482556879382 )

  • Группа: Пользователи
  • сообщений 13
  • Регистрация: 27-мая 06
  • МестоположениеУкраина
  • Webmoney BL

Отправлено 12 июля 2006 - 12:00

Пример куска кода из магазина Wmshop5.08

<?

$url=$_POST['URL'];
$WMID=$_POST['WMID'];
$pci_wmtid=$_POST['pci_wmtid'];
//$pci_pursedest=$_POST['pci_pursedest']; так типа было на сайте вебмань, но я решил лучше конкретный кошель подставить (магазина)))
$pci_pursedest=$serv_const_shopwmz;
$pci_pursesrc=$_POST['pci_pursesrc'];
$pci_amount=$_POST['pci_amount'];
$pci_desc=$_POST['pci_desc'];
$pci_datecrt=$_POST['pci_datecrt'];
$pci_marker=$_POST['pci_marker'];
$pci_mode=$_POST['pci_mode'];
$purse=$pci_pursedest;
$amount=$pci_amount;
$desc=$pci_desc;

//$mode=$pci_mode; тоже с сайта вебмань, но решил вообще без параметра, чтобы моде потом не проверять
$mode="";
$url=strtoupper($url);
//формируем подпись
$sign1=strtoupper(md5($pci_wmtid.$WMID.strtoupper(md5(strtoupper($url.$purse.$amount.$desc.$mode))).$pci_pursesrc.$pci_pursedest.$pci_amount.$pci_desc.$pci_datecrt.$mode.strtoupper(md5("ввести свой пароль на кипер"))));

//сверяем подпись
if($sign1!=$pci_marker)
{ Print "ФИГНЯ"; }

Print "ПАШЫТ !!!!!"; 

 

?>

 

    • 0
  • Наверх

#5 Новичок test (WMID 267987837847 )

  • Группа: Пользователи
  • сообщений 1
  • Регистрация: 01-августа 06
  • МестоположениеRussia
  • Webmoney BL

Отправлено 01 августа 2006 - 18:14

И как? работает?

я уже день мудохкаюсь, нифига не совпадают ((

 

/// Perl.

use CGI;

use Digest::MD5;

......................
my $pci_wmtid = param('pci_wmtid');
my $WMID= param('WMID');
my $url = param('URL');
my $pci_pursesrc = param('pci_pursesrc');
my $pci_pursedest = param('pci_pursedest');
my $pci_amount = param('pci_amount');
my $pci_desc = param('pci_desc');
my $pci_datecrt = param('pci_datecrt');
my $mode = param('pci_mode') ne "" ? param('pci_mode') : "";
my $md5 = Digest::MD5->new;
$md5->reset();
my $upper = uc($url.$pci_pursedest.$pci_amount.$pci_desc.$mode);
$md5->add($upper);
$upper=uc($md5->hexdigest);
$md5->reset();
$md5->add("пароль на вход в кипер");
my $pass = uc($md5->hexdigest);
$md5->reset();
$tmp_str = $pci_wmtid.$WMID.$upper.$pci_pursesrc.$pci_pursedest.$pci_amount.$pci_desc.$pci_datecrt.$mode.$pass;
$md5->add($tmp_str);
$tmp_str = uc($md5->hexdigest);
if(param('pci_marker') eq $tmp_str){ ПАШЫТ! (сюда никогда не попадет ;) }
else{ НЕ ПАШЫТ! (это самое любимое условие, сюда всегда попадает)}
 
Кто нить что нить может посоветовать?

    • 0
  • Наверх

#6 Участник ExMoney® (WMID 385851025477 )

  • Группа: Пользователи
  • сообщений 26
  • Регистрация: 30-августа 06
  • МестоположениеЭстония
  • Webmoney BL

Отправлено 29 января 2007 - 04:12

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

Даже копировал весь текст (алгоритм) постом выше, ничего не выходить... подписи не совпадают!!!

Помогите!!!

    • 0
  • Наверх

#7 Новичок althoster (WMID 127503014609 )

  • Группа: Пользователи
  • сообщений 1
  • Регистрация: 11-февраля 07
  • МестоположениеРоссия
  • Webmoney BL

Отправлено 07 марта 2007 - 20:43

та-же проблема. не совпадают хэши.

если у кого-нибудь есть рабочий код(желательно perl) выложите plz

    • 0
  • Наверх

#8 Пользователь Error202 (WMID 983467579587 )

  • Группа: Пользователи
  • сообщений 6
  • Регистрация: 22-апреля 07
  • МестоположениеРоссия
  • Webmoney BL

Отправлено 22 апреля 2007 - 17:34

У меня работает такая штука:
use Digest::MD5 qw/md5_hex/;
...



$url="http://myserver.ru/cgi-bin/pay.pl?id=XX";
$datahex=uc(md5_hex(uc($url.'R_КОШЕЛЬ_ПРОДАВЦА'.$amount.$desc.$mode)));
$sign=uc(md5_hex($pci_wmtid.$WMID.$datahex.$pci_pursesrc.$pci_pursedest.$pci_amount.$pci_desc.$pci_datecrt.$mode.uc(md5_hex('YOUR_KEEPER_PASS'))));
Правда только тогда, когда описания на английском языке... Т.к. мой перл локали не понимает...

 

    • 0
  • Наверх

#9 Продвинутый пользователь IT Consulting (WMID 301095414760 )

  • Группа: Пользователи
  • сообщений 79
  • Регистрация: 30-марта 07
  • МестоположениеУкраина
  • Webmoney BL

Отправлено 18 июня 2007 - 20:16

Если все сделано правильно, подписи совпадают. Обратите внимание вот на что:

1. MD5 возвращает результат в верхнем регистре.

2. Результат MD5 -- 16-ричные числа в строковом представлении (вида FF33BB...), а не Base64.

3. Когда вы получаете md5(Upper(url+purse+amount+desc+mode) -- переведите результат в верхний регистр. Иначе результат будет ошибочным.

4. Учитывайте кодировку.

 
    • 0
  • Наверх