Skip to end of metadata
Go to start of metadata

Общее описание

Протокол ALU (Automatic Live Update), предназначен для торгово-сервисных предприятий (ТСП), которые намерены совершать сделки непосредственно в системе PayU. Основным преимуществом ALU является то, что он также позволяет ТСП отправлять данные карты покупателя.

Особенности и преимущества ALU:

  • Повышенная степень защиты;

  • Максимальные возможности адаптации к сайту ТСП;

  • Отсутствие необходимости получать асинхронные уведомления с результатом платежа (IPN). Ответы приходят сразу в ответе на запрос на платеж;

  • Для сайта ТСП необходим сертификат PCI DSS;

  • Данные карт сохраняются на стороне ТСП.

Протоколы IDN и IRN могут использоваться также, как для протокола LiveUpdate.

Принцип работы

ALU позволяет ТСП совершать сделки с использованием протокола взаимодействия с PayU по принципу «сервер-сервер». В рамках такого взаимодействия ТСП создает запрос с использованием протокола HTTP POST, доступный по следующей ссылке: https://secure.payu.ru/order/alu/v2

Cхемы для возможных сценариев применения представлены ниже:

Вариант A. ALU для карт, не защищенных протоколом 3D Secure

 

  1. Покупатель нажимает на кнопку "Оплатить", а ТСП получает данные, в требуемом магазином формате. Данные могут быть сохранены как новый заказ в системе ТСП.
  2. Система ТСП формирует ALU-запрос через протокол HTTP POST к серверу PayU (подробнее см. ниже).
  3. Сервер PayU отправляет ответ на ALU-запрос серверу БД ТСП. Ответ направляется в режиме "inline" в формате XML.  
  4. Сервер базы данных ТСП сопоставляет исходный запрос и ответ и предоставляет результаты покупателю согласно заданным параметрам.

B. Передача данных средствами ALU для карт, защищенных протоколом 3D Secure

 

  1. Покупатель нажимает на кнопку "Оплатить", а ТСП получает данные, в требуемом магазином формате. Данные могут быть сохранены как новый заказ в системе ТСП.
  2. Система ТСП формирует ALU-запрос через протокол HTTP POST к серверу PayU (подробнее см. ниже). Обратите внимание, что в этом запросе должен содержаться адрес для перенаправления (редиректа) плательщика после успешного завершения процедуры (поле BACK_REF). Это поле рекомендуется заполнять для всех типов ALU-запросов. 
  3. Система PayU определяет, что карта покупателя защищена 3D Secure и отправляет ответ на АLU-запрос в режиме inline в XML-формате.
  4. ТСП начинает обработку платежа защищенной картой через URL, который указывается в ответе на ALU-запрос для карт 3DS.
  5. Покупатель перенаправляется на сервер PayU.
  6. Сервер перенаправляет покупателя в банк.
  7. Банк предоставляет покупателю форму 3DS.
  8. Покупатель вводит в форму свой пароль.
  9. Если 3DS пароль верен, Банк утверждает платеж. Получив подтверждение от банка, PayU разрешает платеж.
  10. PayU направляет ALU-ответ по протоколу HTTP POST на URL для перенаправления (редиректа), указанный ТСП в поле BACK_REF. Ответ содержит значения полей: REFNO, ALIAS, STATUS, RETURN_CODE, RETURN_MESSAGE и DATE (подробнее см. ниже). 
  11. Сервер базы данных ТСП сопоставляет информацию ответа и запроса через ALU, предоставляет результаты покупателю согласно настройкам. Покупатель перенаправляется на URL BACK_REF, указанный ТСП в самом начале. 

Создание запроса

Для использования ALU ТСП необходимо создать запрос на базе протокола HTTP POST и направить его со своего сервера (базы данных), который расположен по следующему URL-адресу:  https://secure.payu.ru/order/alu/v2

Запрос по протоколу HTTP POST должен содержать обязательные параметры, перечисленные ниже.

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

Примечание

Интеграция на базе протокола ALU позволяет также использовать протокол IDN для двухстадийной обработки платежа и протокол IRN для возврата и разблокировки средств.

Обязательные поля ALU-запроса

Поля заказа

ПОЛЕОПИСАНИЕ
MERCHANTИдентификатор ТСП, доступный на Панели управления (Управление учетными записями > Настройки учетной записи)
ORDER_REFВнешний идентификационный номер заказа в системе ТСП. Значение должно быть уникальным в каждом запросе.
ORDER_DATEДата размещения заказа в системе в формате ГГГГ-ММ-ДД ЧЧ:ММ:СС.
Важно: Дата должна быть указана в виде единого мирового времени +/-10 минут
PAY_METHOD

Способ оплаты заказа. Возможные значения:

  • CCVISAMC
ORDER_HASHДля всех параметров запроса применяется подпись HMAC_MD5. Базовая строка для HMAC_MD5 рассчитывается путем добавления длины каждого значения поля в байтах перед ним и использования секретного ключа. Подробнее см. ниже
BACK_REFОбратный URL ТСП, который используется при авторизации карт с 3DS-защитой.

Информация о продукте

ПОЛЕОПИСАНИЕ
ORDER_PNAME[]Массив данных с названиями продуктов (минимальная длина: 2 знака - максимальная длина: 155 знаков на одно название продукта)
ORDER_PCODE[]

Массив данных с кодами продуктов (максимальная длина: 50 знаков на один код продукта).

При отправке нескольких продуктов (в рамках одной ли нескольких последовательных сделок) с одним и тем же кодом продукта, PayU обновляет информацию о продукте соответствующим параметром ORDER_PCODE[] (производится перезапись всей остальной информации о продукте: название, цена, налоги).

ORDER_PRICE[]Массив данных с информацией об общей стоимости заказанных продуктов. Валюта по умолчанию задана описанным ниже параметром PRICES_CURRENCY.
ORDER_QTY[]Массив данных, содержащий информацию о заказанных количествах продуктов.
PRICES_CURRENCYВалюта, в которой указаны цены, например, RUB. Если параметр не задан, по умолчанию устанавливается валюта ТСП.

Реквизиты покупателя

ПОЛЕОПИСАНИЕ
BILL_LNAMEФамилия покупателя
BILL_FNAMEИмя покупателя
BILL_EMAILАдрес электронной почты покупателя
BILL_PHONEНомер телефона покупателя
BILL_COUNTRYCODEКод страны покупателя в виде двух букв (например, RU)

Реквизиты карты

ПОЛЕОПИСАНИЕ
CC_NUMBERНомер карты, которая будет использоваться при авторизации заказа.
EXP_MONTHМесяц истечения срока действия карты
EXP_YEAR

Год истечения срока действия карты

CC_CVV

CCV/CVV2 код карты. Для некоторых видов карт эта информация не указывается, в противном случае это должно быть числовое значение.

CC_OWNER

ФИО владельца карты, в соответствии с тем, что указано на самой карте.

Необязательные поля

Параметры заказа

ПОЛЕОПИСАНИЕ
ORDER_PINFO[]

Массив данных, содержащий дополнительную информацию о продукте

ORDER_VER[]

Массив данных, содержащий информацию о версиях всех заказанных продуктов

ORDER_TIMEOUT

Время в секундах, по прошествии которого заказ истекает.

ORDER_SHIPPINGЦена доставки заказа

Реквизиты плательщика

ПОЛЕОПИСАНИЕ
BILL_FAX

Номер факса покупателя.

BILL_ADDRESS

Адрес покупателя.

BILL_ADDRESS2

Адрес покупателя (вторая строчка)

BILL_ZIPCODE

Почтовый индекс.

BILL_CITYГород
BILL_STATE

Область/район

Параметры доставки

ПОЛЕОПИСАНИЕ
DELIVERY_LNAME

Фамилия лица, которому будет доставлен заказ

DELIVERY_FNAME

Имя лица, которому будет доставлен заказ

DELIVERY_EMAIL

Адрес электронной почты  лица или компании, которым будет доставлен заказ

DELIVERY_PHONE

Номер телефона лица или компании, которым будет доставлен заказ.

DELIVERY_COMPANY

Название компании, которой будет доставлен заказ.

DELIVERY_ADDRESS

Адрес доставки заказа.

DELIVERY_ADDRESS2

Дополнительная информация по адресу доставки заказа.

DELIVERY_ZIPCODE

Почтовый индекс в рамках адреса доставки заказа.

DELIVERY_CITY

Город доставки заказа.

DELIVERY_STATE

Регион/область доставки заказа.

DELIVERY_COUNTRYCODE

Код страны доставки в виде двух букв (например, RU)

Прочее

ПОЛЕОПИСАНИЕ
CLIENT_IP

IP-адрес покупателя

CLIENT_TIME

Время, определенное на основе информации браузера покупателя в формате ГГГГ-ММ-ДД чч:мм:сс

TESTORDER

Флаг (логический) тестовой операции.

Значения:

  • TRUE
  • FALSE

Необязательное поле.

Обратите внимание, что тестовый запрос не позволяет проверять платежи с использованием 3DS.

Расчет значения ORDER_HASH

В целях безопасности каждый HTTP POST запрос должен иметь уникальную подпись. Расчет подписи производится с использованием данных по всем параметрам, направленным по HTTP POST, секретного ключа ТСП и алгоритма шифрования данных HMAC MD5 (RFC 2104).

Пример ALU-запроса (ТСП OPU_TEST, секретный ключ SECRET_KEY)
"MERCHANT" => "demoshop" 
"ORDER_REF" => "7305"
"ORDER_DATE" => "2013-03-11+13:00:04"
//First product detail
"ORDER_PNAME[0]" => "Тестовый товар",
"ORDER_PCODE[0]" => "123",
"ORDER_PINFO[0]" => "Дополнительная информация к Тестовый товар",
"ORDER_PRICE[0]" => "1",
"ORDER_QTY[0]" => "1",
     
//Second product details begin
"ORDER_PNAME[1]" => "Второй тестовый товар",
"ORDER_PCODE[1]" => "321",
"ORDER_PINFO[1]" => "Дополнительная информация к Второй тестовый товар",
"ORDER_PRICE[1]" => "2",
"ORDER_QTY[1]" => "1",

"PRICES_CURRENCY" => "RUB"
"PAY_METHOD" => "CCVISAMC"
"CC_NUMBER" => "4355XXXXXXXX4358"
"EXP_MONTH" => "01"
"EXP_YEAR" => "2016"
"CC_CVV" => "123"
"CC_OWNER" => "FirstName LastName"
"BACK_REF" => "https://www.example.com/alu/3ds_return.php"
"CLIENT_IP" => "127.0.0.1"
"BILL_LNAME" => "John"
"BILL_FNAME" => "Doe"
"BILL_EMAIL" => "shopper@payu.ru"
"BILL_PHONE" => "1234567890"
"BILL_COUNTRYCODE" => "RU"

Для пример рассчитаем подпись к этому запросу.

1. Необходимо упорядочить все отправленные в запросе поля в алфавитном порядке (по названию, а не по значениям) 

Пример упорядочивания полей
BACK_REF, BILL_COUNTRYCODE, BILL_EMAIL, BILL_FNAME, BILL_LNAME, BILL_PHONE, CC_CVV, CC_NUMBER, CC_OWNER, CLIENT_IP, EXP_MONTH, EXP_YEAR, MERCHANT, ORDER_DATE, ORDER_PCODE[0], ORDER_PCODE[1], ORDER_PINFO[0], ORDER_PINFO[1], ORDER_PNAME[0], ORDER_PNAME[1], ORDER_PRICE[0], ORDER_PRICE[1], ORDER_QTY[0], ORDER_QTY[1], ORDER_REF, PAY_METHOD, PRICES_CURRENCY

Важно!

Если запрос заказа содержит информацию о нескольких продуктах, массивы данных ORDER_PNAME[], ORDER_PCODE[], ORDER_PINFO[], ORDER_PRICE[], ORDER_VER[] и ORDER_QTY[] должны быть синхронизированы.

 2. Формируется базовая строка путем добавления длины значения каждого из полей в байтах (формат UTF-8) запроса перед значением.

Например, если ТСП является OPU_TEST, составленный источник будет: 8OPU_TEST (8 - это количество знаков в OPU_TEST). Если поле не заполнено, в базовой строке его значение учитывается как "0", т.е. 1 символ. Таким образом, базовая строка для нашего примера будет иметь следующий вид:

42https://www.example.com/alu/3ds_return.php2RU15shopper@payu.ru3Doe4John101234567890312316435508435508435818FirstName LastName9127.0.0.1201420168demoshop192013-03-11+16:34:024TCK14TCK216Barcelona flight13London flight7Ticket17Ticket2310032001111472958CCVISAMC3RUB

3. Производится расчет значения HASH по алгоритму HMAC MD5 (используется базовая строка и секретный ключ ТСП)

Значение Hash для примера
6821c4a28a22f7ab423ab7979a405493

4. Рассчитанное значение HASH добавляется к запросу перед отправкой в PayU.

ORDER_HASH: "6821c4a28a22f7ab423ab7979a405493"

5. PayU со своей стороны производит расчет значения HASH на основе полученных данных, и сопоставляет его со значением HASH, направленным ТСП.

Использование 3D Secure

В случае использования покупателем карты, защищенной 3D Secure, PayU направляет ответ в формате XML, код 3DS_ENROLLED и  URL_3DS.

Поле URL_3DS позволяет ТСП перенаправить браузер для 3DS аутентификации покупателя. После окончания аутентификации, ТСП получает результаты по протоколу POST на адрес BACK_REF, Результаты содержат значения полей REFNO, ALIAS, STATUS, RETURN_CODE, RETURN_MESSAGE и DATE. 

Ответ

Система PayU направляет ответ в формате XML, как указано ниже. ТСП должно выполнить анализ и обработку данных из такого XML-файла на своем сервере базы данных. В случае с 3DS аналогичные данные направляются по протоколу HTTP POST на URL BACK_REF.

ПОЛЕОПИСАНИЕ
REFNO

Уникальный идентификатор заказа, присваиваемый PayU. Если не заполнено какое-либо из обязательных полей, это поле остается пустым

ALIAS

Уникальное строчное обозначение операции, которое может использоваться ТСП на сервере базы данных

STATUS

Возможные статусы платежа:

  • SUCCESS - платеж бы успешно авторизован. В данном случае также выдается значение REFNO
  • AUTHORIZATION_FAILED - платеж НЕ был авторизован в силу различных причин (мошенничество, недостаточное количество средств и т.д.). В данном случае также выдается значение REFNO, но при этом платеж  рассматривается
  • INPUT_ERROR - запрос платежа является ошибочным или не содержит обязательных параметров
RETURN_CODE
СТАТУСЗНАЧЕНИЕ
AUTHORIZEDЕсли платеж бы успешно авторизован
3DS_ENROLLEDАвторизация платежа должна быть подтверждена покупателем и его банком через 3DS
ALREADY_AUTHORIZEDПри попытке покупателя разместить новый заказ со значениями ORDER_REF и HASH, аналогичными предыдущему заказу
AUTHORIZATION_FAILEDПлатеж не авторизован
INVALID_CUSTOMER_INFOОбязательные данные покупателя отсутствуют или искажены
INVALID_PAYMENT_INFOНеверные данные карты
INVALID_PAYMENT_INFOНазвание ТСП  указано неверно
INVALID_PAYMENT_METHOD_CODEКод способа оплаты НЕ принят
INVALID_CURRENCYВалюта платежа НЕ принята
REQUEST_EXPIREDМежду ORDER_DATE и датой оплаты прошло более 10 минут или время, превышающее значение ORDER_TIMEOUT, заданное ТСП
HASH_MISMATCHПараметр HASH, направленный ТСП, не соответствует значению HASH, рассчитанному PayU
WRONG_VERSIONВерсия ALU, отправленная ТСП, НЕ существует
RETURN_MESSAGEПодробное описание кода ответа
DATEДата ответа в формате универсального координированного времени
URL_3DSЕсли кредитная карта является частью системы 3D Secure данный параметр содержит URL, на который ТСП перенаправляется браузер покупателя
ORDER_REFВнешний идентификационный номер заказа в системе ТСП.
AUTH_CODEАвторизационный банковский код.
HASHПодпись, применяемая для всех элементов запроса, в рамках которой используется тот же алгоритм как и в случае с подписью из первоначального запроса. Если подпись является НЕВЕРНОЙ, выводится ошибка HASH_MISMATCH, а тег HASH остается незаполненным.

Примеры ответов

Пример ответа для карт, не защищенных протоколом 3D Secure
<?xml version="1.0"?>
<EPAYMENT>
    <REFNO>123456789</REFNO>
    <ALIAS>9592b7736c9e277fea8cc79c2e5b5a23</ALIAS>
    <STATUS>SUCCESS</STATUS>
    <RETURN_CODE>AUTHORIZED</RETURN_CODE>
    <RETURN_MESSAGE>Successful authorized</RETURN_MESSAGE>
    <DATE>2012-11-06 20:52:20</DATE>
    <ORDER_REF>7305</ORDER_REF>
    <AUTH_CODE>13157TUlA15117</AUTH_CODE>
 <HASH>b560a38e2b3e7bcbac328bbd6218bc60</HASH>
</EPAYMENT>
Пример ответа для карт, защищенных 3D Secure
<?xml version="1.0"?>
<EPAYMENT>
    <REFNO>123456789</REFNO>
    <ALIAS>9592b7736c9e277fea8cc79c2e5b5a23</ALIAS>
    <STATUS>SUCCESS</STATUS>
    <RETURN_CODE>3DS_ENROLLED</RETURN_CODE>
    <RETURN_MESSAGE>3DS Enrolled Card.</RETURN_MESSAGE>
    <DATE>2010-12-09 20:44:37</DATE>
    <URL_3DS>https://sandbox12tr.epayment.ru/order/alu_return_3ds.php?request_id=2Xrl85eakbSBr3WtcbixYQ%3D%3D</URL_3DS>
    <ORDER_REF>7306</ORDER_REF>
    <AUTH_CODE>465321</AUTH_CODE>
	<HASH>623a8c7e88ccc9b9d4ed3bcd1271e5d5</HASH>
</EPAYMENT>
Пример ответа при неудачной авторизации карты
<?xml version="1.0"?>
<EPAYMENT>
  <REFNO>6468866</REFNO>
  <ALIAS></ALIAS>
  <STATUS>FAILED</STATUS>
  <RETURN_CODE>AUTHORIZATION_FAILED</RETURN_CODE>
  <RETURN_MESSAGE>Authorization declined</RETURN_MESSAGE>
  <DATE>2013-02-27 17:55:16</DATE>
  <ORDER_REF>7308</ORDER_REF>
  <AUTH_CODE>449322</AUTH_CODE>
  <HASH>b0fb097ecb973316b2740192b655f41e</HASH>
</EPAYMENT>
Карта уже авторизована
<?xml version="1.0"?>
<EPAYMENT>
  <REFNO></REFNO>
  <ALIAS></ALIAS>
  <STATUS>FAILED</STATUS>
  <RETURN_CODE>ALREADY_AUTHORIZED</RETURN_CODE>
  <RETURN_MESSAGE>Authorization declined</RETURN_MESSAGE>
  <DATE>2013-02-27 17:55:16</DATE>
  <ORDER_REF>7308</ORDER_REF>
  <AUTH_CODE></AUTH_CODE>
  <HASH>b0fb097ecb973316b2740192b655f41e</HASH>
</EPAYMENT>
Ошибка в заполнении обязательных полей
<?xml version="1.0"?>
<EPAYMENT>
  <REFNO></REFNO>
  <ALIAS></ALIAS>
  <STATUS>INPUT_ERROR</STATUS>
  <RETURN_CODE>INVALID_CUSTOMER_INFO</RETURN_CODE>
  <RETURN_MESSAGE>Mandatory billing information missing: Email</RETURN_MESSAGE>
  <DATE>2013-02-27 17:59:56</DATE>
  <ORDER_REF></ORDER_REF>
  <AUTH_CODE></AUTH_CODE>
  <HASH></HASH>
</EPAYMENT>
Данные карты недействительны
<?xml version="1.0"?>
<EPAYMENT>
  <REFNO></REFNO>
  <ALIAS></ALIAS>
  <STATUS>INPUT_ERROR</STATUS>
  <RETURN_CODE>INVALID_PAYMENT_INFO</RETURN_CODE>
  <RETURN_MESSAGE>Invalid expiration date entered or the card has expired. (4111111111111111)</RETURN_MESSAGE>
  <DATE>2013-02-27 17:58:55</DATE>
  <ORDER_REF></ORDER_REF>
  <AUTH_CODE></AUTH_CODE>
  <HASH></HASH>
</EPAYMENT>
Способ оплаты недействителен
<?xml version="1.0"?>
<EPAYMENT>
  <REFNO></REFNO>
  <ALIAS></ALIAS>
  <STATUS>INPUT_ERROR</STATUS>
  <RETURN_CODE>INVALID_PAYMENT_METHOD_CODE</RETURN_CODE>
  <RETURN_MESSAGE>Invalid payment method for this account: CCVISAM</RETURN_MESSAGE>
  <DATE>2013-02-27 17:58:01</DATE>
  <ORDER_REF></ORDER_REF>
  <AUTH_CODE></AUTH_CODE>
  <HASH></HASH>
</EPAYMENT>
Название ТСП недействительно
<?xml version="1.0"?>
<EPAYMENT>
  <REFNO></REFNO>
  <ALIAS></ALIAS>
  <STATUS>INPUT_ERROR</STATUS>
  <RETURN_CODE>INVALID_ACCOUNT</RETURN_CODE>
  <RETURN_MESSAGE>Invalid account: Brands</RETURN_MESSAGE>
  <DATE>2013-02-27 17:58:23</DATE>
  <ORDER_REF></ORDER_REF>
  <AUTH_CODE></AUTH_CODE>  
  <HASH></HASH>
</EPAYMENT>
Срок действия запроса истек
<?xml version="1.0"?>
<EPAYMENT>
  <REFNO></REFNO>
  <ALIAS></ALIAS>
  <STATUS>INPUT_ERROR</STATUS>
  <RETURN_CODE>REQUEST_EXPIRED</RETURN_CODE>
  <RETURN_MESSAGE>Your request has expired - it is older than 10 minutes (2011-02-27 16:28:15)!</RETURN_MESSAGE>
  <DATE>2013-02-27 18:30:56</DATE>
  <HASH></HASH>
</EPAYMENT>
Указана недействительная валюта
<?xml version="1.0"?>
<EPAYMENT>
  <REFNO></REFNO>
  <ALIAS></ALIAS>
  <STATUS>INPUT_ERROR</STATUS>
  <RETURN_CODE>INVALID_CURRENCY</RETURN_CODE>
  <RETURN_MESSAGE>Invalid currency: RDF! Allowed values: UAH, EUR, RUB, USD, BYR, KZT</RETURN_MESSAGE>
  <DATE>2013-02-27 18:28:19</DATE>
  <HASH></HASH>
</EPAYMENT>
Значения HASH не совпадают
<?xml version="1.0"?>
<EPAYMENT>
  <REFNO></REFNO>
  <ALIAS></ALIAS>
  <STATUS>INPUT_ERROR</STATUS>
  <RETURN_CODE>HASH_MISMATCH</RETURN_CODE>
  <RETURN_MESSAGE>Hash mismatch</RETURN_MESSAGE>
  <DATE>2013-02-27 17:56:12</DATE>
  <ORDER_REF></ORDER_REF>
  <AUTH_CODE></AUTH_CODE>
  <HASH></HASH>
</EPAYMENT>
Пример ответа для параметра WRONG_VERSION
<?xml version="1.0"?>
<?xml version="1.0"?>
<EPAYMENT>
  <REFNO></refno>
  <ALIAS></ALIAS>
  <STATUS>INPUT_ERROR</STATUS>
  <RETURN_CODE>WRONG_VERSION</RETURN_CODE>
  <RETURN_MESSAGE>Wrong version</RETURN_MESSAGE>
  <DATE>2013-06-06 21:26:13</DATE>
  <HASH></HASH>
</EPAYMENT>

Важно

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

Сообщения об ошибках

Ниже приводится список кодов/сообщений, которые могут выводится в случае невыполнения операций (<STATUS>FAILED</STATUS>).

КОДОПИСАНИЕ
GW_ERROR_GENERICВ ходе обработки информации возникла ошибка. Пожалуйста, выполните операцию повторно
GW_ERROR_GENERIC_3DВ ходе обработки 3DS данных возникла ошибка
GWERROR_-9Ошибка в поле даты истечения срока действия карты
GWERROR_-3Позвоните в службу поддержки эквайера по соответствующему номеру
GWERROR_-2В ходе обработки информации возникла ошибка. Пожалуйста, выполните операцию повторно
GWERROR_05В авторизации отказано
GWERROR_08Неверная сумма
GWERROR_13Неверная сумма
GWERROR_14Такой карты не существует
GWERROR_15Такой карты/эмитента не существует
GWERROR_19Выполните повторный ввод данных операции
GWERROR_34Номер кредитной карты не принят: мошенничество
GWERROR_41Карта утеряна
GWERROR_43Карта украдена, перехват информации
GWERROR_51Недостаточно средств
GWERROR_54Срок действия карты истек
GWERROR_57

Операция по данной карте не допускается

GWERROR_58

Не допускается для ТСП

GWERROR_61

Превышение лимита суммы

GWERROR_62Ограничение действия карты
GWERROR_65Превышение предела частоты
GWERROR_75Превышено количество попыток ввода PIN
GWERROR_82Время ожидания у эмитента истекло
GWERROR_84Недействительный проверочный код карты
GWERROR_91Техническая проблема. Обработка данных эмитентом невозможна.
GWERROR_96

Сбой в работе системы

GWERROR_2204

Отсутствие разрешения на проводку частичного платежа по карте.

GWERROR_2304

Ваш заказ в настоящее время обрабатывается.

GWERROR_5007

Для дебетовых карт реализована поддержка лишь операций 3D.

ALREADY_AUTHORIZEDПлатеж уже авторизован
NEW_ERROR

Ошибка передачи сообщений. Например, может означать, что сервер PayU получил от банка сообщение, для которого нет стандартного кода. Подробности можно узнать у службы поддержки (integration@payu.ru)

WRONG_ERRORВыполните повторный ввод данных операции
-9999

Запрещенная операция

1

Позвоните в службу поддержки эквайера

GWERROR_-19

Аутентификация не выполнена

Сообщения об ошибках выводятся в окне заказа:

Ресурсы

Пример для cURL

Команда для cURL для ALU с использованием приведенного выше примера
curl -L https://secure.payu.ru/order/v2 \
-d BACK_REF=https%3A%2F%2Fwww.example.com%%2Falu%2F3ds_return.php \
-d BILL_COUNTRYCODE=RU \
-d BILL_EMAIL=shopper%40payu.ru \
-d BILL_FNAME=Doe \
-d BILL_LNAME=John \
-d BILL_PHONE=1234567890 \
-d CC_CVV=123 \
-d CC_NUMBER=4355XXXXXXXX4358 \
-d CC_OWNER=FirstName+LastName \
-d CLIENT_IP=127.0.0.1 \
-d EXP_MONTH=01 \
-d EXP_YEAR=2016 \
-d MERCHANT=demoshop \
-d ORDER_DATE=2013-03-11+16%3A34%3A02 \
-d ORDER_PCODE[0]=123 \
-d ORDER_PCODE[1]=321 \
-d ORDER_PINFO[0]=Дополнительная+информация+к+Тестовый+товар \
-d ORDER_PINFO[1]=Дополнительная+информация+к+Второй+тестовый+товар \
-d ORDER_PNAME[0]=Тестовый+товар \
-d ORDER_PNAME[1]=Второй+тестовый+товар \
-d ORDER_PRICE[0]=1 \
-d ORDER_PRICE[1]=2 \
-d ORDER_QTY[0]=1 \
-d ORDER_QTY[1]=1 \
-d ORDER_REF=7295 \
-d PAY_METHOD=CCVISAMC \
-d PRICES_CURRENCY=RUB \
-d ORDER_HASH=6821c4a28a22f7ab423ab7979a405493

Пример на PHP для отправки запроса ALU

Функциональный запрос ALU в режиме «сервер-сервер»
<?php
$url =  "https://secure.payu.ru/order/v2" ;
 
$secretKey =  'demosecret' ;
$arParams =  array (
     //The Merchant's ID
     "MERCHANT" =>  "demoshop" ,
     //order external reference number in Merchant's system
     "ORDER_REF" => rand(1000,9999),
     "ORDER_DATE" =>  gmdate ( 'Y-m-d H:i:s' ),
     
    //First product details begin
    "ORDER_PNAME[0]" => "Тестовый товар",
    "ORDER_PCODE[0]" => "123",
    "ORDER_PINFO[0]" => "Дополнительная информация к Тестовый товар",
    "ORDER_PRICE[0]" => "1",
    "ORDER_QTY[0]" => "1",
    //First product details end
     
    //Second product details begin
    "ORDER_PNAME[1]" => "Второй тестовый товар",
    "ORDER_PCODE[1]" => "321",
    "ORDER_PINFO[1]" => "Дополнительная информация к Второй тестовый товар",
    "ORDER_PRICE[1]" => "2",
    "ORDER_QTY[1]" => "1",
    //Second product details end
 
     "PRICES_CURRENCY" =>  "RUB" ,
     "PAY_METHOD" =>  "CCVISAMC" ,
     "CC_NUMBER" =>  "4355084355084358" ,
     "EXP_MONTH" =>  "01" ,
     "EXP_YEAR" =>  "2016" ,
     "CC_CVV" =>  "123" ,
     "CC_OWNER" =>  "FirstName LastName" ,
     
     //Return URL on the Merchant webshop side that will be used in case of 3DS enrolled cards authorizations.
     "BACK_REF" =>  "https://www.example.com/alu/3ds_return.php" ,
     "CLIENT_IP" =>  "127.0.0.1" ,
     "BILL_LNAME" =>  "John" ,
     "BILL_FNAME" =>  "Doe" ,
     "BILL_EMAIL" =>  "shopper@payu.ru" ,
     "BILL_PHONE" =>  "1234567890" ,
     "BILL_COUNTRYCODE" =>  "RU" ,
);
 
//begin HASH calculation
ksort( $arParams );
 
$hashString =  "" ;
 
foreach ( $arParams as $key => $val ) {
     $hashString .=  strlen ( $val ) .  $val ;
}
 
$arParams [ "ORDER_HASH" ] = hash_hmac( "md5" ,  $hashString ,  $secretKey );
//end HASH calculation
 
$ch = curl_init();
curl_setopt( $ch , CURLOPT_URL,  $url );
curl_setopt( $ch , CURLOPT_SSL_VERIFYPEER, false);
curl_setopt( $ch , CURLOPT_RETURNTRANSFER, true);
curl_setopt( $ch , CURLOPT_TIMEOUT, 60);
curl_setopt( $ch , CURLOPT_POST, 1);
curl_setopt( $ch , CURLOPT_POSTFIELDS, http_build_query( $arParams ));
$response = curl_exec( $ch );
 
$curlerrcode = curl_errno( $ch );
$curlerr = curl_error( $ch );
 
if ( empty ( $curlerr ) &&  empty ( $curlerrcode )) {
     $parsedXML = @simplexml_load_string( $response );
     if ( $parsedXML !== FALSE) {
 
         //Get PayU Transaction reference.
         //Can be stored in your system DB, linked with your current order, for match order in case of 3DSecure enrolled cards
         //Can be empty in case of invalid parameters errors
         $payuTranReference =  $parsedXML ->REFNO;
 
         if ( $parsedXML ->STATUS ==  "SUCCESS" ) {
 
             //In case of 3DS enrolled cards, PayU will return the extra XML tag URL_3DS that contains a unique url for each 
             //transaction. For example https://secure.payu.com.ru/order/alu_return_3ds.php?request_id=2Xrl85eakbSBr3WtcbixYQ%3D%3D. 
             //The merchant must redirect the browser to this url to allow user to authenticate. 
             //After the authentification process ends the user will be redirected to BACK_REF url
             //with payment result in a HTTP POST request - see 3ds return sample. 
             if (( $parsedXML ->RETURN_CODE ==  "3DS_ENROLLED" ) && (! empty ( $parsedXML ->URL_3DS))) {
                 header( "Location:" .  $parsedXML ->URL_3DS);
                 die ();
             }
 
             echo "SUCCES [PayU reference number: " .  $payuTranReference .  "]" ;
         }  else {
             echo "FAILED: " .  $parsedXML ->RETURN_MESSAGE .  " [" .  $parsedXML ->RETURN_CODE .  "]" ;
             if (! empty ( $payuTranReference )) {
                 //the transaction was register to PayU system, but some error occured during the bank authorization.
                 //See $parsedXML->RETURN_MESSAGE and $parsedXML->RETURN_CODE for details                
                 echo " [PayU reference number: " .  $payuTranReference .  "]" ;
             }
         }
     }
}  else {
     //Was an error comunication between servers
     echo "cURL error: " .  $curlerr ;
}
?>


Пример на языке PHP для обработки запроса ALU в случае возврата 3DS к BACK_REF
<?php
 
if (!isset( $_POST [ 'HASH' ]) || ! empty ( $_POST [ 'HASH' ])) {
 
     //begin HASH verification
     $arParams =  $_POST ;
     unset( $arParams [ 'HASH' ]);
 
     $hashString =  "" ;
     foreach ( $arParams as $val ) {
         $hashString .=  strlen ( $val ) .  $val ;
     }
 
     $secretKey =  'demosecret' ;
     $expectedHash = hash_hmac( "md5" ,  $hashString ,  $secretKey );
     if ( $expectedHash !=  $_POST [ "HASH" ]) {
         echo "FAILED. Hash mismatch" ;
         die ;
     }
     //end hash verification
     
     //Use the information below to match against your database record.
     $payuTranReference =  $_POST [ 'REFNO' ];
 
     if ( $_POST [ 'STATUS' ] ==  "SUCCESS" ) {
         //Update status of the transaction in your database.
         echo "SUCCES [PayU reference number: " .  $payuTranReference .  "]" ;
     }  else {
         echo "FAILED " .  $_POST [ 'RETURN_MESSAGE' ] . "[" .  $_POST [ 'RETURN_CODE' ] . "]" ;
         echo " [PayU reference number: " .  $payuTranReference .  "]" ;
     }
}  else {
     echo "FAILED. Hash missing" ;
}
?>

Демо-пример


Примечание

Запросы на оплату не пройдут с пустым CVV.