Мій сайт
Головна » 2011 » Березень » 14 » Технічна сторона справи
22:05
Технічна сторона справи

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 = "
<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);
/ / Відправляємо запит серверу. В якості третього параметра вказуємо створений 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-запит на перевірку статусу замовлень представляє з себе:


<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: Ця ж стаття в моєму блозі
Переглядів: 490 | Додав: w1zard | Рейтинг: 0.0/0

Категорії розділу

Події [3]
Тільки екстренні та надзвичайні новини
Світові події [4]
Останні події, що трапились у світі.
Українські події [8]
Події, які трапились в межах нашої державии, чи стосуються України
Бізнес [3]
Новини та події із бізнес-світу
Наука і техніка [3]
Новини, що трапились у світі науки або технічних досліджень
Спорт [1]
Спортивні новини та досягнення
Культура та мистецтво [2]
Новини культурного та художнього світу
Форма входу

Наше опитування

Оцініть мій сайт
Всього відповідей: 47

Друзі сайту

Статистика


Онлайн всього: 4
Гостей: 4
Користувачів: 0