Click&Buy - вычисление подписи в Квитанции sign = md5(pci_wmtid+WMID+md5(Upper(url+purse+amount+
#1 Пользователь
Отправлено 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!!!!!!!!!
#2 Знаток
Отправлено 02 марта 2010 - 20:00
Help!!!!!!!!!
Сайт в мегастоке есть? Кошельки зарегины в мегастоке?
#3 Пользователь
Отправлено 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
#4 Пользователь
Отправлено 02 марта 2010 - 20:06
#5 Знаток
Отправлено 02 марта 2010 - 20:07
#6 Пользователь
Отправлено 02 марта 2010 - 20:09
По поводу добавлять по одному - бредовая мысль - тут либо всё сойдется и хэш будет правильный или сразу разойдется хэш
#7 Знаток
Отправлено 02 марта 2010 - 20:11
#9 Знаток
Отправлено 02 марта 2010 - 20:26
Вот здесь есть простое готовое решение. Правда в версии кипера 3.9.0.0 что-то намутили, или правила какие-то поменялись, в общем сейчас кипер платежей не совершает, но и вменяемых сообщений не даёт. Ждите говорит, и всё тут.
Я же Вам ответил почему У ВАС не получается. Что не понятно?
#10 Пользователь
Отправлено 02 марта 2010 - 21:48
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 дней и до бесконечности - надеюсь чем-нибудь да подсказал Вам.
Да прибудет с нами сила
#11 Участник
Отправлено 03 марта 2010 - 19:31
Ваш ответ был немного позже того, что написал я. Теперь всё понятно.Я же Вам ответил почему У ВАС не получается. Что не понятно?
Вот ведь, даже доллара пожалел426060026335[/url]]AnTer - спасибо на ссылку. Покупать ничего не покупал
#12 Пользователь
Отправлено 04 марта 2010 - 03:40
Обращаю ваше внимание что при оплате Клик&Бэй через Классический 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 - приходит тоже с не значащими нулями.