WebMoney-кофейня
Топик в форуме: Во что играем?Топик в форуме: Рейтинги или с чем их едят
Поставить музыку в Кофейне:
Al Martino - I Have But One Heart
Страницы: (4) [1] 2 3 ... Последняя » ( Перейти к первому непрочитанному сообщению ) ОтветитьНовая тема

> Автоматический прием WM-платежей. Сервис WebMoney Merchant.
oWebMoney
Post #1 (Отправлено: 16.05.2007 23:52)     Быстрое цитирование
Цитировать


Робот
****

Сообщений: 270
Регистрация: 3.04.2006
В этой статье мы подробно расскажем о подключении к сайту сервиса автоматического приема WM-платежей WebMoney Merchant. Подключение продемонстрировано на конкретном примере с подробными комментариями.

Автоматический прием WM-платежей. Сервис WebMoney Merchant.


Написать приватное сообщениеНаписать по email
Mark
Post #2 (Отправлено: 17.05.2007 02:18)     Быстрое цитирование
Цитировать


Гурман
****

Сообщений: 195
Регистрация: 20.06.2006
Весьма подробно все описано и думаю многим будет полезно. Есть одно замечание, вернее предложение:

В статье рекомендуется отслеживать ситуации подмены суммы и подмены кошелька. Разумеется это правильно, но я думаю что не стоит выдавать подробное описание ошибок, так как эти ошибки вызваны попыткой взлома магазина и фактически отображаются злоумышленнику. Логичнее выдавать для всех случаев нарушения безопасности чтото вроде "Security fault" и сохранять у себя в базе или логах детальное описание проблемы. Чем меньше информации Вы предоставите злоумышленнику - тем лучше.

И еще есть одно дополнение (может быть полезно): LMI_PAYMENT_DESC задается в кодировке Windows-1251. Так что если нужно писать название товара кирилицей, то нужно использовать именно эту кодировку. Особенно это существенно для тех у кого сайты в KOI8-R.

Это сообщение отредактировал Mark - 17.05.2007 02:24


Написать приватное сообщениеНаписать по email
=WareZ=
Post #3 (Отправлено: 21.05.2007 20:41)     Быстрое цитирование
Цитировать


Завсегдатай кофейни
**

Сообщений: 33
Регистрация: 6.05.2005
Откуда: Кострома
Спасибо, Никита, отличная статья!


Написать приватное сообщениеНаписать по emailВебсайтICQ
allakib
Post #4 (Отправлено: 30.12.2007 00:15)     Быстрое цитирование
Цитировать


Прохожий
*

Сообщений: 1
Регистрация: 29.12.2007
Классно рассказано!

Но если сайт продавца не обеспечивает секретности, то WebMoney не шлет SekretKey.

Так же понятно можете объяснить процесс и код не для MD5, а для SIGN?
Не весь процесс, а только проверку подписи

Спасибо. Первый раз работаю с WebMoney для российских покупателей,
до этого у меня были PayPal, MoneyBookers,...


Написать приватное сообщениеНаписать по email
Baur
Post #5 (Отправлено: 2.02.2008 22:51)     Быстрое цитирование
Цитировать


Прохожий
*

Сообщений: 3
Регистрация: 2.02.2008
Подскажите, как сделать в БД пополнение счета. Чтобы не стереть прежнюю сумму, а прибавить к ней напр. $10?


Написать приватное сообщениеНаписать по email
LAW
Post #6 (Отправлено: 3.02.2008 16:20)     Быстрое цитирование
Цитировать


Кофейный профи
*****

Сообщений: 502
Регистрация: 12.01.2005
Откуда: Брянск
Участник WM-Клуба # 46
Baur сказал
Подскажите, как сделать в БД пополнение счета. Чтобы не стереть прежнюю сумму, а прибавить к ней напр. $10?

UPDATE


==================
Написать приватное сообщениеНаписать по emailВебсайтICQ
Andrey
Post #7 (Отправлено: 3.02.2008 16:31)     Быстрое цитирование
Цитировать


Ценитель кофе
***

Сообщений: 131
Регистрация: 9.11.2005
Откуда: Санкт-Петебург
Baur сказал
Подскажите, как сделать в БД пополнение счета. Чтобы не стереть прежнюю сумму, а прибавить к ней напр. $10?

Допустим у Вас таблица users где есть поля id - это ид игрока, balance - баланс игрока

Для того, чтобы прибавить 10 к балансу пользователя под id 256 делаете запрос -
mysql_query("update users set balance=balance+10 where id='256'");


Написать приватное сообщениеНаписать по emailВебсайтICQ
Baur
Post #8 (Отправлено: 5.02.2008 01:23)     Быстрое цитирование
Цитировать


Прохожий
*

Сообщений: 3
Регистрация: 2.02.2008
Andrey сказал
Для того, чтобы прибавить 10 к балансу пользователя под id 256 делаете запрос -
mysql_query("update users set balance=balance+10 where id='256'");

Похоже, что у меня чуть по другому.
например, чтобы показать сколько у юзера денег, на странице есть такой код:
include("../../dbase.php");
$result=mysql_query("SELECT money from chatusers where user='$username' LIMIT 1");
while($row = mysql_fetch_array($result)){
$money=$row[money];
echo $money/100 ." USD";}

А Вашу строку как не переделывал - в базу не записывает.
Я еще сделал оплату произвольной суммой через Robox - присылает $out_summ , ее бы и добавлять.
Кстати, дорогой, зараза, сам себе отправляю 5 центов - приходят только 4 sad.gif
Отправляю 1 руб ЯД, он пишет 0,85, а зачисляет 0,03 цента. Это получается 15-25% ?!


Написать приватное сообщениеНаписать по email
DKameleon
Post #9 (Отправлено: 5.02.2008 01:34)     Быстрое цитирование
Цитировать


Хранитель традиций
*******

Сообщений: 2187
Регистрация: 31.05.2006
Участник WM-Клуба # 247
Кстати, дорогой, зараза, сам себе отправляю 5 центов - приходят только 4

Вы бы ещё 1 цент отправляли и жаловались, что Робокс вас подчистую облапошивает smile.gif


==================
Написать приватное сообщениеНаписать по emailВебсайт
Baur
Post #10 (Отправлено: 5.02.2008 23:46)     Быстрое цитирование
Цитировать


Прохожий
*

Сообщений: 3
Регистрация: 2.02.2008
Ну так у них тестового режима нет, приходится копейки гонять.
Кстати, а проводить зачисление правильнее с result или success?


Написать приватное сообщениеНаписать по email
Qbit86
Post #11 (Отправлено: 23.04.2008 05:34)     Быстрое цитирование
Цитировать


Прохожий
*

Сообщений: 1
Регистрация: 23.04.2008
Не существует двух разных строк, которые будучи зашифрованными в MD5, имели бы одинаковые контрольные подписи.

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


Написать приватное сообщениеНаписать по email
smax0
Post #12 (Отправлено: 19.05.2008 18:24)     Быстрое цитирование
Цитировать


Прохожий
*

Сообщений: 1
Регистрация: 19.05.2008
Я сделал result.php

<?php
IF ($_POST['LMI_PREREQUEST']==1) {
echo "YES";
}
ELSE {


..
..
...


}

?>

Т.е. платеж должен пройти, т.к. тут даже проверок нет никаких. Но не получается. Пишет, что продавец запретил платеж.Крыжики стоят такие же как и в примере.
Подскажите , пожалуйста в чем ошибка?


Написать приватное сообщениеНаписать по email
pyer0
Post #13 (Отправлено: 16.07.2008 01:26)     Быстрое цитирование
Цитировать


Прохожий
*

Сообщений: 4
Регистрация: 16.07.2008
Вопрос такой. Почему может не передаваться переменная $_POST['LMI_HASH']?
Тоесть я генерирую хэш для сравнения, а у меня isset($_POST['LMI_HASH']) возвращается false.


Написать приватное сообщениеНаписать по email
DKameleon
Post #14 (Отправлено: 16.07.2008 02:43)     Быстрое цитирование
Цитировать


Хранитель традиций
*******

Сообщений: 2187
Регистрация: 31.05.2006
Участник WM-Клуба # 247
может вы в предварительном запросе смотрите?



==================
Написать приватное сообщениеНаписать по emailВебсайт
pyer0
Post #15 (Отправлено: 16.07.2008 10:28)     Быстрое цитирование
Цитировать


Прохожий
*

Сообщений: 4
Регистрация: 16.07.2008
Блин. Да, я смотрю в предварительном. А надо проверять в какой момент?


Написать приватное сообщениеНаписать по email
pyer0
Post #16 (Отправлено: 16.07.2008 10:46)     Быстрое цитирование
Цитировать


Прохожий
*

Сообщений: 4
Регистрация: 16.07.2008
Прошу прощения. Перечитал материал ещё раз и теперь разобрался. Всё работает. Спасибо за внимание.


Написать приватное сообщениеНаписать по email
iSlayter
Post #17 (Отправлено: 20.08.2008 14:56)     Быстрое цитирование
Цитировать


Прохожий
*

Сообщений: 5
Регистрация: 20.08.2008
Есть проблема:

Ошибка - System does not support the specified encoding. (код: -1072896658)
step=6.2


как её решить?! я не могу отлаживать свои скрипты, т.к. мерчант не даёт совершенно никакой информации. что делать?!


Написать приватное сообщениеНаписать по email
iSlayter
Post #18 (Отправлено: 20.08.2008 21:25)     Быстрое цитирование
Цитировать


Прохожий
*

Сообщений: 5
Регистрация: 20.08.2008
Ошибка решена. Всё было просто.
Но, есть ещё одна.

Итоговый код такой:
   public function processAction()
   {
    header("Content-type: text/html; charset=windows-1251");
    switch ($this->status):
        case 'request':
         // проверка и отправка товара
         if ($_POST['service'])
            $seller_info = 0;
         else
            $seller_info = $this->paymentsModel->getSeller_INFO($_POST['id']);
               $no_error = $this->paymentsModel->checkDetails($_POST['id'], $_POST['LMI_PAYEE_PURSE'], $_POST['LMI_PAYMENT_AMOUNT']);
               if (isset($_POST['LMI_PREREQUEST']) && 1 == $_POST['LMI_PREREQUEST']) {
                if (false === $no_error)
                   echo 'YES';
                else
                   echo $no_error;
               } else {
                $main_cfg_obj = Registry::get('main_config');
                   $main_cfg   = $main_cfg_obj->iniArr;
                   $secret_key = $main_cfg['wm']['secret_key'];
                   // Склеиваем строку параметров
                   $common_string = '123123'.$_POST['LMI_PAYEE_PURSE'].$_POST['LMI_PAYMENT_AMOUNT'].
$_POST['LMI_PAYMENT_NO'].$_POST['LMI_MODE'].$_POST['LMI_SYS_INVS_NO'].
$_POST['LMI_SYS_TRANS_NO'].$_POST['LMI_SYS_TRANS_DATE'].$secret_key.
$_POST['LMI_PAYER_PURSE'].$_POST['LMI_PAYER_WM'];
                   // Шифруем полученную строку в MD5 и переводим ее в верхний регистр
                   $hash = strtoupper(md5($common_string));
                   //Прерываем работу скрипта, если контрольные суммы не совпадают
                   if($hash != $_POST['LMI_HASH']) die('Работа ПО прервана. Зафиксирована попытка взлома.');
                   $inpt_arr = array('order_id'  => $_POST['id'],
                                     'seller_id' => $seller_info['id'],
                                     'amount'    => $_POST['LMI_PAYMENT_AMOUNT'],
                                     'payer_purse' => $_POST['LMI_PAYER_PURSE'],
                                     'payer_wmid'  => $_POST['LMI_PAYER_WM'],
                                     'date' => 'NOW()');
                   $this->paymentsModel->insert($inpt_arr);
               }
               break;
         
        case 'success':
         $this->view->assign('title', 'Проведение платежа' . SITE_TITLE_SEPARATOR . SITE_TITLE);
         $this->view->assign('status', 'success');
         $this->view->display('frontend/main.tpl');
         break;
         
        default:
         $this->view->assign('title', 'Проведение платежа' . SITE_TITLE_SEPARATOR . SITE_TITLE);
         $this->view->assign('status', 'fail');
         $this->view->display('frontend/main.tpl');
         break;
       endswitch;
   }


Как вы видите в строке с контрольной подписью я засунул вообще левые данные "1234", но, платёж проходит. Включён тестовый режим.

Это сообщение отредактировал iSlayter - 20.08.2008 21:26


Написать приватное сообщениеНаписать по email
iSlayter
Post #19 (Отправлено: 31.08.2008 10:26)     Быстрое цитирование
Цитировать


Прохожий
*

Сообщений: 5
Регистрация: 20.08.2008
ну что, товарищи умники, какие-либо комментарии будут!?


Написать приватное сообщениеНаписать по email
DKameleon
Post #20 (Отправлено: 31.08.2008 15:52)     Быстрое цитирование
Цитировать


Хранитель традиций
*******

Сообщений: 2187
Регистрация: 31.05.2006
Участник WM-Клуба # 247
ну что, товарищи умники, какие-либо комментарии будут!?

что вы желаете услышать от товарищей умников?


==================
Написать приватное сообщениеНаписать по emailВебсайт
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции этого топикаСтраницы: (4) [1] 2 3 ... Последняя » ОтветитьНовая тема

 





Powered by Invision Power Board © 2003 IPS, Inc.