Запит 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 - Нова Пошта - 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 - щомісяця - 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 (розстрочка ОТР Банк Скибочка)* - payPartsSport (оплата частинами Sportbank)*
* Для платежів в розстрочку або оплати частинами можна передавати доступне для клієнта кількість частин на платіжній сторінці, кількість частин вказуємо через кому після ":". Наприклад: 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":""
}