Запит Purchase використовується для проведення платежу клієнтом на захищеній сторінці wayforpay.
Приклад запиту:
Запит з необхідними параметрами формується на стороні продавця та передається методом POST за протоколом HTTP на URL https://secure.wayforpay.com/pay
| Параметр | Опис | Обов'язкове |
| merchantAccount | Ідентифікатор продавця. Дане значення присвоюється Вам з боку WayForPay | так |
| merchantAuthType | Тип авторизації. Може приймати одне з наступних значень: - SimpleSignature (за замовчуванням) - ticket - password | ні |
| merchantDomainName | Доменне ім'я веб-сайту торговця | так |
| merchantTransactionType | Тип транзакції. Може приймати одне з наступних значень: - AUTO (за замовчуванням) - AUTH - SALE | ні |
| merchantTransactionSecureType | Тип безпеки для проходження транзакції. Може приймати одне з наступних значень: - AUTO | так |
| merchantSignature | Підпис запиту | так |
| apiVersion | Версія протоколу. Значення за замовчуванням: 1 Значення 2 - надає передачу на serviceUrl розширених даних - додатковi поля, доставка, коментарі. | нi |
| language | Мова платіжної сторінки. Може приймати одне з наступних значень: - AUTO (Буде визначатися в залежності від мови браузера) - UA (за замовчування) - українськам - RU - російська - EN - англійська Додатково: - DE - німецька - ES - іспанська - IT - італійська - PL - польська - FR - французька - RO - румунська - LV - латвійська - SK - словацька - CS - чеська | ні |
| returnUrl | URL, на який система повинна перенаправляти клієнта з результатом платежу. * У разі відсутності параметра переадресація відбувається на сторінку результату оплати checkout psp | ні |
| serviceUrl | URL, на який система повинна відправляти відповідь з результатом платежу безпосередньо мерчанту | ні |
| orderReference | Унікальний номер замовлення в системі торговця | так |
| orderDate | Дата розміщення замовлення | так |
| orderNo | Номер замовлення в системі продавця | ні |
| amount | Сума замовлення | так |
| currency | Валюта замовлення UAH | так |
| alternativeAmount | Альтернативна сума замовлення | ні |
| alternativeCurrency | Альтернативна валюта замовлення (USD, EUR) | ні |
| holdTimeout | Час дії блокування коштів в секундах. За умовчанням 1 728 000 (20 днів). Максимально 1 728 000 (20 днів). Мінімальне значення 60 (1 хвилина). | ні |
| orderTimeout | Встановлює інтервал, протягом якого буде доступна можливість повторно оплатити замовлення на платіжній сторінці. В секундах | ні |
| orderLifetime | Встановлює інтервал, протягом якого замовлення може бути оплачено. В секундах | ні |
| recToken | Токен карти для рекаррінгових списань | ні |
| productName[] | Масив з найменуванням замовлених товарів | так |
| productPrice[] | Масив з цінами за одиницю товару. Ця інформація буде видна на сторінці оплати замовлення | так |
| productCount[] | Масив з кількістю замовленого товару по кожній з позицій. | так |
| clientAccountId | Унікальний ідентифікатор клієнта в системі торговця (логін, email і т.д.) | ні |
| socialUri | Унікальний ідентифікатор ресурсу. | ні |
| deliveryList | Додає на платіжній сторінці блок доставки, який клієнту необхідно буде заповнити. Можна передати одну або кілька значень через ";" Список значень: - nova - тільки відділення Нова Пошта - nova;nova_pl - відділення та поштомати Нова Пошта, з можливістю вибора - nova_pl - тільки поштомати Нова Пошта - meest - Мiст експрес - ukrpost - Укрпошта - other - адресна доставка | ні |
| clientFirstName | Ім'я клієнта | ні |
| clientLastName | Прізвище клієнта | ні |
| clientAddress | Адреса клієнта | ні |
| clientCity | Місто клієнта | ні |
| clientState | Штат / Область клієнта | ні |
| clientZipCode | Поштовий індекс клієнта | ні |
| clientCountry | Країна клієнта в цифровому ISO 3166-1-Alpha 3 | ні |
| clientEmail | Email клієнта | ні |
| clientPhone | Номер телефону клієнта | ні |
| deliveryFirstName | Ім'я одержувача | ні |
| deliveryLastName | Прізвище одержувача | ні |
| deliveryAddress | Адреса одержувача | ні |
| deliveryCity | Місто одержувача | ні |
| deliveryState | Штат / Область одержувача | ні |
| deliveryZipCode | Поштовий індекс одержувача | ні |
| deliveryCountry | Країна одержувача | ні |
| deliveryEmail | Email отримувача | ні |
| deliveryPhone | Номер телефону одержувача | ні |
| aviaDepartureDate | Час відправлення рейсу | ні |
| aviaLocationNumber | Кількість пунктів пересадок | ні |
| aviaLocationCodes | Коди аеропортів | ні |
| aviaFirstName | ім'я пасажира | ні |
| aviaLastName | Прізвище пасажира | ні |
| aviaReservationCode | Код резервування | ні |
| regularBehavior | - preset - щоб клієнт не зміг редагувати параметри регулярного платежу на платіжній сторінці | ні |
| regularMode | Періодичності регулярного списання: - client - вiдображає клiєнту на вибiр список усiх доступних перiодiв повторення. - none - оплата відбувається без використання регулярки - once - списання один раз - daily - щодня - weekly - щотижнево - quarterly - щоквартально (раз в три місяці починаючи з дати першого платежу) - monthly - щомісяця - bimonthly - раз на 2 місяці - halfyearly - раз на півроку - yearly - раз на рік Передача одного обо декiлькох перiодiв через ";" | ні |
| regularAmount | Сума регулярного платежа | ні |
| dateNext | Дата першого списання регулярного платежу в форматі ДД.ММ.РРРР. Дата повинна бути більше поточної дати | ні |
| dateEnd абоregularCount | Дата закінчення в форматі ДД.ММ.РРРР, або кiлькiсть регулярних списань | ні |
| regularOn | При значеннi = 1, чекбокс "зробити платiж регулярним" активований, regularAmount заблокованоо для редагування. | |
| paymentSystems | Список платіжних систем, доступних клієнтові при виборі способу оплати на платіжній сторінці. Системи повинні бути розділені крапкою з комою. Доступні платіжні системи: - card - googlePay - applePay - privat24 - lpTerminal - delay - bankCash - qrCode - masterPass - visaCheckout - bot - метод оплати у месенжерах (бот wayforpay) - payParts (миттєва розстрочка вiд ПриватБанка)* - payPartsMono (покупка частинами вiд Монобанка)* - payPartsPrivat (оплата частинами вiд ПриватБанка )* - payPartsAbank (плати частинами вiд А-Банка)* - instantAbank (розстрочка А-Банка)* - globusPlus (оплата частинами Глобус+ Глобус банк)* - OnusInstallment (розстрочка Райффайзен Банк)* - payPartsOtp (розстрочка ОТР Банк Скибочка)*
* Для платежів в розстрочку або оплати частинами можна передавати доступне для клієнта кількість частин на платіжній сторінці, кількість частин вказуємо через кому після ":". Наприклад: payPartsAbank:2,3,7,10; payParts:5 | ні |
| defaultPaymentSystem | Платіжна система, яка першою відобразиться платнику на платіжній сторінці. За замовчуванням - card | ні |
Параметри відповіді:
| Параметр | Опис | Приклад |
| merchantAccount | Ідентифікатор продавця | test_merch_n1 |
| orderReference | Унікальний номер замовлення в системі торговця | 1212dd1 |
| merchantSignature | hash_hmac | |
| amount | Сума замовлення | 100 |
| currency | Валюта замовлення | UAH |
| authCode | Код авторизації - присвоюється банком | 324567 |
| | email платника | |
| phone | Номер телефону платника | +38063-333-33-33 |
| createdDate | Дата створення запиту в psp (UTC) | 123456789 |
| processingDate | Дата процесування транзакції (UTC) | 12345678 |
| cardPan | Маскований номер карти (44****4444) | 42****4242 |
| cardType | Тип карти: Visa/MasterCard | Visa |
| issuerBankCountry | Країна карти | Ukraine |
| issuerBankName | Ім'я Банку карти | PrivatBank |
| recToken | Токен карти для рекаренгових списань | 121213321-3213213-3213213-321-3 |
| transactionStatus | статус транзакції | Approved |
| reason | Причина відмови | Ok |
| reasonCode | Код відмови | 1100 |
| fee | Комісія psp | 0.00 |
| paymentSystem | Платіжна система, через яку був здійснений платіж. | card |
Генерування тестової строки
Параметри генерування тестової строки за посиланням
Аутентифікація запитів
З метою підтвердження валідності даних повинно бути згенеровано і передано в запиті HMAC_MD5 контрольний підпис з використанням SecretKey торговця.
Рядок, що підлягає HMAC_MD5, генерується шляхом конкатенації параметрів merchantAccount, merchantDomainName, orderReference, orderDate, amount, currency, productName [0],
productName [1] ..., productName [n], productCount [0], productCount [1], ..., productCount [n], productPrice [0], productPrice [1], ..., productPrice [n] розділених ";" (крапка з комою) в кодуванні UTF-8
Приклад HTTP POST запиту:
| merchantAccount | test_merch_n1 |
| merchantDomainName | |
| orderReference | DH783023 |
| orderDate | 1415379863 |
| amount | 1547.36 |
| currency | UAH |
| productName | ["Процесор Intel Core i5-4670 3.4GHz","Пам'ять Kingston DDR3-1600 4096MB PC3-12800"] |
| productCount | [1,1] |
| productPrice | [1000,547.36] |
| merchantSignature | b95932786cbe243a76b014846b63fe92 |
Базовий рядок для генерації HASH для наведеного прикладу буде дорівнювати:
test_merchant;www.market.ua;DH783023;1415379863;1547.36;UAH;Процесор Intel Core i5-4670 3.4GHz;Пам'ять Kingston DDR3-1600 4096MB PC3-12800;1;1;1000;547.36
Результат HMAC_MD5 і значення параметру merchantSignature буде рядок 3f787303ac524389b4a76383f9508251
<?php
$string = "test_merchant;www.market.ua;DH783023;1415379863;1547.36;UAH;Процесор Intel Core i5-4670 3.4GHz;Пам'ять Kingston DDR3-1600 4096MB PC3-12800;1;1;1000;547.36";
$key = "dhkq3vUi94{Z!5frxs(02ML";
$hash = hash_hmac("md5",$string,$key);
?> <form method="post" action="https://secure.wayforpay.com/pay" accept-charset="utf-8">
<input name="merchantAccount" value="test_merch_n1">
<input name="merchantAuthType" value="SimpleSignature">
<input name="merchantDomainName" value="www.market.ua">
<input name="merchantSignature" value="b95932786cbe243a76b014846b63fe92">
<input name="orderReference" value="DH783023">
<input name="orderDate" value="1415379863">
<input name="amount" value="1547.36">
<input name="currency" value="UAH">
<input name="orderTimeout" value="49000">
<input name="productName[]" value="Процесор Intel Core i5-4670 3.4GHz">
<input name="productName[]" value="Пам'ять Kingston DDR3-1600 4096MB PC3-12800">
<input name="productPrice[]" value="1000">
<input name="productPrice[]" value="547.36">
<input name="productCount[]" value="1">
<input name="productCount[]" value="1">
<input name="clientFirstName" value="Василь">
<input name="clientLastName" value="Пібаренко">
<input name="clientAddress" value="пр. Науки, 12">
<input name="clientCity" value="Дніпро">
<input name="clientEmail" value="some@mail.com">
<input name="defaultPaymentSystem" value="card">
<button type="submit">Оплатити</button>
</form> Повідомлення мерчанта про статус транзакції
Для авторизованих і перевірених замовлень (а також при зміні статусу замовлення) серевер WayForPay направляє на serviceUrl запит (HTTP_POST) включає в себе дані замовлення.
Дана інформація доповнюється контрольним підписом HMAC_MD5.
У разі, якщо WayForPay НЕ отримає коректну відповідь від сервера торговця, то система буде направляти запити протягом 4-х діб або до отримання правильної відповіді.
Сервер торговця (або телефон клієнта) посилає пост запит на https://secure.wayforpay.com/pay?behavior=offline з полями для PURCHASE.
У відповідь наш сервер в разі успіху віддає { "url": "https: \ / \ / secure.wayforpay.com \ / page? Vkh = 5f6204b5-8300-4cfb-851b-749822d1dba8"}.
У параметрі url знаходиться посилання для оплати, по якому клієнт може перейти і отримати платіжну сторінку.
Параметри запиту шлюзу WayForPay на serviceUrl *
З метою підтвердження валідності даних необхідно згенерувати і передати в запиті HMAC_MD5 контрольний підпис з використанням SecretKey торговця.
Рядок, що підлягає HMAC_MD5, генерується шляхом конкатенації параметрів merchantAccount, orderReference, amount, currency, authCode, cardPan, transactionStatus, reasonCode розділених ";" (крапка з комою) в кодуванні UTF-8
| Параметр | Опис | Приклад |
| merchantAccount | Ідентифікатор продавця | test_merch_n1 |
| orderReference | Унікальний номер замовлення в системі торговця | 1212dd1 |
| merchantSignature | hash_hmac | |
| amount | Сума замовлення | 100 |
| currency | Валюта замовлення | UAH |
| authCode | Код авторизації - присвоюється банком | 324567 |
| | email платника | |
| phone | Номер телефону платника | +38063-333-33-33 |
| createdDate | Дата створення запиту в psp | 123456789 |
| processingDate | Дата процесування транзакції | 12345678 |
| cardPan | Маскований номер карти | 42****4242 |
| cardType | Тип карти: Visa / MasterCard | Visa |
| issuerBankCountry | Країна карти | Ukraine |
| issuerBankName | Ім'я Банку карти | PrivatBank |
| recToken | Токен карти для рекаренгових списань | 121213321-3213213-3213213-321-3 |
| transactionStatus | Статус транзакції | Approved |
| reason | Причина відмови | Ok |
| reasonCode | Код відмови | 1100 |
| fee | Комисія psp | 0.00 |
| paymentSystem | Платіжна система, через яку був здійснений платіж. | card |
| repayUrl | Передається, якщо платіж клієнта неуспішний Url адреса за якою можна повторно оплатити в рамках часу переданого в orderTimeout або orderLifetime. |
{
"merchantAccount":"test_merchant",
"orderReference":"DH783023",
"merchantSignature":"",
"amount":1547.36,
"currency":"UAH",
"authCode":"541963",
"email":"client@mail.ua",
"phone":"380501234567",
"createdDate":12345678,
"processingDate":12345678,
"cardPan":"41****8217",
"cardType":"visa",
"issuerBankCountry":"980",
"issuerBankName":"Privatbank",
"recToken":"",
"transactionStatus":"Approved",
"reason":"ok",
"reasonCode":"1100",
"fee":0,
"paymentSystem":"card"
} $json = file_get_contents('php://input');
$obj = json_decode($json, TRUE); $ curl http://you.service.url -d '{"a":"a", "bInt":1}'
Система WayForPay очікує отримати від сервера торговця таку відповідь:
З метою підтвердження валідності даних необхідно згенерувати і передати в запиті HMAC_MD5 контрольний підпис з використанням SecretKey торговця.
Рядок, що підлягає HMAC_MD5, генерується шляхом конкатенації параметрів orderReference, status, time розділених ";" (крапка з комою) в кодуванні UTF-8
{
"orderReference":"DH783023",
"status":"accept",
"time":1415379863,
"signature":""
}