Электронная коммерция

индекс
176,59

Прием наличных в вашем интернет-магазине через Qiwi

В этой статье речь пойдет о приеме оплаты в интернет-магазине через сеть платежных терминалов Qiwi.

Заранее хочу сказать: я не имею никакого отношения к компании Qiwi, а также они мне не платят :-) Статья только для блага сообщества. Эта платежная система позволила мне поднять конверсию и доходность моего магазина. Может быть, она поможет и вам.

Терминалы по приему наличных уже довольно прочно вошли в нашу жизнь(жаль, что не кредитные карты, как в большинстве стран). Через них можно оплачивать телефон, оплачивать интернет, даже погашать кредиты и платить за воду. Больше интернет-магазины уже давно прописались в меню терминалов. Однако, что делать маленьким магазинам, которые, часто в начале своей деятельности имеют небольшой оборот, а их владелец работает без ИП или ООО, но хотят принимать оплату через терминалы удобным способом? Ни одна платежная система не разместит в своем меню такой магазин.

Можно принимать платежи вручную. Т.е., вы сообщаете пользователю номер своего Яндекс.Деньги кошелька, после чего он переводит на него оговоренную сумму. Но тут есть главный минус и несколько побочных. Главный: процесс оплаты происходит вручную. Пользователь должен перевести денежку, потом сообщить вам, а вы, посмотрев был ли такой перевод пометить заказ, как оплаченный. А что, если у вас, 50-100 заказов в день? Необходима некая автоматизация процесса…

Некоторые время назад компания Элекснет представляла решение этой проблемы: после покупки покупатель должен был ввести на специальном сайте дату, время, номер терминала и еще кучу цифр с чека. После этого Элекснет отсылал сайту уведомление об оплате. Однако, для пользователя это довольно сложный способ. Я то путался, а что можно сказать о среднестатистическом пользователе, который хочет купить у вас кружку с надписью «Я блондинко»?

На помощь приходит платежная система Qiwi, а также ее XML-интерфейсы.

Вкратце, не вникая, пока в технические подробности алгоритм таков:

1. Пользователь, после выбора товара, составления счета и выбора способа оплаты «Qiwi» вводит свой номер телефона (предварительно создав cчет в системе Qiwi, но также возможна регистрация через XML) в специальном поле на вашем сайте.
2. Ваш сайт посылает XML-запрос серверу Qiwi, создавая счет на указанную сумму для этого пользователя.
3. Пользователь, воспользовавшись терминалом по приему наличных Qiwi или личным кабинетом на сайте Qiwi, оплачивает счет. Средства переводятся на ваш счет.
4. Ваш сайт время от времени специальным XML запросом время от времени проверяет(у меня, к примеру, раз в 15 минут по cron'у), выполнен ли счет. Если счет выполнен — совершает с ним необходимые действия.

Спорен лишь 4й пункт. Интерфейс Qiwi в этом месте довольно убог:
Необходимо отправлять их серверу список всех счетов, с которых ожидается оплата, а он в ответ возвращает список выполненных счетов, из запрошенных. В моем случае я вынимаю из базы все не оплаченные счета за последние 5 дней и скармливаю их киви. И так раз в 15 минут.

Техническая сторона дела


Qiwi предоставляет достаточно обширный XML-интерфейс. Однако, вам, скорее всего, понадобится лишь 2 его функции — выставление счета и проверка состояния счета.

Выставление счета


Отправка запроса на создание счета производится отправкой XML-запроса на адрес http://www.mobw.ru/term2/xmlutf.jsp, в POST запроса передаем следующий XML:

<?xml version="1.0" encoding="utf-8"?>
<request>
<protocol-version>4.00</protocol-version>
<request-type>30</request-type>
<extra name="password">Ваш пароль</extra>
<terminal-id>Ваш номер в системе киви</terminal-id>
<extra name="serial">Ван пароль №2</extra>
<extra name="comment">Комментарий</extra>
<extra name="to-account">Номер телефона покупателя</extra>
<extra name="amount">Сумма</extra>
<extra name="trm-id">Номер заказа</extra>
<extra name="ALARM_SMS">0</extra>
<extra name="ACCEPT_CALL">0</extra>
<extra name="ltime">60</extra>
</request>


Поэксперементировать с отправкой XML запросов вы можете прямо в личном кабинете Qiwi(меню Сервис-Протокол).

В случае успеха сервер вернет:

<response>
<result-code>0</result-code>
</response>


Проверять нужно значение, которое возвращено в result-code: в случае, если оно не равно 0, выводить пользователю ошибку: например, может быть не соблюден формат номера телефона, или же пользователь вовсе не зарегистрирован в системе Qiwi.

Следующий пример на PHP отправляет XML-запрос на сервер Qiwi и получает ответ:

$xml = "<?xml version="1.0" encoding="utf-8"?>
<request>
<protocol-version>4.00</protocol-version>
<request-type>30</request-type>
<extra name="password">Ваш пароль</extra>
<terminal-id>Ваш номер в системе киви</terminal-id>
<extra name="serial">Ван пароль №2</extra>
<extra name="comment">Комментарий</extra>
<extra name="to-account">Номер телефона покупателя</extra>
<extra name="amount">Сумма</extra>
<extra name="trm-id">Номер заказа</extra>
<extra name="ALARM_SMS">0</extra>
<extra name="ACCEPT_CALL">0</extra>
<extra name="ltime">60</extra>
</request>";
$opts = array('http' =>
array(
'method' => 'POST',
'header'=> "Content-type: application/x-www-form-urlencoded\r\n"
."Content-Length: " . strlen($xml) . "\r\n",
'content' => $xml
)
);
//Создаем stream context
$context = stream_context_create($opts);
//Отправляем запрос серверу. В качестве 3го параметра указываем созданный stream context
$result = file_get_contents("http://www.mobw.ru/term2/xmlutf.jsp", FALSE, $context);
//Обрабатываем xml и проверяем возвращенное значение.


Более подробный пример в виде контроллера для CakePHP.

Проверка оплаты счета



Для начала немного теории. Я думаю, если вас заинтересовала эта статья, вы уже сталкивались с другими системами по приему платежей, например, Webmoney или Roboxchange. Обе эти системы при оплате счета умею вызывать определенную страничку вашего сайта, сообщая, таким образом, об оплате счета покупателем. С Qiwi ситуация другая: при оплате протокол не предусматривает вызов какой либо страницы вашего сайта. Однако, есть интерфейс, при обращении к которому с помощью XML можно определить статус счета.
Алгоритм в этом случае прост:
1. При выставлении счета ставим максимальное время жизни счета 5 дней.
2. Создаем скрипт, который будет вынимать из вашей базы данных все неоплаченные счета qiwi за последние 5 дней, запрашивать у Qiwi их статус, а если они оплачены — ставить им в базе данных статус «оплачен», а также выполнять другие действия, предусмотренные бизнес-логикой движка вашего интернет-магазина.
3. В cron добавляем задание выполнять этот скрипт каждые 15 минут.

Теперь к практике. Скрипт для проверки статуса счета должен вытаскивать из вашей базы номера неоплаченных счетов и подставлять их в XML, приведенный ниже.

XML-запрос на проверку статуса заказов представляет из себя:

<?xml version="1.0" encoding="utf-8"?>
<request>
<protocol-version>4.00</protocol-version>
<request-type>33</request-type>
<extra name="password">пароль</extra>
<terminal-id>логин</terminal-id>
<extra name="serial">логин2</extra>
<bills-list>
<bill id="1"/>
<bill id="2"/>
<bill id="3"/>
...
</bills-list></request>


В этом примере мы запрашиваем сервер на статус выполнения счетов 1, 2, 3

Адрес, на который следует слать запрос, а также способ его отправки не отличается от примера, представленного в первой части статьи для выставления счета

В ответ сервер возвращает, чтото, вроде:
<response>
<result-code fatal="false">0</result-code>
<bills-list>
<bill id="1" status ="60" sum="193.00" />
<bill id="2" status ="60" sum="1032.00" />
<bill id="3" status ="50" sum="393.00" />
</bills-list>
</response>


В ответе необходимо проверять поле status. 60 — означает, что счет оплачен. Можно также сравнить сумму с суммой в базе данных.

Это все, что я хотел рассказать. Я сознательно не очень подробно описывал протокол Qiwi. Уверен, читателю будет просто разобраться в нем самому. Цель статьи — рассказать о довольно новой и, главное, удобной платежной системе на берегах рунета.
Подробное описание протокола Qiwi в pdf
Регистрация в качестве магазина
Компонент для CakePHP для работы с Qiwi (Описание работы с компонентом содержится в комментариях к коду.)

UPD: Перенес в блог «Электронная коммерция»
UPD2: Эта же статья в моем блоге
+41
16 февраля 2009, 15:58
94

комментарии (36)

+1
chemedia #
Странно что ещё не кто не сделал сервис в котором все это уже реализовано, и достаточно зарегистрироваться и получить html код для своего магазина
+1
Kolger #
Если бы тут можно было бы обойтись HTML кодом — то, думаю, такой сервис бы давно существовал. Ни у нас — так на западе.
А так, даже Qiwi предоставляет возможность выставления счета с помощью ссылки вида:
www.mobw.ru/setInetBill.do?from=<ваш аккаунт>&to=<аккаунт покупателя>&summ=<сумма>&com=<комментарий>
но об убогости такого способа говорить не приходится.
–1
chemedia #
я далеко не программист и быть может на знаю подводные камни…
идея сервиса такова: пользователь регистрируется заполняет все данные необходимые для киви
загружает прайс того что хочет продать
а сервис генерирует html с красивыми кнопочками купить и картинкой товара
все тоже что вы описали, только все это делает за вас Сервис
как вам идея? давайте сотрудничать )))
сделаем свой Киви с блэкджеком и шлюхами )
+1
Kolger #
Сложность в том, что стоимость товара может различаться допустим, от количества, дополнительных рюшечек и т.д. :) И, чтобы, покупатель не мог чтото смухлевать необходимо посылать запрос на такой сервис в обход браузера. А тогда и сложность достучаться до такого сервиса ровно такая же, как реализовать оплату с помощью Киви.
А вот для штучных товаров, у которых фиксированная стоимость — да, может быть было бы кому то полезно :)
0
chemedia #
можно же к примеру определить форму прайс листа для сервиса
например с фиксированными товарами А, Б, В
и с под категориями А1, А2, А3, В1, В2…
но сервис будет приплюсовывать стоимость и выдавать конечную сумму счета
то есть сапоги стоят 10 р, рюши 1 р, каблуки 2 р
если клиент покупает сапоги с рюшами и каблуками
то на выходе он иммет счет 10+1+2=13 р
в системе все это будет выглядеть как несколько товаров A+A1+B
0
Kolger #
Вы действительно считаете, что это будет проще?:-)
Тем более, надо помнить, что пользователь может отправить заказ на сайт на 13рублей, а в ссылке на оплате указать только 10рублей. Сайт должен это проверять. Опять сложность.
Для магазинов, у которых есть только сапог, без рюшечек еще сносно. И то, это будет такая плодилка говно магазинов на .narod.ru :-)
0
chemedia #
при комиссии сервиса в 0.1%
пусть даже на .narod.ru :-)
0
khim #
Ну дык она уже есть — и многие тамошние магазины вполне ничего. Или кто-то боится что его уличат в плагиате?

Вряд ли в ближайшее время западные конторы прикрутят Qiwi — так что ниша открыта…
+1
SovGVD #
давайте сотрудничать… примерно месяца 3 назад реализовал эту идею (примерно) в собственном движке SWUSE — все что нужно — заполнить интернет магазин товарами и поставить галочку — включить Мобильный кошелек (QIWI/ОСМП) и Roboxchange. Ну и конечно надо заключить договора с QIWI и Roboxchange, чтобы получить логин/пароли… но есть и иной вариант ;)
ЗЫ: дайте денег — сделаю всё
0
SovGVD #
Кстатии с Roboxchange работать немного удобнее (хотя это иной сервис) — при оплате товара смсками/электронной_валютой, робоксчэндж вызывает скрипт на сайте магазина, там образом инициируя процесс проверки, поэтому счета не приходиться проверять (оплачен/нет) каждые N минут
0
Kolger #
Я об этом сказал в статье, да. Без спорно удобнее.
Но робоксченж тоже везде использовать не получится — слишком большие у них проценты.
0
mkechinov #
У Элекснет это видел еще года 3 назад.
–1
Sashko #
пипец у вас дизайн имхо
0
Kolger #
Дизайн чего? Моего блога? Заметьте — я его даже здесь не афиширую :)
Дизайн для него я искал ровно 10 минут — покопавшись на каком то сайте про темы для вордпресса. А т.к. обновляю я его раз в 2 месяца и так, для души, то не вижу смысла в чем то большем.
А вообще, причем тут это?
0
Sashko #
дизайн Qiwi ужасен, не ваш.
0
el777 #
Не-не-не, шаман… только не киви.
Буквально вчера вечером положил деньги на телефон через их терминал — до сих пор не дошли!
Представляете??? Если даже на телефон, где все уже 100 лет назад отлажено, они платеж маринуют больше суток, то что будут делать с такими мелкими разовыми платежами?
Днем до них не дозвониться: «Здравствуйте, спасибо за звонок, ждите ответа оператора» и тут все срывается. Вы хотите такой сервис?
Шишки-то на вас повалятся, пользователь не станет разбираться что куда — будет требовать возврата денег. Вот и будете по каждому платежу пытаться дозвониться до этих кивей, разруливать каждый перевод.
Спасибо, но такой криви мне не надо.
0
efads #
Дайте мне реквизиты платежа — если не сложно?

Пусть я и не совсем КИВИ, но постараюсь помочь. В личку — ок?

Касательно работы — мы работаем с ОЗОНом и Softkey достаточно давно — нареканий пока не слышал.

Потому просто сбросьте реквизиты платежа и… не путайте КИВИ и Личный Кабинет КИВИ — ибо — это вещи разные.

А разрулиливать будете с менеджером и очень быстро, поверьте:)

0
el777 #
Квитанция не под рукой сейчас — как доеду до дома — скину.
Что интересно: вчера оператор не спрашивала номер платежа и терминала, достаточно было номера телефона, сегодня уже другая спрашивает. Да еще с наездом: «Мы тут всю Россию обслуживаем!». Не могу понять, ведь по номеру телефона можно однозначно проследить платеж, терминал и все прочее. Номер-то уникальный в пределах всего мира! Если нужна доп. проверка — спроси адрес, где платили — это человек запомнит, а вот номер терминала вряд ли.
Не принимайте на свой счет — я просто еще раз дозвонился до операторов.

Я платил в киви, без ЛК.
0
efads #
Ок — жду. Не обещаю — но постараюсь!

0
el777 #
Отправил.
0
efads #
Получил — вновь говорю, что не обещаю, ибо это вне моей компетенции — но постараюсь! Запросил чуть больше данных — пришлете?
0
el777 #
Заранее спасибо за ваше беспокойство. :)

Не проблема — пришлю.
0
alexan #
Статья оказалось полезной, но не полной.

1. Зарегистрировался по приведённой выше ссылке для регистрации магазинов. При регистрации выбрал тип регистрации «Приём платежей» (не «именной кошелёк»). Не понял разницу между ними.

2. Захожу в личный кабинет. Шарюсь, тыкаю по ссылкам. Не нахожу ни слова про то, где же мой баланс как магазина, и как обналичивать деньги, которые пользователи будут платить мне через Qiwi?

3. Шарюсь и тыкаюсь дальше. После нес-ких попыток попасть на главную страницу личного кабинета и сообщения «Ошибка: вы уже залогинены», каким-то образом попадаю на страницу, где есть ссылки-кнопки «Подключение интернет магазинов» и «Подключение провайдеров». По сути, обе ссылки описывают подключение интернет-магазинов (или сервисов… как собственно разница?), при этом в ссылке «Подключение интернет магазинов» делается разделение на ещё 2 типа — «именной кошелёк» и «приём платежей», различие между которыми тоже сразу не уловишь… в итоге я запутался и плюнул :(.

Если можете — внесите в статье про это ясность.
0
efads #
Тут есть некоторая информация: habrahabr.ru/company/qiwi/blog/50407/

Если возникнут вопросы, пишите!
0
efads #
Если кратко, то «именной кошелек» не подразумевает договор, Вы работаете, как частное лицо — только тссс:)

«Прием платежей» — это договор — и перечисление на ваш расчетный счет.
0
efads #
Пишите мне в Хабрапочту — ок?
0
Kolger #
Опишите лучше в кратце, у вас явно лучше и понятнее получится.
А я добавлю в статью.

По пункту «Ошибка: вы уже залогинены» скажу — баг. После этого надо зайти на главную и выбрать «Личный кабинет». Окажитесь в своем личном кабинете :)
0
alexan #
Собственно, я жду когда со мной свяжутся для выяснения финансовых обстоятельств.
Если связываться будете вы — то давайте тогда уж сразу почтой и общаться :).
0
efads #
Написал:)
0
zvetaeva_41 #
я бы на месте киви сделал так: (на мой взгляд деньги просто под ногами лежат)

1. Желающий торговать через Киви регистрируется и получает реквизиты
2. Покупатель формирует корзину на сайте магазина и выбирает способ оплаты через киви.
3. Магазин посылает на сервер киви хмл — счет (счет-как счет — яблоки — 13р. груши — 15р, итого — 100р).
4. Киви присваивает этому счету unique id и пересылает его магазину.
5. Магазин выдает номер счета покупателю.
6. Покупатель вводит номер в терминале и видит свой счет (ага, яблоки, груши. чтобы не запутаться). Платит.


7.профит!

раз в 15 минут тормошить киви насчет оплаты это, конечно, жесткач, но на безрыбье.

0
oleamm #
согласен. мне кажется это проще, чем возня с личным кабинетом, особенно если человек не умеет пользоваться терминалами.
кажется эту тему уже обсуждали)
0
efads #
Обсуждали, но, право, не известно, что проще — запомнить некое ID или запомнить СВОЙ номер телефона?

ИМХО — второе много проще.
0
Kolger #
Спорно.
Как сказали чуть выше — проще запомнить свой номер телефона. Открыть с его помощью свой личный кабинет в терминале и выбрать счет из списка. Нежели запоминать номер счета из 7-10 цифр.
0
oleg_ole #
я первый раз работаю с qiwi, подскажите пожалуйста, что конкретно должно быть в этом параметре?
Ван пароль №2

что значит «Ван пароль №2»?
0
Kolger #
То, что называется «КОД ПОДТВЕРЖДЕНИЯ» на страничке входа в аккаунт.
0
homebody #
«жаль, что не кредитные карты, как в большинстве стран» — Здесь есть две проблемы.
1. Очень Маленький Магазин должен будет отстёгивать Визе/МастерКарду, в лице банка-эквайрера, порядка 3% за эквайринг (приём карт). Услуги приёма платежей по всему миру стоят дорого. Но что если по всему миру не нужно?
2. Банкам-эквайрерам, равно как и Ассисту / Хронопею, Очень Маленький Магазин неинтересен в качестве клиента. Риска от него больше, чем прибыли.
… Вот тут-то и появляется Qiwi

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.