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


Фотография

Click&Buy - вычисление подписи в Квитанции sign = md5(pci_wmtid+WMID+md5(Upper(url+purse+amount+


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

#1 Пользователь Kronger (WMID 153422047349 )

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

Отправлено 02 марта 2010 - 19:58

Всем добрый день.
Как только не пробывал вычислять подпись - всё время не сходятся.
Решил поднять тему вычисления подписи т.к. перерыл весь форум и все темы старые.
учел все замечания из прочитаного вот что получилось.

$pay_url = 'https://secure.donator-games.com/index.php?option=com_kss_pay&task=Check';
$pay_koshel_prod = trim($Array_pay['PAY_KOSHEL_PROD']);
$pay_sum = trim($Array_pay['PAY_SUM']);
$pay_osnov_plat = trim($Array_pay['PAY_OSNOV_PLAT']);
$pay_mode = trim($Array_pay['PAY_MODE']);

if(!empty($_POST['WMID'])){$wmt_wmid = trim($_POST['WMID']);}
if(!empty($_POST['pci_wmtid'])){$wmt_uniq_id = trim($_POST['pci_wmtid']);}
if(!empty($_POST['pci_pursedest'])){$wmt_koshel_prod = trim($_POST['pci_pursedest']);}
if(!empty($_POST['pci_pursesrc'])){$wmt_koshel_pokup = trim($_POST['pci_pursesrc']);}
if(!empty($_POST['pci_amount'])){$wmt_sum = trim($_POST['pci_amount']);}
if(!empty($_POST['pci_desc'])){$wmt_osnov_plat = trim($_POST['pci_desc']);}
if(!empty($_POST['pci_datecrt'])){$wmt_date_plat = trim($_POST['pci_datecrt']);}
if(!empty($_POST['pci_marker'])){$wmt_sign = trim($_POST['pci_marker']);}
if(!empty($_POST['pci_mode'])){$wmt_mode = trim($_POST['pci_mode']);}

$passmd5 = strtoupper(md5('мой пароль'));

$calc_sign = strtoupper(md5($wmt_uniq_id.$wmt_wmid.strtoupper(md5(strtoupper($pay_url.$pay_koshel_prod.$pay_sum.$pay_osnov_plat.$pay_mode))).$wmt_koshel_pokup.$wmt_koshel_prod.$wmt_sum.$wmt_osnov_plat.$wmt_date_plat.$wmt_mode.$passmd5));

мои предположения:
1) проблема в URL:
а) Нужны дополнительные < >(угловые ковычки)
б) Надо как-то заменять символы "?" и "="
2) Всё преобразовывать в верхний регистр.

Есть ли мысли?
Я себе уже мозг сломал. Т.к. md5() логики не поддается - любое изменение приводит к новому набору символов.

Help!!!!!!!!!
    • 0
  • Наверх

#2 Знаток Howard (WMID 220903071648 )

  • Группа: INDX Traders
  • сообщений 6 550
  • Регистрация: 20-октября 07
  • МестоположениеЧелябинск
  • Webmoney BL

Отправлено 02 марта 2010 - 20:00

Help!!!!!!!!!



Сайт в мегастоке есть? Кошельки зарегины в мегастоке?

    • 0
  • Наверх

#3 Пользователь Kronger (WMID 153422047349 )

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

Отправлено 02 марта 2010 - 20:05

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

вот пример приходящих данных:
pay_koshel_prod= R316042575981
wmt_koshel_prod= R316042575981
wmt_koshel_pokup= R215197489258
pay_osnov_plat= platej N18; polzovatel ID=62; Summа=0.01;
wmt_osnov_plat= platej N18; polzovatel ID=62; Summa=0.01;
pay_mode= test
wmt_mode= test
pay_sum= 0.01
wmt_sum= 0.01
pay_url= https://secure.donat..._pay&task=Check
wmt_uniq_id= 23274
wmt_wmid= 426060026335
wmt_date_plat= 20100302 17:04:55
calc_sign= 0E6A935B6F505AF9E2354EC1478377B7
wmt_sign= CB8D1659C2E234C065A6DB44679AB081

    • 0
  • Наверх

#4 Пользователь Kronger (WMID 153422047349 )

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

Отправлено 02 марта 2010 - 20:06

кошельки тоже зареганы.


    • 0
  • Наверх

#5 Знаток 632584157120 (WMID 632584157120 )

  • Группа: Модераторы
  • сообщений 1 797
  • Регистрация: 29-ноября 09
  • МестоположениеКZ
  • Webmoney BL

Отправлено 02 марта 2010 - 20:07

Вы хапанули сразу все параметры. Начните с одного, добавьте мд5, проверьте, добавьте второй, проверьте. И не забывайте применять trim() иначе один пробел и мд5 делов наделает.

    • 0
  • Наверх

#6 Пользователь Kronger (WMID 153422047349 )

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

Отправлено 02 марта 2010 - 20:09

Как видите TRIM везде используется.
По поводу добавлять по одному - бредовая мысль - тут либо всё сойдется и хэш будет правильный или сразу разойдется хэш
    • 0
  • Наверх

#7 Знаток 632584157120 (WMID 632584157120 )

  • Группа: Модераторы
  • сообщений 1 797
  • Регистрация: 29-ноября 09
  • МестоположениеКZ
  • Webmoney BL

Отправлено 02 марта 2010 - 20:11

Раз бредовая и не поняли о чем я, тогда разбирайтесь сами.

    • 0
  • Наверх

#8 Участник AnTer (WMID 237267306798 )

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

Отправлено 02 марта 2010 - 20:19

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

    • 0
  • Наверх

#9 Знаток Howard (WMID 220903071648 )

  • Группа: INDX Traders
  • сообщений 6 550
  • Регистрация: 20-октября 07
  • МестоположениеЧелябинск
  • Webmoney BL

Отправлено 02 марта 2010 - 20:26

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



Я же Вам ответил почему У ВАС не получается. Что не понятно?

    • 0
  • Наверх

#10 Пользователь Kronger (WMID 153422047349 )

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

Отправлено 02 марта 2010 - 21:48

Spasibo.kz - сорь что может грубо, я просто уже очумел перебирать варианты, выдать вы выразили свою мысль не совсем удачно.
AnTer - спасибо на ссылку. Покупать ничего не поку пал но прочитав примечание а именно:
ВНИМАНИЕ! Отладку работы приёма платежей начинайте с простым описанием платежа на английском языке, например "Payment". Только после того, как приём платежей заработает, пробуйте описание платежа на русском языке. Большая часть проблем с отладкой приёма платежей возникает по причине описания платежа, так как обрабатывается системой WebMoney с ошибками.

Я понял что хотел сказать Spasibo.kz
Спасибо всем у меня заработало - проблема была зарыта в основании платежа
От меня совет всем кто ещё будет биться с вычислением хэша.
1) URL - пишется примерно так: https://secure.donat..._pay&task=Check
как видите даже если вы платите зерез LIght(для которого спецсимвоы заменяются кодами) - всё равно в хэше используется нормальное написание.
2) Основание платежа пишите на английском т.е. Классический принимает в WIN-1251, а Light в UTF-8 - замучаетесь перебирать варианты.
3) В начале тестов основание платежа сделайте с одним словом - без пробелов
4) Все записываемые в свою базу параметры и все приходящие из формы параметры - обрезайте TRIM() - лишние пробелы нам не нужны
5) Хоть параметры pci_wmtid и WMID - вроде как числовые - сохраняйте в базе и обрабатывайте их как STRING. (т.к. они длинные и если вы их сохраните как INT то они конвертнутся в число совершенно отличное хз какое)
6) Пароль - это пароль от вашего WM Кипера. Соблюдая раскладку - большие и маленькие символы - разные.
7) Обратите внимание что программисты WebMoney понимают что функция md5() - возвращает строку с символами в ВЕРХНЕМ РЕГИСТРЕ - поэтому используйте комбинацтю: strtoupper(md5(...))
Этот код рабочий, для большего понимания параметров им даны читабельные названия несущие смысл хранимых данных.
$pay_url = 'https://secure.donator-games.com/index.php?option=com_kss_pay&task=Check';
$pay_koshel_prod = trim($Array_pay['PAY_KOSHEL_PROD']);
$pay_sum = trim($Array_pay['PAY_SUM']);
$pay_osnov_plat = trim($Array_pay['PAY_OSNOV_PLAT']);
$pay_mode = trim($Array_pay['PAY_MODE']);

if(!empty($_POST['WMID'])){$wmt_wmid = trim($_POST['WMID']);}
if(!empty($_POST['pci_wmtid'])){$wmt_uniq_id = trim($_POST['pci_wmtid']);}
if(!empty($_POST['pci_pursedest'])){$wmt_koshel_prod = trim($_POST['pci_pursedest']);}
if(!empty($_POST['pci_pursesrc'])){$wmt_koshel_pokup = trim($_POST['pci_pursesrc']);}
if(!empty($_POST['pci_amount'])){$wmt_sum = trim($_POST['pci_amount']);}
if(!empty($_POST['pci_desc'])){$wmt_osnov_plat = trim($_POST['pci_desc']);}
if(!empty($_POST['pci_datecrt'])){$wmt_date_plat = trim($_POST['pci_datecrt']);}
if(!empty($_POST['pci_marker'])){$wmt_sign = trim($_POST['pci_marker']);}
if(!empty($_POST['pci_mode'])){$wmt_mode = trim($_POST['pci_mode']);}

$passmd5 = strtoupper(md5('мой пароль'));

$calc_sign = strtoupper(md5($wmt_uniq_id.$wmt_wmid.strtoupper(md5(strtoupper($pay_url.$pay_koshel_prod.$pay_sum.$pay_osnov_plat.$pay_mode))).$wmt_koshel_pokup.$wmt_koshel_prod.$wmt_sum.$wmt_osnov_plat.$wmt_date_plat.$wmt_mode.$passmd5));

P.S. Всем спасибо. Я потратил на разбирательствос хэш функцией 2 дня - как понимаю это очень быстро т.к. по постам люди мучаются от 3 дней и до бесконечности - надеюсь чем-нибудь да подсказал Вам.

Да прибудет с нами сила
    • 0
  • Наверх

#11 Участник AnTer (WMID 237267306798 )

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

Отправлено 03 марта 2010 - 19:31

Я же Вам ответил почему У ВАС не получается. Что не понятно?

Ваш ответ был немного позже того, что написал я. Теперь всё понятно.

426060026335[/url]]AnTer - спасибо на ссылку. Покупать ничего не покупал

Вот ведь, даже доллара пожалел :)

    • 0
  • Наверх

#12 Пользователь Kronger (WMID 153422047349 )

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

Отправлено 04 марта 2010 - 03:40

Народ!!! А также Уважаемые программисты webmoney.

Обращаю ваше внимание что при оплате Клик&Бэй через Классический WM версии 3.9.00 возвращаемая подпись считается не совсем корректно. Опишу подробнее:

Если сумма будет без сотых копеек, к примеру 50.20

$pci_amount = 50.2 (это приходит по форме pci_amount)

$pci_amount_full = 50.20 (это я сохранял когда формировал платежку)

рабочая формула куторую я подобрал методом тыка выглядит так:

strtoupper(md5($wmt_uniq_id.$wmt_wmid.strtoupper(md5(strtoupper($pay_url.$pay_koshel_prod.$pci_amount.$pay_osnov_plat.$pay_mode))).$wmt_koshel_pokup.$wmt_koshel_prod.$pci_amount_full.$wmt_osnov_plat.$wmt_date_plat.$wmt_mode.$passmd5));

как видно из неё в форму подставили pci_amount_full - что не есть правильно, ведь в значении пришло pci_amount, да и по всем ссылкам и коментам саппорта для Классики должно быть без лишних нулей.

Это баг или фича? Если баг то когда поправите? Если фича - то можно оставлять и не париться?

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

Админы - прошу обратите внимание на это и проверьте если не верите.

Вообще интересно почему для Light формула считается с незначащами нулями, и в форму pci_amount - приходит тоже с не значащими нулями.

    • 0
  • Наверх