Прийом коштів Webmoney на сайті

294

Від автора: у цьому уроці я хотів би поговорити про те, як організувати на своєму сайті механізм прийому коштів Webmoney. Хоча це і нескладне завдання, однак, є деякі моменти, пов’язані з безпекою платежів, які необхідно обов’язково враховувати. Тому в даному уроці ми детально розглянемо механізм прийому платежів Webmoney.

В даному відео ми будемо говорити про найбільш популярний метод прийому Webmoney через сервіс Merchant WebMoney Transfer. Даний сервіс дуже зручний і з його допомогою можна швидко і легко впровадити необхідні елементи на свій сайт, щоб почати приймати кошти WebMoney за Ваші товари або послуги.

План уроку

1. Основні вимоги для прийому коштів webmoney.

2. Налаштування торгового гаманця.

3. Формування платежу.

4. Форма попереднього запиту.

5. Форма оповіщення про платіж.

6. Форма виконаного платежу.

7. Форма не виконаного платежу.

Деталі підручника

Тема: PHP

Складність: Середня

Урок: Відео (.mp4)

Час: 00:56:57

Розмір архіву: 139 Mb

Прийом коштів Webmoney на сайтіПрийом коштів Webmoney на сайті

1. Основні вимоги для прийому коштів webmoney

Спочатку давайте визначимося, що потрібно для прийому коштів WebMoney:

Першим ділом, звичайно ж, Ви повинні зареєструватися в системі WebMoney, тобто отримати WMID (іншими словами ідентифікатор) і створити собі гаманець, на який будуть надходити кошти. У цьому уроці я не буду розповідати як зареєструватися в системі WebMoney і як створювати гаманці, так як це займе багато часу.

Ваш WMID, для використання в системі Merchant WebMoney Transfer повинен мати атестат продавця. Даний атестат можна отримати, виконавши всі вимоги сервісу Webmoney. Більш докладно, про те, що таке атестат і як його отримати – дивіться за посиланням: https://passport.webmoney.ru/asp/WMCertify.asp. Звичайно атестат продавця можна і не отримувати, достатньо мати початковий або персональний атестат, але при цьому будуть накладені великі обмеження, на виконання різних операцій, знову ж таки про ліміти більш докладно дивіться за посиланням.

2. Налаштування торгового гаманця

Тепер, коли Ви виконали два попередні умови, давайте перейдемо на сайт сервісу Merchant WebMoney Transfer – за посиланням.

Далі авторизируемся, для цього перейдіть за посиланням Login:

Прийом коштів Webmoney на сайті

Мені зручніше реєструватися, використовуючи програму Webmoney Keeper, а Ви робіть так, як Вам зручніше. Після реєстрації Вас перенаправляють на сторінку огляду Ваших гаманців і навпроти кожного гаманця є посилання налаштувати (change).

Прийом коштів Webmoney на сайті

Дана посилання веде на сторінку зміни налаштувань гаманця, які необхідні для прийому коштів. Тому навпроти того гаманця, на який Ви плануєте брати кошти Webmoney, переходьте за посиланням налаштувати (change).

Прийом коштів Webmoney на сайті

Тепер докладніше по текстових полів:

Торгове ім’я – це торгове ім’я платник буде бачити на сторінці Merchant WebMoney Transfer перед оплатою, тобто це звичайне інформаційне поле.

Secret Key – довільна рядок 15 – 20 символів, для забезпечення безпеки платежу. Дану рядок будете знати тільки Ви, і сервіс Merchant WebMoney Transfer. Так само дана рядок буде використовуватися для перевірки справжності платежу, але про це далі.

Result URL – адреса сторінки на веб-сайті продавця), на яку сервіс Merchant WebMoney Transfer посилає HTTP POST оповіщення про здійснення платежу з його детальними реквізитами. Дана сторінка буде використовуватись для всіляких перевірок правильності платежу. Адреса цієї сторінки, ніхто крім Вас знати не повинен і користувачі при оплаті, переходити на неї так само не будуть. Вона як проміжна – і її завдання перевірити справжність платежу. Також ставимо галочку навпроти рядка — Передавати параметри в попередньому запиті.

Success URL — адреса сторінки на веб-сайті продавця), на яку буде переведений інтернет-браузер покупця у разі успішного виконання платежу.

Fail URL — адреса сторінки на веб-сайті продавця), на яку, буде переведений інтернет-браузер покупця в тому випадку, якщо платіж не був виконаний з якихось причин.

Навпаки Success URL і Fail URL вибираємо в якості методу передачі даних – метод POST.

Дозволяти використовувати URL, що передаються у формі — дана опція нам не потрібна, тому галочку ставити не потрібно.

Відсилати сповіщення про помилку платежу на кіпер – якщо включити дану опцію, то сервіс Merchant WebMoney Transfer буде відправляти по внутрішній WM-поштою повідомлення в разі виникнення помилки при здійсненні платежу користувачем. Дана опція буде корисною, тому галочку активуємо.

Метод формування контрольної підпису – краще вибрати MD5. Дана можливість нам буде потрібно при перевірці достовірності платежу. Але про це далі по ходу уроку.

Тестовий/Робочий режими – якщо вибрати тестовий режим, прийом коштів буде працювати в тестовому режимі, при якому, гроші з гаманця платника списуватися не будуть. Тому даний режим використовуйте тільки на етапі тестування. А потім активуйте робочий режим.

Прийом чеків Paymer.com (ВМ-карт) або WM notes – на ваш розсуд.

Прийом платежів через термінали, банкомати, каси магазинів — на ваш розсуд.

Після зміни конфігурації натискаємо кнопку зберегти. Якщо ви плануєте брати кошти на кілька гаманців, то для кожного гаманця потрібно виконати аналогічні налаштування.

3. Формування платежу.

Для початку формування платежу сервіс Merchant WebMoney Transfer має отримати певний набір параметрів. Наприклад, суму платежу, кому переводити гроші і т. д.

Тобто перед тим як відправляти дані в сервіс Merchant WebMoney Transfer (перед тим як користувач натисне кнопку оплатити замовлення), Ви повинні отримати і підрахувати все, що потрібно для оплати замовлення – загальну вартість замовлення, найменування товарів, інформацію про користувача, який оплачує замовлення. В принципі – це вже Вам вирішувати, які дані потрібні для правильного оформлення замовлення.

Після цього, користувач перекладається на спеціальну сторінку для оплати замовлення, в якій міститься форма запиту платежу. Ось приклад цієї сторінки:

Товари в замовленні:….

Сума замовлення : 10000

Головне на цій сторінці це форма запиту платежу – то є звичайна форма з певним набором прихованих полів (поля які потрібні для проведення платежу), імена яких задає сам сервіс Merchant WebMoney Transfer і змінювати їх не можна. Звичайно, Ви можете додати додаткові свої поля, в яких будете передавати, дані, які потрібні Вам для роботи, але ці поля, ні як не будуть враховуватися самим сервісом (імена цих полів не повинні мати префікс LMI_).

Атрибут action=https://merchant.webmoney.ua/lmi/payment.asp форми – повинен мати тільки таке значення, тобто він містить шлях до обробника форми (сервіс Merchant WebMoney Transfer). Так само, при відправки форми можна заздалегідь визначити спосіб (варіант) оплати, наприклад, якщо в атрибуті action, вказати ось таке значення — https://merchant.webmoney.ru/lmi/payment.asp?at=authtype_8, то це означає, що оплату необхідно здійснити з гаманця Webmoney. Усі доступні способи позиціонування оплати можна подивитися в офіційній документації сервісу.

Тепер давайте розглянемо, які приховані поля необхідно відправляти для платежу. Відразу хочу сказати, що всі поля ми з Вами розглядати не будемо, так як їх дуже багато, ми розглянемо лише основні:

LMI_PAYMENT_AMOUNT — Сума платежу, яку ми повинні отримати від покупця, дробова частина відокремлюється крапкою.

LMI_PAYEE_PURSE – Гаманець на який надійдуть засобу. Формат — буква і 12 цифр.

LMI_PAYMENT_DESC – Опис товару (максимальна довжина 255 символів). Текст повинен бути кодирован кодування cp-1251.

Це були обов’язкові поля. Без них неможливо виконати платіж.

Єдине зауваження по полю LMI_PAYMENT_DESC. Якщо Ви плануєте в описі платежу використовувати символи, кодовані кодуванням UTF – 8, необхідно замість цього поля використовувати полі — LMI_PAYMENT_DESC_BASE64.

Тепер кілька необов’язкових полів:

LMI_PAYMENT_NO — номер купівлі — дане поле потрібно використовувати у відповідності з тим, як Ви нумеруете товари або замовлення. При формуванні номера – краще використовувати унікальні значення (наприклад, ідентифікатор товару чи замовлення). Даний номер, так само допоможе отримати швидку інформацію про платіж в системі Merchant WebMoney Transfer.

LMI_SIM_MODE – режим тестування. Може приймати одне з наступних значень: 0 або відсутній: для тестових платежів сервіс буде імітувати успішне виконання; 1: сервіс буде імітувати виконання з помилкою (платіж не виконано); 2: Близько 80% запитів на платіж будуть виконані успішно, а 20% — не виконані.

FIELD_1, FIELD_2, FIELD_3 – поля, які Ви можете додати на свій розсуд. Наприклад, дані про покупця і т. д.

Даних полів цілком достатньо, що б надіслати запит про платіж і успішно його виконати. Повний список всіх можливих полів, можна подивитися на офіційному сайті сервісу в розділі документація.

4. Форма попереднього запиту.

Після того, як користувач відправить цю форму, тобто натисне кнопку сплатити – він буде перенаправлений на сервіс Merchant WebMoney Transfer, і одночасно з ним, в даний сервіс потраплять дані форми (методом POST).

Прийом коштів Webmoney на сайті

Сервіс запропонує кілька способів оплати, наприклад, якщо вибрати вкладку WebMoney Keeper і натиснути далі, буде відкрито програму WebMoney Keeper і її спеціальне віконце, в яке потрібно ввести графічну капчу, яку надає сервіс Merchant WebMoney Transfer. Після введення покупець побачить ось таку сторінку:

Прийом коштів Webmoney на сайті

Тобто тепер йому необхідно просто вибрати гаманець для оплати і підтвердити платіж.

Але погодьтеся, що дані, які передаються через форму – дуже легко підробити та передати, наприклад, зовсім іншу суму оплати за товар. Як такого уникнути?

Для цього і необхідно буде виконати певні перевірки. Дивіться, коли користувач підтвердить платіж, то перед тим як зняти гроші з його гаманця, сервіс Merchant WebMoney Transfer відправляє користувачу спеціальну форму попереднього запиту. Дана форма передає нам (продавцям) параметри платежу, який буде виконаний. І якщо при налаштуванні, гаманця приймаючого кошти, Ви поставили галочку напроти пункту — Передавати параметри в попередньому запиті, то сторінка RESULT URL, повинна обов’язково повернути рядок «YES», інакше платіж не буде виконаний. Іншими словами, отримавши дані, ми можемо перевірити їх на свій розсуд і якщо все вірно — повернути рядок «YES», тільки тоді платіж буде виконаний.

Ось приклад форми попереднього запиту.

Зверніть увагу в атрибуті action, прописаний шлях до сторінки Result URL – той, що Ви вказували при налаштуваннях гаманця, що приймає кошти.

Тепер докладно про полях:

LMI_PREREQUEST — Індикатор попереднього запиту. Тобто якщо настав дане поле зі значення 1, то значить, відправлений попередній запит, про початок виконання платежу.

LMI_PAYMENT_AMOUNT – сума, яку сплачує покупець товару. Дане значення має повністю збігатися з тим, що ми відправляли у формі запиту платежу.

LMI_PAYMENT_NO – номер платежу, знову ж таки, це поле має збігатися з тим, що ми відправляли у формі запиту платежу, так як це воно і є.

LMI_PAYEE_PURSE – гаманець, на який будуть перераховані кошти, знову ж таки, це поле має збігатися з тим, що ми відправляли у формі запиту платежу, так як це воно і є.

LMI_MODE – режим роботи платежу, якщо його значення дорівнює 1 – то платіж виконується в тестовому режимі. Якщо ж 0 – то платіж виконується у реальному режимі.

LMI_PAYER_WM – WMID покупця, який виконує платіж.

LMI_PAYER_PURSE – гаманець, з якого виконується платіж.

Це основні поля, які сервіс надсилає за запитом. Але, якщо Ви в формі запиту платежу, вказували ще додаткові поля, всі вони будуть дублюватися тут. Так що дані по цих полях Ви обов’язково отримаєте.

А тепер дивіться, ми спочатку відправляли сервісу Merchant WebMoney Transfer деякий набір полів, серед яких були номер платежу (код товару), сума до оплати, гаманець, отримує кошти, а також різні додаткові поля (якщо звичайно Ви їх передавали). Тепер ми ці дані отримали назад і необхідно обов’язково перевірити, чи збігаються вони з даними, що ми відправили на початку. Тим самим ми захистимо платіж від підміни, наприклад, ціни, або гаманця і т. д.

Як виконати цю перевірку? Для цього потрібно створити в базі даних табличку, в якій буде зберігатися інформація про замовлення, тобто ідентифікатор замовлення, сума до сплати, опис, найменування товарів, дані про користувача, який замовив товар і т. д.

Далі, перед відправкою форми формування платежу, тобто перед передачею даних платежу сервісу Merchant WebMoney Transfer, Ви в дану таблицю записуєте дані про поточне замовлення, у відповідності з тими полями, що Вам потрібні, але обов’язковими є ціна і номер платежу (той який передається полю LMI_PAYMENT_NO). Тобто Ви зберігаєте в базі даних дані, які ви передаєте сервісу Merchant WebMoney Transfer, через формування форму платежу.

Коли Ви отримаєте дані назад, форми попереднього запиту, то Вам залишиться тільки порівняти отримані дані з даними, що зберігаються в базі даних.

Так, і Важливе зауваження: не забувайте перевіряти номер гаманця, на який будуть переведені кошти. Ось невеликий приклад, сторінки RESULT URL:

Зверніть увагу в змінній $wm_purce – міститься номер гаманця, на який будуть перераховані кошти. Тепер умовимося, що через поле LMI_PAYMENT_NO, ми будемо передавати ідентифікатор поточного замовлення, а також що даний замовлення збережено у таблиці замовлень orders. У якій, поле id – ідентифікатор замовлення, price – ціна поточного замовлення.

Коли скрипт RESULT URL приходять дані методом POST, ми першою справою перевіряємо значення поля LMI_PREREQUEST. Якщо воно дорівнює 1, означає, відправлена форма попереднього запиту. Далі отримуємо з бази даних замовлення, використовуючи ідентифікатор, який міститься в полі LMI_PAYMENT_NO. Далі, якщо таке замовлення знайдений — порівнюємо ціну даного замовлення, з ціною, яка міститься в полі LMI_PAYMENT_AMOUNT, потім порівнюємо кішок, на який будуть перераховані кошти (змінна $wm_purce), з гаманцем що міститься в полі LMI_PAYEE_PURSE. І для надійності також порівнюємо ідентифікатор замовлення, з полем LMI_PAYMENT_NO. Якщо поля збіглися – виводимо рядок YES, якщо ж ні, то виходимо з скрипта — exit().

Сервіс Merchant WebMoney Transfer, звертаючись до даної сторінки і передаючи дані методом POST, буде чекати повернення рядка YES, як тільки він її отримає, виконання платежу буде продовжено, якщо ж даний рядок не буде повернута, значить, виконання платежу буде перервано, про що буде повідомлено користувачеві у спеціальному повідомленні.

5. Форма оповіщення про платіж

Після цього платіж буде виконаний, і сервіс Merchant WebMoney Transfer відправить на сторінку ще одну форму для нашого підтвердження – форму оповіщення про платіж.

Як Ви бачите, деякі поля даної форми збігаються з попередніми формами.

LMI_HASH – контрольна підпис оповіщення про виконання платежу, яка використовується для перевірки цілісності. ДУЖЕ ВАЖЛИВЕ ПОЛЕ!!! За цим полем і необхідно виконати останню перевірку.

LMI_SYS_INVS_NO – номер рахунку в сервісі WebMoney Transfer, який виставляється покупцю від імені продавця.

LMI_SYS_TRANS_NO – номер платежу в сервісі WebMoney Transfer, іншими словами ідентифікатор даного платежу в системі.

LMI_SYS_TRANS_DATE – дата і час платежу.

Зверніть увагу – тепер до нас не приходить поле LMI_PREREQUEST. Дивіться, зараз нам надіслали підсумкові дані по платежу, і серед них є контрольна підпис платежу. Це спеціальна рядок, зашифрований за допомогою того алгоритму, який Ви обрали при налаштуванні гаманця. Як Ви пам’ятаєте, ми вибрали шифрування md5.

Сервіс Merchant WebMoney Transfer формує дану рядок за допомогою склеювання наступних значень полів в тій же послідовності):

Гаманець продавця (LMI_PAYEE_PURSE);

Сума платежу (LMI_PAYMENT_AMOUNT);

Внутрішній номер платежу (LMI_PAYMENT_NO);

Прапор тестового режиму (LMI_MODE);

Внутрішній номер рахунку в системі WebMoney Transfer (LMI_SYS_INVS_NO);

Внутрішній номер платежу в системі WebMoney Transfer (LMI_SYS_TRANS_NO);

Дата і час виконання платежу (LMI_SYS_TRANS_DATE);

Secret Key (LMI_SECRET_KEY);

Гаманець покупця (LMI_PAYER_PURSE);

WMId покупця (LMI_PAYER_WM).

Далі система застосують шифрування md5, і отримує 32 значний шифр даної рядки, та надсилає його разом з формою оповіщення про платіж.

Тепер, для того що б повністю захистити наш платіж від підміни даних – ми самі повинні отримати дану зашифровану рядок, і порівняти її з тією, що надіслав нам сервіс.

Подивіться уважно, практично всі дані надсилає нам сервіс Merchant WebMoney Transfer, за винятком секретної рядка LMI_SECRET_KEY. Дану рядок Ви вказували при налаштуваннях Вашого гаманця. Тобто іншими словами, якщо зловмисник якимось чином дізнається шлях до сторінки RESUL URL, і підмінить дані, то він ні як не дізнається про секретну рядку. Дану рядок знаємо тільки ми і сервіс Merchant WebMoney Transfer.

Тому тепер наші дії такі – формуємо рядок з вище перерахованих даних, шифруємо її за допомогою однонаправленої шифрування md5. І порівнюємо з рядком, яку надсилає нам сервіс Merchant WebMoney Transfer, в полі LMI_SECRET_KEY.

Якщо значення збігаються, то дані платежу вірні. Далі, Вам можна зв’язатися з базою даних і відзначити, що платіж за замовленням виконаний, можна також надіслати покупцеві повідомлення про те, що замовлення оплачено.

Замете, коли сервіс Merchant WebMoney Transfer надсилає форму оповіщення про платіж, то при цьому він не чекає від Вас відповіді, так як платіж вже здійснений і гроші зняті з гаманця покупця.

Ваше завдання при цьому — перевірити правильність платежу і поставити замовленням статус — оплачений, для подальшої відправки покупцю.

Ось спрощений приклад, як необхідно формувати рядок для перевірки підпису платежу (сторінка RESULT URL):

Зверніть увагу, якщо ми не отримали значення поля LMI_PREREQUEST – значить прийшла форма оповіщення про платіж і необхідно перевірити підпис платежу. Тому отримуємо дані про замовлення з кодом, який міститься в полі LMI_PAYMENT_NO. Потім, якщо таке замовлення знайдений, формуємо рядок, шифруємо її за допомогою шифрування md5 і порівнюємо з полем LMI_HASH. Якщо значення рівні, то встановлюємо статус замовлення – оплачений і відправляємо покупцеві повідомлення на пошту про те, що оплата пройшла.

Ще раз хочу нагадати — обов’язково перевіряйте цифровий підпис платежу!!!

6. Форма виконаного платежу

Після оплати користувач буде перенаправлено на сторінку продавця, яку він вказав у полі Success URL. Так само на дану сторінку відправляється форма виконаного платежу з даними по виконаному платежу:

Як Ви бачите це все ті ж поля форми, що ми з Вами приймали раніше, а також додаткові не обов’язкові поля, які ми передавали в самому початку формування платежу.

Значення даних полів Ви можете використовувати на свій розсуд, наприклад, для виведення користувачеві квитанції про здійснений платіж і т. д.

На даній сторінці можна виконувати важливі перевірки і маніпуляції з даними, так як адреса цієї сторінки буде відомий як покупцям, так і зловмисникам. І цілком можлива підміна даних.

7. Форма невиконаного платежу

У разі не виконання платежу, з якихось причин, користувач буде перенаправлено на сторінку FAIL URL-адресу, яку Ви вказали при налаштуваннях гаманця. При цьому гроші у покупця зняті не будуть. Так само на дану сторінку передається форма невиконаного платежу:

Знову ж дані, які передаються на цю сторінку через форму, Ви можете використовувати на свій розсуд.

Ось таким ось чином і відбувається процес прийому коштів Webmoney. Як Ви бачите, нічого складного в цьому немає, однак для забезпечення безпеки необхідно враховувати деякі моменти і постійно перевіряти дані по платежу.

На це, сьогоднішній урок можна завершувати. Всього Вам доброго і до нових зустрічей.