# PaynetEasy Documentation (full)

## Integration Documentation

### Введение

#### Обзор Платёжного Шлюза

«Платёжный Шлюз Payneteasy» (далее — Система, Платёжный Шлюз или Payneteasy) — это платформа, сертифицированная по стандарту PCI DSS, которая обеспечивает приём, обработку, хранение и передачу платёжных данных между участниками платёжных процессов.

Основные участники:

| Плательщики или Получатели | конечные клиенты Торговцев. |
|------------------------------|-------------------------------------------------------------------------------------------------------------------------------|
| Присоединяющаяся Сторона | сами Торговцы, PSP/платёжные институты, представляющие Торговцев, или сторонние системы обмена данными (CRM, BI, мониторинг). |
| Процессоры | интегрированные внешние платёжные институты и платёжные провайдеры. |

Payment Gateway provides the following methods of accepting payment data:
1. API available on the Internet
2. POS-terminals
3. Virtual terminal for manual entry of payment data, received by e-mail and phone

Платёжный Шлюз предоставляет доступ к учётным записям пользователей. В нём предусмотрены следующие роли пользователей. Каждая корневая сущность может иметь собственных Сотрудников, которые могут получить доступ к данным корневой сущности, но с определёнными ограничениями:

| Торговец | предоставляется представителям Торговца (Присоединяющейся Стороне). |
|------------|-----------------------------------------------------------------------|
| Реселлер | предоставляется агенту, привлекающему Торговцев в Платёжный Шлюз. |
| Менеджер | предоставляется представителям Платёжного Шлюза. |

> **Note:** Все определения терминов см. в [Глоссарии](https://doc.payneteasy.ru/integration/reference/glossary.html.md).

The Payment Gateway API is also published as a machine-readable
[OpenAPI 3.1 specification](https://doc.payneteasy.ru/integration/openapi.html.html.md) — use it to explore the API
interactively in your browser, generate client SDKs, or integrate with
AI coding assistants. See the OpenAPI Specification page for details.

#### Сценарий интеграции Присоединяющейся Стороны

В зависимости от соответствия требованиям PCI и бизнес-требований Присоединяющаяся Сторона интегрируется с Платёжным Шлюзом через API Server-to-Server, API размещённых платёжных форм или их сочетание. Каждый вариант интеграции описан в разделе [Сценарии использования API](https://doc.payneteasy.ru/integration/api_use_cases_index.html.md), и каждый сценарий использования API содержит чёткие инструкции, какие [API команды](https://doc.payneteasy.ru/integration/API_commands_index.html.md) вызывать на каждом этапе платёжного процесса и как обрабатывать их результаты. Все API являются [асинхронными](https://doc.payneteasy.ru/integration/general_api_usage/async_response.html.md). Раздел [Общие утилиты](https://doc.payneteasy.ru/integration/common_utilities_index.html.md) содержит дополнительные сервисы, которые могут быть включены по запросу. Страница [FAQ](https://doc.payneteasy.ru/integration/reference/faq.html.md) помогает решать типовые вопросы при интеграции Присоединяющейся Стороны.

Менеджер службы поддержки Payneteasy настраивает Проекты с подключёнными Endpoint и Группами Endpoint (при необходимости) для одной или нескольких учётных записей Торговца Присоединяющейся Стороны в Платёжном Шлюзе. Для интеграции по API Присоединяющаяся Сторона получает от Payneteasy следующие данные. Эти данные могут быть предоставлены независимо для sandbox (тестовой) и производственной среды. Все дополнительно необходимые учётные данные указаны в соответствующих сценариях использования API.

Main required credentials are:
1. Endpoint IDs per currency or Endpoint Group IDs for multicurrency integration (see reference schema below).
2. Торговец login.
3. Торговец control key.
4. Integration scenario documentation.

```plantuml
title Options for multi-currency processing integration
package "Integration to Endpoint Group" {
  class "layoutHelper1" #ffe6cc;line:black;line.dotted
  class "Project\n currency A" #dae8fc;line:black;line.dotted
  class "Project\n currency B" #dae8fc;line:black;line.dotted
  class "Endpoint\n currency A" #ffe6cc;line:black;line.dotted
  class "Endpoint\n currency B" #ffe6cc;line:black;line.dotted
  class "Endpoint\nGroup" #ffe6cc;line:black;line.dotted
}
package "Integration to multiple Endpoints" {
class "layoutHelper2\n" #ffe6cc;line:black;line.dotted
  class "Project\n currency C" #dae8fc;line:black;line.dotted
  class "Project\n currency D" #dae8fc;line:black;line.dotted
  class "Endpoint\n currency C" #ffe6cc;line:black;line.dotted
  class "Endpoint\n currency D" #ffe6cc;line:black;line.dotted
}
class "layoutHelper3" #ffe6cc;line:black;line.dotted
class "Присоединяющаяся Сторона\n (Торговец)" #e1d5e7;line:black;line.dotted

"Присоединяющаяся Сторона\n (Торговец)" -left-> "Endpoint\nGroup"
"Присоединяющаяся Сторона\n (Торговец)" -down-> "layoutHelper3"
"Присоединяющаяся Сторона\n (Торговец)" -down-> "Endpoint\n currency C"
"Присоединяющаяся Сторона\n (Торговец)" -down-> "Endpoint\n currency D"

"Endpoint\nGroup" -down- "Endpoint\n currency A"
"Endpoint\nGroup" -down- "Endpoint\n currency B"
"Endpoint\n currency C" -down- "Project\n currency C"
"Endpoint\n currency D" -down- "Project\n currency D"
"Endpoint\n currency A" -down- "Project\n currency A"
"Endpoint\n currency B" -down- "Project\n currency B"
"Присоединяющаяся Сторона\n (Торговец)" -left[hidden]- "layoutHelper1"
"Присоединяющаяся Сторона\n (Торговец)" -right[hidden]- "layoutHelper2\n"
"layoutHelper1" -[hidden]- "Endpoint\n currency A"
"layoutHelper1" -[hidden]- "Endpoint\n currency B"
"layoutHelper2\n" -[hidden]- "Endpoint\n currency C"
"layoutHelper2\n" -[hidden]- "Endpoint\n currency D"
hide members
hide circle
hide layoutHelper1
hide layoutHelper2\n
hide layoutHelper3
```

#### Пример интеграции Присоединяющейся Стороны

1. [Sale Form](https://doc.payneteasy.ru/integration/api_use_cases/sale_form.html.md) - интеграция обработки sale-транзакций электронной коммерции через размещённую платёжную форму.
2. [Возвратные транзакции](https://doc.payneteasy.ru/integration/api_use_cases/return_transaction.html.md) - интеграция обработки возвратов.
3. [Обратные вызовы Присоединяющейся Стороны](https://doc.payneteasy.ru/integration/API_commands/merchant_callback_parameters.html.md) - получение данных о транзакциях в CRM, BI и другие системы.
4. [Настройка форм](https://doc.payneteasy.ru/integration/reference/forms_customization.html.md) - брендирование размещённых платёжных форм и предоставление их менеджеру службы поддержки Payneteasy для установки.
5. Протестируйте решение в sandbox с [тестовыми сценариями](https://doc.payneteasy.ru/integration/general_api_usage/test_scenarios.html.md) Payneteasy.
6. Сообщите менеджеру службы поддержки Payneteasy об успешном завершении тестирования и запросите производственные учётные данные для начала обработки платежей.

#### Типы транзакций Платёжного Шлюза

Транзакция — это операция перевода денежных средств между счетами. Платёжное решение Payneteasy поддерживает все распространённые типы транзакций, связанные с банковскими картами и альтернативными способами оплаты. Транзакции могут быть инициированы через API-команды, упомянутые в соответствующих сценариях использования, через Виртуальный терминал и другими способами.

**Платежи:**

sale - Продажа является типом транзакции, в которой Плательщик получает товары или услуги от Присоединяющейся стороны взамен на денежные средства или другие активы. Продажа объединяет процесс предавторизации и списания в одну транзакцию (полная авторизация). Международные платёжные системы требуют, чтобы запрос на продажу поступал только тогда, когда заказ выполняется немедленно. Например, при продаже товара в розницу в магазине.

preauth - Предавторизация является типом транзакции, в которой банк-эмитент блокирует определенную сумму на карточном счёте Плательщика и не позволяет ему распоряжаться этой суммой некоторое время. Предавторизация осуществляется в момент оформления покупки и подтверждает платежеспособность держателя карты, гарантируя, что счет Клиента обеспечен достаточными средствами для последующего списания и завершения покупки.

cancel - Позволяет разблокировать средства по ранее совершенной предавторизации.

capture - После предоставления услуги/продукта Плательщику, информация из предавторизации представляется в запросе на списание, которое инициирует перевод средств между счетами карты Плательщика и Присоединяющейся стороны.

reversal - Возвращает указанную сумму на счет держателя карты.

void - Покупка с помощью банковской карты, которую Присоединяющаяся сторона отменяет после авторизации, но до финального расчёта (settlement).

**Диспутные и сервисные транзакции:**

fraud - Отмечает мошенническую операцию.

retrieval - Эмитент карты запрашивает у Торговца (Присоединяющейся стороны) дополнительные документы по факту совершения операции.

chargeback - Возвратный платеж происходит, когда держатель карты связывается с банком-эмитентом, чтобы инициировать принудительный возврат за покупку, сделанную с помощью этой карты.

chargeback_reversal - Когда это применимо, Банк-эквайер может подать повторное заявление по совершённой транзакции chargeback.

prearbitration - Эмитент может инициировать арбитражный возвратный платёж после повторного заявления от эквайера (2-й chargeback).

arbitration - Если Банк-эквайер не принимает финансовую ответственность за предварительный арбитраж транзакции, он может запросить арбитраж транзакции (2-й возврат chargeback).

### Обзор 3DS

#### Процесс 3DS в Payneteasy

Справочные материалы:

[EMV® 3-D Secure Protocol and Core Functions Specification](https://www.emvco.com/emv-technologies/3d-secure/)

3-D Secure — это протокол, разработанный в качестве дополнительного уровня безопасности для онлайн-транзакций по кредитным и дебетовым картам.
 
Протокол 3-D Secure имеет две основные версии.
 
1.0 — была представлена в 2001 году и до сих пор используется некоторыми эквайерами (сервисы на базе этого протокола были приняты различными платежными системами под разными названиями: Verified by Visa или Visa Secure у Visa, Secure Code у Mastercard, Protect By у Discover, J/Secure у JCB International, American Express Safe Key у American Express).
 
2. X — была представлена в 2016 году для усиления и замены версии 1.0; она направлена на соблюдение новых требований ЕС к аутентификации и устранение некоторых недостатков оригинального протокола.
 

Несмотря на различия в обмене сообщениями на низком уровне, по существу версия протокола 2. X отличается от 1.0 наличием опции автоматической оценки рисков эмитентом карты на основе дополнительных контекстных данных, отправляемых из браузера или мобильного приложения плательщика, тогда как версия 1.0 всегда требует от плательщика прохождения проверки (challenge). Соответственно (и согласно спецификации EMVCo), протокол версии 2. X включает в себя Frictionless flow (сбор контекстных данных и оценка рисков) и Challenge flow (прохождение проверки аутентификации). Стандартный процесс аутентификации 3DS 2. X в веб-браузере плательщика проиллюстрирован ниже.

1. Плательщики заполняют платежную форму, предоставленную Подключенной стороной или Платежным шлюзом, и отправляют данные.

`Платёжная Форма`
 

> **Note:** Для транзакций перевода платежная форма может выглядеть так, как описано ниже.

`Платёжная Форма`
 
1. Контекстные данные собираются и отправляются Эмитенту в фоновом режиме внутри браузера (Frictionless flow).

`Форма Ожидания`
 
1. Если Эмитент считает транзакцию рискованной, браузер плательщика перенаправляется на веб-страницу Эмитента для прохождения проверки аутентификации (Challenge flow).

 
1. Когда плательщик проходит проверки, выполняется авторизация платежа с сохранением деталей аутентификации 3DS на стороне эквайера.

`Форма Ожидания`
 
1. Браузер Плательщика перенаправляется на сайт Присоединяющейся Стороны на страницу с результатом.

`Финальная форма`
 

В связи с тем, что обе версии протокола все еще используются, Подключенная сторона должна поддерживать их обе, а также специфические интеграции, когда эквайер берет на себя взаимодействие по 3D Secure. Для этих целей Платежный шлюз предоставляет универсальный подход на основе API-команд, которые позволяют Подключенной стороне обрабатывать все указанные случаи. Подключенной стороне следует начать со Схемы принятия решений 3DS для соответствующего варианта использования (Use-Case), которая, в свою очередь, ссылается на более детальную диаграмму, описывающую специфику обработки данных и редиректов браузера плательщика.

#### Сценарии реализации 3DS

| Сценарий реализации | Инструкции |
|----------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 3DS не инициируется (non3D). | Аутентификация 3DS не инициируется. Следуйте Схеме принятия решений 3DS соответствующего Use-Case и реализуйте Сценарий без 3DS. |
| 3DS инициируется и выполняется Подключенной стороной (для PSP и эквайеров). | Аутентификация 3DS инициируется и выполняется Подключенной стороной, результаты передаются в Платежный шлюз в первоначальном запросе. Следуйте Схеме принятия решений 3DS соответствующего Use-Case и реализуйте Сценарий без 3DS (3DS выполняется до первоначального запроса к Платежному шлюзу). |
| 3DS инициируется Платежным шлюзом и выполняется на стороне Подключенной стороны. | Аутентификация 3DS инициируется Платежным шлюзом. Для 3DS 1.0.2 аутентификация плательщика выполняется на стороне Подключенной стороны, результаты загружаются в Платежный шлюз. Для 3DS 2.x выполнение 3DS Method и Challenge происходит на стороне Подключенной стороны, результаты загружаются в Платежный шлюз. Дополнительные поля для 3DS Method могут быть переданы Подключенной стороной в первоначальном запросе для ускорения процесса в 3DS 2.x (tds_status=Method Url Frame будет пропущен, если 3DS Method не поддерживается ACS). Следуйте Схеме принятия решений 3DS соответствующего Use-Case и реализуйте все процессы 3DS (3DS Flows). |
| 3DS инициируется и выполняется Платежным шлюзом. | Аутентификация 3DS инициируется Платежным шлюзом, все сценарии 3DS выполняются на стороне Платежного шлюза. Следуйте Схеме принятия решений 3DS соответствующего Use-Case, реализуйте Упрощённый процесс аутентификации (игнорируйте наличие параметра tds_status, используйте параметры html или redirect-to для перенаправления плательщика на Платежный шлюз) и Сценарий без 3DS (если карта плательщика не участвует в 3DS или обработка идет как Non3D). |

#### Схема прохождения 3DS

```plantuml
@startuml

title Схема прохождения 3DS
start
: (1) Send **/api/v2/status** request\nwith orderid=**paynet-order-id**\nProcess **/api/v2/status** response;
while ((2) Check If **status** response field equals\nto finished status values\n**status** == approved\nOR **status** == declined\nOR **status** == error\nOR **status** == unknown\nOR **status** == filtered) is (NO);
if ((3) **tds_status** field is present) then (YES)
if ((4) **tds_status** == MethodUrlFrame?) then (YES)
#Plum :(5) Create iframe\nto pass 3DS Method\n3DS 2.x Frictionless flow\nto be applied.\n\nSee 3DS 2.x Frictionless Flow;
(NO      ) elseif ((6) **tds_status** == CReqForm?) then (YES)
#Plum :(7) Create CReq HTML Page\nwhich redirects to ACS\n3DS 2.x Challenge Flow\nto be applied\n\nSee 3DS 2.X Challenge Flow;
(NO      ) elseif ((8) **tds_status** == PaReqForm?) then (YES)
#Plum :(9) Create PaReq HTML Page\nwhich redirects to ACS\nПроцесс аутентификации 3DS 1.0.2\nto be applied\n\nSee Процесс аутентификации 3DS 1.0.2;
endif
(NO      )elseif ((10) **html** field is present) then (YES)
#Plum :(11) Return content of the\n**html** field to the Payeras is \n(3DS 2.x or 1.0.2 to be applied)\n\nSee Simplified authentication flow;
else (NO)
endif
backward:(12) Send new\n**/api/v2/status** request\nProcess\n**/api/v2/status** response;
endwhile (YES)
:(13) Show result page to the Payer;
stop
legend left
=Legend
| Color | Implementation responsibility |
|<#Turquoise>| Connecting party |
|<#Plum>| Connecting and other party |
| | Other Party |
endlegend
@enduml
```

Присоединяющаяся сторона должна реализовать все шаги, отмеченные зелёным и фиолетовым цветом. Ниже приведены описания шагов со ссылками на API-команды в соответствии с номером шага.

(1) Для реализации запроса статуса заказа см. [/api/v2/status/](https://doc.payneteasy.ru/integration/API_commands/api_v2_status.html.md). Статус следует запрашивать несколько раз с интервалом 3-5 секунд до получения финального статуса в ответе.
 
(5) Если tds_status равен Method Url Frame, см. [Frictionless 3DS 2.x](#ds-2x-frictionless-flow-overview).
 
(7) Если tds_status имеет значение CReq Form, см. [3DS 2. X Challenge](#ds-2x-challenge-flow-overview).
 
(9) Если tds_status равен Pa Req Form, см. [3DS 1.0.2 Authentication](#ds-102-authentication-flow-overview).
 
(11) Если параметр tds_status отсутствует, но присутствует поле html, см. [Simplified authentication](#simplified-authentication-flow-overview).
 
(12) То же, что и в пункте (1).
 

##### Сценарий без 3DS

Транзакция должна считаться non3D (без аутентификации 3DS), если соблюдены все условия:

1. Были выполнены шаги 1-2-(12)-13 [Схемы принятия решений 3DS](#ds-decision-making-scheme-overview).
 
2. Отсутствие параметров tds_status, html и redirect-to.
 
3. Транзакция получила финальный статус (approved, declined, error, filtered).
 

> **Note:** Транзакции со статусом «unknown» могут показываться как транзакции, прошедшие 3DS, так и как транзакции без прохождения 3DS. Детальнее о статусах транзакций см. [Статусы](https://doc.payneteasy.ru/integration/API_commands/api_v2_status.html.md).

##### Процесс 3DS 2.x.0 Frictionless

```plantuml

title Процесс 3DS 2.x.0 Frictionless
start
#Turquoise:(1) Send **/api/v2/status/** API request;
#Turquoise:(2) Process **/api/v2/status/** response.
Gather:
**tds-method-url-frame-3ds-server-trans-id**
**tds-method-url-frame-3ds-method-url**;
if ((3) **tds-method-url-frame-3ds-method-url** is present) then (yes)
    #Turquoise:(4) The Connecting Party constructs **3DS Method HTML Page**\ncontaining hidden iframe and upload **3DS Method Result HTML Form**\nusing the parameters received on the previous steps\nand providing **threeDSMethodNotificationURL**;
    #Turquoise:(5) HTML Page, once rendered, is automatically submitted
    into iframe (using HTML Page target attribute);
    fork
        note left
        **iframe** lifecycle
        end note
        :(6) Payer's iframe gets redirected to
        **tds-method-url-frame-3ds-method-url**
        URL (Issuer ACS);
        :(7) Issuer ACS collects Payer Identity Data from browser;
        :(8) Issuer ACS notifies (using HTTP POST)
        **threeDSMethodNotificationURL** on completion;
        #Turquoise:(9) When notification is received gather **threeDSMethodData**.
        Base64Decode it and check **threeDSServerTransID**;
        #Turquoise:(10) Save **threeDSCompInd=Y** for the current Transaction;
        #Turquoise:(11) Return **3DS Method Done HTML Page**;
    fork again
        note left
        **3DS Method HTML Page** lifecycle
        end note
        repeat
            #Turquoise:(12) Check if Issuer ACS notification
            is received from iframe internal JavaScript;
        repeat while ((13) notification is recieved OR timeout exceeded?) is (no)
        -> (yes);
        if ((14) timeout exceeded?) then (yes)
            #Turquoise:(15) Save **threeDSCompInd=N**
            for the current Transaction;
        else (no)
        endif
        :(16) After executing 3ds method\nsend data to connecting party's server;
   end fork
    else (no)
        #Turquoise:(17) Save **threeDSCompInd=U**
        for the current Transaction;
endif
#Turquoise:(18) Send **api/3ds/v1/upload-method-url-result/** request
with the collected Payer's data and **threeDSCompInd**,
Payer's browser info and **notificationURL**
which is to be used further in the Challenge Flow
(see Схема прохождения 3DS and 3DS 2.X Challenge Flow).;
#Turquoise:(19) Send **/api/v2/status/** API request
Process **/api/v2/status/** response and follow **Схема прохождения 3DS**.;
stop
legend left
=Legend
| Color | Implementation responsibility |
|<#Turquoise>| Connecting party |
| | Other Party |
endlegend
```

Подключенная сторона должна реализовать все шаги, отмеченные зеленым цветом. Ниже приведены описания шагов со ссылками на конкретные API-команды в соответствии с ID шага:

(1) Для реализации запроса статуса заказа см. [/api/v2/status/](https://doc.payneteasy.ru/integration/API_commands/api_v2_status.html.md). Статус следует запрашивать несколько раз с интервалом 3-5 секунд до получения финального статуса в ответе.
 
(2) То же, что и в пункте (1).
 
(4) О создании HTML-страницы 3DS Method см. [пример ниже](#frictionless-3ds-method-html-page-overview).
 
(9) Для обработки 3DS Method Notification см. [Обработка уведомления 3DS Method](#frictionless-3ds-method-process-3ds-overview).
 
(11) Для построения HTML-страницы 3DS Method Done см. [example](#frictionless-3ds-method-done-html-page-overview).
 
(18) Для загрузки результата method url см. [/api/3ds/v1/upload-method-url-result/](https://doc.payneteasy.ru/integration/API_commands/upload-method-url-result.html.md).
 
(19) То же, что и в пункте (1).
 

###### Пример HTML-страницы 3DS Method

Приведенный ниже пример HTML-страницы 3DS Method выполняет инициацию 3DS Method через iframe и удерживает браузер плательщика до завершения 3DS Method на сервере Подключенной стороны. После завершения или по истечении тайм-аута Подключенная сторона должна выполнить следующие шаги согласно Схеме принятия решений 3DS и перенаправить браузер плательщика на соответствующий URL (либо Challenge Flow, либо страницу результата платежа). Стандартное значение тайм-аута — 30 сек.

HTML-страница 3DS Method состоит из следующих параметров:

| Параметр | Описание |
|-------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| tds-method-url-frame-3ds-method-url | URL ACS 3DS Method, полученный Подключенной стороной в ответе [/api/v2/status/](https://doc.payneteasy.ru/integration/API_commands/api_v2_status.html.md). |
| tds Method Upload Url | URL Подключенной стороны, на который приходит результат после завершения процесса. |
| threeDSMethod Data | Значение JSON, содержащее threeDSServer TransID и threeDSMethod NotificationURL. Ниже описано, как [сформировать threeDSMethod Data](#frictionless-3ds-method-html-page-threedsmethoddata-overview). |

**Формирование threeDSMethod Data**

Для того чтобы **сформировать threeDSMethod Data**, Подключенная сторона должна использовать следующие параметры.

| Параметр | Описание |
|------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| threeDSServer TransID | Универсальный уникальный идентификатор транзакции, присвоенный 3DS-сервером для идентификации отдельной транзакции. Получается в ответе [/api/v2/status/](https://doc.payneteasy.ru/integration/API_commands/api_v2_status.html.md) как параметр tds-method-url-frame-3ds-server-trans-id. |
| threeDSMethod NotificationURL | URL, на который придет уведомление о завершении 3DS Method от ACS. Подключенная сторона несет ответственность за предоставление корректного threeDSMethod NotificationURL. Обычно, когда Подключенная сторона получает любой запрос на этот URL, она должна вернуть 3DS Method Done HTML Page (см. [пример ниже](#frictionless-3ds-method-done-html-page-overview)). |

**Пример формирования threeDSMethod Data**

1. **Сформируйте JSON** threeDSMethod Data.

```http
{"threeDSServerTransID":"3d671629-a410-4a5d-9288-b38ceadd41f2","threeDSMethodNotificationURL":"https://connectingparty.com/3ds-method-complete/"}
```

1. Примените кодирование base64 url к результирующему JSON.

```http
eyJ0aHJlZURTU2VydmVyVHJhbnNJRCI6IjNkNjcxNjI5LWE0MTAtNGE1ZC05Mjg4LWIzOGNlYWRkNDFmMiIsInRocmVlRFNNZXRob2ROb3RpZmljYXRpb25VUkwiOiJodHRwczovL21lcmNoYW50LmNvbS8zZHMtbWV0aG9kLWNvbXBsZXRlLyJ9
```

**Генерация Fingerprint**

3DS Method может опционально использоваться эмитентами для сбора отпечатков браузера (fingerprints) с помощью Java Script. Это делается путем загрузки URL в скрытом iframe перед аутентификацией. Этот iframe выполнит Java Script-код для снятия отпечатка, после чего отправит POST-запрос на заранее определенный URL запрашивающей стороны. Результат снятия отпечатка 3DS Method привязывается к аутентификации через threeDSServer TransID.

```js
function gatherBrowserData() {
  var colorDepth = screen.colorDepth; // 24
  var javaEnabled = navigator.javaEnabled(); // true
  var browserLanguage = navigator.language; // en_US
  var screenHeight = screen.height; // 1080
  var screenWidth = screen.width; // 1920
  var userAgent = navigator.userAgent; // Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36
  var browserTimezoneZoneOffset = new Date().getTimezoneOffset(); // 0
}
```

**Пример создания HTML-страницы 3DS Method**:

```html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8"/>
    <title>ACS v2 3DS Method ...</title>
    
    <script>
var fallbackTimeout = null;
function processForm() {
    document.title = "ACS v2 AReq ...";
    document.getElementById( "browserJavaEnabled"       ).value = navigator.javaEnabled();
    document.getElementById( "browserJavascriptEnabled" ).value = true;
    document.getElementById( "browserLanguage"          ).value = navigator.language;
    document.getElementById( "browserColorDepth"        ).value = screen.colorDepth;
    document.getElementById( "browserScreenHeight"      ).value = screen.height;
    document.getElementById( "browserScreenWidth"       ).value = screen.width;
    document.getElementById( "browserTZ"                ).value = new Date().getTimezoneOffset();
    document.autoForm.submit();
}
function onPostMessage(event) {
    if(!event.data.hasOwnProperty('methodNotification')) {
       return;
    }
    if(fallbackTimeout != null) {
         clearTimeout(fallbackTimeout);
         fallbackTimeout = null;
    }
    document.getElementById( "threeDSCompInd" ).value = 'Y';
    processForm();
}
function onPageLoaded() {
    fallbackTimeout = setTimeout(processForm, 10 * 1000);
    document.methodForm.submit();
    window.addEventListener('message', onPostMessage);
}
    </script>
</head>
<body onload="onPageLoaded()">

    <div class="color"></div>

<iframe style="width:0; height:0; border:0;" name="methodFrame"></iframe>
<form name="methodForm" target="methodFrame" action="[=tds-method-url-frame-3ds-method-url]" method="POST">
    <input type="hidden" name="threeDSMethodData" value="[=threeDSMethodData]">
</form>
<form name="autoForm" action="[=tdsMethodUploadUrl]" method="post">
    <input type="hidden" name="threeDSServerTransID" value="[=threeDSServerTransID]"/>
    <input type="hidden" name="threeDSCompInd" id="threeDSCompInd" value="N"/>
    <input type="hidden" name="browserJavaEnabled"       id="browserJavaEnabled"        value="" />
    <input type="hidden" name="browserJavascriptEnabled" id="browserJavascriptEnabled"  value="" />
    <input type="hidden" name="browserLanguage"          id="browserLanguage"           value="" />
    <input type="hidden" name="browserColorDepth"        id="browserColorDepth"         value="" />
    <input type="hidden" name="browserScreenHeight"      id="browserScreenHeight"       value="" />
    <input type="hidden" name="browserScreenWidth"       id="browserScreenWidth"        value="" />
    <input type="hidden" name="browserTZ"                id="browserTZ"                 value="" />
    <noscript>
        <input type="submit" name="submit" value="Upload 3DS Method Result"/>
    </noscript>
</form>
</body>
</html>
```

###### Обработка уведомления 3DS Method

Когда 3DS Method завершен, Подключенная сторона получает HTTP POST запрос на threeDSMethod NotificationURL с данными threeDSMethod Data, которые содержат threeDSServer TransID (в JSON с кодировкой base64).

1. Получите threeDSMethod Data.

```js
threeDSMethodData=eyJ0aHJlZURTU2VydmVyVHJhbnNJRCI6IjNkNjcxNjI5LWE0MTAtNGE1ZC05Mjg4LWIzOGNlYWRkNDFmMiJ9Cg
```

1. Примените декодирование base64 url для получения JSON, содержащего threeDSServer TransID.

```json
{"threeDSServerTransID":"3d671629-a410-4a5d-9288-b38ceadd41f2"}
```

###### Пример HTML-страницы 3DS Method Done

```html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8"/>
    <title>ACS v2 3DS Method Notification Handler...</title>
    <script>
        window.parent.postMessage({ methodNotification: "COMPLETE" }, "*");
    </script>
</head>
<body>
<p>This should not be displayed</p>
</body>
</html>
```

##### Процесс 3DS 2.x.0 Challenge

```plantuml

title Процесс 3DS 2.x.0 Challenge
start
#Turquoise:(1) Send **/api/v2/status/** API request;
#Turquoise:(2) Process **/api/v2/status/** response.
Gather:
**tds-creq-form-creq**
**tds-creq-form-acs-url**;
#Turquoise:(3) Construct CReq HTML Page based on the gathered parameters.
Add **threeDSSessionData** with the custom data
in the format: Max length: 1024 bytes, format: Alphanumeric,
base64url encoded without padding.;
#Turquoise:(4) Return CReq HTML Page to Payer's browser;
:(5) CReq Page gets redirected to ACS URL **tds-creq-form-acs-url**.
Payer passes 3DS Challenge Verification.
ACS return CRes Page.
CRes Page gets submitted to **notificationURL**;
#Turquoise:(6) Process CRes Page parameters.
Gather parameters:
**cres**
**threeDSSessionData**;
#Turquoise:(7) Send HTTP POST **/api/3ds/v1/upload-cres-result/** API Request
providing **cres**, **orderid=paynet-order-id**;
#Turquoise:(8) Send **/api/v2/status/** API request
Process **/api/v2/status/** response and follow **Схема прохождения 3DS**.;
stop
legend left
=Legend
| Color | Implementation responsibility |
|<#Turquoise>| Connecting party |
| | Other Party |
endlegend
```

(1) Для реализации запроса статуса заказа см. [/api/v2/status/](https://doc.payneteasy.ru/integration/API_commands/api_v2_status.html.md). Статус следует запрашивать несколько раз с интервалом 3-5 секунд до получения финального статуса в ответе.
 
(2) То же, что и в пункте (1).
 
(3) О создании HTML-страницы CReq см. [пример](#creqform-example-overview).
 
(5) О реализации редиректа CRes см. [CRes redirect](https://doc.payneteasy.ru/integration/API_commands/CRes_redirect.html.md).
 
(7) Для загрузки результата CRes см. [/api/3ds/v1/upload-cres-result/](https://doc.payneteasy.ru/integration/API_commands/upload-cres-result.html.md).
 
(8) То же, что и в пункте (1).
 

###### Пример HTML-страницы CReq

HTML-страница CReq перенаправляет браузер плательщика на URL ACS-сервера, указанный в параметре tds-creq-form-acs-url. Результирующее значение CRes будет возвращено от ACS на notificationURL, предоставленный Подключенной стороной в запросе [/api/3ds/v1/upload-method-url-result](https://doc.payneteasy.ru/integration/API_commands/upload-method-url-result.html.md) во время процесса 3DS 2.x.0 Frictionless.

| Поле | Описание | Необходимость |
|--------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------|
| creq | Данные ACS 3DS CReq, полученные Подключенной стороной в ответе [/api/v2/status/](https://doc.payneteasy.ru/integration/API_commands/api_v2_status.html.md). То же, что и tds-creq-form-creq. | Обязательно |
| threeDSSession Data | значение, которое будет отправлено обратно в CRes на notificationURL в конце процесса. Максимальная длина: 1024 байта, формат: буквенно-цифровой, кодировка Base64url без дополнения (padding). | Опционально |
```html
<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <title>Redirecting ...</title>
  <script type="text/javascript" language="javascript">
    function makeSubmit() {
              document.returnform.submit();
        }
  </script>
</head>
<body onLoad="makeSubmit()">
<form name="returnform" action="https://acs.bank-domain.com/mdpayacs/creq" method="POST">
  <input type="hidden" name="creq" value="eyJ0aHJlZURTU2VydmVyVHJhbnNJRCI6ImM1NDA5N2VhLTc0ZTctNDE2My05MTQ4LTNjMTY1NTg3NGIwMCIsImFjc1RyYW5zSUQiOiIxMjU1NTkyMi1lZmYzLTRjOTQtOTk4Mi0yMDM3NjJhMzdmMjkiLCJjaGFsbGVuZ2VXaW5kb3dTaXplIjoiMDIiLCJtZXNzYWdlVHlwZSI6IkNSZXEiLCJtZXNzYWdlVmVyc2lvbiI6IjIuMS4wIn0=">
  <input type="hidden" name="threeDSSessionData" value="NjY4MDU3NQ">
  <noscript>
    <input type="submit" name="submit" value="Press this button to continue"/>
  </noscript>
</form>
</body>
</html>
```

##### Процесс аутентификации 3DS 1.0.2

```plantuml

title Процесс аутентификации 3DS 1.0.2
start
#Turquoise:(1) Send **/api/v2/status/** API request;
#Turquoise:(2) Process **/api/v2/status/** response.
Gather:
**tds-pareq-form-pareq**
**tds-pareq-form-acs-url**;
#Turquoise:(3) Construct PAReq HTML Page based on the gathered parameters.
Add **TermUrl** where the Payer gets redirected back with PARes data submitted.
Add **MD** with the custom data which is be posted back.;
#Turquoise:(4) Return PAReq HTML Page to Payer's browser;
:(5) PaReq Page gets redirected to ACS URL **tds-pareq-form-acs-url**;
:(6) Payer passes 3DS Challenge Verification;
:(7) ACS returns PARes Page;
:(8) PaRes Page gets submitted to the **TermUrl**;
#Turquoise:(9) Process PARes Page parameters.
Gather parameters:
**PaRes**
**MD**;
#Turquoise:(10) Send HTTP POST **/api/3ds/v1/upload-pares-result/** API Request
providing **paRes**, **orderid=paynet-order-id**;
#Turquoise:(11) Send **/api/v2/status/** API request
Process **/api/v2/status/** response and follow **Схема прохождения 3DS**.;
stop
legend left
=Legend
| Color | Implementation responsibility |
|<#Turquoise>| Connecting party |
| | Other Party |
endlegend
```

(1) Для реализации запроса статуса заказа см. [/api/v2/status/](https://doc.payneteasy.ru/integration/API_commands/api_v2_status.html.md). Статус следует запрашивать несколько раз с интервалом 3-5 секунд до получения финального статуса в ответе.
 
(2) То же, что и в пункте (1).
 
(3) О создании HTML-страницы Pa Req см. [пример](#pareqform-example-overview).
 
(5) О реализации редиректа Pa Res см. [Pa Res redirect](https://doc.payneteasy.ru/integration/API_commands/Pa Res_redirect.html.md).
 
(10) Для загрузки результата Pa Res см. [/api/3ds/v1/upload-pares-result/](https://doc.payneteasy.ru/integration/API_commands/upload-pares-result.html.md).
 
(11) То же, что и в пункте (10).
 

###### Пример HTML-страницы Pa Req

HTML-страница Pa Req перенаправляет браузер плательщика на URL ACS-сервера, указанный в параметре tds-pareq-form-acs-url.

HTML-страница Pa Req состоит из следующих параметров:

| Поле | Описание | Необходимость |
|------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------|
| tds-pareq-form-acs-url | URL ACS 3DS Pa Req, полученный Подключенной стороной в ответе [/api/v2/status/](https://doc.payneteasy.ru/integration/API_commands/api_v2_status.html.md). | Обязательно |
| MD | Данные Подключенной стороны, которые возвращаются на вашу страницу завершения. | Опционально |
| Pa Req | Данные ACS 3DS Pa Req, полученные Подключенной стороной в ответе [/api/v2/status/](https://doc.payneteasy.ru/integration/API_commands/api_v2_status.html.md). То же, что и tds-pareq-form-pareq. | Обязательно |
| TermURL | URL страницы завершения, на которую плательщик перенаправляется обратно с переданными данными Pa Res. | Обязательно |
```html
<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <title>Loading acs..</title>
  <script type="text/javascript" language="javascript">
    function makeSubmit() {
      document.returnform.submit();
    }
  </script>
</head>
<body onLoad="makeSubmit()">
<form name="returnform" action="$tds-pareq-form-acs-url" method="POST">
  <input type="hidden" name="MD" value="some_merchant_data"/>
  <input type="hidden" name="PaReq" value="$tds-pareq-form-pareq"/>
  <input type="hidden" name="TermUrl" value="https://termination.page"/>
  <noscript>
    <input type="submit" name="submit" value="Submit"/>
  </noscript>
</form>
</body>
</html>
```

##### Упрощённый процесс аутентификации

```plantuml

title Упрощённый процесс аутентификации
start
#Turquoise:(1) Send **/api/v2/status/** API request;
#Turquoise:(2) Process **/api/v2/status/** response;
fork
#Turquoise:(3)Gather **html** parameter;
#Turquoise:(4) Return content from **html** parameter to the Payer's browser as is;
forkagain
#Turquoise:(5)Gather **redirect-to** parameter;
#Turquoise:(6)Redirect Payer to redirect URL (value of redirect-to parameter);
endfork
:(7) Payer's browser gets redirected to ACS and Payer passes either 3DS 1.0.2 or 3DS 2.X flow.;
:(8) Payer's browser gets redirected back to **redirect_url** provided in the initial **api/v2/sale/** request.;
#Turquoise:(9) Process Payer's Browser final redirect to **redirect_url**.;
#Turquoise:(10) Return Wait HTML Page to the Payer's browser;
fork
note left
             **Wait HTML Page** lifecycle
end note
repeat
#Turquoise: (11) Request Connecting Party Server on the status of the transaction;
#Turquoise: (12) Process transaction status;
repeat while ((13) Received finished status\n(approved, declined, error, filtered or unknown)?) is (no)
-> (yes);
#Turquoise:(14) Redirect Payer's browser to the result page;
fork again
note left
             **Connecting Party Server** lifecycle
end note
repeat
#Turquoise:(15) Send **/api/v2/status/** API request;
#Turquoise:(16) Process **/api/v2/status/** response;
repeat while ((17) Received final status from "Payneteasy") is (no)
-> (yes);
#Turquoise:(18) Save transaction status;
end fork
stop
legend left
=Legend
| Color | Implementation responsibility |
|<#Turquoise>| Connecting party |
| | Other Party |
endlegend
```

(1) Для реализации запроса статуса заказа см. [/api/v2/status/](https://doc.payneteasy.ru/integration/API_commands/api_v2_status.html.md). Статус следует запрашивать несколько раз с интервалом 3-5 секунд до получения финального статуса в ответе.
 
(2) То же, что и в пункте (1).
 
(6) О реализации финального редиректа см. [Final redirect](https://doc.payneteasy.ru/integration/API_commands/final_redirect.html.md).
 
(7) HTML-страница ожидания на стороне Подключенной стороны может иметь индивидуальный дизайн и должна взаимодействовать с сервером Подключенной стороны, как показано на диаграмме.
 
(12) и (13) То же, что и в пункте (1).
 

#### Альтернативная аутентификация держателя карты

Платежный шлюз поддерживает альтернативные методы аутентификации держателя карты, если карта не участвует в 3DS (отрицательный ответ 3DS enrollment). Одним из таких методов является проверка случайной суммы. В этом методе Платежный шлюз инициирует дополнительную транзакцию преавторизации для удержания случайной небольшой суммы на счету держателя карты и отправляет специальную форму для ввода плательщиком удержанной суммы. Если сумма указана верно, Платежный шлюз продолжает обработку первоначальной транзакции. Удержание небольшой суммы отменяется автоматически.

##### Общая диаграмма для транзакций через форму

```plantuml
skinparam roundcorner 20
skinparam sequenceArrowThickness 2
skinparam ParticipantPadding 30
actor Payer as Customer
participant "Connecting Party" as Merchant
participant "Payment Gateway" as g
autonumber
Customer -> Merchant: Checkout
activate Merchant
== Purchase payment request ==
Merchant -> g: Request Initiating
activate g
g --> Merchant: Redirect-url, Order ID
deactivate g
Merchant -> Customer: Provide redirect-url to Payer's browser
activate Customer
Customer -> g: GET redirect-url
deactivate Customer
activate g
g -> Customer: Платёжная Форма
deactivate g
activate Customer
Customer -> g: Submit Form
deactivate Customer
activate g
g -> g: Transaction processing
g -> g: 3DS Enrollment
g -> g: Random Sum Processing
g -> Customer: Redirecting to the Random Sum Check html form
deactivate g
activate Customer
Customer -> g: The cardholder provides auth data
deactivate Customer
activate g
g -> g: Auth Data Validating
group alt
== Receive Connecting Party Callback ==
Merchant <- g: Сallback with final status
g <-- Merchant: HTTP 200
deactivate g
== Order Status Request ==
Merchant -> g: api/v2/status
activate g
g --> Merchant: Response \nstatus, order-stage
deactivate g
end
Merchant --> Customer: Show result
deactivate Merchant
deactivate Customer
```

(2) См. соответствующий Use-Case для получения подробностей о конкретной API-команде для инициации транзакции.
 
(13) Для имплементации обратного вызова с обработкой финального статуса см. [Обратный вызов Присоединяющейся Стороны](https://doc.payneteasy.ru/integration/API_commands/merchant_callback_parameters.html.md).
 
(15) Пожалуйста, см. [Status List](https://doc.payneteasy.ru/integration/statuses.html.md) для получения дополнительной информации о финальных статусах.
 

##### Общая диаграмма для прямых интеграций

```plantuml
skinparam roundcorner 20
skinparam sequenceArrowThickness 1
skinparam maxmessagesize 1200
skinparam sequenceParticipant underline
actor Payer
participant "Connecting Party" as A
participant "Payment Gateway" as B
autonumber
Payer -> A: Checkout
activate A
A -> B: Payment Initiating
activate B
B --> A: Order ID
B -> B: Transaction processing
group loop
A -> B: Status Request
B --> A: Non-Final Status
end
B -> B: 3DS Enrollment
B -> B: Random Sum Processing
A -> B: Status Request
B -> A: Response with Random Sum Check html form
A -> Payer: Redirecting to the Random Sum Check html form
deactivate B
activate Payer
Payer -> B: Cardholder provides auth data
deactivate Payer
activate B
B -> B: Auth Data Validating
group alt
group Get Final Status
== Receive Connecting Party Callback ==
A <- B: Callback with Final Status
A --> B: HTTP 200
deactivate B
== Order Status Request ==
A -> B: Get Status by Order ID
activate B
B --> A: Response status, \norder-stage
deactivate B
end
A --> Payer: Show result
deactivate A
```

(2) См. соответствующий Use-Case для получения подробностей о конкретной API-команде для инициации транзакции.
 
(9) Запрос статуса продолжается параллельно все время, начиная с шага 5.
 
(11) Для обработки обратного вызова с окончательным статусом заказа см. [Обратный вызов Присоединяющейся Стороны](https://doc.payneteasy.ru/integration/API_commands/merchant_callback_parameters.html.md).
 
(13) Пожалуйста, см. [Status List](https://doc.payneteasy.ru/integration/statuses.html.md) для получения дополнительной информации о финальных статусах.

### Команды API, обратные вызовы и перенаправления

### CRes Redirect

#### CRes Redirect Parameters

CRes redirect to connecting party’s website is performed when a payer ends Challenge flow. Final redirect is initiated from within payers browser using HTTP POST method.
HTTP payload contains CRes parameters which in turn contains base64 encoded json (see example below).

| Название параметра перенаправления | Описание |
|--------------------------------------|----------------------------------------------------------------------------------------------|
| serial-номер | Unique номер assigned by Payneteasy server to particular запрос from the Торговец Payneteasy |
| торговец-order-id | Торговец order id |
| paynet-order-id | Идентификатор заказа, присвоенный сервером gate.payneteasy.ru |

#### Redirect Request Example

Присоединяющаяся сторона получает HTTP POST-запрос с параметром **CRes**, закодированным в base64, подобный приведённому ниже:

```http
cres=ewogICJtZXNzYWdlVHlwZSIgICAgOiAiQ1JlcyIsCiAgIm1lc3NhZ2VWZXJzaW9uIiA6ICIyLjEuMCIsCgogICJ0aHJlZURTU2VydmVyVHJhbnNJRCIgOiAic29tZVRocmVlRFNTZXJ2ZXJUcmFuc0lEIiwKICAiYWNzVHJhbnNJRCIgICAgICAgICAgIDogInNvbWVBY3NUcmFuc0lEIiwKCiAgImNoYWxsZW5nZUNvbXBsZXRpb25JbmQiIDogIlkiLAogICJ0cmFuc1N0YXR1cyIgICAgICAgICAgICA6ICJZIgp9
```

После декодирования cres будет найден JSON, подобный приведённому ниже:

```json
{
  "messageType"    : "CRes",
  "messageVersion" : "2.1.0",

  "threeDSServerTransID" : "someThreeDSServerTransID",
  "acsTransID"           : "someAcsTransID",

  "challengeCompletionInd" : "Y",
  "transStatus"            : "Y"
}
```

### Pa Res Redirect

#### Pa Res Redirect Parameters

Pa Res redirect to connecting party’s website is performed when a payer ends 1.0.2 authentication flow.
Final redirect is initiated from within payers browser using HTTP POST method.
HTTP payload contains Pa Res parameters which in turn contains base64 encoded json (see example below).

| Название параметра перенаправления | Описание |
|--------------------------------------|----------------------------------------------------------------------------------------------|
| serial-номер | Unique номер assigned by Payneteasy server to particular запрос from the Торговец Payneteasy |
| торговец-order-id | Торговец order id |
| paynet-order-id | Идентификатор заказа, присвоенный сервером gate.payneteasy.ru |

#### Redirect Request Example

Присоединяющаяся сторона получает HTTP POST запрос с параметром Pa Res, сжатым алгоритмом deflate и закодированным в base64, подобный приведённому ниже:

```http
paRes=eJydlluTokgThu/nVxhOxN4YPZwV5rPdKI6CgHIQxTsaEDnIWUB//aL09Ngdc7HfcgFFkvnwZmVWRc3/7s7JqPHLKszS1zHyAx6P/NTNvDANXsdbk38hx6OqdlLPSbLUfx2n2fjvxdw8lb7PGr57Kf3Ft9FoNFf8qnICfxR6r2P4/Xr5dUM+Rv01JY6edxw/wu6RG6D71f8fdw99173oZf9A59Cv1ycPxS/dk5PWT7a72XELWlQXOIJMCXIOvb9+9jn7pcguEBTDiemMpOA5NFie6NAf8PPN5W6r/C+4LvQWamTjKstdVZhRuPwk8vvOkKPDbt2A1zl09/gc4zm1v0BhFEFgdDaC0Z8I/BPvE33YP7v2lSj7wl0XUxybQx9vn538Lu+L2MvtGR/jzy75XT04Z5f+C3Kf9jn0bHpO/g+JznMnXcxQjIBRlJgRBIGi6Gw6JQmSmvU2pJ/ru8dTgLn/IqAOz59zxqmfBDGHHvbPrn1f1pdqYc+h99GXbN1wAfeR9+ez7t+/7HO4N9/QwUYYpD2l9Ef9kkir1/GprvOfENS27Y8W+5GVAYT28wHBFNQ7eFUYfB8vHlG+J6bHbDFnnDRLQ9dJwptT942o+PUp80YgCbIyrE/nPyFN/U5FIJ1jXnrsi4vg6cvdAmMIMYYWv2X9G9pXgWXlvFQnB7mDdP/o35vCH2118XX8/d+ttjkbBn5V/5ef//rxQLCc5OIvVLFd0tZGl5PaWkMNtmqIDYDqdQnh/Qp49pxDH4L78fM0f8zI4ChXgtEZhyIt0K6WdJy5vhUC2dnwKScKue1cfDNt8ZlKzFaheInrfQNtd44xWZaSiTh2q+mWZ6gTqN0I7F/fEex/31QZhlr2sgOIutoh2tlvOKiBsCyuaDTx1ifdz72tLNgXrcJ8xvBpouWza+G0+DJwILpyCkrN+Qll5idnIIoYvK3WmLDCzukJmxWQkjmkncm0S7jN7AbsSA9xDGwm1ZbxogMeHwywYgpR32FwNUHla0rGF5ZChN2qGIjsmfYPqJQIlGKqWcLoYMXVuupPJrk+ESZhh+5YCIrVYi1NCDoPpWXrOuky80TBzLRbmsxcoKAcRs6C/UAs5KVhozuIn/oB7iH224yPfBviFW7Ke911RebqRQleX4diPBVgvvKvQ2X2BEyxTu0MI8Yv6/DYr4d+s1JEkd2yDAOigGE05mY62yk6YW+HG1DpIC5OcShQLUwDreIBSxeKVrWMZrOWpglcK9k7lpMVEAsA2XKDXAa0zI4POs4EGzpQLRq4CsPriYvpkbPXCUXXWi54EFYsqLeHvQprKFW7An/xTU5XAPmgMW0rDkRLsG4eb12cvdZxEdAGqqIw1oNK25jSKibw+Ra+9k9CYeNOMblbXwDnYYt+2wbi/YsiZB1zA9JAs02QnOyn7EQWPLL70EP3eh5KBDX3lnHHs8C4xw5EGmQKgzz0sG8o0to7os+Ua9n2QZNZcHpkau2I3GM5Q6HBgwraVnpQOT5yb6Dr60G/t2b0tQIcD8CaARoJ7l5MsOrHHECQws5DYVJaBy5MOjzbe3GL+JjH0NaK4Fy53xoGorGKpfqYi2wDgSu8v8UJFC831Zt8pRhCQmK3K0wYz3QxMLeacHEsam0Gld1SwnIWQKR6EN84ZT2N6F2yG4gJqabAXreFaDh2pcrbyJZo/GAdaCWIeaXgSpFgGdN0Qbd+Q69YZbilJEWWVfjTc3EKOXrvULeio4woHojt4TpDqBPxpsrTmshXpLnd8Yl7zWaYpdRtgFsk1pDAMugusQBIrJp3G9DYcllPrh2JGLGVLtE9pl4kZiCetLXfyDY8WW4beD/btHbphr2inYQRgqhY0Cw/LI03wfCCIxxCFdvcWKEHZJ2A7+ibdlsXtIGtnOzW5QMRa/vm0ACtAFhgjEIwxDeM1TiaabcA4GJfKZpIG87BcaqY6da6ZByDu1x1WyHI2yTh4BsxwQz5LYowfiBGhcupZ4/zk9UVeGQLKzB3nZS7xGFX2rrOupaLkq00QSZr0loiql4yjeBsjpJtxlvnyGIrfyn1fYutdu8dnjNxkqCqvAq3pmDlR+QApwpWoUZsg6iaIC61OU6yvTpLwgt0FVW2wVXytJajOF+SmL3ZSxRqvWktdbm+d3hE+RtJ2/gGdswlzoeJGK0tqk21NaVFbkfthLUCkfLyIBy8oyi1K2epL/GqPbrttVQamLLcDWSk28Su39d1UyRkgxZ2sybgTC+9DK4PRiNLOyKZGmZ18qMqv+jQ8lozEKVHDELWuJpSvHWeuSzC9eekmaqJq3oOfd3VBsuw40Efu+Dv/XFxPyE+zsWLb/254/nQ/A8pzm2f
```

После декодирования pa Res будет найден XML, подобный приведённому ниже:

```xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<ThreeDSecure>
   <Message id="00000000-0000-0001-0000-00000065fddf">
      <PARes id="00000000-0000-0001-0000-00000065fddf">
         <version>1.0.2</version>
         <Merchant>
            <acqBIN>411658</acqBIN>
            <merID>1234567890</merID>
         </Merchant>
         <Purchase>
            <xid>NjY4NDEyN0CMEphIFXxSLjZWOvA=</xid>
            <date>20211027 02:10:42</date>
            <currency>643</currency>
            <exponent>2</exponent>
            <purchAmount>10000</purchAmount>
         </Purchase>
         <pan>7235022575552227668589750218</pan>
         <TX>
            <time>20211027 02:49:55</time>
            <status>Y</status>
            <eci>05</eci>
         </TX>
      </PARes>
   <Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
            <SignedInfo>
                <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
                <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
                <Reference URI="#00000000-0000-0001-0000-00000065fddf">
                    <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
                    <DigestValue>NIwHBVPRLltVO/v3Kv5PA/tOr/4=</DigestValue>
                </Reference>
            </SignedInfo>
            <SignatureValue>LsGSxSZqnq2xtJR4CybqG8xY0hp5qLwxc4P6w47N57KiIuktXv/UWaS+HrJT1aYwQRVdSN+/wPGD&#13;
NL0/wDuWA1NKW1QmevE/v/3oksB2ldOhRepdULGYuQs3eCSeB5wFoyqaw4Hga/Bsaq9NpF+9Tpha&#13;
I30UsO3GK3mnh37q/Moa8YoLBc5cv7zAYjRi43AP+sUCdjZ4kZSAKCqIRW30s+2Lyn8kuD91GWKq&#13;
DmBeZ2JlG9MTNolCRAKEtRNe++pR+G+ix2WD//kNqOJ+5BpiJHwcanHodIGToQznl7cAM2E387gX&#13;
qLHSY2W/F6eg4d1Yb7FjeY/FME6FdxyK8pNuMg==</SignatureValue>
            <KeyInfo>
                <X509Data>
                    <X509Certificate>MIIDUDCCAjgCCQCzTaU62+DzZzANBgkqhkiG9w0BAQsFADBqMQswCQYDVQQGEwJYWDELMAkGA1UE&#13;
CAwCWFgxETAPBgNVBAcMCFRlc3RjaXR5MRQwEgYDVQQKDAtUZXN0Q29tcGFueTERMA8GA1UECwwI&#13;
VGVzdFVuaXQxEjAQBgNVBAMMCVRlc3RBY3MwMTAeFw0yMTA5MDkxMTEzMTNaFw0yMjA5MDkxMTEz&#13;
MTNaMGoxCzAJBgNVBAYTAlhYMQswCQYDVQQIDAJYWDERMA8GA1UEBwwIVGVzdGNpdHkxFDASBgNV&#13;
BAoMC1Rlc3RDb21wYW55MREwDwYDVQQLDAhUZXN0VW5pdDESMBAGA1UEAwwJVGVzdEFjczAxMIIB&#13;
IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA11qYpiG+rVZEilx4oXdkw1e3dCBVK5EcLlgo&#13;
SKkJtfpIDv/Ay0Xzkl/kHPsbLy9C5J1kcxqT04oRIgTUQGuaV9OTgsYw9GH7g/8NZIbEMO6jBWlW&#13;
l8NnAYOwqISaYsNLUjYJB4ZVZBMgkFMqErI5DCTTcAxOb2y3sScrJJjVVqe6mqhiEBXa9zqx9Sjk&#13;
wZy719h5bNL6t5pK8TUWFlcyo73VMtwg4V83v8AVSBxlVAAlVtFcvAvYLrt+yx81SkVnH2X3NuJC&#13;
hQOevLY0+HUv0X7PwYrciTcAWJ35GIMV/7pZHSbGSdgf0i/sDvzDGX3NoxG4WBzQzOqBS3Kaozxp&#13;
3wIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQB5nvEa449q7RVOrCaSEuyRYM58z+lE0z5+3SLbjj3F&#13;
jqcENmdEelKyAd8w0M0Ey+rWlaDKQOtoxwEjlUJ+1+O8VH1NRrCvGaPfJYTkUafD3KeHJQYD3KWz&#13;
pCkll2NLKiUTGVpf1Z0nM3s2SkYAjs+1c9Pf+oXN7liu/yINDv4N8hOLjkpH83YPXJ92VbQw9uyV&#13;
j9ePJQPeS3fpJEe05k2tV9wnQO9Qjcx9WGOM/8LHZGZdfIJwKaHRH4swfcwyrMv09VcP/SnUlYtI&#13;
vql8v2qYvO50oRrdo0tZSvLJW5l6STshejspuR/HytC/9RjC18t4Nn9FVm7cD1Expo7NQIKt</X509Certificate>
                </X509Data>
            </KeyInfo>
        </Signature>
    </Message>
</ThreeDSecure>
```

### Сценарий верификации аккаунта СПБ по внешней форме

#### Введение

Верификация аккаунта - это нефинансовая транзакция, позволяющая проверить и зарегистрировать информацию аккаунта Плательщика. Эта процедура верификации помогает предотвратить потенциальную мошенническую активность и соответствовать отраслевым требованиям, а также облегчить дальнейшие транзакции, которые проводятся с данного аккаунта. Верификации аккаунта с помощью внешней формы позволяет Присоединяющейся Стороне проверить информацию аккаунта и зарегистрировать аккаунт Плательщика с помощью QR-кода, предложенного Платёжным Методом.
 

#### Сценарий верификации аккаунта СБП по Форме

```plantuml
  skinparam roundcorner 20
  skinparam sequenceArrowThickness 2
  skinparam ParticipantPadding 30
  actor Плательщик as Customer
  participant "Веб-сайт \nПрисоединяющейся Стороны" as Merchant
  participant "Платёжный Шлюз" as g
  autonumber
  Customer -> Merchant: Инициализация
  activate Merchant
  == Запрос Верификации Аккаунта ==
  Merchant -> g: api/v2/account-verification-form
  activate g
  g --> Merchant: Redirect-url, orderId
  deactivate g
  Merchant -> Customer: Предоставление redirect-url \nв браузер Плательщика
  deactivate Merchant
  activate Customer
  Customer -> g: GET redirect-url
  deactivate Customer
  activate g
  g --> Customer: Форма Верификации Аккаунта
  deactivate g
  activate Customer
  Customer -> g: Подтверждение формы
  deactivate Customer
  activate g
  g --> g: Обработка транзакции \nВерификации Аккаунта
  == Финальное перенаправление Плательщика ==
  g -> Customer: Перенаправление на веб-сайт \nПрисоединяющейся Стороны
  activate Customer
  Customer -> Merchant: POST redirect_url\nstatus, orderid
  deactivate Customer
  activate Merchant
  group Получение финального статуса
  == Получение обратного вызова \nПрисоединяющейся Стороны ==
  Merchant <- g: Обратный вызов с финальным статусом
  g <-- Merchant: HTTP 200
  deactivate g
  == Запрос статуса ==
  Merchant -> g: api/v2/status
  activate g
  g --> Merchant: Ответ \nstatus, order-stage
  deactivate g
  end
  Merchant --> Customer: Показ результата
  deactivate Merchant
```

(2) Для имплементации запроса на верификацию аккаунта с помощью внешней формы см. /api/v2/account-verification-form/.
 
(9) Для имплементации финального перенаправления Плательщика см. [Финальное Перенаправление](https://doc.payneteasy.ru/integration/API_commands/final_redirect.html.md).
 
(11,12) Для имплементации запроса статуса заказа, см. [/api/v2/status/](https://doc.payneteasy.ru/integration/API_commands/api_v2_status.html.md). Статус должен запрашиваться несоклько раз с интервалами в 3-5 секунд до получения финального статуса.
 
(13) Для имплементации обратного вызова с обработкой финального статуса см. [Обратный вызов Присоединяющейся Стороны](https://doc.payneteasy.ru/integration/API_commands/merchant_callback_parameters.html.md).

### /registry/upload

#### Введение

Этот API позволяет Менеджеру загрузить файл с корректировками для баланса Торговца в Платёжном Шлюзе.

#### Параметры корректировок

Корректировки должны быть отправлены в архивном формате файла TSV.

| Параметр | Описание |
|--------------------------------|-----------------------------------------------------------------------------------------|
| Параметр Credit amount | Credit сумма. |
| Параметр Debit amount | Debit сумма. |
| Параметр External ID | Внешний идентификатор корректировки. |
| Внешний идентификатор торговца | External Торговец ID. Set in properties of Торговец/Менеджер. |
| Параметр Balance name | Название баланса. Если параметр не задан, автоматически выбирается баланс по умолчанию. |

#### Описание: File example

Описание: tsv file example:

```html
10.45               eid1    THIS_IS_EXT_MERCH_ID    Global merchant balance
90.05               eid2    THIS_IS_EXT_MERCH_ID    Global merchant balance
```

#### Конструктор запросов

Чтобы сделать корректировку, файл tsv должен быть заархивирован и отправлен. Для использования этого отладчика необходим 7-Zip или аналогичное программное обеспечение для архивации.
 
 
<meta http-equiv="Cache-Control" content="no-cache">
<script src="../_static/js/oauth/sha1.js"></script>
<script src="../_static/js/oauth/oauth.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="../_static/js/highlight/styles/default.css">
<script src="../_static/js/highlight/highlight.pack.js"></script>

<script type="text/javascript">
$(document).ready (function(){ 
 $("#get Balance Tab a").click (function (e){
 	e.prevent Default();
 	$(this).tab('show');
 });
});
</script>
<script type="text/javascript">

		var curl Adjustment Request = "";
 
		var php Balance Text = "";
		
		var ruby Balance Text = "";
 function sign Adj (form) {
	 var url = "";
		var sandbox = "";
		var params = "";
		var adjustment FormURL = form.url.value;
		adjustment FormURL += form.oauth_consumer_key.value + "/" + form.source.value;

		
		var xhttp = new XMLHttp Request();
		xhttp.onreadystatechange = function() {
		if (xhttp.ready State == 4 && xhttp.status == 200) {
			if (url == "../_static/examples/PHP/params_with_header_PHP.txt"){
				php Balance Text = xhttp.response Text;}
			else {
				ruby Balance Text = xhttp.response Text;}
			}
		}
	
		url = "../_static/examples/PHP/params_with_header_PHP.txt";
		xhttp.open("GET", url, false);
		xhttp.send();
		url = "../_static/examples/Ruby/params_with_header_Ruby.txt";
		xhttp.open("GET", url, false);
		xhttp.send();
			

	curl Adjustment Request = '7z a -tzip ' + form.filename.value +'.zip ' + form.filename.value + '.tsv' +' | ' + 'curl --data-binary @' +form.filename.value +'.zip ' + '-v --fail -H "api Key:' + form.control_key.value + '" -H "Content-Type: application/zip" -H "Connection: close" ' + adjustment FormURL;

 show Text("curl Adj Request" , curl Adjustment Request);

		$(document).ready (function() {
 $('pre code').each (function (i, block) {
 hljs.highlight Block (block);
 });
 }); 
	return false;
 }
 function show Text (element Id, text) {
 var child = document.create Text Node (text);
 var element = document.get Element By Id (element Id);
			element.innerHTML ="";
 if (element.has Child Nodes()) {
 element.replace Child (child, element.first Child);
 } else {
 element.append Child (child);
 }
 }
	 function copy To Clipboard (text) {
 var text Area = document.create Element("textarea");

 // Place in top-left corner of screen regardless of scroll position.
 text Area.style.position = 'fixed';
 text Area.style.top = 0;
 text Area.style.left = 0;

 // Ensure it has a small width and height. Setting to 1px / 1em
 // doesn't work as this gives a negative w/h on some browsers.
 text Area.style.width = '2em';
 text Area.style.height = '2em';

 // We don't need padding, reducing the size if it does flash render.
 text Area.style.padding = 0;

 // Clean up any borders.
 text Area.style.border = 'none';
 text Area.style.outline = 'none';
 text Area.style.box Shadow = 'none';

 // Avoid flash of white box if rendered for any reason.
 text Area.style.background = 'transparent';

 if (text == 'curl'){
	text Area.value = curl Adjustment Request;
 } else if ( text =='php'){
	text Area.value = php Balance Text;
 } else {
 text Area.value = ruby Balance Text;
 }
 document.body.append Child (text Area);

 text Area.select();

 try {
 var successful = document.exec Command('copy');
 var msg = successful ? 'successful' : 'unsuccessful';
 console.log('Copying text command was ' + msg);
 } catch (err) {
 console.log('Oops, unable to copy');
 }

 document.body.remove Child (text Area);

 
 }
</script>

<form name="adjustment_request">

 
 <p></p>
 <input type="button" class="doc-button" style="font-size: 100%; padding: 2px 6px 3px 6px;" value="Sign" onclick="sign Adj (document.adjustment_request)" />
 <p></p>
</form>

<ul class="nav nav-tabs" id="get Balance Tab">
 <li class="active">[CURL](#get BalanceCURL)</li>

 </ul>

### Описание: Check sale

#### Введение

Описание: Check sale инициируется через HTTPS POST запрос с использованием [URL](#api-url-check-sale) и [параметров](#api-parameters-check-sale).
 
Описание: Check sale используется в целях безопасности и позволяет Payneteasy сравнить данные, отправленные приложением Присоединяющейся Стороны, с данными, хранящимися на сервере Присоединяющейся Стороны.
 
Настоятельно рекомендуется отвечать актуальной информацией, хранящейся на сервере Присоединяющейся Стороны.
 

#### API URL

> **Note:** Это пример URL на сервере Присоединяющейся Стороны.

| Сервер Присоединяющейся Стороны |
|----------------------------------------------------------------|
| https://proxy.connectingpartyserver.com/sale/{invoice Id}/check |

#### Параметры запроса

| Название параметра | Описание | Значение |
|--------------------------------------|------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------|
| consumer | | `Необходимость`: Обязательно `Тип`: **Object** |
| consumer.device | | `Необходимость`: Обязательно `Тип`: **Object** |
| consumer.device.serial Number | Серийный номер устройства потребителя. | `Необходимость`: Обязательно `Тип`: String `Длина`: 1-50 |
| session | | `Необходимость`: Обязательно `Тип`: **Object** |
| session.access Token | Ключ access token потребителя, отправленный приложением Присоединяющейся Стороны. | `Необходимость`: Обязательно `Тип`: String `Длина`: 32-128 |
| session.nonce | Значение, отправленное приложением Присоединяющейся Стороны. | `Необходимость`: Обязательно `Тип`: String `Длина`: 32-128 |
| session.signature | Значение, отправленное приложением Присоединяющейся Стороны. | `Необходимость`: Обязательно `Тип`: String `Длина`: 32-128 |
| session.token | Session token транзакции sale. | `Необходимость`: Обязательно `Тип`: String `Длина`: 16-36 |
| source Of Funds | | `Необходимость`: Опционально `Тип`: **Object** |
| source Of Funds.reference | | `Необходимость`: Опционально `Тип`: **Object** |
| source Of Funds.reference.client Card Id | Идентификатор ссылки на карту-источник (на стороне клиента), если он был отправлен в запросе Perform sale. | `Необходимость`: Опционально `Тип`: String `Длина`: 1-128 |

#### Параметры успешного ответа

| Название параметра | Описание | Значение |
|--------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------|
| invoice Id | Идентификатор транзакции sale | `Необходимость`: Обязательно `Тип`: String |
| session | | `Необходимость`: Обязательно `Тип`: **Object** |
| session.check Signature | Контрольная сумма, сгенерированная алгоритмом hmac-sha1 (см. [Вычисление подписи](https://doc.payneteasy.ru/integration/api_development_tools.html.md)) из конкатенации consumer.device.serial Number, session.nonce, endpoint Id, invoice Id, source Of Funds.reference.server Card Id (при наличии). | `Необходимость`: Обязательно `Тип`: String |
| session.nonce | Уникальная случайная строка, сгенерированная сервером Присоединяющейся Стороны в ответе Initiate sale. | `Необходимость`: Обязательно `Тип`: String |
| session.token | Session token транзакции sale. | `Необходимость`: Обязательно `Тип`: String |
| consumer.email | Email потребителя, если он был отправлен в исходной транзакции привязки карты. | `Необходимость`: Опционально `Тип`: String |
| source Of Funds | | `Необходимость`: Опционально `Тип`: **Object** |
| source Of Funds.reference | | `Необходимость`: Опционально `Тип`: **Object** |
| source Of Funds.reference.server Card Id | Идентификатор ссылки на карту-источник (на стороне сервера). | `Необходимость`: Опционально `Тип`: String |
| transaction.currency | Буквы верхнего регистра (alpha-код по ISO 4217). | `Необходимость`: Опционально `Тип`: String |
| transaction.random Sum Centis | Случайная сумма (для проверки случайной суммы), 1.00 EUR = 100 центов. | `Необходимость`: Опционально `Тип`: Integer |

#### Параметры неуспешного ответа

| Название параметра | Описание | Значение |
|----------------------|-----------------------------------------------------------------------------------------------------------|-----------------------------|
| error | | `Тип`: **Object** |
| error.cause | Причина ошибки. Возможные значения: `FILTERED`, `INVALID_REQUEST`, `SERVER_FAILED`, `SERVER_UNAVAILABLE`. | `Тип`: Enum |
| error.code | Уникальный код ошибки. | `Тип`: String |
| error.message | Описание ошибки. | `Тип`: String |
| invoice Id | Идентификатор транзакции sale. | `Тип`: String |

#### Пример запроса

```json
{
  "consumer": {
    "device": {
      "serialNumber": "string"
    }
  },
  "session": {
    "accessToken": "string",
    "nonce": "string",
    "signature": "string",
    "token": "string"
  },
  "sourceOfFunds": {
    "reference": {
      "clientCardId": "string"
    }
  }
}
```

#### Пример успешного ответа

```json
{
  "consumer": {
    "email": "string"
  },
  "invoiceId": "string",
  "session": {
    "checkSignature": "string",
    "nonce": "string",
    "token": "string"
  },
  "sourceOfFunds": {
    "card": {
      "expiry": {
        "month": "integer",
        "year": "integer"
      },
      "holder":{
        "firstName": "string",
        "lastName": "string"
      },
      "number": "string"
    },
    "reference": {
      "serverCardId": "string",
    }
  },
  "transaction": {
    "currency": "string",
    "randomSumCentis": "integer"
  }
}
```

#### Пример неуспешного ответа

```json
{
  "error": {
    "cause": "enum",
    "code": "string",
    "message": "string"
  },
  "invoiceId": "string"
}
```

### Описание: Check transfer

#### Введение

Проверка перевода инициируется через запрос HTTPS POST с использованием [URLs](#api-url-check-transfer) и [parameters](#api-parameters-check-transfer).
 
Описание: Check transfer is used for security purposes and allows Payneteasy to compare the data sent by Присоединяющаяся сторона’s app with the data stored on Присоединяющаяся сторона’s server. Payneteasy
 
Настоятельно рекомендуется отвечать актуальной информацией, хранящейся на сервере Присоединяющейся Стороны.
 

#### API URL

> **Note:** Это пример URL на сервере Присоединяющейся Стороны.

| Сервер Присоединяющейся Стороны |
|--------------------------------------------------------------------|
| https://proxy.connectingpartyserver.com/transfer/{invoice Id}/check |

#### Параметры запроса

| Название параметра | Описание | Значение |
|-------------------------------------------|--------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------|
| consumer | | `Необходимость`: Обязательно `Тип`: **Object** |
| consumer.device | | `Необходимость`: Обязательно `Тип`: **Object** |
| consumer.device.serial Number | Серийный номер устройства потребителя. | `Необходимость`: Обязательно `Тип`: String `Длина`: 1-50 |
| session | | `Необходимость`: Обязательно `Тип`: **Object** |
| session.access Token | Ключ access token потребителя, отправленный приложением Присоединяющейся Стороны. | `Необходимость`: Обязательно `Тип`: String `Длина`: 32-128 |
| session.nonce | Значение, отправленное приложением Присоединяющейся Стороны. | `Необходимость`: Обязательно `Тип`: String `Длина`: 32-128 |
| session.signature | Значение, отправленное приложением Присоединяющейся Стороны. | `Необходимость`: Обязательно `Тип`: String `Длина`: 32-128 |
| session.token | Token сессии транзакции transfer. | `Необходимость`: Обязательно `Тип`: String `Длина`: 16-36 |
| source Of Funds | | `Необходимость`: Опционально `Тип`: **Object** |
| source Of Funds.reference | | `Необходимость`: Опционально `Тип`: **Object** |
| source Of Funds.reference.client Card Id | Идентификатор ссылки на карту источника (на стороне клиента), если он отправлен в запросе Perform Transfer. | `Необходимость`: Опционально `Тип`: String `Длина`: 1-128 |
| destination Of Funds | | `Необходимость`: Опционально `Тип`: **Object** |
| destination Of Funds.reference | | `Необходимость`: Опционально `Тип`: **Object** |
| destination Of Funds.reference.client Card Id | Идентификатор ссылки на карту получателя (на стороне клиента), если он отправлен в запросе Perform Transfer. | `Необходимость`: Опционально `Тип`: String `Длина`: 1-128 |

#### Параметры успешного ответа

| Название параметра | Описание | Значение |
|-------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------|
| invoice Id | Идентификатор транзакции transfer. | `Необходимость`: Обязательно `Тип`: String |
| session | | `Необходимость`: Обязательно `Тип`: **Object** |
| session.check Signature | Контрольная сумма, сформированная hmac-sha1 (см. [Вычисление подписи](https://doc.payneteasy.ru/integration/api_development_tools.html.md)) из конкатенации consumer.device.serial Number, session.nonce, destination Of Funds.reference.server Card Id (если есть), endpoint Id, invoice Id, source Of Funds.reference.server Card Id (если есть). | `Необходимость`: Обязательно `Тип`: String |
| session.nonce | Unique random string generated by Присоединяющаяся сторона’s server in Initiate transfer ответ. | `Необходимость`: Обязательно `Тип`: String |
| session.token | Token сессии транзакции transfer. | `Необходимость`: Обязательно `Тип`: String |
| consumer.email | Потребитель’s email адрес. | `Необходимость`: Опционально `Тип`: String |
| destination Of Funds | | `Необходимость`: Опционально `Тип`: **Object** |
| destination Of Funds.reference | | `Необходимость`: Опционально `Тип`: **Object** |
| destination Of Funds.reference.server Card Id | Идентификатор ссылки на карту получателя (на стороне сервера). | `Необходимость`: Опционально `Тип`: String |
| source Of Funds | | `Необходимость`: Опционально `Тип`: **Object** |
| source Of Funds.reference | | `Необходимость`: Опционально `Тип`: **Object** |
| source Of Funds.reference.server Card Id | Идентификатор ссылки на карту-источник (на стороне сервера). | `Необходимость`: Опционально `Тип`: String |
| transaction.currency | Буквы верхнего регистра (alpha-код по ISO 4217). | `Необходимость`: Опционально `Тип`: String |
| transaction.random Sum Centis | Случайная сумма (для проверки случайной суммы), 1.00 EUR = 100 центов. | `Необходимость`: Опционально `Тип`: Integer |

#### Параметры неуспешного ответа

| Название параметра | Описание | Значение |
|----------------------|-----------------------------------------------------------------------------------------------------------|-----------------------------|
| error | | `Тип`: **Object** |
| error.cause | Причина ошибки. Возможные значения: `FILTERED`, `INVALID_REQUEST`, `SERVER_FAILED`, `SERVER_UNAVAILABLE`. | `Тип`: Enum |
| error.code | Уникальный код ошибки. | `Тип`: String |
| error.message | Описание ошибки. | `Тип`: String |
| invoice Id | Идентификатор транзакции transfer. | `Тип`: String |

#### Пример запроса

```json
{
  "consumer": {
    "device": {
      "serialNumber": "string"
    }
  },
  "destinationOfFunds": {
    "reference": {
      "clientCardId": "string"
    }
  },
  "session": {
    "accessToken": "string",
    "nonce": "string",
    "signature": "string",
    "token": "string"
  },
  "sourceOfFunds": {
    "reference": {
      "clientCardId": "string"
    }
  }
}
```

#### Пример успешного ответа

```json
{
  "consumer": {
    "email": "string"
  },
  "destinationOfFunds": {
    "card": {
      "number": "string"
    },
    "reference": {
      "serverCardId": "string"
    }
  },
  "invoiceId": "string",
  "session": {
    "checkSignature": "string",
    "nonce": "string",
    "token": "string"
  },
  "sourceOfFunds": {
    "card": {
      "expiry": {
        "month": "integer",
        "year": "integer"
      },
      "holder":{
        "firstName": "string",
        "lastName": "string"
      },
      "number": "string"
    },
    "reference": {
      "serverCardId": "string",
    }
  },
  "transaction": {
    "currency": "string",
    "randomSumCentis": "integer"
  }
}
```

#### Пример неуспешного ответа

```json
{
  "error": {
    "cause": "enum",
    "code": "string",
    "message": "string"
  },
  "invoiceId": "string"
}
```

### Описание: Check verification

#### Введение

Проверка верификации инициируется через запрос HTTPS POST с использованием [URLs](#api-url-check-verification) и [parameters](#api-parameters-check-verification).
 
Проверка верификации используется в целях безопасности и позволяет Payneteasy сравнивать данные, отправленные приложением Присоединяющейся стороны, с данными, хранящимися на сервере Присоединяющейся стороны.
 
Настоятельно рекомендуется отвечать актуальной информацией, хранящейся на сервере Присоединяющейся Стороны.
 

#### API URL

> **Note:** Это пример URL на сервере Присоединяющейся Стороны.

| Сервер Присоединяющейся Стороны |
|------------------------------------------------------------------------|
| https://proxy.connectingpartyserver.com/verification/{invoice Id}/check |

#### Параметры запроса

| Название параметра | Описание | Значение |
|------------------------------|-----------------------------------------------------------------------------------|-------------------------------------------------------|
| consumer | | `Тип`: **Object** |
| consumer.device | | `Тип`: **Object** |
| consumer.device.serial Number | Серийный номер устройства потребителя. | `Тип`: String `Длина`: 1-50 |
| session | | `Тип`: **Object** |
| session.access Token | Ключ access token потребителя, отправленный приложением Присоединяющейся Стороны. | `Тип`: String `Длина`: 32-128 |
| session.nonce | Значение, отправленное приложением Присоединяющейся Стороны. | `Тип`: String `Длина`: 32-128 |
| session.signature | Значение, отправленное приложением Присоединяющейся Стороны. | `Тип`: String `Длина`: 32-128 |
| session.token | Токен сеанса транзакции верификации. | `Тип`: String `Длина`: 16-36 |

#### Параметры успешного ответа

| Название параметра | Описание | Значение |
|-----------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------|
| invoice Id | Идентификатор транзакции верификации. | `Необходимость`: Обязательно `Тип`: String |
| session | | `Необходимость`: Обязательно `Тип`: **Object** |
| session.check Signature | Контрольная сумма, сгенерированная hmac-sha1 (см. [Вычисление подписи](https://doc.payneteasy.ru/integration/api_development_tools.html.md)) из конкатенации consumer.device.serial Number, session.nonce, endpoint Id и invoice Id. | `Необходимость`: Обязательно `Тип`: String |
| session.nonce | Unique random string generated by Присоединяющаяся сторона’s server in Initiate verification ответ. | `Необходимость`: Обязательно `Тип`: String |
| session.token | Токен сеанса транзакции верификации. | `Необходимость`: Обязательно `Тип`: String |
| billing | | `Необходимость`: Опционально `Тип`: **Object** |
| billing.address | | `Необходимость`: Опционально `Тип`: **Object** |
| billing.address.city | Название города. | `Необходимость`: Опционально `Тип`: String |
| billing.address.country | Трёхбуквенный код страны ISO. | `Необходимость`: Опционально `Тип`: String |
| billing.address.postcode Zip | Почтовый индекс ZIP. | `Необходимость`: Опционально `Тип`: String |
| billing.address.state | Поле «Штат» используется при наличии. Например, Лос-Анджелес находится в штате CA. | `Необходимость`: Опционально `Тип`: String |
| billing.address.street | Поле «Улица» используется для названий районов и улиц. | `Необходимость`: Опционально `Тип`: String |
| billing.address.street2 | Поле «Улица 2» используется для длинных адресов. Обычно оно содержит номер квартиры и здания. | `Необходимость`: Опционально `Тип`: String |
| billing.phone | Контактный номер телефона клиента. | `Необходимость`: Опционально `Тип`: String |
| consumer.birth Day | Потребитель’s birth day in “ddMMyyyy” format. | `Необходимость`: Опционально `Тип`: String |
| consumer.email | Потребитель’s email адрес. | `Необходимость`: Опционально `Тип`: String |
| consumer.ip Addresses | IP-адреса потребителя. | `Необходимость`: Опционально `Тип`: List |
| consumer.ip Addresses[] | IP-адрес потребителя. | `Необходимость`: Опционально `Тип`: String |
| transaction.currency | Буквы верхнего регистра (alpha-код по ISO 4217). | `Необходимость`: Опционально `Тип`: String |
| transaction.random Sum Centis | Случайная сумма (для проверки случайной суммы), 1.00 EUR = 100 центов. | `Необходимость`: Опционально `Тип`: Integer |

#### Параметры неуспешного ответа

| Название параметра | Описание | Значение |
|----------------------|-----------------------------------------------------------------------------------------------------------|-----------------------------|
| error | | `Тип`: **Object** |
| error.cause | Причина ошибки. Возможные значения: `FILTERED`, `INVALID_REQUEST`, `SERVER_FAILED`, `SERVER_UNAVAILABLE`. | `Тип`: Enum |
| error.code | Уникальный код ошибки. | `Тип`: String |
| error.message | Описание ошибки. | `Тип`: String |
| invoice Id | Идентификатор транзакции верификации. | `Тип`: String |

#### Пример запроса

```json
{
  "consumer": {
    "device": {
      "serialNumber": "string"
    }
  },
  "session": {
    "accessToken": "string",
    "nonce": "string",
    "signature": "string",
    "token": "string"
  }
}
```

#### Пример успешного ответа

```json
{
  "billing": {
    "address": {
      "city": "string",
      "country": "string",
      "postcodeZip": "string",
      "state": "string",
      "street": "string",
      "street2": "string"
    },
    "phone": "string"
  },
  "consumer": {
    "birthDay": "string",
    "email": "string",
    "ipAddresses": ["string"]
  },
  "invoiceId": "string",
  "session": {
    "checkSignature": "string",
    "nonce": "string",
    "token": "string"
  },
  "transaction": {
    "currency": "string",
    "randomSumCentis": "integer"
  }
}
```

#### Пример неуспешного ответа

```json
{
  "error": {
    "cause": "enum",
    "code": "string",
    "message": "string"
  },
  "invoiceId": "string"
}
```

### Complete Transfer

#### Введение

Complete transfer инициируется через запрос HTTPS POST с использованием [URL-адресов](#api-url-complete-transfer) и [параметров](#api-parameters-complete-transfer).
 

#### API URL

> **Note:** Путь API URL не должен быть задан фиксированным значением, т.к. он может быть изменён позднее.

| Интеграционная среда | Производственная среда |
|---------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------|
| https://sandbox.payneteasy.ru/paynet/dapi/v1/transfer/{endpoint Id}/{invoice Id}/{assigned Id} | https://gate.payneteasy.ru/paynet/dapi/v1/transfer/{endpoint Id}/{invoice Id}/{assigned Id} |

#### Параметры запроса

| Название параметра | Описание | Значение |
|----------------------|------------------------------------------|-----------------------------|
| session | | `Тип`: **Object** |
| session.access Token | Access token сессии транзакции transfer. | `Тип`: String |
| session.token | Token сессии транзакции transfer. | `Тип`: String |

#### Параметры успешного ответа

| Название параметра | Описание | Значение |
|----------------------|------------------------------------|-----------------------------|
| invoice Id | Идентификатор транзакции transfer. | `Тип`: String |
| session | | `Тип`: **Object** |
| session.token | Token сессии транзакции transfer. | `Тип`: String |

#### Параметры неуспешного ответа

| Название параметра | Описание | Значение |
|----------------------|------------------------------------------------------------------------------------------------------------------------|-----------------------------|
| error | | `Тип`: **Object** |
| error.cause | Причина ошибки. Возможные значения: `INVALID_REQUEST`, `INVALID_CONFIGURATION`, `INTERNAL_ERROR`, `PROCESSING_FAILED`. | `Тип`: Enum |
| error.code | Уникальный код ошибки. | `Тип`: String |
| error.message | Описание ошибки. | `Тип`: String |
| invoice Id | Идентификатор транзакции transfer. | `Тип`: String |

#### Пример запроса

```json
{
  "session": {
    "accessToken": "string",
    "token": "string"
  }
}
```

#### Пример успешного ответа

```json
{
  "invoiceId": "string",
  "session": {
    "token": "string"
  }
}
```

#### Пример неуспешного ответа

```json
{
  "error": {
    "cause": "enum",
    "code": "string",
    "message": "string"
  },
  "invoiceId": "string"
}
```

### Описание: Development tools

#### Введение

#### Вычисление подписи

Подпись используется для подтверждения того, что информацию в Payneteasy отправляет именно Присоединяющаяся сторона (а не мошенник).
 
Подписи в DAPI вычисляются с помощью алгоритма HMAC_SHA1. Ключ формируется следующим образом:
 
 
1. Take Connecting Party Control Key
2. Описание: Remove dashes from it
3. Преобразовать результат из шестнадцатеричного формата в двоичный

Корректные значения подписи для всех типов транзакций, поддерживаемых DAPI, в инструменте отладки ниже:
 
 
<meta http-equiv="Cache-Control" content="no-cache">
<script type="text/javascript" src="../../_static/js/crypto-js/core-min.js"></script>
<script type="text/javascript" src="../../_static/js/crypto-js/hmac-sha1.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="../../_static/js/highlight/styles/default.css">
<script src="../../_static/js/highlight/highlight.pack.js"></script>

<script type="text/javascript">
 var string Text = "";
 var hmac = "";
 var operation = "";

 function get Params() {
		//gathering the parameter rows to show and hide
		var a = document.get Element By Id("i Token");
		var b =	document.get Element By Id("i Serial Number");
		var c =	document.get Element By Id("i Tx Currency");
		var d =	document.get Element By Id("i Tx Amount");
		var e =	document.get Element By Id("i Destination");
		var f =	document.get Element By Id("i Source");
		operation = document.get Element By Id("operation Name").value;

	//shows and hides the parameter rows for different types of signatures
	switch (operation) {
	case "Init Verif Resp":
		a.style.display = '';
		b.style.display = '';
		c.style.display = '';
		d.style.display = 'none';
		e.style.display = 'none';
		f.style.display = 'none';
		break;
		case "Check Verif Resp":
			a.style.display = 'none';
			b.style.display = '';
			c.style.display = 'none';
			d.style.display = 'none';
			e.style.display = 'none';
			f.style.display = 'none';
			break;
			case "Mapping Resp":
				a.style.display = 'none';
				b.style.display = 'none';
				c.style.display = 'none';
				d.style.display = 'none';
				e.style.display = 'none';
				f.style.display = 'none';
				break;
				case "Init Transfer Or Sale Resp":
					a.style.display = '';
					b.style.display = '';
					c.style.display = '';
					d.style.display = '';
					e.style.display = 'none';
					f.style.display = 'none';
					break;
					case "Check Sale Resp": 
						a.style.display = 'none';
					 b.style.display = '';
					 c.style.display = 'none';
					 d.style.display = 'none';
					 e.style.display = 'none';
					 f.style.display = '';
						break;
					 case "Check Transfer Resp": 
					 	a.style.display = 'none';
					 b.style.display = '';
					 c.style.display = 'none';
					 d.style.display = 'none';
					 e.style.display = '';
					 f.style.display = '';
						 break;
	}
	}

 function sign (form) {
		//gathering the parameter values for string to sign
 var at = document.dapi_hmac_sha1.a Token.value;
 var sn = document.dapi_hmac_sha1.serial Number.value;
		var endp = document.dapi_hmac_sha1.endpoint Id.value;
		var nonce = document.dapi_hmac_sha1.session Nonce.value;
		var inv = document.dapi_hmac_sha1.invoice.value;
		var cur = document.dapi_hmac_sha1.tx Currency.value;
 var amount Info = document.get Element By Id("amount Warning");
	 var amount To Fix = document.dapi_hmac_sha1.tx Amount.value \* 100;
 var fixed Amount = amount To Fix.to Fixed(0);
 if (fixed Amount != amount To Fix)
 { amount Info.innerHTML = amount Info.innerHTML.replace("Will be calculated to centis in generated string", "Possible floating point imprecision (for more information check Floating Point Math)");}
 else {amount Info.innerHTML = amount Info.innerHTML.replace("Possible floating point imprecision (for more information check Floating Point Math)", "Will be calculated to centis in generated string");}

		var amt = fixed Amount;
		var dref = document.dapi_hmac_sha1.dest Cardref.value;
		var sref = document.dapi_hmac_sha1.source Cardref.value;
		var mkey = document.dapi_hmac_sha1.control Key.value;
		operation = document.get Element By Id('operation Name').value;

 switch (operation) {
 case "Init Verif Resp":
 string Text = at + sn + endp + nonce + inv + cur;
 get Signature (string Text);
 break;
 case "Check Verif Resp":
 string Text = sn + nonce + endp + inv;
 get Signature (string Text);
 break;
			//initiate sale response and initiate transfer response signatures are identical
 case "Init Transfer Or Sale Resp":
 string Text = at + sn + endp + nonce + inv + amt + cur;
 get Signature (string Text);
 break;
 case "Check Sale Resp":
 string Text = sn + nonce + endp + inv + sref;
 get Signature (string Text);
 break;
 case "Check Transfer Resp":
 string Text = sn + nonce + dref + endp + inv + sref;
 get Signature (string Text);
 break;
 case "Mapping Resp":
 string Text = nonce + endp + inv;
 get Signature (string Text);
 break;
 }

 //calculates signature and shows it
 function get Signature (data) {
 show Text("dapi String", data);
 hmac = CryptoJS.HmacSHA1 (data, CryptoJS.enc. Hex.parse (mkey.replace(/-/g, "")));
 show Text("dapi Signed", hmac.to String (CryptoJS.enc. Hex));
 }

 $(document).ready (function() {
 $('pre code').each (function (i, block) {
 hljs.highlight Block (block);
 });
 }); 
 return false;
 }

 function show Text (element Id, text) {
 var child = document.create Text Node (text);
 var element = document.get Element By Id (element Id);
 element.innerHTML ="";
 if (element.has Child Nodes()) {
 element.replace Child (child, element.first Child);
 } else {
 element.append Child (child);
 }
 }

 //random values for invoice 
 function rand Inv (c) {
 document.get Element By Id (c).value = "inv" + Math.floor (Math.random()\*10000000);
 }

 //random values for nonce or access Token
 function rand Param (r) {
 document.get Element By Id (r).value = "testrandomvalue" + Math.floor (Math.random()\*1000000000000000000000);
 }
</script>

<form name="dapi_hmac_sha1">
 <select id="operation Name" class="doc-select" name="operation Name" size="1" onchange="get Params()">
 <option value="Init Verif Resp">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Initiate Verification response signature</option>
 <option value="Check Verif Resp">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Check Verification response signature</option>
 <option value="Init Transfer Or Sale Resp">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Initiate Sale response signature</option>
	 <option value="Check Sale Resp">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Check Sale response signature</option>
 <option value="Init Transfer Or Sale Resp">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Initiate Transfer response signature</option>
	 <option value="Check Transfer Resp">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Check Transfer response signature</option>
 <option value="Mapping Resp">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Card Mapping response signature</option>
 </select>
 
 <p></p>
 <input type="button" class="doc-button" style="font-size: 100%; padding: 2px 6px 3px 6px;" value="Get signature" onclick="sign (document.dapi_hmac_sha1)" />
 <p></p>
</form>

#### Описание: Example code and SDK

На Git Hub доступно несколько решений, разработанных для интеграции с Payneteasy на платформах Android и iOS через DAPI.
 

### Описание: Initiate sale

#### Введение

Инициирование продажи выполняется запросом HTTPS POST с использованием [URL](#api-url-initiate-sale) и [параметров](#api-parameters-initiate-sale).
 
Для инициирования продажи приложение Присоединяющейся стороны отправляет {access Token} с суммой транзакции и другими параметрами устройства на сервер Присоединяющейся стороны; они используются для запуска сеанса с уникальными случайными {nonce} и зашифрованной {signature}.
 
In ответ Присоединяющаяся сторона’s server also provides information about invoice in Присоединяющаяся сторона’s system and endpoint in Payneteasy. Payneteasy
 

#### API URL

> **Note:** Это пример URL на сервере Присоединяющейся Стороны.

| Сервер Присоединяющейся Стороны |
|------------------------------------------------------------|
| https://proxy.connectingpartyserver.com/sale/initiate-sale |

#### Параметры запроса

| Название параметра | Описание | Значение |
|------------------------------|--------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------|
| consumer | | `Необходимость`: Обязательно `Тип`: **Object** |
| consumer.device | | `Необходимость`: Обязательно `Тип`: **Object** |
| consumer.device.serial Number | Серийный номер устройства потребителя. | `Необходимость`: Обязательно `Тип`: String `Длина`: 1-50 |
| transaction | | `Необходимость`: Обязательно `Тип`: **Object** |
| transaction.amount Centis | Сумма транзакции: 1,00 EUR = 100 центов. | `Необходимость`: Обязательно `Тип`: Integer |
| transaction.currency | Буквы верхнего регистра (alpha-код по ISO 4217). | `Необходимость`: Обязательно `Тип`: String `Длина`: 3 |
| session | | `Необходимость`: Обязательно `Тип`: **Object** |
| session.access Token | Ключ токена доступа, полученный при необязательной аутентификации потребителя. | `Необходимость`: Обязательно `Тип`: String `Длина`: 32-128 |
| consumer.device.imei | Международный идентификатор мобильного оборудования устройства потребителя. | `Необходимость`: Опционально `Тип`: String `Длина`: 14-16 |
| location | | `Необходимость`: Опционально `Тип`: **Object** |
| location.lat | Широта указывается в диапазоне от -90.0 до +90.0 включительно. | `Необходимость`: Опционально `Тип`: Double |
| location.lng | Долгота указывается в диапазоне от -180.0 до +180.0 включительно. | `Необходимость`: Опционально `Тип`: Double |
| consumer.ip Addresses | IP-адреса потребителя. | `Необходимость`: Опционально `Тип`: List |
| consumer.ip Addresses[] | IP-адрес потребителя. | `Необходимость`: Опционально `Тип`: String `Длина`: 7-15 |

#### Параметры успешного ответа

| Название параметра | Описание | Значение |
|----------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------|
| endpoint Id | Идентификатор точки входа для транзакции Sale. | `Необходимость`: Обязательно `Тип`: String |
| invoice Id | Идентификатор транзакции transfer. | `Необходимость`: Обязательно `Тип`: String |
| session | | `Необходимость`: Обязательно `Тип`: **Object** |
| session.nonce | Уникальная случайная строка, сгенерированная сервером Присоединяющейся стороны. | `Необходимость`: Обязательно `Тип`: String |
| session.signature | Контрольная сумма, сгенерированная hmac-sha1 (см. [Вычисление подписи](https://doc.payneteasy.ru/integration/api_development_tools.html.md)) из конкатенации access Token, consumer.device.serial Number, endpoint Id, session.nonce, invoice Id, transaction.amount Centis и transaction.currency. | `Необходимость`: Обязательно `Тип`: String |

#### Параметры неуспешного ответа

| Название параметра | Описание | Значение |
|----------------------|-----------------------------------------------------------------------------------------------------------|-----------------------------|
| error | | `Тип`: **Object** |
| error.cause | Причина ошибки. Возможные значения: `FILTERED`, `INVALID_REQUEST`, `SERVER_FAILED`, `SERVER_UNAVAILABLE`. | `Тип`: Enum |
| error.code | Уникальный код ошибки. | `Тип`: String |
| error.message | Описание ошибки. | `Тип`: String |

#### Пример запроса

```json
{
  "consumer": {
    "device": {
      "imei": "string",
      "serialNumber": "string"
    },
    "ipAddresses": ["string"]
  },
  "location": {
    "lat": "double",
    "lng": "double"
  },
  "session": {
    "accessToken": "string"
  },
  "transaction": {
    "amountCentis": "integer",
    "currency": "string"
  }
}
```

#### Пример успешного ответа

```json
{
  "endpointId": "string",
  "invoiceId": "string",
  "session": {
    "nonce": "string",
    "signature": "string"
  }
}
```

#### Пример неуспешного ответа

```json
{
  "error": {
    "cause": "enum",
    "code": "string",
    "message": "string"
  }
}
```

### Описание: Initiate transfer

#### Введение

Инициация перевода выполняется через запрос HTTPS POST с использованием [URLs](#api-url-initiate-transfer) и [parameters](#api-parameters-initiate-transfer).
 
Для инициирования перевода средств приложение Присоединяющейся стороны отправляет {access Token} с суммой транзакции и другими параметрами устройства на сервер Присоединяющейся стороны; они используются для запуска сеанса с уникальными случайными {nonce} и зашифрованной {signature}.
 
In ответ Присоединяющаяся сторона’s server also provides information about invoice in Присоединяющаяся сторона’s system and endpoint in Payneteasy. Payneteasy
 
The Присоединяющаяся сторона’s server may also respond with the транзакция’s commission.
 

#### API URL

> **Note:** Это пример URL на сервере Присоединяющейся Стороны.

| Сервер Присоединяющейся Стороны |
|--------------------------------------------------------------------|
| https://proxy.connectingpartyserver.com/transfer/initiate-transfer |

#### Параметры запроса

| Название параметра | Описание | Значение |
|------------------------------|--------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------|
| consumer | | `Необходимость`: Обязательно `Тип`: **Object** |
| consumer.device | | `Необходимость`: Обязательно `Тип`: **Object** |
| consumer.device.serial Number | Серийный номер устройства потребителя. | `Необходимость`: Обязательно `Тип`: String `Длина`: 1-50 |
| transaction | | `Необходимость`: Обязательно `Тип`: **Object** |
| transaction.amount Centis | Сумма транзакции: 1,00 EUR = 100 центов. | `Необходимость`: Обязательно `Тип`: Integer |
| transaction.currency | Буквы верхнего регистра (alpha-код по ISO 4217). | `Необходимость`: Обязательно `Тип`: String `Длина`: 3 |
| session | | `Необходимость`: Обязательно `Тип`: **Object** |
| session.access Token | Ключ токена доступа, полученный при необязательной аутентификации потребителя. | `Необходимость`: Обязательно `Тип`: String `Длина`: 32-128 |
| consumer.device.imei | Международный идентификатор мобильного оборудования устройства потребителя. | `Необходимость`: Опционально `Тип`: String `Длина`: 14-16 |
| location | | `Необходимость`: Опционально `Тип`: **Object** |
| location.lat | Широта указывается в диапазоне от -90.0 до +90.0 включительно. | `Тип`: Double |
| location.lng | Долгота указывается в диапазоне от -180.0 до +180.0 включительно. | `Тип`: Double |
| consumer.ip Addresses | IP-адреса потребителя. | `Тип`: List |
| consumer.ip Addresses[] | IP-адрес потребителя. | `Необходимость`: Опционально `Тип`: String `Длина`: 7-15 |
| from Bin | BIN карты-источника средств (первые 6 цифр номера карты) может использоваться для отображения предварительно рассчитанной комиссии. | `Необходимость`: Опционально `Тип`: String `Длина`: 6 |
| to Bin | BIN карты-получателя средств (первые 6 цифр номера карты) может использоваться для отображения предварительно рассчитанной комиссии. | `Необходимость`: Опционально `Тип`: String `Длина`: 6 |

#### Параметры успешного ответа

| Название параметра | Описание | Значение |
|----------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------|
| endpoint Id | Идентификатор точки входа для транзакции Transfer. | `Необходимость`: Обязательно `Тип`: String |
| invoice Id | Идентификатор транзакции transfer. | `Необходимость`: Обязательно `Тип`: String |
| session | | `Необходимость`: Обязательно `Тип`: **Object** |
| session.nonce | Уникальная случайная строка, сгенерированная сервером Присоединяющейся стороны. | `Необходимость`: Обязательно `Тип`: String |
| session.signature | Контрольная сумма, сгенерированная hmac-sha1 (см. [Вычисление подписи](https://doc.payneteasy.ru/integration/api_development_tools.html.md)) из конкатенации access Token, consumer.device.serial Number, endpoint Id, session.nonce, invoice Id, transaction.amount Centis и transaction.currency. | `Необходимость`: Обязательно `Тип`: String |
| rates | | `Необходимость`: Опционально `Тип`: **Object** |
| rates.min | Possible минимальный commission сумма. | `Необходимость`: Опционально `Тип`: String |
| rates.max | Possible максимальный commission сумма. | `Необходимость`: Опционально `Тип`: String |

#### Параметры неуспешного ответа

| Название параметра | Описание | Значение |
|----------------------|-----------------------------------------------------------------------------------------------------------|-----------------------------|
| error | | `Тип`: **Object** |
| error.cause | Причина ошибки. Возможные значения: `FILTERED`, `INVALID_REQUEST`, `SERVER_FAILED`, `SERVER_UNAVAILABLE`. | `Тип`: Enum |
| error.code | Уникальный код ошибки. | `Тип`: String |
| error.message | Описание ошибки. | `Тип`: String |

#### Пример запроса

```json
{
  "consumer": {
    "device": {
      "imei": "string",
      "serialNumber": "string"
    },
    "ipAddresses": ["string"]
  },
  "location": {
    "lat": "double",
    "lng": "double"
  },
  "session": {
    "accessToken": "string"
  },
  "transaction": {
    "amountCentis": "integer",
    "currency": "string"
  }
}
```

#### Пример успешного ответа

```json
{
  "endpointId": "string",
  "invoiceId": "string",
  "rates": {
    "min": "string",
    "max": "string"
  },
  "session": {
    "nonce": "string",
    "signature": "string"
  }
}
```

#### Пример неуспешного ответа

```json
{
  "error": {
    "cause": "enum",
    "code": "string",
    "message": "string"
  }
}
```

### Инициировать проверку

#### Введение

Инициация проверки выполняется запросом HTTPS POST с использованием [URL-адресов](#api-url-initiate-verification) и [параметров](#api-parameters-initiate-verification).
 
Чтобы инициировать верификацию карты, приложение Присоединяющейся стороны отправляет {access Token} с другими параметрами устройства на сервер Присоединяющейся стороны. Эти параметры используются для начала сессии с уникальными случайными {nonce} и зашифрованной {signature}. В ответ сервер Присоединяющейся стороны также предоставляет информацию о {invoice Id} в системе Присоединяющейся стороны и {endpoint Id} в Payneteasy.
 

#### API URL

> **Note:** Это пример URL на сервере Присоединяющейся Стороны.

| Сервер Присоединяющейся Стороны |
|----------------------------------------------------------------------------|
| https://proxy.connectingpartyserver.com/verification/initiate-verification |

#### Параметры запроса

| Название параметра | Описание | Значение |
|------------------------------|------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------|
| consumer | | `Необходимость`: Обязательно `Тип`: **Object** |
| consumer.device | | `Необходимость`: Обязательно `Тип`: **Object** |
| consumer.device.serial Number | Серийный номер устройства потребителя. | `Необходимость`: Обязательно `Тип`: String `Длина`: 1-50 |
| transaction | | `Необходимость`: Обязательно `Тип`: **Object** |
| transaction.currency | Буквы верхнего регистра (alpha-код по ISO 4217). | `Необходимость`: Обязательно `Тип`: String `Длина`: 3 |
| session | | `Необходимость`: Обязательно `Тип`: **Object** |
| session.access Token | Ключ токена доступа, полученный при необязательной аутентификации потребителя. | `Необходимость`: Обязательно `Тип`: String `Длина`: 32-128 |
| consumer.device.imei | Международный идентификатор мобильного оборудования устройства потребителя. | `Необходимость`: Опционально `Тип`: String `Длина`: 14-16 |
| location | | `Необходимость`: Опционально `Тип`: **Object** |
| location.lat | Широта указывается в диапазоне от -90.0 до +90.0 включительно. | `Необходимость`: Опционально `Тип`: Double |
| location.lng | Долгота указывается в диапазоне от -180.0 до +180.0 включительно. | `Необходимость`: Опционально `Тип`: Double |
| consumer.ip Addresses | IP-адреса потребителя. | `Необходимость`: Опционально `Тип`: List |
| consumer.ip Addresses[] | IP-адрес потребителя. | `Необходимость`: Опционально `Тип`: String `Длина`: 7-15 |

#### Параметры успешного ответа

| Название параметра | Описание | Значение |
|----------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------|
| endpoint Id | Идентификатор точки входа для транзакции Verification. | `Тип`: String |
| invoice Id | Идентификатор транзакции верификации. | `Тип`: String |
| session | | `Тип`: **Object** |
| session.nonce | Уникальная случайная строка, сгенерированная сервером Присоединяющейся стороны. | `Тип`: String |
| session.signature | Контрольная сумма, сгенерированная hmac-sha1 (см. [Вычисление подписи](https://doc.payneteasy.ru/integration/api_development_tools.html.md)) из конкатенации access Token, consumer.device.serial Number, endpoint Id, session.nonce, invoice Id и transaction.currency. | `Тип`: String |

#### Параметры неуспешного ответа

| Название параметра | Описание | Значение |
|----------------------|-----------------------------------------------------------------------------------------------------------|-----------------------------|
| error | | `Тип`: **Object** |
| error.cause | Причина ошибки. Возможные значения: `FILTERED`, `INVALID_REQUEST`, `SERVER_FAILED`, `SERVER_UNAVAILABLE`. | `Тип`: Enum |
| error.code | Уникальный код ошибки. | `Тип`: String |
| error.message | Описание ошибки. | `Тип`: String |

#### Пример запроса

```json
{
  "consumer": {
    "device": {
      "imei": "string",
      "serialNumber": "string"
    },
    "ipAddresses": ["string"]
  },
  "location": {
    "lat": "double",
    "lng": "double"
  },
  "session": {
    "accessToken": "string"
  },
  "transaction": {
    "currency": "string"
  }
}
```

#### Пример успешного ответа

```json
{
  "endpointId": "string",
  "invoiceId": "string",
  "session": {
    "nonce": "string",
    "signature": "string"
  }
}
```

#### Пример неуспешного ответа

```json
{
  "error": {
    "cause": "enum",
    "code": "string",
    "message": "string"
  }
}
```

### API Payneteasy для мобильных устройств

### Mobile Device Connecting Party Server API

### Описание: Perform sale

#### Введение

Выполнение Sale инициируется запросом HTTPS POST с использованием [URL-адресов](#api-url-perform-sale) и [параметров](#api-parameters-perform-sale).
 
На этом этапе приложение Присоединяющейся стороны отправляет данные держателя карты, устройства, сессии и другие параметры напрямую в Payneteasy для выполнения транзакции Sale.
 
 
Может применяться множество проверок и фильтров по различным критериям, таким как BIN, валюта, страна, наличие в чёрном списке и т.д. В зависимости от интеграции эти настройки могут быть конфигурируемыми.
 

#### API URL

> **Note:** Путь API URL не должен быть задан фиксированным значением, т.к. он может быть изменён позднее.

| Интеграционная среда | Производственная среда |
|----------------------------------------------------------------------------|-------------------------------------------------------------------------|
| https://sandbox.payneteasy.ru/paynet/dapi/v1/sale/{endpoint Id}/{invoice Id} | https://gate.payneteasy.ru/paynet/dapi/v1/sale/{endpoint Id}/{invoice Id} |

#### Параметры запроса

| Название параметра | Описание | Значение |
|---------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------|
| consumer | | `Необходимость`: Обязательно `Тип`: **Object** |
| consumer.device | | `Необходимость`: Обязательно `Тип`: **Object** |
| consumer.device.serial Number | Серийный номер устройства потребителя. | `Необходимость`: Обязательно `Тип`: String `Длина`: 1-50 |
| consumer.email | Адрес электронной почты клиента, если он был отправлен в исходной транзакции сопоставления карты и вместо данных держателя карты используется ссылка на карту. | `Необходимость`: Обязательно `Тип`: String `Длина`: 3-128 |
| session | | `Необходимость`: Обязательно `Тип`: **Object** |
| session.access Token | Ключ токена доступа, полученный при необязательной аутентификации потребителя. | `Необходимость`: Обязательно `Тип`: String `Длина`: 32-128 |
| session.nonce | Значение, полученное в ответе initiate sale. | `Необходимость`: Обязательно `Тип`: String `Длина`: 32-128 |
| session.signature | Значение, полученное в ответе initiate sale. | `Необходимость`: Обязательно `Тип`: String `Длина`: 32-128 |
| source Of Funds | | `Необходимость`: Обязательно `Тип`: **Object** |
| source Of Funds.card | Следует использовать только один из этих подтипов (card, reference). | `Необходимость`: Обязательно `Тип`: **Object** |
| source Of Funds.card.expiry | | `Необходимость`: Обязательно `Тип`: **Object** |
| source Of Funds.card.expiry.month | Месяц окончания срока действия исходной карты. | `Необходимость`: Обязательно `Тип`: Integer `Длина`: 2 |
| source Of Funds.card.expiry.year | Год окончания срока действия исходной карты. | `Необходимость`: Обязательно `Тип`: Integer `Длина`: 4 |
| source Of Funds.card.holder | | `Необходимость`: Обязательно `Тип`: **Object** |
| source Of Funds.card.holder.first Name | Название Cardholder’s first. | `Необходимость`: Обязательно `Тип`: String `Длина`: 1-50 |
| source Of Funds.card.holder.last Name | Название Cardholder’s last. | `Необходимость`: Обязательно `Тип`: String `Длина`: 1-50 |
| source Of Funds.card.holder.printed Name | Имя держателя карты, напечатанное на карте (имя и фамилия вместе). Может использоваться вместо first Name + last Name. | `Необходимость`: Обязательно `Тип`: String `Длина`: 1-50 |
| source Of Funds.card.number | Номер исходной карты (PAN). | `Необходимость`: Обязательно `Тип`: String `Length`: 9-19 |
| source Of Funds.card.security Code | Код безопасности исходной карты (CVV). | `Необходимость`: Обязательно `Тип`: String `Длина`: 3-4 |
| source Of Funds.reference | Следует использовать только один из этих подтипов (card, reference). | `Необходимость`: Обязательно `Тип`: **Object** |
| source Of Funds.reference.client Card Id | Ссылочный идентификатор исходной карты (на стороне клиента). | `Необходимость`: Обязательно `Тип`: String `Длина`: 1-128 |
| source Of Funds.reference.security Code | Код безопасности исходной карты (CVV). | `Необходимость`: Обязательно `Тип`: String `Длина`: 3-4 |
| transaction | | `Необходимость`: Обязательно `Тип`: **Object** |
| transaction.amount Centis | Сумма транзакции: 1,00 EUR = 100 центов. | `Необходимость`: Обязательно `Тип`: Integer |
| transaction.currency | Буквы верхнего регистра (alpha-код по ISO 4217). | `Необходимость`: Обязательно `Тип`: String `Длина`: 3 |
| location | | `Необходимость`: Опционально `Тип`: **Object** |
| location.lat | Широта указывается в диапазоне от -90.0 до +90.0 включительно. | `Необходимость`: Опционально `Тип`: Double |
| location.lng | Долгота указывается в диапазоне от -180.0 до +180.0 включительно. | `Необходимость`: Опционально `Тип`: Double |
| billing | | `Необходимость`: Опционально `Тип`: **Object** |
| billing.address | | `Необходимость`: Опционально `Тип`: **Object** |
| billing.address.city | Название города. | `Необходимость`: Опционально `Тип`: String `Length`: 1-100 |
| billing.address.country | Трёхбуквенный код страны ISO. | `Необходимость`: Опционально `Тип`: String `Длина`: 3 |
| billing.address.postcode Zip | Почтовый индекс ZIP. | `Необходимость`: Опционально `Тип`: String `Length`: 1-10 |
| billing.address.state | Поле «Штат» используется при наличии. Например, Лос-Анджелес находится в штате CA. | `Необходимость`: Опционально `Тип`: String `Длина`: 2-3 |
| billing.address.street | Поле «Улица» используется для названий районов и улиц. | `Необходимость`: Опционально `Тип`: String `Длина`: 1-50 |
| billing.address.street2 | Поле «Улица 2» используется для длинных адресов. Обычно оно содержит номер квартиры и здания. | `Необходимость`: Опционально `Тип`: String `Длина`: 1-50 |
| billing.phone | Контактный номер телефона потребителя. | `Необходимость`: Опционально `Тип`: String `Length`: 1-20 |
| consumer.birth Day | Дата рождения потребителя в формате “ddMMyyyy”. | `Необходимость`: Опционально `Тип`: String `Длина`: 8 |
| consumer.device.imei | Международный идентификатор мобильного оборудования устройства потребителя. | `Необходимость`: Опционально `Тип`: String `Длина`: 14-16 |
| consumer.ip Addresses | IP-адреса потребителя. | `Необходимость`: Опционально `Тип`: List |
| consumer.ip Addresses[] | Адрес Сonsumer’s IP. | `Необходимость`: Опционально `Тип`: String `Длина`: 7-15 |
| order | | `Необходимость`: Опционально `Тип`: **Object** |
| order.description | Краткое описание транзакции. Может быть обязательным для некоторых банков-эквайеров. | `Необходимость`: Опционально `Тип`: String `Длина`: 128 |
| order.site Url | URL веб-сайта, связанного с транзакцией. | `Необходимость`: Опционально `Тип`: String `Длина`: 128 |
| order.purpose | Может использоваться для более эффективного контроля транзакции или дополнительных проверок. | `Необходимость`: Опционально `Тип`: String `Длина`: 128 |

#### Параметры успешного ответа

| Название параметра | Описание | Значение |
|----------------------|--------------------------------|-----------------------------|
| invoice Id | Идентификатор транзакции sale. | `Тип`: String |
| session | | `Тип`: **Object** |
| session.token | Session token транзакции sale. | `Тип`: String |

#### Параметры неуспешного ответа

| Название параметра | Описание | Значение |
|----------------------|------------------------------------------------------------------------------------------------------------------------|-----------------------------|
| error | | `Тип`: **Object** |
| error.cause | Причина ошибки. Возможные значения: `INVALID_REQUEST`, `INVALID_CONFIGURATION`, `INTERNAL_ERROR`, `PROCESSING_FAILED`. | `Тип`: Enum |
| error.code | Уникальный код ошибки. | `Тип`: String |
| error.message | Описание ошибки. | `Тип`: String |
| invoice Id | Идентификатор транзакции sale. | `Тип`: String |

#### Пример запроса

```json
{
  "billing": {
    "address": {
      "city": "string",
      "country": "string",
      "postcodeZip": "string",
      "state": "string",
      "street": "string",
      "street2": "string"
    },
    "phone": "string"
  },
  "consumer": {
    "birthDay": "string",
    "device": {
      "imei": "string",
      "serialNumber": "string"
    },
    "email": "string",
    "ipAddresses": ["string"]
  },
  "location": {
    "lat": "double",
    "lng": "double"
  },
  "order": {
    "description": "string",
    "siteUrl": "string",
    "purpose": "string"
  },
  "session": {
    "accessToken": "string",
    "nonce": "string",
    "signature": "string"
  },
  "sourceOfFunds": {
    "card": {
      "expiry": {
        "month": "integer",
        "year": "integer"
      },
      "holder":{
        "firstName": "string",
        "lastName": "string"
      },
      "number": "string",
      "securityCode": "string"
    },
    "reference": {
      "clientCardId": "string",
      "securityCode": "string"
    }
  },
  "transaction": {
    "amountCentis": "integer",
    "currency": "string"
  }
}
```

#### Пример успешного ответа

```json
{
  "invoiceId": "string",
  "session": {
    "token": "string"
  }
}
```

#### Пример неуспешного ответа

```json
{
  "error": {
    "cause": "enum",
    "code": "string",
    "message": "string"
  },
  "invoiceId": "string"
}
```

#### Конструктор запросов

Для интеграции используйте [Сценарии тестирования Payneteasy](https://doc.payneteasy.ru/integration/general_api_usage/test_scenarios.html.md) для генерации случайных номеров карт.
 
 
<meta http-equiv="Cache-Control" content="no-cache">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="../../_static/js/highlight/styles/default.css">
<script src="../../_static/js/highlight/highlight.pack.js"></script>

<script type="text/javascript">
$(document).ready (function(){ 
 $("#sale Tab a").click (function (e){
 e.prevent Default();
 $(this).tab('show');
 });
});
</script>

<script type="text/javascript">
 var curl Text ="";
 var curl Windows Text ="";
 var url = "";

 function json Sale (form) {
 var amount Info Two = document.get Element By Id("amount Warning Two");
 var amount To Fix Two = form.amount.value \* 100;
 var fixed Amount Two = amount To Fix Two.to Fixed(0);
 if (fixed Amount Two != amount To Fix Two)
 { amount Info Two.innerHTML = amount Info Two.innerHTML.replace("Will be calculated to centis in generated string", "Possible floating point imprecision (for more information check Floating Point Math)");}
 else {amount Info Two.innerHTML = amount Info Two.innerHTML.replace("Possible floating point imprecision (for more information check Floating Point Math)", "Will be calculated to centis in generated string");}

 var all To Json = {
 consumer: {
 device: {
 serial Number: form.serial Number.value
 , imei: form.imei.value }
 , email: form.email.value
 , birth Day: form.birth Day.value
 , ip Addresses: [form.ip Addresses.value ]},
 session: {
 access Token: form.access Token.value
 , nonce: form.nonce.value
 , signature: form.signature.value },
 source Of Funds: {
 card: {
 number: form.source Number.value
 , security Code: form.security Code Card.value
 , holder: {
 first Name: form.first Name.value
 , last Name: form.last Name.value }
 , expiry: {
 month: form.month.value
 , year: form.year.value }
 }, reference: {
 client Card Id: form.source Card Ref.value
 , security Code: form.security Code Ref.value }},
 transaction: {
 amount Centis: fixed Amount Two
 , currency: form.currency.value },
 billing: { address: { 
 city: form.city.value
 , country: form.country.value
 , postcode Zip: form.postcode Zip.value
 , state: form.state.value
 , street: form.street.value
 , street2: form.street2.value }
 , phone: form.phone.value },
 order: { 
 description: form.description.value
 , site Url: form.site Url.value },
 location: {
 lat: form.lat.value
 , lng: form.lng.value }};
 
 function remove Nulls In Object (obj) {
 if( typeof obj === 'string' || obj === "" ){
 return;
 }
 $.each (obj, function (key, value){
 if (value === "" || value === null || value === 0){
 delete obj[key];
 } else if ($.is Array (value)) {
 if( value.length === 0 ){
 delete obj[key];
 return;
 }
 $.each (value, function (k,v) {
 remove Nulls In Object (v);
 });
 if( value.length === 0 ){
 delete obj[key];
 }
 } else if (typeof value === 'object') {
 if( Object.keys (value).length === 0 ){
 delete obj[key];
 return;
 }
 remove Nulls In Object (value);
 if( Object.keys (value).length === 0 ){
 delete obj[key];
 }
 }
 });
 };

 remove Nulls In Object (all To Json); 

 json Data = JSON.stringify (all To Json, function (key, value) {
 if (key == 'ip Addresses' && value == "") return undefined;
 return value;
 }, 0);

 if (document.sale.stage.value == "gate") 
 {url = 'https://gate.payneteasy.ru/paynet/dapi/v1/sale/' + form.endpoint Id.value + '/' + form.invoice Id.value;}
 else {url = 'https://sandbox.payneteasy.ru/paynet/dapi/v1/sale/' + form.endpoint Id.value + '/' + form.invoice Id.value;}

 curl Text = 'curl -v -H "Content-Type: application/json" -POST --data \\'' + json Data + '\\' ' + url;

 show Text("curlvalue Sale", curl Text);

 curl Windows Text = 'curl -v -H "Content-Type: application/json" -POST --data \\"' + json Data.replace(/"/g, '\\\\"') + '\\" ' + url;

 show Text("curlwindowsvalue Sale", curl Windows Text);

 $(document).ready (function() {
 $('pre code').each (function (i, block) {
 hljs.highlight Block (block);
 });
 });
 }

 function show Text (element Id, text) {
 var child = document.create Text Node (text);
 var element = document.get Element By Id (element Id);
 element.innerHTML ="";
 if (element.has Child Nodes()) {
 element.replace Child (child, element.first Child);
 } else {
 element.append Child (child);
 }
 }

 function show Form (f, elements) {
 var newdiv = document.create Element('div');
 newdiv.innerHTML = elements;
 f.append Child (newdiv);
 }

 function copy To Clipboard Sale (text) {
 var text Area = document.create Element("textarea");

 // Place in top-left corner of screen regardless of scroll position.
 text Area.style.position = 'fixed';
 text Area.style.top = 0;
 text Area.style.left = 0;

 // Ensure it has a small width and height. Setting to 1px / 1em
 // doesn't work as this gives a negative w/h on some browsers.
 text Area.style.width = '2em';
 text Area.style.height = '2em';

 // We don't need padding, reducing the size if it does flash render.
 text Area.style.padding = 0;

 // Clean up any borders.
 text Area.style.border = 'none';
 text Area.style.outline = 'none';
 text Area.style.box Shadow = 'none';

 // Avoid flash of white box if rendered for any reason.
 text Area.style.background = 'transparent';

 if (text === 'curl'){
 text Area.value = curl Text;
 } else {
 text Area.value = curl Windows Text;
 }
 document.body.append Child (text Area);

 text Area.select();

 try {
 var successful = document.exec Command('copy');
 var msg = successful ? 'successful' : 'unsuccessful';
 console.log('Copying text command was ' + msg);
 } catch (err) {
 console.log('Oops, unable to copy');
 }

 document.body.remove Child (text Area);

 }
</script>

<form name="sale">

 
 <p></p>
 <input type="button" class="doc-button" style="font-size: 100%; padding: 2px 6px 3px 6px;" value="Get JSON" on Click="json Sale (document.sale)"/>
 <p></p>
</form>
 <ul class="nav nav-tabs" id="sale Tab">
 <li class="active">[Curl for Unix](#sale Curl)</li>
 <li>[Curl for Windows](#sale Windows)</li>
 </ul>

 <pre style="word-break:break-all;">
 <code class="bash" id="curlwindowsvalue Sale"></code>
 </pre>
 <button class="doc-button" onclick="copy To Clipboard Sale('Windows')">Copy to clipboard</button>

### Описание: Perform transfer

#### Введение

Описание: Perform transfer инициируется через запрос HTTPS POST с использованием [URL-адресов](#api-url-perform-transfer) и [параметров](#api-parameters-perform-transfer).
 
На этом этапе приложение Присоединяющейся Стороны отправляет данные держателя карты, устройства, сессии и другие параметры напрямую в Payneteasy для выполнения перевода средств с карты на карту.
 
Может применяться множество проверок и фильтров по различным критериям, таким как BIN, валюта, страна, наличие в чёрном списке и т.д. В зависимости от интеграции эти настройки могут быть конфигурируемыми.
 

#### API URL

> **Note:** Путь API URL не должен быть задан фиксированным значением, т.к. он может быть изменён позднее.

| Интеграционная среда | Производственная среда |
|--------------------------------------------------------------------------------|-----------------------------------------------------------------------------|
| https://sandbox.payneteasy.ru/paynet/dapi/v1/transfer/{endpoint Id}/{invoice Id} | https://gate.payneteasy.ru/paynet/dapi/v1/transfer/{endpoint Id}/{invoice Id} |

#### Параметры запроса

| Название параметра | Описание | Значение |
|-------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------|
| consumer | | `Необходимость`: Обязательно `Тип`: **Object** |
| consumer.device | | `Необходимость`: Обязательно `Тип`: **Object** |
| consumer.device.serial Number | Серийный номер устройства потребителя. | `Необходимость`: Обязательно `Тип`: String `Длина`: 1-50 |
| consumer.email | Адрес электронной почты клиента, если он был отправлен в исходной транзакции сопоставления карты и вместо данных держателя карты используется ссылка на карту. | `Необходимость`: Обязательно `Тип`: String `Длина`: 3-128 |
| destination Of Funds | | `Необходимость`: Обязательно `Тип`: **Object** |
| destination Of Funds.card | Следует использовать только один из этих подтипов (card, reference). | `Необходимость`: Обязательно `Тип`: **Object** |
| destination Of Funds.card.number | Destination карта номер (PAN). | `Необходимость`: Обязательно `Тип`: String `Length`: 9-19 |
| destination Of Funds.reference | Следует использовать только один из этих подтипов (card, reference). | `Необходимость`: Обязательно `Тип`: **Object** |
| destination Of Funds.reference.client Card Id | Идентификатор ссылки на карту получателя (на стороне клиента). | `Необходимость`: Обязательно `Тип`: String `Длина`: 1-128 |
| session | | `Необходимость`: Обязательно `Тип`: **Object** |
| session.access Token | Ключ токена доступа, полученный при необязательной аутентификации потребителя. | `Необходимость`: Обязательно `Тип`: String `Длина`: 32-128 |
| session.nonce | Значение, полученное в ответе Initiate transfer. | `Необходимость`: Обязательно `Тип`: String `Длина`: 32-128 |
| session.signature | Значение, полученное в ответе Initiate transfer. | `Необходимость`: Обязательно `Тип`: String `Длина`: 32-128 |
| source Of Funds | | `Необходимость`: Обязательно `Тип`: **Object** |
| source Of Funds.card | Следует использовать только один из этих подтипов (card, reference). | `Необходимость`: Обязательно `Тип`: **Object** |
| source Of Funds.card.expiry | | `Необходимость`: Обязательно `Тип`: **Object** |
| source Of Funds.card.expiry.month | Месяц окончания срока действия исходной карты. | `Необходимость`: Обязательно `Тип`: Integer `Длина`: 2 |
| source Of Funds.card.expiry.year | Год окончания срока действия исходной карты. | `Необходимость`: Обязательно `Тип`: Integer `Длина`: 4 |
| source Of Funds.card.holder | | `Необходимость`: Обязательно `Тип`: **Object** |
| source Of Funds.card.holder.first Name | Название Cardholder’s first. | `Необходимость`: Обязательно `Тип`: String `Длина`: 1-50 |
| source Of Funds.card.holder.last Name | Название Cardholder’s last. | `Необходимость`: Обязательно `Тип`: String `Длина`: 1-50 |
| source Of Funds.card.holder.printed Name | Имя держателя карты, напечатанное на карте (имя и фамилия вместе). Может использоваться вместо first Name + last Name. | `Необходимость`: Обязательно `Тип`: String `Длина`: 1-50 |
| source Of Funds.card.number | Номер исходной карты (PAN). | `Необходимость`: Обязательно `Тип`: String `Length`: 9-19 |
| source Of Funds.card.security Code | Код безопасности исходной карты (CVV). | `Необходимость`: Обязательно `Тип`: String `Длина`: 3-4 |
| source Of Funds.reference | Следует использовать только один из этих подтипов (card, reference). | `Необходимость`: Обязательно `Тип`: **Object** |
| source Of Funds.reference.client Card Id | Ссылочный идентификатор исходной карты (на стороне клиента). | `Необходимость`: Обязательно `Тип`: String `Длина`: 1-128 |
| source Of Funds.reference.security Code | Код безопасности исходной карты (CVV). | `Необходимость`: Обязательно `Тип`: String `Длина`: 3-4 |
| transaction | | `Необходимость`: Обязательно `Тип`: **Object** |
| transaction.amount Centis | Сумма транзакции: 1,00 EUR = 100 центов. | `Необходимость`: Обязательно `Тип`: Integer |
| transaction.currency | Буквы верхнего регистра (alpha-код по ISO 4217). | `Необходимость`: Обязательно `Тип`: String `Длина`: 3 |
| location | | `Необходимость`: Опционально `Тип`: **Object** |
| location.lat | Широта указывается в диапазоне от -90.0 до +90.0 включительно. | `Необходимость`: Опционально `Тип`: Double |
| location.lng | Долгота указывается в диапазоне от -180.0 до +180.0 включительно. | `Необходимость`: Опционально `Тип`: Double |
| billing | | `Необходимость`: Опционально `Тип`: **Object** |
| billing.address | | `Необходимость`: Опционально `Тип`: **Object** |
| billing.address.city | Название города. | `Необходимость`: Опционально `Тип`: String `Length`: 1-100 |
| billing.address.country | Трёхбуквенный код страны ISO. | `Необходимость`: Опционально `Тип`: String `Длина`: 3 |
| billing.address.postcode Zip | Почтовый индекс ZIP. | `Необходимость`: Опционально `Тип`: String `Length`: 1-10 |
| billing.address.state | Поле «Штат» используется при наличии. Например, Лос-Анджелес находится в штате CA. | `Необходимость`: Опционально `Тип`: String `Длина`: 2-3 |
| billing.address.street | Поле «Улица» используется для названий районов и улиц. | `Необходимость`: Опционально `Тип`: String `Длина`: 1-50 |
| billing.address.street2 | Поле «Улица 2» используется для длинных адресов. Обычно оно содержит номер квартиры и здания. | `Необходимость`: Опционально `Тип`: String `Длина`: 1-50 |
| billing.phone | Контактный номер телефона потребителя. | `Необходимость`: Опционально `Тип`: String `Length`: 1-20 |
| consumer.birth Day | Дата рождения потребителя в формате “ddMMyyyy”. | `Необходимость`: Опционально `Тип`: String `Длина`: 8 |
| consumer.device.imei | Международный идентификатор мобильного оборудования устройства потребителя. | `Необходимость`: Опционально `Тип`: String `Длина`: 14-16 |
| consumer.ip Addresses | IP-адреса потребителя. | `Необходимость`: Опционально `Тип`: List |
| consumer.ip Addresses[] | Адрес Сonsumer’s IP. | `Необходимость`: Опционально `Тип`: String `Длина`: 7-15 |
| order | | `Необходимость`: Опционально `Тип`: **Object** |
| order.description | Краткое описание транзакции. Может быть обязательным для некоторых банков-эквайеров. | `Необходимость`: Опционально `Тип`: String `Длина`: 128 |
| order.site Url | URL веб-сайта, связанного с транзакцией. | `Необходимость`: Опционально `Тип`: String `Длина`: 128 |
| order.purpose | Может использоваться для более эффективного контроля транзакции или дополнительных проверок. | `Необходимость`: Опционально `Тип`: String `Длина`: 128 |

#### Параметры успешного ответа

| Название параметра | Описание | Значение |
|----------------------|------------------------------------|-----------------------------|
| invoice Id | Идентификатор транзакции transfer. | `Тип`: String |
| session | | `Тип`: **Object** |
| session.token | Token сессии транзакции transfer. | `Тип`: String |

#### Параметры неуспешного ответа

| Название параметра | Описание | Значение |
|----------------------|------------------------------------------------------------------------------------------------------------------------|-----------------------------|
| error | | `Тип`: **Object** |
| error.cause | Причина ошибки. Возможные значения: `INVALID_REQUEST`, `INVALID_CONFIGURATION`, `INTERNAL_ERROR`, `PROCESSING_FAILED`. | `Тип`: Enum |
| error.code | Уникальный код ошибки. | `Тип`: String |
| error.message | Описание ошибки. | `Тип`: String |
| invoice Id | Идентификатор транзакции transfer. | `Тип`: String |

#### Пример запроса

```json
{
  "billing": {
    "address": {
      "city": "string",
      "country": "string",
      "postcodeZip": "string",
      "state": "string",
      "street": "string",
      "street2": "string"
    },
    "phone": "string"
  },
  "consumer": {
    "birthDay": "string",
    "device": {
      "imei": "string",
      "serialNumber": "string"
    },
    "email": "string",
    "ipAddresses": ["string"]
  },
  "destinationOfFunds": {
    "card": {
      "number": "string",
    },
    "reference": {
      "clientCardId": "string"
    }
  },
  "location": {
    "lat": "double",
    "lng": "double"
  },
  "order": {
    "description": "string",
    "siteUrl": "string",
    "purpose": "string"
  },
  "session": {
    "accessToken": "string",
    "nonce": "string",
    "signature": "string"
  },
  "sourceOfFunds": {
    "card": {
      "expiry": {
        "month": "integer",
        "year": "integer"
      },
      "holder":{
        "firstName": "string",
        "lastName": "string"
      },
      "number": "string",
      "securityCode": "string"
    },
    "reference": {
      "clientCardId": "string",
      "securityCode": "string"
    }
  },
  "transaction": {
    "amountCentis": "integer",
    "currency": "string"
  }
}
```

#### Пример успешного ответа

```json
{
  "invoiceId": "string",
  "session": {
    "token": "string"
  }
}
```

#### Пример неуспешного ответа

```json
{
  "error": {
    "cause": "enum",
    "code": "string",
    "message": "string"
  },
  "invoiceId": "string"
}
```

#### Конструктор запросов

Для интеграции используйте [Сценарии тестирования Payneteasy](https://doc.payneteasy.ru/integration/general_api_usage/test_scenarios.html.md) для генерации случайных номеров карт.
 
 
<meta http-equiv="Cache-Control" content="no-cache">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="../../_static/js/highlight/styles/default.css">
<script src="../../_static/js/highlight/highlight.pack.js"></script>

<script type="text/javascript">
$(document).ready (function(){ 
 $("#transfer Tab a").click (function (e){
 	e.prevent Default();
 	$(this).tab('show');
 });
});
</script>

<script type="text/javascript">
 var curl Text ="";
 var curl Windows Text ="";
 var url = "";

 function json Transfer (form) {
	var amount Info Three = document.get Element By Id("amount Warning Three");
 var amount To Fix Three = form.amount.value \* 100;
 var fixed Amount Three = amount To Fix Three.to Fixed(0);
 if (fixed Amount Three != amount To Fix Three)
 { amount Info Three.innerHTML = amount Info Three.innerHTML.replace("Will be calculated to centis in generated string", "Possible floating point imprecision (for more information check Floating Point Math)");}
 else {amount Info Three.innerHTML = amount Info Three.innerHTML.replace("Possible floating point imprecision (for more information check Floating Point Math)", "Will be calculated to centis in generated string");}

 var all To Json = {
					consumer:	 {
								 device: {
										 serial Number: form.serial Number.value
								 		 , imei: form.imei.value }
								 , email: form.email.value
								 , birth Day: form.birth Day.value
								 , ip Addresses: [form.ip Addresses.value ]},
					session: 	 {
								 access Token: form.access Token.value
								 , nonce: form.nonce.value
								 , signature: form.signature.value },
					destination Of Funds: {
								 card: { number: form.destination Number.value }
								 , reference: { client Card Id: form.destination Card Ref.value }},
					source Of Funds: {
								 card: {
									number: form.source Number.value
									, security Code: form.security Code Card.value
									, holder: {
											first Name: form.first Name.value
											, last Name: form.last Name.value }
									, expiry: {
											month: form.month.value
										 , year: form.year.value }
								 }, reference: {
								 client Card Id: form.source Card Ref.value
								 , security Code: form.security Code Ref.value }},
					transaction: {
								 amount Centis: fixed Amount Three
								 , currency: form.currency.value },
					billing:	 { address: { 
											city: form.city.value
											, country: form.country.value
											, postcode Zip: form.postcode Zip.value
											, state: form.state.value
											, street: form.street.value
											, street2: form.street2.value }
								 , phone: form.phone.value },
					order:		 { 
								 description: form.description.value
								 , site Url: form.site Url.value },
					location: {
								 lat: form.lat.value
								 , lng: form.lng.value }};
								 
	function remove Nulls In Object (obj) {
 if( typeof obj === 'string' || obj === "" ){
 return;
 }
 $.each (obj, function (key, value){
 if (value === "" || value === null || value === 0){
 delete obj[key];
 } else if ($.is Array (value)) {
 if( value.length === 0 ){
 delete obj[key];
 return;
 }
 $.each (value, function (k,v) {
 remove Nulls In Object (v);
 });
 if( value.length === 0 ){
 delete obj[key];
 }
 } else if (typeof value === 'object') {
 if( Object.keys (value).length === 0 ){
 delete obj[key];
 return;
 }
 remove Nulls In Object (value);
 if( Object.keys (value).length === 0 ){
 delete obj[key];
 }
 }
 });
	};
 
	remove Nulls In Object (all To Json); 

	json Data = JSON.stringify (all To Json, function (key, value) {
 if (key == 'ip Addresses' && value == "") return undefined;
 return value;
 }, 0);
	
	if (document.transfer.stage.value == "gate") 
	 {url = 'https://gate.payneteasy.ru/paynet/dapi/v1/transfer/' + form.endpoint Id.value + '/' + form.invoice Id.value;}
	else {url = 'https://sandbox.payneteasy.ru/paynet/dapi/v1/transfer/' + form.endpoint Id.value + '/' + form.invoice Id.value;}
	
	curl Text = 'curl -v -H "Content-Type: application/json" -POST --data \\'' + json Data + '\\' ' + url;
	
	show Text("curlvalue Transfer", curl Text);

	curl Windows Text = 'curl -v -H "Content-Type: application/json" -POST --data \\"' + json Data.replace(/"/g, '\\\\"') + '\\" ' + url;
	
	show Text("curlwindowsvalue Transfer", curl Windows Text);

	$(document).ready (function() {
	$('pre code').each (function (i, block) {
	 hljs.highlight Block (block);
	 });
	});
 }
	
 function show Text (element Id, text) {
 var child = document.create Text Node (text);
 var element = document.get Element By Id (element Id);
 element.innerHTML ="";
 if (element.has Child Nodes()) {
 element.replace Child (child, element.first Child);
 } else {
 element.append Child (child);
 }
 }
	
 function show Form (f, elements) {
 var newdiv = document.create Element('div');
 newdiv.innerHTML = elements;
 f.append Child (newdiv);
 }

 function copy To Clipboard Transfer (text) {
 var text Area = document.create Element("textarea");

 // Place in top-left corner of screen regardless of scroll position.
 text Area.style.position = 'fixed';
 text Area.style.top = 0;
 text Area.style.left = 0;

 // Ensure it has a small width and height. Setting to 1px / 1em
 // doesn't work as this gives a negative w/h on some browsers.
 text Area.style.width = '2em';
 text Area.style.height = '2em';

 // We don't need padding, reducing the size if it does flash render.
 text Area.style.padding = 0;

 // Clean up any borders.
 text Area.style.border = 'none';
 text Area.style.outline = 'none';
 text Area.style.box Shadow = 'none';

 // Avoid flash of white box if rendered for any reason.
 text Area.style.background = 'transparent';

 if (text === 'curl'){
 text Area.value = curl Text;
 } else {
	 text Area.value = curl Windows Text;
 }
 document.body.append Child (text Area);

 text Area.select();

 try {
 var successful = document.exec Command('copy');
 var msg = successful ? 'successful' : 'unsuccessful';
 console.log('Copying text command was ' + msg);
 } catch (err) {
 console.log('Oops, unable to copy');
 }

 document.body.remove Child (text Area);

 }
</script>

<form name="transfer">

 
 <p></p>
 <input type="button" class="doc-button" style="font-size: 100%; padding: 2px 6px 3px 6px;" value="Get JSON" on Click="json Transfer (document.transfer)"/>
 <p></p>
</form>
	<ul class="nav nav-tabs" id="transfer Tab">
 <li class="active">[Curl for Unix](#transfer Curl)</li>
 <li>[Curl for Windows](#transfer Windows)</li>
 </ul>

			<pre style="word-break:break-all;">
			<code class="bash" id="curlwindowsvalue Transfer"></code>
			</pre>
			<button class="doc-button" onclick="copy To Clipboard Transfer('Windows')">Copy to clipboard</button>

### Описание: Perform validation

#### Введение

Проверка выполнения инициируется запросом HTTPS POST с использованием [URL-адресов](#api-url-perform-verification) и [параметров](#api-parameters-perform-verification).
 
Приложение Присоединяющейся стороны отправляет данные держателя карты, устройства, сессии и другие параметры напрямую в Payneteasy для проверки валидности карты.
 
Может применяться множество проверок и фильтров по различным критериям, таким как BIN, валюта, страна, наличие в чёрном списке и т.д. В зависимости от интеграции эти настройки могут быть конфигурируемыми.
 

#### API URL

> **Note:** Путь API URL не должен быть задан фиксированным значением, т.к. он может быть изменён позднее.

| Интеграционная среда | Производственная среда |
|------------------------------------------------------------------------------------|---------------------------------------------------------------------------------|
| https://sandbox.payneteasy.ru/paynet/dapi/v1/verification/{endpoint Id}/{invoice Id} | https://gate.payneteasy.ru/paynet/dapi/v1/verification/{endpoint Id}/{invoice Id} |

#### Параметры запроса

| Название параметра | Описание | Значение |
|-------------------------------|----------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------|
| consumer | | `Необходимость`: Обязательно `Тип`: **Object** |
| consumer.device | | `Необходимость`: Обязательно `Тип`: **Object** |
| consumer.device.serial Number | Серийный номер устройства потребителя. | `Необходимость`: Обязательно `Тип`: String `Длина`: 1-50 |
| consumer.email | Адрес электронной почты клиента. | `Необходимость`: Обязательно `Тип`: String `Длина`: 3-128 |
| session | | `Необходимость`: Обязательно `Тип`: **Object** |
| session.access Token | Ключ токена доступа, полученный при необязательной аутентификации потребителя. | `Необходимость`: Обязательно `Тип`: String `Длина`: 32-128 |
| session.nonce | Значение, полученное в ответе Initial verification. | `Необходимость`: Обязательно `Тип`: String `Длина`: 32-128 |
| session.signature | Значение, полученное в ответе Initial verification. | `Необходимость`: Обязательно `Тип`: String `Длина`: 32-128 |
| source Card | | `Необходимость`: Обязательно `Тип`: **Object** |
| source Card.expiry | | `Необходимость`: Обязательно `Тип`: **Object** |
| source Card.expiry.month | Месяц окончания срока действия исходной карты. | `Необходимость`: Обязательно `Тип`: Integer `Длина`: 2 |
| source Card.expiry.year | Год окончания срока действия исходной карты. | `Необходимость`: Обязательно `Тип`: Integer `Длина`: 4 |
| source Card.holder | | `Необходимость`: Обязательно `Тип`: **Object** |
| source Card.holder.first Name | Название Cardholder’s first. | `Необходимость`: Обязательно `Тип`: String `Длина`: 1-50 |
| source Card.holder.last Name | Название Cardholder’s last. | `Необходимость`: Обязательно `Тип`: String `Длина`: 1-50 |
| source Card.holder.printed Name | Имя держателя карты, напечатанное на карте (имя и фамилия вместе). Может использоваться вместо first Name + last Name. | `Необходимость`: Обязательно `Тип`: String `Длина`: 1-50 |
| source Card.number | Номер исходной карты (PAN). | `Необходимость`: Обязательно `Тип`: String `Length`: 9-19 |
| source Card.security Code | Код безопасности исходной карты (CVV). | `Необходимость`: Обязательно `Тип`: String `Длина`: 3-4 |
| transaction | | `Необходимость`: Обязательно `Тип`: **Object** |
| transaction.currency | Буквы верхнего регистра (alpha-код по ISO 4217). | `Необходимость`: Обязательно `Тип`: String `Длина`: 3 |
| location | | `Необходимость`: Опционально `Тип`: **Object** |
| location.lat | Широта указывается в диапазоне от -90.0 до +90.0 включительно. | `Необходимость`: Опционально `Тип`: Double |
| location.lng | Долгота указывается в диапазоне от -180.0 до +180.0 включительно. | `Необходимость`: Опционально `Тип`: Double |
| billing | | `Необходимость`: Опционально `Тип`: **Object** |
| billing.address | | `Необходимость`: Опционально `Тип`: **Object** |
| billing.address.city | Название города. | `Необходимость`: Опционально `Тип`: String `Length`: 1-100 |
| billing.address.country | Трёхбуквенный код страны ISO. | `Необходимость`: Опционально `Тип`: String `Длина`: 3 |
| billing.address.postcode Zip | Описание: ZIP post code | `Необходимость`: Опционально `Тип`: String `Length`: 1-10 |
| billing.address.state | Поле «Штат» используется при наличии. Например, Лос-Анджелес находится в штате CA. | `Необходимость`: Опционально `Тип`: String `Длина`: 2-3 |
| billing.address.street | Поле «Улица» используется для названий районов и улиц. | `Необходимость`: Опционально `Тип`: String `Длина`: 1-50 |
| billing.address.street2 | Поле «Улица 2» используется для длинных адресов. Обычно оно содержит номер квартиры и здания. | `Необходимость`: Опционально `Тип`: String `Длина`: 1-50 |
| billing.phone | Контактный номер телефона клиента. | `Необходимость`: Опционально `Тип`: String `Length`: 1-20 |
| consumer.birth Day | Дата рождения потребителя в формате “ddMMyyyy”. | `Необходимость`: Опционально `Тип`: String `Длина`: 8 |
| consumer.device.imei | Международный идентификатор мобильного оборудования устройства потребителя. | `Необходимость`: Опционально `Тип`: String `Длина`: 14-16 |
| consumer.ip Addresses | IP-адреса потребителя. | `Необходимость`: Опционально `Тип`: List |
| consumer.ip Addresses[] | Адрес Сonsumer’s IP. | `Необходимость`: Опционально `Тип`: String `Длина`: 7-15 |
| order | | `Необходимость`: Опционально `Тип`: **Object** |
| order.description | Краткое описание транзакции. Может быть обязательным для некоторых банков-эквайеров. | `Необходимость`: Опционально `Тип`: String `Длина`: 128 |
| order.site Url | URL веб-сайта, связанного с транзакцией. | `Необходимость`: Опционально `Тип`: String `Длина`: 128 |
| order.purpose | Может использоваться для более эффективного контроля транзакции или дополнительных проверок. | `Необходимость`: Опционально `Тип`: String `Длина`: 128 |

#### Параметры успешного ответа

| Название параметра | Описание | Значение |
|----------------------|---------------------------------------|-----------------------------|
| invoice Id | Идентификатор транзакции верификации. | `Тип`: String |
| session | | `Тип`: **Object** |
| session.token | Токен сеанса транзакции верификации. | `Тип`: String |

#### Параметры неуспешного ответа

| Название параметра | Описание | Значение |
|----------------------|------------------------------------------------------------------------------------------------------------------------|-----------------------------|
| error | | `Тип`: **Object** |
| error.cause | Причина ошибки. Возможные значения: `INVALID_REQUEST`, `INVALID_CONFIGURATION`, `INTERNAL_ERROR`, `PROCESSING_FAILED`. | `Тип`: Enum |
| error.code | Уникальный код ошибки. | `Тип`: String |
| error.message | Описание ошибки. | `Тип`: String |
| invoice Id | Идентификатор транзакции верификации. | `Тип`: String |

#### Пример запроса

```json
{
  "billing": {
    "address": {
      "city": "string",
      "country": "string",
      "postcodeZip": "string",
      "state": "string",
      "street": "string",
      "street2": "string"
    },
    "phone": "string"
  },
  "consumer": {
    "birthDay": "string",
    "device": {
      "imei": "string",
      "serialNumber": "string"
    },
    "email": "string",
    "ipAddresses": ["string"]
  },
  "location": {
    "lat": "double",
    "lng": "double"
  },
  "order": {
    "description": "string",
    "siteUrl": "string",
    "purpose": "string"
  },
  "session": {
    "accessToken": "string",
    "nonce": "string",
    "signature": "string"
  },
  "sourceCard": {
    "expiry": {
      "month": "integer",
      "year": "integer"
    },
    "holder":{
      "firstName": "string",
      "lastName": "string"
    },
    "number": "string",
    "securityCode": "string"
  },
  "transaction": {
    "currency": "string"
  }
}
```

#### Пример успешного ответа

```json
{
  "invoiceId": "string",
  "session": {
    "token": "string"
  }
}
```

#### Пример неуспешного ответа

```json
{
  "error": {
    "cause": "enum",
    "code": "string",
    "message": "string"
  },
  "invoiceId": "string"
}
```

#### Конструктор запросов

Для интеграции используйте [Сценарии тестирования Payneteasy](https://doc.payneteasy.ru/integration/general_api_usage/test_scenarios.html.md) для генерации случайных номеров карт.
 
Параметры со светло-красным фоном являются обязательными.
 
 
<meta http-equiv="Cache-Control" content="no-cache">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="../../_static/js/highlight/styles/default.css">
<script src="../../_static/js/highlight/highlight.pack.js"></script>

<script type="text/javascript">
$(document).ready (function(){ 
 $("#validation Tab a").click (function (e){
 	e.prevent Default();
 	$(this).tab('show');
 });
});
</script>

<script type="text/javascript"> 
 var curl Text ="";
 var curl Windows Text ="";
 var url = "";

 function json (form) {
	
 var all To Json = {
					consumer:	 {
								 device: {
	 									 serial Number: form.serial Number.value
								 		 , imei: form.imei.value }
								 , email: form.email.value
								 , birth Day: form.birth Day.value
								 , ip Addresses: [form.ip Addresses.value ]},
					session: 	 {
								 access Token: form.access Token.value
								 , nonce: form.nonce.value
								 , signature: form.signature.value },
					source Card: {
								 number: form.number.value
								 , security Code: form.security Code.value
								 , holder: {
										 first Name: form.first Name.value
										 , last Name: form.last Name.value }
								 , expiry: {
										 month: form.month.value
										 , year: form.year.value }},
					transaction: { currency: form.currency.value },
					billing:	 { address: { 
											city: form.city.value
											, country: form.country.value
											, postcode Zip: form.postcode Zip.value
											, state: form.state.value
											, street: form.street.value
											, street2: form.street2.value }
								 , phone: form.phone.value },
					order:		 { 
								 description: form.description.value
								 , site Url: form.site Url.value },
					location: {
								 lat: form.lat.value
								 , lng: form.lng.value }
	};
								 
	function remove Nulls In Object (obj) {
 if( typeof obj === 'string' || obj === "" ){
 return;
 }
 $.each (obj, function (key, value){
 if (value === "" || value === null){
 delete obj[key];
 } else if ($.is Array (value)) {
 if( value.length === 0 ){
 delete obj[key];
 return;
 }
 $.each (value, function (k,v) {
 remove Nulls In Object (v);
 });
 if( value.length === 0 ){
 delete obj[key];
 }
 } else if (typeof value === 'object') {
 if( Object.keys (value).length === 0 ){
 delete obj[key];
 return;
 }
 remove Nulls In Object (value);
 if( Object.keys (value).length === 0 ){
 delete obj[key];
 }
 }
 });
	};
 
	remove Nulls In Object (all To Json); 

	json Data = JSON.stringify (all To Json, function (key, value) {
 if (key == 'ip Addresses' && value == "") return undefined;
 return value;
 }, 0);
	
	if (document.validation.stage.value == "gate") 
	 {url = 'https://gate.payneteasy.ru/paynet/dapi/v1/verification/' + form.endpoint Id.value + '/' + form.invoice Id.value;}
	else {url = 'https://sandbox.payneteasy.ru/paynet/dapi/v1/verification/' + form.endpoint Id.value + '/' + form.invoice Id.value;}
	
	curl Text = 'curl -v -H "Content-Type: application/json" -POST --data \\'' + json Data + '\\' ' + url;
	
	show Text("curlvalue", curl Text);

	curl Windows Text = 'curl -v -H "Content-Type: application/json" -POST --data \\"' + json Data.replace(/"/g, '\\\\"') + '\\" ' + url;
	
	show Text("curlwindowsvalue", curl Windows Text);

	$(document).ready (function() {
	$('pre code').each (function (i, block) {
	 hljs.highlight Block (block);
	 });
	});
 }
	
 function show Text (element Id, text) {
 var child = document.create Text Node (text);
 var element = document.get Element By Id (element Id);
 element.innerHTML ="";
 if (element.has Child Nodes()) {
 element.replace Child (child, element.first Child);
 } else {
 element.append Child (child);
 }
 }
	
 function show Form (f, elements) {
 var newdiv = document.create Element('div');
 newdiv.innerHTML = elements;
 f.append Child (newdiv);
 }

 function copy To Clipboard Validation (text) {
 var text Area = document.create Element("textarea");

 // Place in top-left corner of screen regardless of scroll position.
 text Area.style.position = 'fixed';
 text Area.style.top = 0;
 text Area.style.left = 0;

 // Ensure it has a small width and height. Setting to 1px / 1em
 // doesn't work as this gives a negative w/h on some browsers.
 text Area.style.width = '2em';
 text Area.style.height = '2em';

 // We don't need padding, reducing the size if it does flash render.
 text Area.style.padding = 0;

 // Clean up any borders.
 text Area.style.border = 'none';
 text Area.style.outline = 'none';
 text Area.style.box Shadow = 'none';

 // Avoid flash of white box if rendered for any reason.
 text Area.style.background = 'transparent';

 if (text === 'curl'){
	 text Area.value = curl Text;
 } else {
 text Area.value = curl Windows Text;
 }
 document.body.append Child (text Area);

 text Area.select();

 try {
 var successful = document.exec Command('copy');
 var msg = successful ? 'successful' : 'unsuccessful';
 console.log('Copying text command was ' + msg);
 } catch (err) {
 console.log('Oops, unable to copy');
 }

 document.body.remove Child (text Area);

 }
</script>

<form name="validation">

 
 <p></p>
 <input type="button" class="doc-button" style="font-size: 100%; padding: 2px 6px 3px 6px;" value="Get JSON" on Click="json (document.validation)"/>
 <p></p>
</form>
	<ul class="nav nav-tabs" id="validation Tab">
 <li class="active">[Curl for Unix](#validation Curl)</li>
 <li>[Curl for Windows](#validation Windows)</li>
 </ul>

			<pre style="word-break:break-all;">
			<code class="bash" id="curlwindowsvalue"></code>
			</pre>
			<button class="doc-button" onclick="copy To Clipboard Validation('Windows')">Copy to clipboard</button>

### Уведомление о сопоставлении карты Sale

#### Введение

Уведомление о сопоставлении карты Sale инициируется запросом HTTPS POST с использованием [URL-адресов](#api-url-sale-card-mapping-notification) и [параметров](#api-parameters-sale-card-mapping-notification).
 
Уведомление о сопоставлении карт позволяет сопоставлять учётные данные Consumer (телефон, e-mail, адрес выставления счёта, имя в Twitter и т. д.) с данными карты. Сопоставления можно использовать в транзакциях Transfer или Sale вместо номеров карт и иной информации о держателе карты. Payneteasy отправляет запрос уведомления о сопоставлении карты Sale на сервер/прокси Присоединяющейся стороны с созданной на своей стороне ссылкой на карту — {server Card Id}.
 
Сервер Присоединяющейся стороны сопоставляет {server Card Id} с созданным на своей стороне {client Card Id}. Затем этот {client Card Id} может быть сопоставлен в приложении или на сервере Присоединяющейся стороны с любыми данными Consumer из исходного запроса Perform sale. Это позволяет приложению Присоединяющейся стороны обрабатывать транзакции Sale или Transfer по электронному адресу Consumer, номеру телефона и т. д.
 
{unique Reference Card Id} остаётся прежним, если потребитель выполняет другую транзакцию с тем же номером карты, но, например, другой датой истечения срока. Присоединяющаяся сторона может использовать его для программ лояльности или контроля мошенничества.
 
Приложение Присоединяющейся стороны создаёт новые запросы Sale, используя {client Card Id} вместо данных исходной карты. Payneteasy отправляет этот {client Card Id} на сервер Присоединяющейся стороны в «Check sale request» и получает сопоставленный с ним {server Card Id} в «Check sale response» от сервера Присоединяющейся стороны, который используется для продолжения обработки этой транзакции.
 
{server Card Id} карты-источника или проверенной карты можно использовать для новых транзакций Sale и как источник или получатель для новых транзакций Transfer.
 

#### API URL

> **Note:** Это пример URL на сервере Присоединяющейся Стороны.

| Сервер Присоединяющейся Стороны |
|-----------------------------------------------------------|
| https://proxy.connectingpartyserver.com/sale/notification |

#### Параметры запроса

| Название параметра | Описание | Значение |
|--------------------------------------------|---------------------------------------------------------------|--------------------------------------------------------------------------------------------------|
| consumer | | `Необходимость`: Обязательно `Тип`: **Object** |
| consumer.device | | `Необходимость`: Обязательно `Тип`: **Object** |
| consumer.device.serial Number | Серийный номер устройства потребителя. | `Необходимость`: Обязательно `Тип`: String `Длина`: 1-50 |
| session | | `Необходимость`: Обязательно `Тип`: **Object** |
| session.access Token | Ключ токена доступа потребителя. | `Необходимость`: Обязательно `Тип`: String `Длина`: 32-128 |
| session.token | Session token транзакции sale. | `Необходимость`: Обязательно `Тип`: String `Длина`: 16-36 |
| source Card | | `Необходимость`: Опционально `Тип`: **Object** |
| source Card.bin | BIN исходной карты. | `Необходимость`: Опционально `Тип`: Integer |
| source Card.reference | | `Необходимость`: Опционально `Тип`: **Object** |
| source Card.reference.server Card Id | Ссылочный идентификатор исходной карты (на стороне сервера). | `Необходимость`: Опционально `Тип`: String `Length`: 1-64 |
| source Card.reference.unique Reference Card Id | Уникальный идентификатор исходной карты (на стороне сервера). | `Необходимость`: Опционально `Тип`: Integer |

#### Параметры успешного ответа

| Название параметра | Описание | Значение |
|------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------|
| invoice Id | Идентификатор транзакции sale. | `Тип`: String |
| session | | `Тип`: **Object** |
| session.check Signature | Контрольная сумма, сгенерированная hmac-sha1 (см. [Вычисление подписи](https://doc.payneteasy.ru/integration/api_development_tools.html.md)) из конкатенации session.nonce, endpoint Id и invoice Id. | `Тип`: String |
| session.nonce | Уникальная случайная строка, сгенерированная сервером Присоединяющейся стороны. | `Тип`: String |
| session.token | Session token транзакции sale. | `Тип`: String |

#### Параметры неуспешного ответа

| Название параметра | Описание | Значение |
|----------------------|-----------------------------------------------------------------------------------------------------------|-----------------------------|
| error | | `Тип`: **Object** |
| error.cause | Причина ошибки. Возможные значения: `FILTERED`, `INVALID_REQUEST`, `SERVER_FAILED`, `SERVER_UNAVAILABLE`. | `Тип`: Enum |
| error.code | Уникальный код ошибки. | `Тип`: String |
| error.message | Описание ошибки. | `Тип`: String |
| invoice Id | Идентификатор транзакции sale. | `Тип`: String |

#### Пример запроса

```json
{
  "consumer": {
    "device": {
      "serialNumber": "string"
    }
  },
  "session": {
    "accessToken": "string",
    "token":"string"
  },
  "sourceCard": {
    "bin": "integer",
    "reference": {
      "serverCardId": "string",
      "uniqueReferenceCardId": "integer"
    }
  }
}
```

#### Пример успешного ответа

```json
{
  "invoiceId": "string",
  "session": {
    "checkSignature": "string",
    "nonce": "string",
    "token": "string"
  }
}
```

#### Пример неуспешного ответа

```json
{
  "error": {
    "cause": "enum",
    "code": "string",
    "message": "string"
  },
  "invoiceId": "string"
}
```

### Sale статус

#### Введение

Sale статус инициируется через запрос HTTPS POST с использованием [URLs](#api-url-sale-status) и [parameters](#api-parameters-sale-status).
 
Sale статус запрос is made by Присоединяющаяся сторона’s app to Payneteasy to get the статус of sale транзакция. Payneteasy
 
Рекомендуется отправлять запрос статуса Sale в течение 2–3 минут с интервалом 3–5 секунд между запросами. Сервер Присоединяющейся стороны должен полагаться на callback для получения окончательного статуса.
 

#### API URL

> **Note:** Путь API URL не должен быть задан фиксированным значением, т.к. он может быть изменён позднее.

| Интеграционная среда | Производственная среда |
|-----------------------------------------------------------------------------------|--------------------------------------------------------------------------------|
| https://sandbox.payneteasy.ru/paynet/dapi/v1/sale/{endpoint Id}/{invoice Id}/status | https://gate.payneteasy.ru/paynet/dapi/v1/sale/{endpoint Id}/{invoice Id}/status |

#### Параметры запроса

| Название параметра | Описание | Значение |
|----------------------|-----------------------------------------------------------------------------|-------------------------------------------------------|
| session | | `Тип`: **Object** |
| session.access Token | The access token key received in Необязательное потребителя authentication. | `Тип`: String `Длина`: 32-128 |
| session.token | Session token транзакции sale. | `Тип`: String `Длина`: 16-36 |

#### Параметры успешного ответа

| Название параметра | Описание | Значение |
|------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|
| invoice Id | Идентификатор транзакции sale. | `Тип`: String |
| session | | `Тип`: **Object** |
| session.token | The session token of sale транзакция | `Тип`: String |
| state | Возможные значения: `PROCESSING`, `REDIRECT_REQUEST`, `APPROVED`, `DECLINED`. | `Тип`: Enum |
| bank Order Id | Обязательное if state is `APPROVED` or `DECLINED`. | `Необходимость`: Условно `Тип`: String `Длина`: 128 |
| redirect Url | Обязательное if state is `REDIRECT_REQUEST`. | `Необходимость`: Условно `Тип`: String `Длина`: 128 |
| order Id | Идентификатор заказа в системе обработки платежей. | `Необходимость`: Условно `Тип`: String |
| transaction | | `Необходимость`: Условно `Тип`: **Object** |
| transaction.amount Centis | Сумма денежного перевода в центах: 1,00 EUR = 100 центов. | `Необходимость`: Условно `Тип`: Integer |
| transaction.commission Centis | Сумма удержанной комиссии в центах (зависит от интеграции). | `Необходимость`: Условно `Тип`: Integer |
| transaction.order Created Date | Дата создания заказа в системе обработки платежей. | `Необходимость`: Условно `Тип`: String |
| transaction.transaction Created Date | Дата создания транзакции в системе обработки платежей. | `Необходимость`: Условно `Тип`: String |
| error Code | Код причины отклонения; может присутствовать, если состояние — `DECLINED`. | `Необходимость`: Опционально `Тип`: Integer |
| error Message | Сообщение о причине отклонения; может присутствовать, если состояние — `DECLINED`. | `Необходимость`: Опционально `Тип`: String `Длина`: 128 |
| secure3DAuth Status | Возможные значения: `AUTHENTICATED`, `NOT_AUTHENTICATED`, `UNSUPPORTED`. `UNSUPPORTED` означает, что карта не поддерживает 3-D Secure или процесс аутентификации 3DS завершился с неизвестным статусом. | `Необходимость`: Опционально `Тип`: Enum |
| random Sum Auth Status | Возможные значения: `AUTHENTICATED`, `NOT_AUTHENTICATED`. | `Необходимость`: Опционально `Тип`: Enum |

#### Параметры неуспешного ответа

| Название параметра | Описание | Значение |
|----------------------|------------------------------------------------------------------------------------------------------------------------------|-----------------------------|
| error | | `Тип`: **Object** |
| error.cause | Причина ошибки. Возможные значения: `FILTERED`, `INVALID_REQUEST`, `INTERNAL_ERROR`, `PROCESSING_FAILED`, `ORDER_NOT_FOUND`. | `Тип`: Enum |
| error.code | Уникальный код ошибки. | `Тип`: String |
| error.message | Описание ошибки. | `Тип`: String |
| invoice Id | Идентификатор транзакции sale. | `Тип`: String |

#### Пример запроса

```json
{
  "session": {
    "accessToken": "string",
    "token": "string"
  }
}
```

#### Пример успешного ответа

```json
{
  "bankOrderId": "string",
  "invoiceId": "string",
  "redirectUrl": "string",
  "session": {
    "token": "string"
  },
  "state": "enum"
}
```

#### Пример неуспешного ответа

```json
{
  "error": {
    "cause": "enum",
    "code": "string",
    "message": "string"
  },
  "invoiceId": "string"
}
```

#### Конструктор запросов

<meta http-equiv="Cache-Control" content="no-cache">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="../../_static/js/highlight/styles/default.css">
<script src="../../_static/js/highlight/highlight.pack.js"></script>

<script type="text/javascript">
$(document).ready (function(){ 
 $("#sale Status Tab a").click (function (e){
 	e.prevent Default();
 	$(this).tab('show');
 });
});
</script>

<script type="text/javascript">
 var curl Text ="";
 var curl Windows Text ="";
 var url = "";
 
 function json Sale Status (form) {
 
 var all To Json = {
					session: 	 {
								 access Token: form.access Token.value
								 , token: form.token.value }};

	json Data = JSON.stringify (all To Json, null, 0);
	
	if (document.sale Status.stage Sale Status.value == "gate") 
	 {url = 'https://gate.payneteasy.ru/paynet/dapi/v1/sale/' + form.endpoint Id.value + '/' + form.invoice Id.value + '/status';}
	else {url = 'https://sandbox.payneteasy.ru/paynet/dapi/v1/sale/' + form.endpoint Id.value + '/' + form.invoice Id.value + '/status';}
	
	curl Text = 'curl -v -H "Content-Type: application/json" -POST --data \\'' + json Data + '\\' ' + url;
	
	show Text("curlvalue Sale Status", curl Text);

	curl Windows Text = 'curl -v -H "Content-Type: application/json" -POST --data \\"' + json Data.replace(/"/g, '\\\\"') + '\\" ' + url;
	
	show Text("curlwindowsvalue Sale Status", curl Windows Text);

	$(document).ready (function() {
	$('pre code').each (function (i, block) {
	 hljs.highlight Block (block);
	 });
	});
 }
	
 function show Text (element Id, text) {
 var child = document.create Text Node (text);
 var element = document.get Element By Id (element Id);
 element.innerHTML ="";
 if (element.has Child Nodes()) {
 element.replace Child (child, element.first Child);
 } else {
 element.append Child (child);
 }
 }
	
 function show Form (f, elements) {
 var newdiv = document.create Element('div');
 newdiv.innerHTML = elements;
 f.append Child (newdiv);
 }

 function copy To Clipboard Sale Status (text) {
 var text Area = document.create Element("textarea");

 // Place in top-left corner of screen regardless of scroll position.
 text Area.style.position = 'fixed';
 text Area.style.top = 0;
 text Area.style.left = 0;

 // Ensure it has a small width and height. Setting to 1px / 1em
 // doesn't work as this gives a negative w/h on some browsers.
 text Area.style.width = '2em';
 text Area.style.height = '2em';

 // We don't need padding, reducing the size if it does flash render.
 text Area.style.padding = 0;

 // Clean up any borders.
 text Area.style.border = 'none';
 text Area.style.outline = 'none';
 text Area.style.box Shadow = 'none';

 // Avoid flash of white box if rendered for any reason.
 text Area.style.background = 'transparent';

 if (text === 'curl'){
 text Area.value = curl Text;
 } else {
 text Area.value = curl Windows Text;
 }
 document.body.append Child (text Area);

 text Area.select();

 try {
 var successful = document.exec Command('copy');
 var msg = successful ? 'successful' : 'unsuccessful';
 console.log('Copying text command was ' + msg);
 } catch (err) {
 console.log('Oops, unable to copy');
 }

 document.body.remove Child (text Area);

 }
</script>

<form name="sale Status">

 
 <p></p>
 <input type="button" class="doc-button" style="font-size: 100%; padding: 2px 6px 3px 6px;" value="Get JSON" on Click="json Sale Status (document.sale Status)"/>
 <p></p>
</form>
	<ul class="nav nav-tabs" id="sale Status Tab">
 <li class="active">[Curl for Unix](#sale Status Curl)</li>
 <li>[Curl for Windows](#sale Status Windows)</li>
 </ul>

			<pre style="word-break:break-all;">
			<code class="bash" id="curlwindowsvalue Sale Status"></code>
			</pre>
			<button class="doc-button" onclick="copy To Clipboard Sale Status('Windows')">Copy to clipboard</button>

### Уведомление о сопоставлении карты Transfer

#### Введение

Уведомление о сопоставлении карты Transfer инициируется запросом HTTPS POST с использованием [URL-адресов](#api-url-transfer-card-mapping-notification) и [параметров](#api-parameters-transfer-card-mapping-notification).
 
Уведомление о сопоставлении карт позволяет сопоставлять учётные данные Consumer (телефон, e-mail, адрес выставления счёта, имя в Twitter и т. д.) с данными карты. Сопоставления можно использовать в транзакциях Transfer или Sale вместо номеров карт и иной информации о держателе карты. Payneteasy отправляет запрос уведомления о сопоставлении карты Transfer на сервер/прокси Присоединяющейся стороны с созданной на своей стороне ссылкой на карту — {server Card Id}.
 
Сервер Присоединяющейся стороны сопоставляет {server Card Id} с созданным на своей стороне {client Card Id}. Затем {client Card Id} может быть сопоставлен в приложении или на сервере Присоединяющейся стороны с любыми данными Consumer из исходного запроса Perform transfer. Это позволяет приложению Присоединяющейся стороны обрабатывать транзакции Sale или Transfer по электронному адресу Consumer, номеру телефона и т. д.
 
{unique Reference Card Id} остаётся неизменным, если клиент выполняет другую проверку с тем же номером карты, но, например, с другой датой истечения срока действия. Присоединяющаяся сторона может использовать его для программ лояльности или контроля мошенничества.
 
Приложение Присоединяющейся стороны создаёт новые запросы Transfer, используя {client Card Id} вместо данных исходной или целевой карты. Payneteasy отправляет этот {client Card Id} на сервер Присоединяющейся стороны в «Check transfer request» и получает сопоставленный с ним {server Card Id} в «Check transfer response», который используется для продолжения обработки транзакции Transfer.
 
{server Card Id} исходной или проверенной карты можно использовать как источник или назначение для новых транзакций Transfer и Sale; {server Card Id} карты назначения можно использовать только как назначение для новых переводов.
 

#### API URL

> **Note:** Это пример URL на сервере Присоединяющейся Стороны.

| Сервер Присоединяющейся Стороны |
|---------------------------------------------------------------|
| https://proxy.connectingpartyserver.com/transfer/notification |

#### Параметры запроса

| Название параметра | Описание | Значение |
|-------------------------------------------------|-----------------------------------------------------------------|--------------------------------------------------------------------------------------------------|
| consumer | | `Необходимость`: Обязательно `Тип`: **Object** |
| consumer.device | | `Необходимость`: Обязательно `Тип`: **Object** |
| consumer.device.serial Number | Серийный номер устройства потребителя. | `Необходимость`: Обязательно `Тип`: String `Длина`: 1-50 |
| session | | `Необходимость`: Обязательно `Тип`: **Object** |
| session.access Token | Ключ токена доступа потребителя. | `Необходимость`: Обязательно `Тип`: String `Длина`: 32-128 |
| session.token | Token сессии транзакции transfer. | `Необходимость`: Обязательно `Тип`: String `Длина`: 16-36 |
| destination Card | | `Необходимость`: Опционально `Тип`: **Object** |
| destination Card.bin | BIN карты получателя. | `Необходимость`: Опционально `Тип`: Integer |
| destination Card.reference | | `Необходимость`: Опционально `Тип`: **Object** |
| destination Card.reference.server Card Id | Идентификатор ссылки на карту получателя (на стороне сервера). | `Необходимость`: Опционально `Тип`: String `Length`: 1-64 |
| destination Card.reference.unique Reference Card Id | Уникальный идентификатор карты получателя (на стороне сервера). | `Необходимость`: Опционально `Тип`: Integer |
| source Card | | `Необходимость`: Опционально `Тип`: **Object** |
| source Card.bin | BIN исходной карты. | `Необходимость`: Опционально `Тип`: Integer |
| source Card.reference | | `Необходимость`: Опционально `Тип`: **Object** |
| source Card.reference.server Card Id | Ссылочный идентификатор исходной карты (на стороне сервера). | `Необходимость`: Опционально `Тип`: String `Length`: 1-64 |
| source Card.reference.unique Reference Card Id | Уникальный идентификатор исходной карты (на стороне сервера). | `Необходимость`: Опционально `Тип`: Integer |

#### Параметры успешного ответа

| Название параметра | Описание | Значение |
|------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------|
| invoice Id | Идентификатор транзакции transfer. | `Тип`: String |
| session | | `Тип`: **Object** |
| session.check Signature | Контрольная сумма, сгенерированная hmac-sha1 (см. [Вычисление подписи](https://doc.payneteasy.ru/integration/api_development_tools.html.md)) из конкатенации session.nonce, endpoint Id и invoice Id. | `Тип`: String |
| session.nonce | Уникальная случайная строка, сгенерированная сервером Присоединяющейся стороны. | `Тип`: String |
| session.token | Token сессии транзакции transfer. | `Тип`: String |

#### Параметры неуспешного ответа

| Название параметра | Описание | Значение |
|----------------------|-----------------------------------------------------------------------------------------------------------|-----------------------------|
| error | | `Тип`: **Object** |
| error.cause | Причина ошибки. Возможные значения: `FILTERED`, `INVALID_REQUEST`, `SERVER_FAILED`, `SERVER_UNAVAILABLE`. | `Тип`: Enum |
| error.code | Уникальный код ошибки. | `Тип`: String |
| error.message | Описание ошибки. | `Тип`: String |
| invoice Id | Идентификатор транзакции transfer. | `Тип`: String |

#### Пример запроса

```json
{
  "consumer": {
    "device": {
      "serialNumber": "string"
    }
  },
  "destinationCard": {
    "bin": "integer",
    "reference": {
      "serverCardId": "string",
      "uniqueReferenceCardId": "integer"
      }
    },
  "session": {
    "accessToken": "string",
    "token":"string"
  },
  "sourceCard": {
    "bin": "integer",
    "reference": {
      "serverCardId": "string",
      "uniqueReferenceCardId": "integer"
    }
  }
}
```

#### Пример успешного ответа

```json
{
  "invoiceId": "string",
  "session": {
    "checkSignature": "string",
    "nonce": "string",
    "token": "string"
  }
}
```

#### Пример неуспешного ответа

```json
{
  "error": {
    "cause": "enum",
    "code": "string",
    "message": "string"
  },
  "invoiceId": "string"
}
```

### Transfer статус

#### Введение

Статус перевода инициируется через запрос HTTPS POST с использованием [URLs](#api-url-transfer-status) и [parameters](#api-parameters-transfer-status).
 
Funds transfer статус запрос is made by Присоединяющаяся сторона’s app to Payneteasy to get the статус of transfer транзакция. Payneteasy
 
Рекомендуется отправлять запрос статуса Transfer в течение 2–3 минут с интервалом 3–5 секунд между запросами. Сервер Присоединяющейся стороны должен полагаться на callback для окончательного статуса.
 

#### API URL

> **Note:** Путь API URL не должен быть задан фиксированным значением, т.к. он может быть изменён позднее.

| Интеграционная среда | Производственная среда |
|---------------------------------------------------------------------------------------|------------------------------------------------------------------------------------|
| https://sandbox.payneteasy.ru/paynet/dapi/v1/transfer/{endpoint Id}/{invoice Id}/status | https://gate.payneteasy.ru/paynet/dapi/v1/transfer/{endpoint Id}/{invoice Id}/status |

#### Параметры запроса

| Название параметра | Описание | Значение |
|----------------------|-----------------------------------------------------------------------------|-------------------------------------------------------|
| session | | `Тип`: **Object** |
| session.access Token | The access token key received in Необязательное потребителя authentication. | `Тип`: String `Длина`: 32-128 |
| session.token | Token сессии транзакции transfer. | `Тип`: String `Длина`: 16-36 |

#### Параметры успешного ответа

| Название параметра | Описание | Значение |
|------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|
| invoice Id | Идентификатор транзакции transfer. | `Тип`: String |
| session | | `Тип`: **Object** |
| session.token | Token сессии транзакции transfer. | `Тип`: String |
| state | Возможные значения: `PROCESSING`, `REDIRECT_REQUEST`, `APPROVED`, `DECLINED`. Если включены заданные Покупателем тарифы перевода, возвращается `TRANSFER_FEE_REQUEST`. | `Тип`: Enum |
| bank Order Id | Обязательное if state is `APPROVED` or `DECLINED`. | `Необходимость`: Условно `Тип`: String `Длина`: 128 |
| redirect Url | Обязательное if state is `REDIRECT_REQUEST`. | `Необходимость`: Условно `Тип`: String `Длина`: 128 |
| order Id | Идентификатор заказа в системе обработки платежей. | `Необходимость`: Условно `Тип`: String |
| transaction | | `Необходимость`: Условно `Тип`: **Object** |
| transaction.amount Centis | Сумма денежного перевода в центах: 1,00 EUR = 100 центов. | `Необходимость`: Условно `Тип`: Integer |
| transaction.commission Centis | Сумма удержанной комиссии в центах. | `Необходимость`: Условно `Тип`: Integer |
| transaction.order Created Date | Дата создания заказа в системе обработки платежей. | `Необходимость`: Условно `Тип`: String |
| transaction.transaction Created Date | Дата создания транзакции в системе обработки платежей. | `Необходимость`: Условно `Тип`: String |
| error Code | Код причины отклонения; может присутствовать, если состояние — `DECLINED`. | `Необходимость`: Опционально `Тип`: Integer |
| error Message | Сообщение о причине отклонения; может присутствовать, если состояние — `DECLINED`. | `Необходимость`: Опционально `Тип`: String `Длина`: 128 |
| secure3DAuth Status | Возможные значения: `AUTHENTICATED`, `NOT_AUTHENTICATED`, `UNSUPPORTED` означают, что карта не поддерживает 3-D Secure либо процесс аутентификации 3DS завершился с неизвестным статусом. | `Необходимость`: Опционально `Тип`: Enum |
| random Sum Auth Status | Возможные значения: `AUTHENTICATED`, `NOT_AUTHENTICATED`. | `Необходимость`: Опционально `Тип`: Enum |

#### Параметры успешного ответа для определённых клиентом тарифов Transfer

Ответ статуса Transfer содержит параметр state со значением TRANSFER_FEE_REQUEST и объект transfer Fee List со списком комиссий для возможных гейтов обработки. Каждый гейт обработки представлен собственным псевдонимом в параметре assigned Id. Значение TRANSFER_FEE_REQUEST параметра state существует только в потоке «Consumer defined transfer rates».
 
Когда транзакция достигает состояния TRANSFER_FEE_REQUEST, обработка останется приостановленной, пока не будет отправлен запрос Complete transfer.
 

| Название параметра | Описание | Значение |
|----------------------------------|--------------------------------------------------------------------------------------------------------------------------------|-----------------------------|
| transfer Fee List | | `Тип`: **Object** |
| transfer Fee List.assigned Id | Aliased платёж gateway название. | `Тип`: String |
| transfer Fee List.commission Centis | Сумма комиссии для удержания в центах: 1,00 EUR = 100 центов. | `Тип`: Integer |
| transfer Fee List.currency | Буквы верхнего регистра (alpha-код по ISO 4217). | `Тип`: String |
| state | Помимо значений из [Status Transfer](#api-transfer-status), только в этом процессе существует значение `TRANSFER_FEE_REQUEST`. | `Тип`: String |

#### Параметры неуспешного ответа

| Название параметра | Описание | Значение |
|----------------------|------------------------------------------------------------------------------------------------------------------------------|-----------------------------|
| error | | `Тип`: **Object** |
| error.cause | Причина ошибки. Возможные значения: `FILTERED`, `INVALID_REQUEST`, `INTERNAL_ERROR`, `PROCESSING_FAILED`, `ORDER_NOT_FOUND`. | `Тип`: Enum |
| error.code | Уникальный код ошибки. | `Тип`: String |
| error.message | Описание ошибки. | `Тип`: String |
| invoice Id | Идентификатор транзакции transfer. | `Тип`: String |

#### Пример запроса

```json
{
  "session": {
    "accessToken": "string",
    "token": "string"
  }
}
```

#### Пример успешного ответа

```json
{
  "bankOrderId": "string",
  "invoiceId": "string",
  "redirectUrl": "string",
  "session": {
    "token": "string"
  },
  "state": "enum"
}
```

#### Success Ответ Example for Потребитель defined transfer rates

 
**Следующая структура расширяет стандартное тело ответа о статусе Transfer (например, 2 обрабатывающих шлюза):**
 
 
```json
{
  "bankOrderId": "string",
  "invoiceId": "string",
  "redirectUrl": "string",
  "session": {
    "token": "string"
  },
  "state": "TRANSFER_FEE_REQUEST",
  "transferFeeList": [
    {
      "assignedId": "string",
      "commissionCentis": "integer",
      "currency": "string"
    },
    {
      "assignedId": "string",
      "commissionCentis": "integer",
      "currency": "string"
    }
  ]
}
```

#### Пример неуспешного ответа

```json
{
  "error": {
    "cause": "enum",
    "code": "string",
    "message": "string"
  },
  "invoiceId": "string"
}
```

#### Конструктор запросов

<meta http-equiv="Cache-Control" content="no-cache">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="../../_static/js/highlight/styles/default.css">
<script src="../../_static/js/highlight/highlight.pack.js"></script>

<script type="text/javascript">
$(document).ready (function(){ 
 $("#transfer Status Tab a").click (function (e){
 	e.prevent Default();
 	$(this).tab('show');
 });
});
</script>

<script type="text/javascript">
 var curl Text ="";
 var curl Windows Text ="";
 var url = "";
 
 function json Transfer Status (form) {
 
 var all To Json = {
					session: 	 {
								 access Token: form.access Token.value
								 , token: form.token.value }};

	json Data = JSON.stringify (all To Json, null, 0);
	
	if (document.transfer Status.stage Transfer Status.value == "gate") 
	 {url = 'https://gate.payneteasy.ru/paynet/dapi/v1/transfer/' + form.endpoint Id.value + '/' + form.invoice Id.value + '/status';}
	else {url = 'https://sandbox.payneteasy.ru/paynet/dapi/v1/transfer/' + form.endpoint Id.value + '/' + form.invoice Id.value + '/status';}
	
	curl Text = 'curl -v -H "Content-Type: application/json" -POST --data \\'' + json Data + '\\' ' + url;
	
	show Text("curlvalue Transfer Status", curl Text);

	curl Windows Text = 'curl -v -H "Content-Type: application/json" -POST --data \\"' + json Data.replace(/"/g, '\\\\"') + '\\" ' + url;
	
	show Text("curlwindowsvalue Transfer Status", curl Windows Text);

	$(document).ready (function() {
	$('pre code').each (function (i, block) {
	 hljs.highlight Block (block);
	 });
	});
 }
	
 function show Text (element Id, text) {
 var child = document.create Text Node (text);
 var element = document.get Element By Id (element Id);
 element.innerHTML ="";
 if (element.has Child Nodes()) {
 element.replace Child (child, element.first Child);
 } else {
 element.append Child (child);
 }
 }
	
 function show Form (f, elements) {
 var newdiv = document.create Element('div');
 newdiv.innerHTML = elements;
 f.append Child (newdiv);
 }

 function copy To Clipboard Transfer Status (text) {
 var text Area = document.create Element("textarea");

 // Place in top-left corner of screen regardless of scroll position.
 text Area.style.position = 'fixed';
 text Area.style.top = 0;
 text Area.style.left = 0;

 // Ensure it has a small width and height. Setting to 1px / 1em
 // doesn't work as this gives a negative w/h on some browsers.
 text Area.style.width = '2em';
 text Area.style.height = '2em';

 // We don't need padding, reducing the size if it does flash render.
 text Area.style.padding = 0;

 // Clean up any borders.
 text Area.style.border = 'none';
 text Area.style.outline = 'none';
 text Area.style.box Shadow = 'none';

 // Avoid flash of white box if rendered for any reason.
 text Area.style.background = 'transparent';

 if (text === 'curl'){
 text Area.value = curl Text;
 } else {
 text Area.value = curl Windows Text;
 }
 document.body.append Child (text Area);

 text Area.select();

 try {
 var successful = document.exec Command('copy');
 var msg = successful ? 'successful' : 'unsuccessful';
 console.log('Copying text command was ' + msg);
 } catch (err) {
 console.log('Oops, unable to copy');
 }

 document.body.remove Child (text Area);

 }
</script>

<form name="transfer Status">

 
 <p></p>
 <input type="button" class="doc-button" style="font-size: 100%; padding: 2px 6px 3px 6px;" value="Get JSON" on Click="json Transfer Status (document.transfer Status)"/>
 <p></p>
</form>
	<ul class="nav nav-tabs" id="transfer Status Tab">
 <li class="active">[Curl for Unix](#transfer Status Curl)</li>
 <li>[Curl for Windows](#transfer Status Windows)</li>
 </ul>

			<pre style="word-break:break-all;">
			<code class="bash" id="curlwindowsvalue Transfer Status"></code>
			</pre>
			<button class="doc-button" onclick="copy To Clipboard Transfer Status('Windows')">Copy to clipboard</button>

### Сценарии использования API

### /api/v2/auth-cash

#### Введение

Auth-cash инициируется запросом HTTPS POST с использованием указанных ниже [URL](#api-v2-auth-cash-url) и [параметров](#api-v2-auth-cash-request-parameters-url). Для аутентификации используйте [SHA-1](https://doc.payneteasy.ru/integration/general_api_usage/request_authentication_methods/sha.html.md). См. [статусы](https://doc.payneteasy.ru/integration/reference/statuses.html.md).

#### API URL

> **Note:** Путь API URL не должен быть задан фиксированным значением, т.к. он может быть изменён позднее.

| Интеграционная среда | Производственная среда |
|------------------------------------------------------------------|---------------------------------------------------------------|
| https://sandbox.payneteasy.ru/paynet/api/v2/auth-cash/ENDPOINTID | https://gate.payneteasy.ru/paynet/api/v2/auth-cash/ENDPOINTID |

#### Параметры запроса

| Название параметра | Описание | Значение |
|----------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------|
| client_orderid | Уникальный идентификатор заказа, присвоенный Присоединяющейся Стороной. | `Необходимость`: Обязательно `Тип`: String `Длина`: 128 |
| order_desc | Описание заказа. | `Необходимость`: Обязательно `Тип`: String `Длина`: 64k |
| amount | Сумма к оплате. Сумма должна быть указана в наибольших единицах с разделителем .. Например, 10.5 для USD означает 10 долларов США и 50 центов. | `Необходимость`: Обязательно `Тип`: Numeric `Длина`: 10 |
| currency | Валюта, в которой проводится операция (см. [Коды валют](https://doc.payneteasy.ru/integration/reference/currency_codes.html.md)). Примеры значений: USD для доллара США, EUR для европейского евро, RUB для российского рубля. | `Необходимость`: Обязательно `Тип`: String `Длина`: 3 |
| address1 | Адрес Плательщика, строка 1. (Обратите внимание, что в некоторых случаях невозможно отправить адрес длиной более 50 символов. Для получения более подробной информации обратитесь к вашему менеджеру.) | `Необходимость`: Обязательно `Тип`: String `Длина`: 256 |
| city | Город Плательщика. | `Необходимость`: Обязательно `Тип`: String `Длина`: 50 |
| zip_code | Почтовый индекс Плательщика. | `Необходимость`: Обязательно `Тип`: String `Длина`: 10 |
| country | Страна Плательщика. Для списка действительных кодов см. [Коды стран](https://doc.payneteasy.ru/integration/reference/country_codes.html.md). | `Необходимость`: Обязательно `Тип`: String `Длина`: 2 |
| phone | Полный международный номер телефона Плательщика, включая код страны. | `Необходимость`: Обязательно `Тип`: String `Длина`: 15 |
| email | Адрес электронной почты Плательщика. | `Необходимость`: Обязательно `Тип`: String `Длина`: 50 |
| ipaddress | IP-адрес Плательщика, передаётся для целей мониторинга мошенничества. | `Необходимость`: Обязательно `Тип`: String `Длина`: 45 |
| control | Контрольная сумма, сгенерированная [SHA-1](https://doc.payneteasy.ru/integration/general_api_usage/request_authentication_methods/sha.html.md). Строка для подписи представляет собой объединение следующих параметров: 1. <ENDPOINTID | ENDPOINTGROUPID (См.: [URL запроса](https://doc.payneteasy.ru/integration/api_v2_preauth-form.html.md)). 2. Параметр запроса:client_orderid. 3. Параметр запроса: amount (в младших единицах). 4. Параметр запроса: email, 5. merchant_control (Контрольный ключ, назначенный для учетной записи Присоединяющейся стороны в Payneteasy). | `Необходимость`: Обязательно `Тип`: String `Длина`: 40 |
| first_name | Имя Плательщика. | `Необходимость`: Обязательно `Тип`: String `Длина`: 50 |
| last_name | Фамилия Плательщика. | `Необходимость`: Обязательно `Тип`: String `Длина`: 50 |
| state | Штат плательщика (двухбуквенный код штата). Список допустимых кодов штатов см. в [обязательных кодах штатов](https://doc.payneteasy.ru/integration/reference/country_codes.html.md). Требуется для США, Канады и Австралии. | `Необходимость`: Условно `Тип`: String `Длина`: 2 |
| redirect_url | URL, where the Payer is redirected to upon completion of the transaction. Please note that redirection is performed in any case, no matter whether transaction is approved, declined or in any other final [status](https://doc.payneteasy.ru/integration/reference/statuses.html.md). Connecting Party must not use the parameters come along with the redirect HTTP Request to treat the status of the transaction. Instead Connecting Party can utilize server_callback_url or [status API command](https://doc.payneteasy.ru/integration/api_v2_status.html.md). Pass https://doc.payneteasy.ru if you have no need to return payer anywhere. Use either redirect_url or combination of redirect_success_url and redirect_fail_url, not both. | `Необходимость`: Опционально `Тип`: String `Длина`: 1024 |
| redirect_success_url | URL-адрес, на который будет перенаправлен Плательщик после получения успешного статуса транзакции (см. [Статусы транзакций](https://doc.payneteasy.ru/integration/reference/statuses.html.md)). Connecting Party must not use the parameters come along with the redirect HTTP Request to treat the status of the transaction. Instead Connecting Party can utilize server_callback_url or [status API command](https://doc.payneteasy.ru/integration/api_v2_status.html.md). Otherwise put https://doc.payneteasy.ru if there is no need to redirect Payer anywhere. Use either combination of redirect_success_url and redirect_fail_url or redirect_url, not both. | `Необходимость`: Опционально `Тип`: String `Длина`: 1024 |
| redirect_fail_url | URL-адрес, на который будет перенаправлен Плательщик после получения неуспешного статуса транзакции (см. [Статусы транзакций](https://doc.payneteasy.ru/integration/reference/statuses.html.md)). Connecting Party must not use the parameters come along with the redirect HTTP Request to treat the status of the transaction. Instead Connecting Party can utilize server_callback_url or [status API command](https://doc.payneteasy.ru/integration/api_v2_status.html.md). Pass https://doc2.codetime.net if there is no need to redirect Payer anywhere. Use either combination of redirect_fail_url and redirect_success_url or redirect_url, not both. | `Необходимость`: Опционально `Тип`: String `Длина`: 1024 |
| ssn | Последние четыре цифры номера социального страхования Плательщика. | `Необходимость`: Опционально `Тип`: Numeric `Длина`: 32 |
| birthday | Дата рождения Плательщика в формате YYYYMMDD. | `Необходимость`: Опционально `Тип`: Numeric `Длина`: 8 |
| cell_phone | Полный международный мобильный номер телефона Плательщика, включая код страны. | `Необходимость`: Опционально `Тип`: String `Длина`: 15 |
| site_url | URL-адрес сайта электронной коммерции, откуда происходит платеж. | `Необходимость`: Опционально `Тип`: String `Длина`: 128 |
| server_callback_url | URL-адрес server_callback_url, по которому будет отправлен обратный вызов с результатом транзакции. Присоединяющаяся сторона может использовать обратные вызовы для индивидуальной обработки завершения транзакции (например, для сбора данных о платежах в информационной системе Присоединяющейся стороны). Список параметров, включенных в обратный вызов, см. в разделе [Обратного вызова Присоединяющейся стороны](https://doc.payneteasy.ru/integration/merchant_callback_parameters.html.md). Данный параметр может быть передан вместо notify_url. При использовании server_callback_url платежный шлюз отправляет callback-уведомление только при получении финального статуса исходной транзакции. При использовании notify_url платежный шлюз отправляет уведомление при получении финального статуса и продолжает отправлять уведомления о всех последующих изменениях (возвраты, chargeback и др.). | `Необходимость`: Опционально `Тип`: String `Длина`: 1024 |
| notify_url | URL-адрес notify_url, по которому будет отправлен обратный вызов с результатом транзакции. Присоединяющаяся сторона может использовать обратные вызовы для индивидуальной обработки завершения транзакции (например, для сбора данных о платежах в информационной системе Присоединяющейся стороны). Список параметров, включенных в обратный вызов, см. в разделе [Обратного вызова Присоединяющейся стороны](https://doc.payneteasy.ru/integration/merchant_callback_parameters.html.md). Данный параметр может быть передан вместо server_callback_url. При использовании notify_url платежный шлюз отправляет уведомление при получении финального статуса и продолжает отправлять уведомления о всех последующих изменениях (возвраты, chargeback и др.). При использовании server_callback_url платежный шлюз отправляет callback-уведомление только при получении финального статуса исходной транзакции. | `Необходимость`: Опционально `Тип`: String `Длина`: 1024 |
| preferred_language | Двухбуквенный код языка плательщика для многоязычных счетов. | `Необходимость`: Опционально `Тип`: String `Длина`: 2 |

#### Параметры ответа

> **Note:** Ответ имеет заголовок Content-Type: text/html;charset=utf-8. Все поля имеют кодировку x-www-form-urlencoded, с символом (0xA) в конце значения каждого параметра.

| Параметры ответа | Описание |
|--------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| type | Тип ответа. Может принимать такие значения как: async-response, validation-error, error и т.д. Если тип ответа validation-error или error, параметры error-message и error-code будут содержать детали ошибки. |
| paynet-order-id | Идентификатор заказа, присвоенный Payneteasy. |
| merchant-order-id | Идентификатор заказа Присоединяющейся Стороны. |
| serial-number | Уникальный номер, присваиваемый сервером Payneteasy конкретному запросу от Присоединяющейся стороны. |
| end-point-id | Идентификатор терминала, используемый для транзакции. |
| error-message | Для транзакций в статусе error этот параметр будет содержать причину отклонения или сведения об ошибке. |
| error-code | Код ошибки для транзакций в статусе error. |

#### Пример запроса

```http
POST /paynet/api/v2/auth-cash/46760 HTTP/1.1
Host: sandbox.payneteasy.ru
User-Agent: curl/7.83.0
Accept: */*
Content-Length: 592
Content-Type: application/x-www-form-urlencoded
Connection: close

client_orderid=inv3982750
&order_desc=Test Order Описание
&first_name=John
&last_name=Smith
&ssn=1267
&birthday=19820115
&address1=100 Main st
&city=Seattle&state=WA
&zip_code=98102
&country=US
&phone=+12063582043
&cell_phone=+19023384543
&amount=55
&email=john.smith@gmail.com
&currency=USD
&ipaddress=65.153.12.232
&site_url=https://doc2.codetime.net
&purpose=user_account1
&redirect_url=http://sandbox.payneteasy.ru/doc/dummy.htm
&server_callback_url=https://httpstat.us/200
&merchant_data=VIP customer
&control=ce2dcc2b307c123242b9867cb0ce15617b8ee7f9
&preferred_language=en
```

#### Пример успешного ответа

```http
HTTP/1.1 200
Server: server
Date: Wed, 14 Jun 2023 08:43:52 GMT
Content-Type: text/html;charset=utf-8
Connection: close
Vary: Accept-Encoding
X-XSS-Protection: 1
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000
Content-Language: en-US
Strict-Transport-Security: max-age=31536000
Content-Length: 146

type=async-response
&serial-number=00000000-0000-0000-0000-000002eb1adf
&merchant-order-id=inv3982750
&paynet-order-id=7174243
&end-point-id=46760
```

#### Пример неуспешного ответа

```http
HTTP/1.1 200
Server: server
Date: Wed, 14 Jun 2023 08:43:52 GMT
Content-Type: text/html;charset=utf-8
Connection: close
Vary: Accept-Encoding
X-XSS-Protection: 1
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000
Content-Language: en-US
Strict-Transport-Security: max-age=31536000
Content-Length: 146

type=validation-error
&serial-number=00000000-0000-0000-0000-000002ddb0d4
&error-message=Project+with+currency+RUB+does+not+apply+request+with+currency+USD
&error-code=16
```

#### Коллекция Postman

<div class="postman-run-button"
 data-postman-action="collection/fork"
 data-postman-var-1="23519287-4c3c77c4-4d17-46d5-89f5-c0e03a9fd359"
 data-postman-collection-url="entity Id=23519287-4c3c77c4-4d17-46d5-89f5-c0e03a9fd359&entity Type=collection&workspace Id=7be78bd7-9f10-4be9-a60e-bd36ff1b6783"
 data-postman-param="env%5BPayment%20gateway%20ENV%5D=W3sia2V5IjoiVVJMIiwidm FsdWUi Oi IiLCJlbm FibGVk Ijp0cn VlLCJ0eXBl IjoiZGVmYXVsdCJ9XQ=="></div>
<script type="text/javascript">
 (function (p,o,s,t,m,a,n) {
 !p[s] && (p[s] = function () { (p[t] || (p[t] = [])).push (arguments); });
 !o.get Element By Id (s+t) && o.get Elements By Tag Name("head")[0].append Child((
 (n = o.create Element("script")),
 (n.id = s+t), (n.async = 1), (n.src = m), n
 ));
 }(window, document, "_pm", "Postman Run Object", "https://run.pstmn.io/button.js"));
 var env Name = "Payment gateway ENV";
 var env Data = {
 URL:'sandbox.payneteasy.ru' + "/" + 'paynet'
 };
 \_pm('env.replace', env Name, env Data);
</script>

#### Конструктор запросов

<meta http-equiv="Cache-Control" content="no-cache">
<script src="../_static/js/crypto-js/sha1.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="../_static/js/highlight/styles/default.css">
<script src="../_static/js/highlight/highlight.pack.js"></script>

<script type="text/javascript">
$(document).ready (function(){ 
 $("#payment Form Request Tab a").click (function (e){
 	e.prevent Default();
 	$(this).tab('show');
 });
});
</script>

<script type="text/javascript">
		var paymentform_curl Request Text = "";
 
		var paymentform_php Request Text = "";
		
		var paymentform_ruby Request Text = "";
		var paymentform_java Request Text = "";

 function paymentform_sign (form) {

 if (form.elements['server_callback_url'].value && form.elements['notify_url'].value) {
			$(".errorinfo").show();
			return false;
		} else {
			$(".errorinfo").hide();
		}

 var signed Text = "";

		var curl Text = "";

		var sandbox = "";
		var params = "";
	 var url = "";
		var control = "";

 var amount Info One = document.get Element By Id("amount Warning One");

	var xhttp = new XMLHttp Request();
 xhttp.onreadystatechange = function() {
 if (xhttp.ready State == 4 && xhttp.status == 200) {
	 if (url == "../_static/examples/PHP/params_no_header_PHP_new.txt"){
 paymentform_php Request Text = xhttp.response Text;}
		else if (url == "../_static/examples/Ruby/params_no_header_Ruby (for new version).txt"){
		 paymentform_ruby Request Text = xhttp.response Text;}
		else{
		 paymentform_java Request Text = xhttp.response Text;}

 }
 }

	url = "../_static/examples/PHP/params_no_header_PHP_new.txt";
 xhttp.open("GET", url, false);
 xhttp.send();
	url = "../_static/examples/Ruby/params_no_header_Ruby (for new version).txt";
 xhttp.open("GET", url, false);
 xhttp.send();
 url = "../_static/examples/Java/params_java.txt";
 xhttp.open("GET", url, false);
 xhttp.send();

 for (var e = 0; e < form.elements.length; ++e) {
 var input = form.elements[e];
 if (input.name != null)
 {
 if (input.name.substring(0, 5) == "sha1_")
 if (input.value != null)
 if (input.value != "")
 if (!(input.type == "checkbox" || input.type == "radio") || input.checked)
 {
 if (input.name == "sha1_amount")
 { var amount To Fix One = input.value \* 100;
 var fixed Amount One = amount To Fix One.to Fixed(0);
 if (fixed Amount One != amount To Fix One)
 { $('#amount Warning One').css("display", "block");amount Info One.innerHTML = amount Info One.innerHTML.replace("​", "Possible floating point imprecision (for more information check Floating Point Math)");}
 else {$('#amount Warning One').css("display", "none");amount Info One.innerHTML = amount Info One.innerHTML.replace("Possible floating point imprecision (for more information check Floating Point Math)", "​");}
 signed Text = signed Text + fixed Amount One;}
 else
 {signed Text = signed Text + input.value;}
 }
 if (input.value != null && input.name != null)
 if (input.value != "" && input.name != "" && input.name != "operationname")
 if (input.name.substring(0, 5) == "sha1_")
 {
 if (input.name != "sha1_merchant_control" && input.name != "sha1_endpointid"){
 curl Text = curl Text + input.name.substring(5) + "=" + input.value + "&";

								 params += " '" + input.name.substring(5) + "' => '" + input.value + "', \\n";

								 }
 }
 else {
 curl Text = curl Text + input.name + "=" + input.value + "&";

							 params += " '" + input.name + "' => '" + input.value + "', \\n";
							 }
 }
 }

		sandbox = 'https://sandbox.payneteasy.ru/paynet/api/v2/' + 'auth-cash' + '/' +
 document.payment Formsale.sha1_endpointid.value;

		paymentform_php Request Text = paymentform_php Request Text.replace("{$generated parameters with values code}", params);
		paymentform_php Request Text = paymentform_php Request Text.replace("{$sandbox}", sandbox);

		paymentform_ruby Request Text = paymentform_ruby Request Text.replace("{$generated parameters with values code}", params);
		paymentform_ruby Request Text = paymentform_ruby Request Text.replace("{$sandbox}", sandbox);

	 control = " 'control' => '" + CryptoJS.SHA1 (signed Text) + "'";
		paymentform_php Request Text = paymentform_php Request Text.replace(/{\\$identifier Type Name}/g, 'auth-cash'.match(/\\/group/) ? 'group Id' : 'endpoint Id');
		paymentform_php Request Text = paymentform_php Request Text.replace("{$endpoint Or Group Id}", document.payment Formsale.sha1_endpointid.value);
		paymentform_php Request Text = paymentform_php Request Text.replace("{$merchant Control}", document.payment Formsale.sha1_merchant_control.value);
		paymentform_php Request Text = paymentform_php Request Text.replace("{$additional vars}", '');
		paymentform_php Request Text = paymentform_php Request Text.replace("{$sign Function Call}", 'sign Payment Request($request Fields, $' + ('auth-cash'.match(/\\/group/) ? 'group Id' : 'endpoint Id') + ', $merchant Control)');

		paymentform_php Request Text = paymentform_php Request Text.replace("{$control}", control);
		paymentform_ruby Request Text = paymentform_ruby Request Text.replace("{$control}", control);

		paymentform_curl Request Text = 'curl --data "' +
 curl Text +
 "control=" + CryptoJS.SHA1 (signed Text) +
 '" https://sandbox.payneteasy.ru/paynet/api/v2/' + 'auth-cash' + '/' +
 document.payment Formsale.sha1_endpointid.value;
	 paymentform_java Request Text = paymentform_java Request Text.replace("{$has Headers}", "false");
 paymentform_java Request Text = paymentform_java Request Text.replace("{$targetURL}", sandbox);
		paymentform_java Request Text = paymentform_java Request Text.replace("{$url Parameters}", curl Text);
		paymentform_java Request Text = paymentform_java Request Text.replace("{$control Parameters}", signed Text);

		show Text("payment Formphpvalue" , paymentform_php Request Text);

		show Text("payment Formrubyvalue" , paymentform_ruby Request Text);
		show Text("payment Formjavavalue" , paymentform_java Request Text);

 show Text("payment Formsignedvalue" , signed Text);
 show Text("payment Formsha1value" , CryptoJS.SHA1 (signed Text));
 show Text("payment Formcurlvalue" , paymentform_curl Request Text);
		 $(document).ready (function() {
 $('pre code').each (function (i, block) {
 hljs.highlight Block (block);
 });
 });
 return false;
 }

function show Text (element Id, text) {
 var child = document.create Text Node (text);
 var element = document.get Element By Id (element Id);
		element.innerHTML ="";
 if (element.has Child Nodes()) {
 element.replace Child (child, element.first Child);
 } else {
 element.append Child (child);
 }
 }

 function rand Inv1 (c) {
 document.get Element By Id (c).value = "inv" + Math.floor (Math.random()\*10000000);
 }
function copy To Clipboard Request_paymentform (text) {
 var text Area = document.create Element("textarea");

 // Place in top-left corner of screen regardless of scroll position.
 text Area.style.position = 'fixed';
 text Area.style.top = 0;
 text Area.style.left = 0;

 // Ensure it has a small width and height. Setting to 1px / 1em
 // doesn't work as this gives a negative w/h on some browsers.
 text Area.style.width = '2em';
 text Area.style.height = '2em';

 // We don't need padding, reducing the size if it does flash render.
 text Area.style.padding = 0;

 // Clean up any borders.
 text Area.style.border = 'none';
 text Area.style.outline = 'none';
 text Area.style.box Shadow = 'none';

 // Avoid flash of white box if rendered for any reason.
 text Area.style.background = 'transparent';

 if (text == 'curl'){
	text Area.value = paymentform_curl Request Text;
 } else if (text =='php'){
	text Area.value = paymentform_php Request Text;
 } else if (text =='ruby'){
 text Area.value = paymentform_ruby Request Text;
 } else{
 text Area.value = paymentform_java Request Text;}
 document.body.append Child (text Area);

 text Area.select();

 try {
 var successful = document.exec Command('copy');
 var msg = successful ? 'successful' : 'unsuccessful';
 console.log('Copying text command was ' + msg);
 } catch (err) {
 console.log('Oops, unable to copy');
 }

 document.body.remove Child (text Area);

 }
</script>

<form name="payment Formsale">

 
 <p></p>
 <input type="button" class="doc-button" style="font-size: 100%; padding: 2px 6px 3px 6px;" value="Sign auth-cash Request" onclick="paymentform_sign (document.payment Formsale)" />
 <p></p>
</form>

<ul class="nav nav-tabs" id="payment Form Request Tab">
 <li class="active">[CURL](#payment FormCURL)</li>
 <li>[PHP](#payment FormPHP)</li>
 <li>[Ruby](#payment Form Ruby)</li>
 <li>[Java](#payment Form Java)</li>
</ul>

 <button class="doc-button" onclick="copy To Clipboard Request_paymentform('php')">Copy to clipboard</button>
 <pre>
			<code class="php" id="payment Formphpvalue"></code>
		</pre>

 <button class="doc-button" onclick="copy To Clipboard Request_paymentform('ruby')">Copy to clipboard</button>
 <pre>
			<code class="language-ruby" id="payment Formrubyvalue"></code>
		</pre>

 <button class="doc-button" onclick="copy To Clipboard Request_paymentform('java')">Copy to clipboard</button>
 <pre>
			<code class="language-java" id="payment Formjavavalue"></code>
		</pre>

### /api/v2/capture

#### Введение

Списание инициируется через запрос HTTPS POST на указанный ниже [URL](#api-v2-capture-request-url) с использованием указанных [параметров](#api-v2-capture-request-parameters). Для аутентификации запроса используется [SHA-1](https://doc.payneteasy.ru/integration/general_api_usage/request_authentication_methods/sha.html.md). Списание может быть вызвано только по предавторизации в конечном успешном статусе. См. [Статусы транзакций](https://doc.payneteasy.ru/integration/reference/statuses.html.md).

#### API URL

> **Note:** Путь API URL не должен быть задан фиксированным значением, т.к. он может быть изменён позднее.

| Интеграционная среда | Производственная среда |
|---------------------------------------------------------------------------|------------------------------------------------------------------------|
| https://sandbox.payneteasy.ru/paynet/api/v2/capture/ENDPOINTID | https://gate.payneteasy.ru/paynet/api/v2/capture/ENDPOINTID |
| https://sandbox.payneteasy.ru/paynet/api/v2/capture/group/ENDPOINTGROUPID | https://gate.payneteasy.ru/paynet/api/v2/capture/group/ENDPOINTGROUPID |

#### Параметры запроса

> **Note:** Запрос должен иметь заголовок content-type=application/x-www-form-urlencoded.

| Параметры запроса | Описание |
|---------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| login | Логин Присоединяющейся Стороны в Платёжном Шлюзе. |
| client_orderid | Идентификатор заказа Присоединяющейся Стороны для транзакции, статус которой запрашивается. |
| orderid | Номер заказа в системе Payneteasy |
| currency | Валюта списания транзакции (см. [коды валют](https://doc.payneteasy.ru/integration/reference/currency_codes.html.md)). Примеры: USD для доллара США, EUR для евро. Этот параметр может передаваться или не передаваться. |
| amount | Сумма списания. Сумму необходимо указать в старших единицах с разделителем .. Например, 10.5 для USD означает 10 долларов США и 50 центов. Этот параметр может передаваться или не передаваться. |
| control | Контрольная сумма, сгенерированная [SHA-1](https://doc.payneteasy.ru/integration/general_api_usage/request_authentication_methods/sha.html.md). Строка для подписи представляет собой объединение следующих параметров: 1. Параметр запроса:login. 2. Параметр запроса: merchant-order-id. 3. Параметр запроса: paynet-order-id. 4. Параметр запроса:amount в минимальных денежных единицах (если отправлен). 5. Параметр запроса: currency (если отправлена сумма). 6. merchant_control (Контрольный ключ, назначенный для учетной записи Присоединяющейся Cтороны в Payneteasy). |

#### Параметры ответа

> **Note:** Ответ имеет заголовок Content-Type: text/html;charset=utf-8. Все поля имеют кодировку x-www-form-urlencoded, с символом (0xA) в конце значения каждого параметра.

| Параметры ответа | Описание |
|--------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| type | Тип ответа. Может принимать такие значения как: async-response, validation-error, error и т.д. Если тип ответа validation-error или error, параметры error-message и error-code будут содержать детали ошибки. |
| paynet-order-id | Идентификатор заказа, присвоенный Payneteasy. |
| merchant-order-id | Идентификатор заказа Присоединяющейся Стороны. |
| serial-number | Уникальный номер, присваиваемый сервером Payneteasy конкретному запросу от Присоединяющейся стороны. |
| error-message | Для транзакций в статусе error этот параметр будет содержать причину отклонения или сведения об ошибке. |
| error-code | Код ошибки для транзакций в статусе error. |
| end-point-id | Идентификатор терминала, используемый для транзакции. |

#### Пример запроса

```http
POST /paynet/api/v2/capture/39914 HTTP/1.1
Host: sandbox.payneteasy.ru
User-Agent: curl/7.83.0
Accept: */*
Content-Length: 119
Content-Type: application/x-www-form-urlencoded
Connection: close

login=TestMerchant
&client_orderid=902B4FF5
&orderid=6863088
&amount=345
&currency=USD
&control=da832c0fcff0105728e26465d5f99e6f83179a45
```

#### Пример успешного ответа

```http
HTTP/1.1 200 OK
Server: server
Date: Mon, 22 Aug 2022 13:15:19 GMT
Content-Type: text/html;charset=utf-8
Connection: close
Vary: Accept-Encoding
X-XSS-Protection: 1
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000
Content-Language: en-US
Strict-Transport-Security: max-age=31536000
Content-Length: 140

type=async-response
&serial-number=00000000-0000-0000-0000-000002ddb06a
&merchant-order-id=902B4FF5
&paynet-order-id=6863088
&end-point-id=37211
```

#### Пример неуспешного ответа

```http
HTTP/1.1 200 OK
Server: server
Date: Mon, 22 Aug 2022 12:59:09 GMT
Content-Type: text/html;charset=utf-8
Connection: close
Vary: Accept-Encoding
X-XSS-Protection: 1
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000
Content-Language: en-US
Strict-Transport-Security: max-age=31536000
Content-Length: 154

pe=validation-error
&serial-number=00000000-0000-0000-0000-000002ddb06b
&error-message=Can+not+make+capture+for+order+state+AUTH_3D_VALIDATING
&error-code=27
```

#### Open API Collection

Open this method in the OpenAPI Reference

<a class="openapi-reference-button" href="/openapi-doc/#POST/api/v2/capture/{endpoint Id}" target="_blank" rel="noopener">View in OpenAPI <svg xmlns="http://www.w3.org/2000/svg" view Box="0 0 24 24" fill="none" stroke="current Color" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg></a>

#### Коллекция Postman

<div class="postman-run-button"
data-postman-action="collection/fork"
data-postman-var-1="23519287-5c1f5a93-3367-4fde-bb8e-c047dcf05710"
data-postman-collection-url="entity Id=23519287-5c1f5a93-3367-4fde-bb8e-c047dcf05710&entity Type=collection&workspace Id=7be78bd7-9f10-4be9-a60e-bd36ff1b6783"
data-postman-param="env%5BPayment%20gateway%20ENV%5D=W3sia2V5IjoiVVJMIiwidm FsdWUi Oi IiLCJlbm FibGVk Ijp0cn VlLCJ0eXBl IjoiZGVmYXVsdCJ9XQ=="></div>
<script type="text/javascript">
 (function (p,o,s,t,m,a,n) {
 !p[s] && (p[s] = function () { (p[t] || (p[t] = [])).push (arguments); });
 !o.get Element By Id (s+t) && o.get Elements By Tag Name("head")[0].append Child((
 (n = o.create Element("script")),
 (n.id = s+t), (n.async = 1), (n.src = m), n
 ));
 }(window, document, "_pm", "Postman Run Object", "https://run.pstmn.io/button.js"));
 var env Name = "Payment gateway ENV";
	 var env Data = {
 URL:'sandbox.payneteasy.ru' + "/" + 'paynet'
 };
 \_pm('env.replace', env Name, env Data);
</script>

#### Конструктор запросов

<meta http-equiv="Cache-Control" content="no-cache">
<script src="../_static/js/generate_card_number.js"></script>
<script src="../_static/js/crypto-js/sha1.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="../_static/js/highlight/styles/default.css">
<script src="../_static/js/highlight/highlight.pack.js"></script>

<script type="text/javascript">
$(document).ready (function(){ 
 $("#capture Request Tab a").click (function (e){
 	e.prevent Default();
 	$(this).tab('show');
 });
});
</script>

<script type="text/javascript">
		var capture Request Curl Text = "";
 
		var capture Request Php Text = "";
		
		var capture Request Ruby Text = "";
		var capture Request Java Text = "";

function sign_capture (form) {
 var signed Text = "";
		
		var curl Text = "";
		
		var sandbox = "";
		var params = "";
	 var url = "";
		var control = "";

	 var amount Info One = document.get Element By Id("amount Warning One");

	var xhttp = new XMLHttp Request();
 xhttp.onreadystatechange = function() {
 if (xhttp.ready State == 4 && xhttp.status == 200) {
	 if (url == "../_static/examples/PHP/params_no_header_PHP_new.txt"){
 capture Request Php Text = xhttp.response Text;}
		else if (url == "../_static/examples/Ruby/params_no_header_Ruby (for new version).txt"){
		 capture Request Ruby Text = xhttp.response Text;}
		else {
		 capture Request Java Text = xhttp.response Text;}
 }
 }
	
	url = "../_static/examples/PHP/params_no_header_PHP_new.txt";
 xhttp.open("GET", url, false);
 xhttp.send();
	url = "../_static/examples/Ruby/params_no_header_Ruby (for new version).txt";
 xhttp.open("GET", url, false);
 xhttp.send();
 url = "../_static/examples/Java/params_java.txt";
 xhttp.open("GET", url, false);
 xhttp.send();
	
 for (var e = 0; e < form.elements.length; ++e) {
 var input = form.elements[e];
 if (input.name != null) 
 {
 if (input.name.substring(0, 5) == 
				 "sha1_") 
 if (input.value != null) 
 if (input.value != "") 
 if (!(input.type == "checkbox" || input.type == "radio") || input.checked)
 {
 if (input.name == "sha1_amount")
 { var amount To Fix One = input.value \* 100;
 var fixed Amount One = amount To Fix One.to Fixed(0);
 if (fixed Amount One != amount To Fix One)
 { $('#amount Warning One').css("display", "block");amount Info One.innerHTML = amount Info One.innerHTML.replace("​", "Possible floating point imprecision (for more information check Floating Point Math)");}
 else {$('#amount Warning One').css("display", "none");amount Info One.innerHTML = amount Info One.innerHTML.replace("Possible floating point imprecision (for more information check Floating Point Math)", "​");}
 signed Text = signed Text + fixed Amount One;}
 else
 {signed Text = signed Text + input.value;}
 }
 if (input.value != null && input.name != null) 
 if (input.value != "" && input.name != "" && input.name != "operationname") 
 if (input.name.substring(0, 5) == "sha1_")
 {
 if (input.name != "sha1_merchant_control"){
 curl Text = curl Text + input.name.substring(5) + "=" + input.value + "&";
								 params += " '" + input.name.substring(5) + "' => '" + input.value + "', \\n";						 
 }
							 }
 else 
 {
 if (input.name != "endpointid"){
								curl Text = curl Text + input.name + "=" + input.value + "&";
								params += " '" + input.name + "' => '" + input.value + "', \\n";
								}								
 }
 }
 }

		sandbox = 'https://sandbox.payneteasy.ru/paynet/api/v2/' + document.capture.operationname.value + '/' + document.capture.endpointid.value;
		
		capture Request Php Text = capture Request Php Text.replace("{$generated parameters with values code}", params);
		capture Request Php Text = capture Request Php Text.replace("{$sandbox}", sandbox);
		
		capture Request Ruby Text = capture Request Ruby Text.replace("{$generated parameters with values code}", params);
		capture Request Ruby Text = capture Request Ruby Text.replace("{$sandbox}", sandbox);
		
		control = " 'control' => '" + CryptoJS.SHA1 (signed Text) + "'";
		capture Request Php Text = capture Request Php Text.replace(/{\\$identifier Type Name}/g, document.capture.operationname.value.match(/\\/group/) ? 'group Id' : 'endpoint Id');
		capture Request Php Text = capture Request Php Text.replace("{$endpoint Or Group Id}", document.capture.endpointid.value);
		capture Request Php Text = capture Request Php Text.replace("{$merchant Control}", document.capture.sha1_merchant_control.value);
		capture Request Php Text = capture Request Php Text.replace("{$additional vars}", '');
		capture Request Php Text = capture Request Php Text.replace("{$sign Function Call}", 'sign Account Verification Request($request Fields, $' + (document.capture.operationname.value.match(/\\/group/) ? 'group Id' : 'endpoint Id') + ', $merchant Control)');

		
		capture Request Php Text = capture Request Php Text.replace("{$control}", control);
		capture Request Ruby Text = capture Request Ruby Text.replace("{$control}", control);
		capture Request Java Text = capture Request Java Text.replace("{$targetURL}", sandbox);
		capture Request Java Text = capture Request Java Text.replace("{$has Headers}", "false");
	 capture Request Java Text = capture Request Java Text.replace("{$url Parameters}", curl Text);
	 capture Request Java Text = capture Request Java Text.replace("{$control Parameters}", signed Text);

		
		capture Request Curl Text = 'curl --data "' +
 curl Text +
 "control=" + CryptoJS.SHA1 (signed Text) +
 '" https://sandbox.payneteasy.ru/paynet/api/v2/' + document.capture.operationname.value + '/' +
 document.capture.endpointid.value;
		
		show Text("capture Requestphpvalue" , capture Request Php Text);
		
		show Text("capture Requestrubyvalue" , capture Request Ruby Text);
		show Text("capture Requestjavavalue" , capture Request Java Text);

 show Text("capture Requestsignedvalue" , signed Text);
 show Text("capture Requestsha1value" , CryptoJS.SHA1 (signed Text));
 show Text("capture Requestcurlvalue" , capture Request Curl Text);
		$(document).ready (function() {
 $('pre code').each (function (i, block) {
 hljs.highlight Block (block);
 });
 }); 
 return false;
 }

 function show Text (element Id, text) {
 var child = document.create Text Node (text);
 var element = document.get Element By Id (element Id);
		element.innerHTML ="";		
 if (element.has Child Nodes()) {
 element.replace Child (child, element.first Child);
 } else {
 element.append Child (child);
 }
 }
	
	
function copy To Clipboard Capture Request (text) {
 var text Area = document.create Element("textarea");
	
 // Place in top-left corner of screen regardless of scroll position.
 text Area.style.position = 'fixed';
 text Area.style.top = 0;
 text Area.style.left = 0;

 // Ensure it has a small width and height. Setting to 1px / 1em
 // doesn't work as this gives a negative w/h on some browsers.
 text Area.style.width = '2em';
 text Area.style.height = '2em';

 // We don't need padding, reducing the size if it does flash render.
 text Area.style.padding = 0;

 // Clean up any borders.
 text Area.style.border = 'none';
 text Area.style.outline = 'none';
 text Area.style.box Shadow = 'none';

 // Avoid flash of white box if rendered for any reason.
 text Area.style.background = 'transparent';

 if (text == 'curl'){
	text Area.value = capture Request Curl Text;
 } else if ( text =='php'){
	text Area.value = capture Request Php Text;
 }else if ( text =='ruby'){
	text Area.value = capture Request Ruby Text;
 } else{
 text Area.value = capture Request Java Text;
 }
 document.body.append Child (text Area);

 text Area.select();

 try {
 var successful = document.exec Command('copy');
 var msg = successful ? 'successful' : 'unsuccessful';
 console.log('Copying text command was ' + msg);
 } catch (err) {
 console.log('Oops, unable to copy');
 }

 document.body.remove Child (text Area);

 }
</script>

<form name="capture">

 <select class="doc-select" name="operationname" size="1">
 <option value="capture">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;capture (by ENDPOINTID)</option>
 <option value="capture/group">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;capture (by ENDPOINTGROUPID)</option>
 </select>
 
 <p></p>
 <input type="button" class="doc-button" style="font-size: 100%; padding: 2px 6px 3px 6px;" value="Sign capture Request" onclick="sign_capture (document.capture)" />
 <p></p>
</form>

<ul class="nav nav-tabs" id="capture Request Tab">
 <li class="active">[CURL](#capture RequestCURL)</li>
 <li>[PHP](#capture RequestPHP)</li>
 <li>[Ruby](#capture Request Ruby)</li>
 <li>[Java](#capture Request Java)</li>
</ul>

		<button class="doc-button" onclick="copy To Clipboard Capture Request('php')">Copy to clipboard</button>	
		<pre>
			<code class="php" id="capture Requestphpvalue"></code>
		</pre>

		<button class="doc-button" onclick="copy To Clipboard Capture Request('ruby')">Copy to clipboard</button>	
		<pre>
			<code class="language-ruby" id="capture Requestrubyvalue"></code>
		</pre>

		<button class="doc-button" onclick="copy To Clipboard Capture Request('java')">Copy to clipboard</button>
		<pre>
			<code class="language-java" id="capture Requestjavavalue"></code>
		</pre>

### /api/v2/create-card-ref

#### Введение

Создание идентификатора ссылки на карту инициируется запросом HTTPS POST с использованием указанных ниже [URL-адресов](#api-v2-card-ref-id-request-url) и [параметров](#card-ref-id-request-parameters). Для аутентификации используйте [SHA-1](https://doc.payneteasy.ru/integration/general_api_usage/request_authentication_methods/sha.html.md).

#### API URL

> **Note:** Путь API URL не должен быть задан фиксированным значением, т.к. он может быть изменён позднее.

| Интеграционная среда | Производственная среда |
|-----------------------------------------------------------------------------------|--------------------------------------------------------------------------------|
| https://sandbox.payneteasy.ru/paynet/api/v2/create-card-ref/ENDPOINTID | https://gate.payneteasy.ru/paynet/api/v2/create-card-ref/ENDPOINTID |
| https://sandbox.payneteasy.ru/paynet/api/v2/create-card-ref/group/ENDPOINTGROUPID | https://gate.payneteasy.ru/paynet/api/v2/create-card-ref/group/ENDPOINTGROUPID |

#### Параметры запроса

> **Note:** Запрос должен иметь заголовок content-type=application/x-www-form-urlencoded.

| Параметры запроса | Описание |
|---------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| login | Логин Присоединяющейся стороны в Системе. |
| client_orderid | Уникальный идентификатор заказа, присвоенный Присоединяющейся Стороной. |
| orderid | Идентификатор заказа транзакции, присвоенный Платёжным Шлюзом. |
| control | Контрольная сумма, сгенерированная [SHA-1](https://doc.payneteasy.ru/integration/general_api_usage/request_authentication_methods/sha.html.md). Строка для подписи представляет собой объединение следующих параметров: 1. Параметр запроса: login 2. Параметр запроса: client_orderid 3. Параметр запроса: orderid 4. merchant_control (Контрольный ключ, назначенный для аккаунта Присоединяющейся стороны в системе Payneteasy). |

Присоединяющаяся Сторона должна предоставить orderid и client_orderid, связанные с первой платёжной транзакцией. Это подчёркивает, что первый платёж является обязательным шагом для обработки рекуррентных платежей. Для авторизации кредитной карты информация о ней должна быть достаточной, а первоначальный платёж должен находиться в [финальном статусе](https://doc.payneteasy.ru/integration/reference/statuses.html.md).

The returned Recurring Payment ID and/or Card Reference ID is a token that refers to cardholder data stored on Payment Gateway side. See the required API command to find which type of token is supported in request parameters. This ID has the following usage:
1. In direct API commands it can be passed instead of cardholder data to initiate new transaction.
2. In form API commands it can be passed to prefill the payment form with previously saved cardholder data.

#### Параметры ответа

> **Note:** Ответ имеет заголовок Content-Type: text/html;charset=utf-8. Все поля имеют кодировку x-www-form-urlencoded, с символом (0xA) в конце значения каждого параметра.

| Параметры ответа | Описание |
|--------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| type | Тип ответа. Может принимать такие значения как - async-response, validation-error, error и т.д. Если тип равен validation-error или error, параметры error-message и error-code будут содержать сведения об ошибке. |
| serial-number | Уникальный номер, присваиваемый сервером Payneteasy конкретному запросу от Присоединяющейся стороны. |
| card-ref-id | Ссылочный идентификатор, для использования в повторных оплатах. |
| unq-card-ref-id | Уникальный идентификатор ссылки на карту для каждого PAN. Может использоваться Присоединяющейся стороной для программ лояльности или контроля мошенничества. |
| status | См. [список статусов](https://doc.payneteasy.ru/integration/reference/statuses.html.md). |
| error-message | Для транзакций в статусе declined или error этот параметр будет содержать причину отклонения или сведения об ошибке. |
| error-code | Код ошибки для транзакций в статусе declined или error. |

#### Пример запроса

```http
POST /paynet/api/v2/create-card-ref/46750 HTTP/1.1
Host: https://sandbox.payneteasy.ru
User-Agent: curl/7.85.0
Accept: */*
Content-Length: 100
Content-Type: application/x-www-form-urlencoded
Connection: close

login=login
&client_orderid=902B4FF5
&orderid=6937242
&control=717349cab3fcab2c13c93ff5770ae07a7b8e0727
```

#### Пример успешного ответа

```http
HTTP/1.1 200
Server: server
Date: Tue, 07 Feb 2023 08:46:24 GMT
Content-Type: text/html;charset=utf-8
Connection: close
Vary: Accept-Encoding
X-XSS-Protection: 1
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000
Content-Language: en-US
Strict-Transport-Security: max-age=31536000
Content-Length: 144

type=create-card-ref-response
&serial-number=00000000-0000-0000-0000-000002e110a2
&card-ref-id=1461670
&unq-card-ref-id=2463777
&status=approved
```

#### Пример неуспешного ответа

```http
HTTP/1.1 200
Server: server
Date: Tue, 07 Feb 2023 08:55:26 GMT
Content-Type: text/html;charset=utf-8
Connection: close
Vary: Accept-Encoding
X-XSS-Protection: 1
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000
Content-Language: en-US
Strict-Transport-Security: max-age=31536000
Content-Length: 123

type=validation-error
&serial-number=00000000-0000-0000-0000-000002e110ad
&error-message=INVALID_CONTROL_CODE
&error-code=2
```

#### Open API Collection

Open this method in the OpenAPI Reference

<a class="openapi-reference-button" href="/openapi-doc/#POST/api/v2/create-card-ref/{endpoint Id}" target="_blank" rel="noopener">View in OpenAPI <svg xmlns="http://www.w3.org/2000/svg" view Box="0 0 24 24" fill="none" stroke="current Color" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg></a>

#### Коллекция Postman

<div class="postman-run-button"
data-postman-action="collection/fork"
data-postman-var-1="23519287-2f522c74-71cf-4fea-8cea-73a2447820de"
data-postman-collection-url="entity Id=23519287-2f522c74-71cf-4fea-8cea-73a2447820de&entity Type=collection&workspace Id=7be78bd7-9f10-4be9-a60e-bd36ff1b6783"
data-postman-param="env%5BPayment%20gateway%20ENV%5D=W3sia2V5IjoiVVJMIiwidm FsdWUi Oi IiLCJlbm FibGVk Ijp0cn VlLCJ0eXBl IjoiZGVmYXVsdCJ9XQ=="></div>
<script type="text/javascript">
 (function (p,o,s,t,m,a,n) {
 !p[s] && (p[s] = function () { (p[t] || (p[t] = [])).push (arguments); });
 !o.get Element By Id (s+t) && o.get Elements By Tag Name("head")[0].append Child((
 (n = o.create Element("script")),
 (n.id = s+t), (n.async = 1), (n.src = m), n
 ));
 }(window, document, "_pm", "Postman Run Object", "https://run.pstmn.io/button.js"));
 var env Name = "Payment gateway ENV";
	 var env Data = {
 URL:'sandbox.payneteasy.ru' + "/" + 'paynet'
 };
 \_pm('env.replace', env Name, env Data);
</script>

#### Конструктор запросов

<meta http-equiv="Cache-Control" content="no-cache">
<script src="../_static/js/crypto-js/sha1.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="../_static/js/highlight/styles/default.css">
<script src="../_static/js/highlight/highlight.pack.js"></script>

<script type="text/javascript">
$(document).ready (function(){ 
 $("#token Request Tab a").click (function (e){
 	e.prevent Default();
 	$(this).tab('show');
 });
});
</script>

<script type="text/javascript">
		var curl Token Request Text = "";
 
		var php Token Request Text = "";
		
		var ruby Token Request Text = "";
		var java Token Request Text = "";

 function sign_token_request (form) {
 var signed Text = "";
		
		var curl Text = "";
		
		var sandbox = "";
		var params = "";
	 var url = "";
		var control = "";
		
	var xhttp = new XMLHttp Request();
 xhttp.onreadystatechange = function() {
 if (xhttp.ready State == 4 && xhttp.status == 200) {
	 if (url == "../_static/examples/PHP/params_no_header_PHP_new.txt"){
 php Token Request Text = xhttp.response Text;}
		else if (url == "../_static/examples/Ruby/params_no_header_Ruby (for new version).txt"){
		 ruby Token Request Text = xhttp.response Text;}
		 else{
		 java Token Request Text = xhttp.response Text;}
 }
 }
	
	url = "../_static/examples/PHP/params_no_header_PHP_new.txt";
 xhttp.open("GET", url, false);
 xhttp.send();
	url = "../_static/examples/Ruby/params_no_header_Ruby (for new version).txt";
 xhttp.open("GET", url, false);
 xhttp.send();
 url = "../_static/examples/Java/params_java.txt";
 xhttp.open("GET", url, false);
 xhttp.send();
	
 for (var e = 0; e < form.elements.length; ++e) {
 var input = form.elements[e];
 if (input.name != null) 
 {
 if (input.name.substring(0, 5) == "sha1_") 
 if (input.value != null) 
 if (input.value != "") 
 if (!(input.type == "checkbox" || input.type == "radio") || input.checked)
 {signed Text = signed Text + input.value;}
 if (input.value != null && input.name != null) 
 if (input.value != "" && input.name != "" && input.name != "operationname") 
 if (input.name.substring(0, 5) == "sha1_")
 {
 if (input.name != "sha1_merchant_control"){
 curl Text = curl Text + input.name.substring(5) + "=" + input.value + "&";
								 params += " '" + input.name.substring(5) + "' => '" + input.value + "', \\n";									 
								 }
 }
 else 
 {
 if (input.name != "endpointid"){
 curl Text = curl Text + input.name + "=" + input.value + "&";
							 params += " '" + input.name + "' => '" + input.value + "', \\n";								 
								 }
 }
 }
 }
		
		sandbox = 'https://sandbox.payneteasy.ru/paynet/api/v2/' + document.token_request.operationname.value + '/' +
 document.token_request.endpointid.value;
		
		php Token Request Text = php Token Request Text.replace("{$generated parameters with values code}", params);
		php Token Request Text = php Token Request Text.replace("{$sandbox}", sandbox);
		
		ruby Token Request Text = ruby Token Request Text.replace("{$generated parameters with values code}", params);
		ruby Token Request Text = ruby Token Request Text.replace("{$sandbox}", sandbox);		

	 control = " 'control' => '" + CryptoJS.SHA1 (signed Text) + "'";
		
		php Token Request Text = php Token Request Text.replace("{$control}", control);
		ruby Token Request Text = ruby Token Request Text.replace("{$control}", control);
		java Token Request Text = java Token Request Text.replace("{$targetURL}", sandbox);
		java Token Request Text = java Token Request Text.replace("{$has Headers}", "false");
	 java Token Request Text = java Token Request Text.replace("{$url Parameters}", curl Text);
	 java Token Request Text = java Token Request Text.replace("{$control Parameters}", signed Text);
		php Token Request Text = php Token Request Text.replace(/{\\$identifier Type Name}/g, document.token_request.operationname.value.match(/\\/group/) ? 'group Id' : 'endpoint Id');
		php Token Request Text = php Token Request Text.replace("{$endpoint Or Group Id}", document.token_request.endpointid.value);
		php Token Request Text = php Token Request Text.replace("{$merchant Control}", document.token_request.sha1_merchant_control.value);
		php Token Request Text = php Token Request Text.replace("{$additional vars}", '');
		php Token Request Text = php Token Request Text.replace("{$sign Function Call}", 'sign Payment Request($request Fields, $' + (document.token_request.operationname.value.match(/\\/group/) ? 'group Id' : 'endpoint Id') + ', $merchant Control)');

		
		curl Token Request Text = 'curl --data "' +
 curl Text +
 "control=" + CryptoJS.SHA1 (signed Text) +
 '" https://sandbox.payneteasy.ru/paynet/api/v2/' + document.token_request.operationname.value + '/' +
 document.token_request.endpointid.value;
		
		show Text("tokenrequestphpvalue" , php Token Request Text);
		
		show Text("tokenrequestrubyvalue" , ruby Token Request Text);		
		show Text("tokenrequestjavavalue" , java Token Request Text);
 show Text("tokenrequestsignedvalue" , signed Text);
 show Text("tokenrequestsha1value" , CryptoJS.SHA1 (signed Text));
 show Text("tokenrequestcurlvalue" , curl Token Request Text);
		
		$(document).ready (function() {
 $('pre code').each (function (i, block) {
 hljs.highlight Block (block);
 });
 }); 
 return false;
 }

 function show Text (element Id, text) {
 var child = document.create Text Node (text);
 var element = document.get Element By Id (element Id);
		element.innerHTML ="";	
 if (element.has Child Nodes()) {
 element.replace Child (child, element.first Child);
 } else {
 element.append Child (child);
 }
 }
function copy To Clipboard Request Token Request (text) {
 var text Area = document.create Element("textarea");

 // Place in top-left corner of screen regardless of scroll position.
 text Area.style.position = 'fixed';
 text Area.style.top = 0;
 text Area.style.left = 0;

 // Ensure it has a small width and height. Setting to 1px / 1em
 // doesn't work as this gives a negative w/h on some browsers.
 text Area.style.width = '2em';
 text Area.style.height = '2em';

 // We don't need padding, reducing the size if it does flash render.
 text Area.style.padding = 0;

 // Clean up any borders.
 text Area.style.border = 'none';
 text Area.style.outline = 'none';
 text Area.style.box Shadow = 'none';

 // Avoid flash of white box if rendered for any reason.
 text Area.style.background = 'transparent';

 if (text == 'curl'){
	text Area.value = curl Token Request Text;
 } else if ( text =='php'){
	text Area.value = php Token Request Text;
 }else if ( text =='ruby'){
	text Area.value = ruby Token Request Text;
 } else {
 text Area.value =java Token Request Text;
 }
 document.body.append Child (text Area);

 text Area.select();

 try {
 var successful = document.exec Command('copy');
 var msg = successful ? 'successful' : 'unsuccessful';
 console.log('Copying text command was ' + msg);
 } catch (err) {
 console.log('Oops, unable to copy');
 }

 document.body.remove Child (text Area);

 }
</script>

<form name="token_request">

 <select class="doc-select" name="operationname" size="1">
 <option value="create-card-ref">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;token (by ENDPOINTID)</option>
 <option value="create-card-ref/group">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;token (by ENDPOINTGROUPID)</option>
 </select>
 
 <p></p>
 <input type="button" class="doc-button" style="font-size: 100%; padding: 2px 6px 3px 6px;" value="Sign token Request" onclick="sign_token_request (document.token_request)" />
 <p></p>
</form>

<ul class="nav nav-tabs" id="token Request Tab">
 <li class="active">[CURL](#token RequestCURL)</li>
 <li>[PHP](#token RequestPHP)</li>
 <li>[Ruby](#token Request Ruby)</li>
 <li>[Java](#token Request Java)</li>
</ul>

	 <button class="doc-button" onclick="copy To Clipboard Request Token Request('php')">Copy to clipboard</button>	
		<pre>
			<code class="php" id="tokenrequestphpvalue"></code>
		</pre>

		<button class="doc-button" onclick="copy To Clipboard Request Token Request('ruby')">Copy to clipboard</button>	
		<pre>
			<code class="language-ruby" id="tokenrequestrubyvalue"></code>
		</pre>

		<button class="doc-button" onclick="copy To Clipboard Request Token Request('java')">Copy to clipboard</button>
		<pre>
			<code class="language-java" id="tokenrequestjavavalue"></code>
		</pre>

### /api/v2/get-card-info

#### Введение

Для интеграции используйте запрос интеграционной среды HTTPS POST к указанным ниже [URL](#api-v2-get-card-info-request-url) и [параметрам](#api-v2-get-card-info-request-parameters). Для аутентификации используйте [SHA-1](https://doc.payneteasy.ru/integration/general_api_usage/request_authentication_methods/sha.html.md). См. [статусы](https://doc.payneteasy.ru/integration/reference/statuses.html.md).

#### API URL

> **Note:** Путь API URL не должен быть задан фиксированным значением, т.к. он может быть изменён позднее.

| Интеграционная среда | Производственная среда |
|---------------------------------------------------------------------------------|------------------------------------------------------------------------------|
| https://sandbox.payneteasy.ru/paynet/api/v2/get-card-info/ENDPOINTID | https://gate.payneteasy.ru/paynet/api/v2/get-card-info/ENDPOINTID |
| https://sandbox.payneteasy.ru/paynet/api/v2/get-card-info/group/ENDPOINTGROUPID | https://gate.payneteasy.ru/paynet/api/v2/get-card-info/group/ENDPOINTGROUPID |

#### Параметры запроса

> **Note:** Запрос должен иметь заголовок content-type=application/x-www-form-urlencoded.

| Название параметра | Описание | Значение |
|----------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|
| login | Логин Присоединяющейся стороны в Системе. | `Необходимость`: Обязательно `Тип`: String `Длина`: 20 |
| cardrefid | ИД ссылки на карту, полученный на шаге [Регистрации Карты](https://doc.payneteasy.ru/integration/api_v2_create-card-ref.html.md). | `Необходимость`: Обязательно `Тип`: String `Длина`: 20 |
| control | Контрольная сумма, сгенерированная [SHA-1](https://doc.payneteasy.ru/integration/general_api_usage/request_authentication_methods/sha.html.md). Строка для подписи представляет собой объединение следующих параметров: 1. Параметр запроса: login 2. Параметр запроса: cardrefid 3. merchant_control (Контрольный ключ, присвоенный аккаунту Присоединяющейся стороны в системе шлюза Payneteasy). | `Необходимость`: Обязательно `Тип`: String `Длина`: 128 |

#### Параметры ответа

> **Note:** Ответ имеет заголовок Content-Type: text/html;charset=utf-8. Все поля имеют кодировку x-www-form-urlencoded, с символом (0xA) в конце значения каждого параметра.

| Information Параметры ответа | Описание |
|--------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| type | Тип ответа. Может быть get-card-info-response, validation-error, error. Если type равен error, параметры error-message и error-code содержат детали ошибки. |
| serial-number | Уникальный номер, присваиваемый сервером Payneteasy конкретному запросу от Присоединяющейся стороны. |
| card-printed-name | Карта holder’s название. |
| bin | Bank Identification Number. |
| last-four-digits | Последние четыре цифры PAN. |
| expire-year | Год срока действия карты. |
| expire-month | Месяц срока действия карты. |
| result-3d | Описание: 3DS completion result. |
| error-message | Если статус validation-error или error, этот параметр содержит причину отклонения или детали ошибки. |
| error-code | Код ошибки в случае статуса validation-error или error. |

#### Пример запроса

```http
POST /paynet/api/v2/get-card-info/46750 HTTP/1.1
Host: https://sandbox.payneteasy.ru
User-Agent: curl/7.85.0
Accept: */
Content-Length: 77
Content-Type: application/x-www-form-urlencoded
Connection: close

&login=Test
&cardrefid=1461665
&control=f8ffd7dac9e334799862da0e9190387510d43ff7
```

#### Пример успешного ответа

```http
HTTP/1.1 200
Server: server
Date: Thu, 02 Feb 2023 11:21:39 GMT
Content-Type: text/html;charset=utf-8
Connection: close
Vary: Accept-Encoding
X-XSS-Protection: 1
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000
Content-Language: en-US
Strict-Transport-Security: max-age=31536000
Content-Length: 193

type=get-card-info-response
&serial-number=00000000-0000-0000-0000-000002e0d218
&card-printed-name=CARD+HOLDER
&bin=453897
&last-four-digits=6732
&expire-year=2099
&expire-month=12
&result-3d=F
```

#### Пример неуспешного ответа

```http
HTTP/1.1 200
Server: server
Date: Thu, 02 Feb 2023 11:26:22 GMT
Content-Type: text/html;charset=utf-8
Connection: close
Vary: Accept-Encoding
X-XSS-Protection: 1
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000
Content-Language: en-US
Strict-Transport-Security: max-age=31536000
Content-Length: 136

type=validation-error
&serial-number=00000000-0000-0000-0000-000002e0d21f
&error-message=End+point+with+id+99999+not+found
&error-code=3
```

#### Open API Collection

Open this method in the OpenAPI Reference

<a class="openapi-reference-button" href="/openapi-doc/#POST/api/v2/get-card-info/{endpoint Id}" target="_blank" rel="noopener">View in OpenAPI <svg xmlns="http://www.w3.org/2000/svg" view Box="0 0 24 24" fill="none" stroke="current Color" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg></a>

#### Коллекция Postman

<div class="postman-run-button"
data-postman-action="collection/fork"
data-postman-var-1="23519287-2f522c74-71cf-4fea-8cea-73a2447820de"
data-postman-collection-url="entity Id=23519287-2f522c74-71cf-4fea-8cea-73a2447820de&entity Type=collection&workspace Id=7be78bd7-9f10-4be9-a60e-bd36ff1b6783"
data-postman-param="env%5BPayment%20gateway%20ENV%5D=W3sia2V5IjoiVVJMIiwidm FsdWUi Oi IiLCJlbm FibGVk Ijp0cn VlLCJ0eXBl IjoiZGVmYXVsdCJ9XQ=="></div>
<script type="text/javascript">
 (function (p,o,s,t,m,a,n) {
 !p[s] && (p[s] = function () { (p[t] || (p[t] = [])).push (arguments); });
 !o.get Element By Id (s+t) && o.get Elements By Tag Name("head")[0].append Child((
 (n = o.create Element("script")),
 (n.id = s+t), (n.async = 1), (n.src = m), n
 ));
 }(window, document, "_pm", "Postman Run Object", "https://run.pstmn.io/button.js"));
 var env Name = "Payment gateway ENV";
	 var env Data = {
 URL:'sandbox.payneteasy.ru' + "/" + 'paynet'
 };
 \_pm('env.replace', env Name, env Data);
</script>

#### Конструктор запросов

<meta http-equiv="Cache-Control" content="no-cache">
<script src="../_static/js/generate_card_number.js"></script>
<script src="../_static/js/crypto-js/sha1.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="../_static/js/highlight/styles/default.css">
<script src="../_static/js/highlight/highlight.pack.js"></script>

<script type="text/javascript">
$(document).ready (function(){ 
 $("#info Tab a").click (function (e){
 	e.prevent Default();
 	$(this).tab('show');
 });
});
</script>

<script type="text/javascript">
		var curl Request Text = "";
 
		var php Request Text = "";
		
		var ruby Request Text = "";
		var java Request Text = "";

function sign_info (form) {
 var signed Text = "";
		
		var curl Text = "";
		
		var sandbox = "";
		var params = "";
	 var url = "";
		var control = "";
		
		var xhttp = new XMLHttp Request();
		xhttp.onreadystatechange = function() {
		if (xhttp.ready State == 4 && xhttp.status == 200) {
			if (url == "../_static/examples/PHP/params_no_header_PHP_new.txt"){
				php Request Text = xhttp.response Text;}
			else if (url == "../_static/examples/Ruby/params_no_header_Ruby (for new version).txt"){
				ruby Request Text = xhttp.response Text;}
			else{
				java Request Text = xhttp.response Text;}
			}
		}
	
		url = "../_static/examples/PHP/params_no_header_PHP_new.txt";
		xhttp.open("GET", url, false);
		xhttp.send();
		url = "../_static/examples/Ruby/params_no_header_Ruby (for new version).txt";
		xhttp.open("GET", url, false);
		xhttp.send();
		url = "../_static/examples/Java/params_java.txt";
		xhttp.open("GET", url, false);
		xhttp.send();
	
 for (var e = 0; e < form.elements.length; ++e) {
 var input = form.elements[e];
 if (input.name != null) 
 {
 if (input.name.substring(0, 5) == "sha1_") 
 if (input.value != null) 
 if (input.value != "") 
 if (!(input.type == "checkbox" || input.type == "radio") || input.checked)
 {signed Text = signed Text + input.value;}
 if (input.value != null && input.name != null) 
 if (input.value != "" && input.name != "" && input.name != "operationname") 
 if (input.name.substring(0, 5) == "sha1_")
 {
 if (input.name != "sha1_merchant_control"){
 curl Text = curl Text + input.name.substring(5) + "=" + input.value + "&";
								 params += " '" + input.name.substring(5) + "' => '" + input.value + "', \\n";								 
								 }
 }
 else 
 {
 if (input.name != "endpointid"){
 curl Text = curl Text + input.name + "=" + input.value + "&";
								 params += " '" + input.name + "' => '" + input.value + "', \\n";
								 }
 }
 }
 }
		sandbox = 'https://sandbox.payneteasy.ru/paynet/api/v2/' + document.info.operationname.value + '/' +
 document.info.endpointid.value;

		php Request Text = php Request Text.replace("{$generated parameters with values code}", params);
		php Request Text = php Request Text.replace("{$sandbox}", sandbox);
		
		ruby Request Text = ruby Request Text.replace("{$generated parameters with values code}", params);
		ruby Request Text = ruby Request Text.replace("{$sandbox}", sandbox);
		
	 control = " 'control' => '" + CryptoJS.SHA1 (signed Text) + "'";
		php Request Text = php Request Text.replace(/{\\$identifier Type Name}/g, document.info.operationname.value.match(/\\/group/) ? 'group Id' : 'endpoint Id');
		php Request Text = php Request Text.replace("{$endpoint Or Group Id}", document.info.endpointid.value);
		php Request Text = php Request Text.replace("{$merchant Control}", document.info.sha1_merchant_control.value);
		php Request Text = php Request Text.replace("{$additional vars}", '');
		php Request Text = php Request Text.replace("{$sign Function Call}", 'sign Payment Request($request Fields, $' + (document.info.operationname.value.match(/\\/group/) ? 'group Id' : 'endpoint Id') + ', $merchant Control)');

		php Request Text = php Request Text.replace("{$control}", control);
		ruby Request Text = ruby Request Text.replace("{$control}", control);
		java Request Text = java Request Text.replace("{$targetURL}", sandbox);
		java Request Text = java Request Text.replace("{$has Headers}", "false");
	 java Request Text = java Request Text.replace("{$url Parameters}", curl Text);
	 java Request Text = java Request Text.replace("{$control Parameters}", signed Text);

		
		curl Request Text = 'curl --data "' +
 curl Text +
 "control=" + CryptoJS.SHA1 (signed Text) +
 '" https://sandbox.payneteasy.ru/paynet/api/v2/' + document.info.operationname.value + '/' +
 document.info.endpointid.value;
		
		show Text("infophpvalue" , php Request Text);
		
		show Text("inforubyvalue" , ruby Request Text);
		show Text("infojavavalue" , java Request Text);

 show Text("infosignedvalue" , signed Text);
 show Text("infosha1value" , CryptoJS.SHA1 (signed Text));
 show Text("infocurlvalue" , curl Request Text);
		 $(document).ready (function() {
 $('pre code').each (function (i, block) {
 hljs.highlight Block (block);
 });
 }); 
 return false;
 }

 function show Text (element Id, text) {
 var child = document.create Text Node (text);
 var element = document.get Element By Id (element Id);
						element.innerHTML ="";	
 if (element.has Child Nodes()) {
 element.replace Child (child, element.first Child);
 } else {
 element.append Child (child);
 }
 }
function copy To Clipboard Request Info (text) {
 var text Area = document.create Element("textarea");

 // Place in top-left corner of screen regardless of scroll position.
 text Area.style.position = 'fixed';
 text Area.style.top = 0;
 text Area.style.left = 0;

 // Ensure it has a small width and height. Setting to 1px / 1em
 // doesn't work as this gives a negative w/h on some browsers.
 text Area.style.width = '2em';
 text Area.style.height = '2em';

 // We don't need padding, reducing the size if it does flash render.
 text Area.style.padding = 0;

 // Clean up any borders.
 text Area.style.border = 'none';
 text Area.style.outline = 'none';
 text Area.style.box Shadow = 'none';

 // Avoid flash of white box if rendered for any reason.
 text Area.style.background = 'transparent';

 if (text == 'curl'){
	text Area.value = curl Request Text;
 } else if ( text =='php'){
	text Area.value = php Request Text;
 }else if ( text =='ruby'){
	text Area.value = ruby Request Text;
 } else {
 text Area.value = java Request Text;
 }
 document.body.append Child (text Area);

 text Area.select();

 try {
 var successful = document.exec Command('copy');
 var msg = successful ? 'successful' : 'unsuccessful';
 console.log('Copying text command was ' + msg);
 } catch (err) {
 console.log('Oops, unable to copy');
 }

 document.body.remove Child (text Area);

 }
</script>

<form name="info">

 <select class="doc-select" name="operationname" size="1">
 <option value="get-card-info">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;info (by ENDPOINTID)</option>
 <option value="get-card-info/group">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;info (by ENDPOINTGROUPID)</option>
 </select>
 
 <p></p>
 <input type="button" class="doc-button" style="font-size: 100%; padding: 2px 6px 3px 6px;" value="Sign info Request" onclick="sign_info (document.info)" />
 <p></p>
</form>

 <ul class="nav nav-tabs" id="info Tab">
 <li class="active">[CURL](#infoCURL)</li>
 <li>[PHP](#infoPHP)</li>
 <li>[Ruby](#info Ruby)</li>
 <li>[Java](#info Java)</li>
 </ul>

	 <button class="doc-button" onclick="copy To Clipboard Request Info('php')">Copy to clipboard</button>	
<pre>
<code class="php" id="infophpvalue"> 

 
</code>
</pre>

		<button class="doc-button" onclick="copy To Clipboard Request Info('ruby')">Copy to clipboard</button>	
<pre>
<code class="language-ruby" id="inforubyvalue">

</code>
</pre>

		<button class="doc-button" onclick="copy To Clipboard Request Info('java')">Copy to clipboard</button>
<pre>
<code class="language-java" id="infojavavalue">

</code>
</pre>

### /api/v2/get-exchange

#### Введение

Получение обменного курса инициируется запросом HTTPS POST с использованием указанных ниже [URL](#api-v2-get-exchange-request-url) и [параметров](#api-v2-get-exchange-parameters). Для аутентификации используйте [OAuth HMAC-SHA1](https://doc.payneteasy.ru/integration/general_api_usage/request_authentication_methods/oauth.html.md). См. [статусы](https://doc.payneteasy.ru/integration/reference/statuses.html.md).

#### API URL

> **Note:** Путь API URL не должен быть задан фиксированным значением, т.к. он может быть изменён позднее.

| Интеграционная среда | Производственная среда |
|---------------------------------------------------------------------|------------------------------------------------------------------|
| https://sandbox.payneteasy.ru/paynet/api/v2/get-exchange/ENDPOINTID | https://gate.payneteasy.ru/paynet/api/v2/get-exchange/ENDPOINTID |

#### Параметры запроса

> **Note:** Запрос должен иметь content-type=application/x-www-form-urlencoded и [заголовки авторизации](https://doc.payneteasy.ru/integration/general_api_usage/request_authentication_methods/oauth.html.md).

| Название параметра | Описание | Значение |
|-----------------------------|-------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|
| exchange-provider | Описание: Exchange provider. | `Необходимость`: Обязательно `Тип`: String `Длина`: 128 |
| exchange-currency-code-from | Код валюты, которую необходимо обменять (см.: [Коды валют](https://doc.payneteasy.ru/integration/reference/currency_codes.html.md)). | `Необходимость`: Обязательно `Тип`: String `Длина`: 128 |
| exchange-currency-code-to | Код валюты, который необходимо получить (см.: [Коды валют](https://doc.payneteasy.ru/integration/reference/currency_codes.html.md)). | `Необходимость`: Обязательно `Тип`: String `Длина`: 128 |

#### Параметры ответа

> **Note:** Ответ имеет заголовок Content-Type: text/html;charset=utf-8. Все поля имеют кодировку x-www-form-urlencoded, с символом (0xA) в конце значения каждого параметра.

| Название параметра | Описание |
|----------------------|---------------------------------|
| exchange-low-rate | Описание: Provider’s buy rate. |
| exchange-high-rate | Описание: Provider’s sell rate. |

#### Пример запроса

```http
POST /paynet/api/v2/get-exchange/39790 HTTP/1.1
Host: sandbox.payneteasy.ru
User-Agent: curl/7.83.0
Accept: */*
Authorization: OAuth realm="",oauth_version="1.0",oauth_consumer_key="test_merch",oauth_timestamp="1684995901",oauth_nonce="1kKy3hMlAe1",oauth_signature_method="HMAC-SHA1",oauth_signature="jGUaNFqLvBO1gGgWag%2FSU3wMnUc%3D"
Content-Length: 222
Content-Type: application/x-www-form-urlencoded
Connection: close

exchange-currency-code-from=USD
&exchange-currency-code-to=RUB
&exchange-provider=test
&oauth_consumer_key=test_merch
&oauth_nonce=1kKy3hMlAe1
&oauth_signature_method=HMAC-SHA1
&oauth_timestamp=1684995901
&oauth_version=1.0
```

#### Пример успешного ответа

```http
HTTP/1.1 200
Server: server
Date: Thu, 25 May 2023 06:27:46 GMT
Content-Length: 48
Connection: close
X-XSS-Protection: 1
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000
Strict-Transport-Security: max-age=31536000

exchange-low-rate=10.00
&exchange-high-rate=20.00
```

#### Пример неуспешного ответа

```http
HTTP/1.1 403
Server: server
Date: Thu, 25 May 2023 07:02:59 GMT
Content-Type: text/html
Content-Length: 735
Connection: close
X-XSS-Protection: 1
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000

error-message=Book TCurrencyBook was not found by code USB
```

#### Коллекция Postman

<div class="postman-run-button"
 data-postman-action="collection/fork"
 data-postman-var-1="23519287-982d0a62-f2f2-4512-8729-abb8bd0b74b8"
 data-postman-collection-url="entity Id=23519287-982d0a62-f2f2-4512-8729-abb8bd0b74b8&entity Type=collection&workspace Id=7be78bd7-9f10-4be9-a60e-bd36ff1b6783"
 data-postman-param="env%5BPayment%20gateway%20ENV%5D=W3sia2V5IjoiVVJMIiwidm FsdWUi Oi IiLCJlbm FibGVk Ijp0cn VlLCJ0eXBl IjoiZGVmYXVsdCJ9XQ=="></div>
<script type="text/javascript">
 (function (p,o,s,t,m,a,n) {
 !p[s] && (p[s] = function () { (p[t] || (p[t] = [])).push (arguments); });
 !o.get Element By Id (s+t) && o.get Elements By Tag Name("head")[0].append Child((
 (n = o.create Element("script")),
 (n.id = s+t), (n.async = 1), (n.src = m), n
 ));
 }(window, document, "_pm", "Postman Run Object", "https://run.pstmn.io/button.js"));
 var env Name = "Payment gateway ENV";
 var env Data = {
 URL:'sandbox.payneteasy.ru' + "/" + 'paynet'
 };
 \_pm('env.replace', env Name, env Data);
</script>

#### Конструктор запросов

<meta http-equiv="Cache-Control" content="no-cache">
<script src="../_static/js/oauth/sha1.js"></script>
<script src="../_static/js/oauth/oauth.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="../_static/js/highlight/styles/default.css">
<script src="../_static/js/highlight/highlight.pack.js"></script>

<script type="text/javascript">
$(document).ready (function(){ 
 $("#get Exchange Tab a").click (function (e){
 	e.prevent Default();
 	$(this).tab('show');
 });
});
</script>
<script type="text/javascript">

		var curl Exchange Text = "";
 
		var php Exchange Text = "";
		
		var ruby Exchange Text = "";
 function sign (form) {
	 var url = "";
		var sandbox = "";
		var params = "";
		
		var xhttp = new XMLHttp Request();
		xhttp.onreadystatechange = function() {
		if (xhttp.ready State == 4 && xhttp.status == 200) {
			if (url == "../_static/examples/PHP/params_with_header_PHP.txt"){
				php Exchange Text = xhttp.response Text;}
			else {
				ruby Exchange Text = xhttp.response Text;}
			}
		}
	
		url = "../_static/examples/PHP/params_with_header_PHP.txt";
		xhttp.open("GET", url, false);
		xhttp.send();
		url = "../_static/examples/Ruby/params_with_header_Ruby.txt";
		xhttp.open("GET", url, false);
		xhttp.send();
			
	
 var accessor = { consumer Secret: form.consumer Secret.value
 , token Secret : form.token Secret.value};
 var message = { method: form.http Method.value
 , action: form. URL.value
 , parameters: OAuth.decode Form (form.parameters.value)
 };
 for (var e = 0; e < form.elements.length; ++e) {
 var input = form.elements[e];
 if (input.name != null) 
 if (input.name.substring(0, 6) == "oauth_") {
 if (input.value != null) 
 if (input.value != "") 
 if (!(input.type == "checkbox" || input.type == "radio") || input.checked)
 {
 message.parameters.push([input.name, input.value]);
							
						 params += " '" + input.name + "' => '" + input.value + "', \\n";
 }
			}else if (input.name.substring(0, 10) == "parameters"){
					 var example = input.value.split('&');
 for (var i = 0; i < example.length; i++){
					 var split = example[i].split('=');
						params += " '" + split[0] + "' => '" + split[1] + "', \\n";
					 
					 }					 
					}
			
			
 }
 OAuth. Signature Method.sign (message, accessor);
 show Text("normalized Parameters", OAuth. Signature Method.normalize Parameters (message.parameters));
 show Text("signature Base String" , OAuth. Signature Method.get Base String (message));
 show Text("signature" , OAuth.get Parameter (message.parameters, "oauth_signature"));
 show Text("authorization Header" , OAuth.get Authorization Header("", message.parameters));
	
	curl Exchange Text = "curl -H 'Authorization: " + OAuth.get Authorization Header("", message.parameters) + "' --data '" + OAuth. Signature Method.normalize Parameters (message.parameters) + "' '" + form. URL.value + "'";
	
 show Text("curl Request" , curl Exchange Text);
 	
 php Exchange Text = php Exchange Text.replace('{$Authorization}', OAuth.get Authorization Header("", message.parameters));
	php Exchange Text = php Exchange Text.replace('{$sandbox}', form. URL.value );
	php Exchange Text = php Exchange Text.replace("{$generated parameters with values code}", params);

	ruby Exchange Text = ruby Exchange Text.replace("{$generated parameters with values code}", params);	 
 ruby Exchange Text = ruby Exchange Text.replace('{$Authorization}', OAuth.get Authorization Header("", message.parameters));
	ruby Exchange Text = ruby Exchange Text.replace('{$sandbox}', form. URL.value );
	
	show Text("php Request" , php Exchange Text);
	show Text("ruby Request" , ruby Exchange Text);
		$(document).ready (function() {
 $('pre code').each (function (i, block) {
 hljs.highlight Block (block);
 });
 }); 
	return false;
 }
 function show Text (element Id, text) {
 var child = document.create Text Node (text);
 var element = document.get Element By Id (element Id);
			element.innerHTML ="";
 if (element.has Child Nodes()) {
 element.replace Child (child, element.first Child);
 } else {
 element.append Child (child);
 }
 }
 function fresh Timestamp() {
 document.request.oauth_timestamp.value = OAuth.timestamp();
 }
 function fresh Nonce() {
 document.request.oauth_nonce.value = OAuth.nonce(11);
 }
	 function copy To Clipboard (text) {
 var text Area = document.create Element("textarea");

 // Place in top-left corner of screen regardless of scroll position.
 text Area.style.position = 'fixed';
 text Area.style.top = 0;
 text Area.style.left = 0;

 // Ensure it has a small width and height. Setting to 1px / 1em
 // doesn't work as this gives a negative w/h on some browsers.
 text Area.style.width = '2em';
 text Area.style.height = '2em';

 // We don't need padding, reducing the size if it does flash render.
 text Area.style.padding = 0;

 // Clean up any borders.
 text Area.style.border = 'none';
 text Area.style.outline = 'none';
 text Area.style.box Shadow = 'none';

 // Avoid flash of white box if rendered for any reason.
 text Area.style.background = 'transparent';

 if (text == 'curl'){
	text Area.value = curl Exchange Text;
 } else if ( text =='php'){
	text Area.value = php Exchange Text;
 } else {
 text Area.value = ruby Exchange Text;
 }
 document.body.append Child (text Area);

 text Area.select();

 try {
 var successful = document.exec Command('copy');
 var msg = successful ? 'successful' : 'unsuccessful';
 console.log('Copying text command was ' + msg);
 } catch (err) {
 console.log('Oops, unable to copy');
 }

 document.body.remove Child (text Area);

 
 }
</script>

<form name="request">

 
 <p></p>
 <input type="button" class="doc-button" style="font-size: 100%; padding: 2px 6px 3px 6px;" value="Sign" onclick="sign (document.request)" />
 <p></p>
</form>

<ul class="nav nav-tabs" id="get Exchange Tab">
 <li class="active">[CURL](#get ExchangeCURL)</li>
 <li>[PHP](#get ExchangePHP)</li>
 <li>[Ruby](#get Exchange Ruby)</li>
 </ul>

 <button class="doc-button" onclick="copy To Clipboard('php')">Copy to clipboard</button>
 <pre>
 <code class="php" id="php Request"></code>
 </pre>

 <button class="doc-button" onclick="copy To Clipboard('ruby')">Copy to clipboard</button>
 <pre>
 <code class="language-ruby" id="ruby Request"></code>
 </pre>

### /api/v2/get-balance

#### Введение

Get Balance инициируется запросом HTTPS POST с использованием указанных ниже [URLs](#api-v2-get-balance-request-url) и [parameters](#api-v2-get-balance-request-parameters). Для аутентификации используйте [OAuth HMAC-SHA1](https://doc.payneteasy.ru/integration/general_api_usage/request_authentication_methods/oauth.html.md). См. [Статусы](https://doc.payneteasy.ru/integration/reference/statuses.html.md). Также доступно для просмотра в UI. Обратитесь к менеджерам поддержки, чтобы включить эту функцию.

#### API URL

> **Note:** Путь API URL не должен быть задан фиксированным значением, т.к. он может быть изменён позднее.

| Интеграционная среда | Производственная среда |
|--------------------------------------------------------------------|-----------------------------------------------------------------|
| https://sandbox.payneteasy.ru/paynet/api/v2/get-balance/ENDPOINTID | https://gate.payneteasy.ru/paynet/api/v2/get-balance/ENDPOINTID |

#### Параметры запроса

> **Note:** Запрос должен иметь content-type=application/x-www-form-urlencoded и [заголовки авторизации](https://doc.payneteasy.ru/integration/general_api_usage/request_authentication_methods/oauth.html.md).

| Название параметра | Описание | Значение |
|----------------------|-----------------------------|-----------------------------------------------------------------------------------------------|
| balance-provider | Введите поставщика баланса. | `Необходимость`: Обязательно `Тип`: String `Длина`: 128 |

#### Параметры ответа

> **Note:** Ответ имеет заголовок Content-Type: text/html;charset=utf-8. Все поля имеют кодировку x-www-form-urlencoded, с символом (0xA) в конце значения каждого параметра.

| Параметры ответа | Описание |
|--------------------|----------------------------|
| balance-amount | Описание: Current balance. |

#### Пример запроса

```http
POST /paynet/api/v2/get-balance/ HTTP/1.1
Host: sandbox.payneteasy.ru
User-Agent: curl/7.83.0
Accept: */*
Authorization: OAuth realm="",oauth_version="1.0",oauth_consumer_key="balance_test_merchant14",oauth_signature_method="HMAC-SHA1",oauth_signature="hSXMSUPP%2FIGYOOWpU4LVx0mu7SA%3D"
Content-Length: 108
Content-Type: application/x-www-form-urlencoded
Connection: close

balance-provider=Test
&oauth_consumer_key=balance_test_merchant14
&oauth_nonce=2xGTFuAgetE
&oauth_signature_method=HMAC-SHA1
&oauth_timestamp=1686923599
&oauth_version=1.0
```

#### Пример успешного ответа

```http
HTTP/1.1 200
Server: server
Date: Tue, 16 May 2023 08:06:05 GMT
Content-Length: 192
Connection: close
X-XSS-Protection: 1
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000
Strict-Transport-Security: max-age=31536000

[
  {
    "balance-amount":29.99,
  }
]
```

#### Пример неуспешного ответа

```http
HTTP/1.1 200
Server: server
Date: Fri, 16 Jun 2023 13:53:43 GMT
Content-Length: 42
Connection: close
X-XSS-Protection: 1
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000
Strict-Transport-Security: max-age=31536000

error-message=Unknown balance provider saa
```

#### Коллекция Postman

<div class="postman-run-button"
 data-postman-action="collection/fork"
 data-postman-var-1="23519287-a0bffc73-2dd0-4089-af18-273759bfeaa5"
 data-postman-collection-url="entity Id=23519287-a0bffc73-2dd0-4089-af18-273759bfeaa5&entity Type=collection&workspace Id=7be78bd7-9f10-4be9-a60e-bd36ff1b6783"
 data-postman-param="env%5BPayment%20gateway%20ENV%5D=W3sia2V5IjoiVVJMIiwidm FsdWUi Oi IiLCJlbm FibGVk Ijp0cn VlLCJ0eXBl IjoiZGVmYXVsdCJ9XQ=="></div>
<script type="text/javascript">
 (function (p,o,s,t,m,a,n) {
 !p[s] && (p[s] = function () { (p[t] || (p[t] = [])).push (arguments); });
 !o.get Element By Id (s+t) && o.get Elements By Tag Name("head")[0].append Child((
 (n = o.create Element("script")),
 (n.id = s+t), (n.async = 1), (n.src = m), n
 ));
 }(window, document, "_pm", "Postman Run Object", "https://run.pstmn.io/button.js"));
 var env Name = "Payment gateway ENV";
	 var env Data = {
 URL:'sandbox.payneteasy.ru' + "/" + 'paynet'
 };
 \_pm('env.replace', env Name, env Data);
</script>

#### Конструктор запросов

<meta http-equiv="Cache-Control" content="no-cache">
<script src="../_static/js/generate_card_number.js"></script>
<script src="../_static/js/crypto-js/sha1.js"></script>
<script src="../_static/js/oauth/sha1.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<script src="../_static/js/oauth/oauth.js"></script>

<link rel="stylesheet" href="../_static/js/highlight/styles/default.css">
<script src="../_static/js/highlight/highlight.pack.js"></script>

<script type="text/javascript">
$(document).ready (function(){
 $("#get Balance Tab a").click (function (e){
 	e.prevent Default();
 	$(this).tab('show');
 });
});
</script>
<script type="text/javascript">

		var curl Balance Text = "";

		var php Balance Text = "";

		var ruby Balance Text = "";

 function signv2Get Balance (form) {
	 var url = "";
		var sandbox = "";
		var params = "";
		var formURL = document.v2_request_by_endpoint. URL.value;

		formURL += form.endpoint.value;

		var xhttp = new XMLHttp Request();
		xhttp.onreadystatechange = function() {
		if (xhttp.ready State == 4 && xhttp.status == 200) {
			if (url == "../_static/examples/PHP/params_with_header_PHP.txt"){
				php Balance Text = xhttp.response Text;}
			else {
				ruby Balance Text = xhttp.response Text;}
			}
		}

		url = "../_static/examples/PHP/params_with_header_PHP.txt";
		xhttp.open("GET", url, false);
		xhttp.send();
		url = "../_static/examples/Ruby/params_with_header_Ruby.txt";
		xhttp.open("GET", url, false);
		xhttp.send();

 var accessor = { consumer Secret: form.consumer Secret.value
 , token Secret : form.token Secret.value};
 var message = { method: form.http Method.value
 , action: formURL
 , parameters: OAuth.decode Form (form.parameters.value)
 };
 for (var e = 0; e < form.elements.length; ++e) {
 var input = form.elements[e];
 if (input.name != null)
 if (input.name.substring(0, 6) == "oauth_") {
 if (input.value != null)
 if (input.value != "")
 if (!(input.type == "checkbox" || input.type == "radio") || input.checked)
 {
 message.parameters.push([input.name, input.value]);

						 params += " '" + input.name + "' => '" + input.value + "', \\n";
 }
			}else if (input.name.substring(0, 10) == "parameters"){
					 var example = input.value.split('&');
 for (var i = 0; i < example.length; i++){
					 var split = example[i].split('=');
						params += " '" + split[0] + "' => '" + split[1] + "', \\n";

					 }
					}

 }
 OAuth. Signature Method.sign (message, accessor);
 show Text("normalized Parameters", OAuth. Signature Method.normalize Parameters (message.parameters));
 show Text("signature Base String" , OAuth. Signature Method.get Base String (message));
 show Text("signature" , OAuth.get Parameter (message.parameters, "oauth_signature"));
 show Text("authorization Header" , OAuth.get Authorization Header("", message.parameters));

	curl Balance Text = "curl -H 'Authorization: " + OAuth.get Authorization Header("", message.parameters) + "' --data '" + OAuth. Signature Method.normalize Parameters (message.parameters) + "' '" + formURL + "'";

 show Text("curl Request" , curl Balance Text);

 php Balance Text = php Balance Text.replace('{$Authorization}', OAuth.get Authorization Header("", message.parameters));
	php Balance Text = php Balance Text.replace('{$sandbox}', formURL );
	php Balance Text = php Balance Text.replace("{$generated parameters with values code}", params);

	ruby Balance Text = ruby Balance Text.replace("{$generated parameters with values code}", params);
 ruby Balance Text = ruby Balance Text.replace('{$Authorization}', OAuth.get Authorization Header("", message.parameters));
	ruby Balance Text = ruby Balance Text.replace('{$sandbox}', formURL );

	show Text("php Request" , php Balance Text);
	show Text("ruby Request" , ruby Balance Text);
		$(document).ready (function() {
 $('pre code').each (function (i, block) {
 hljs.highlight Block (block);
 });
 });
	return false;
 }
 function show Text (element Id, text) {
 var child = document.create Text Node (text);
 var element = document.get Element By Id (element Id);
			element.innerHTML ="";
 if (element.has Child Nodes()) {
 element.replace Child (child, element.first Child);
 } else {
 element.append Child (child);
 }
 }
 function fresh Timestamp() {
 document.v2_request_by_endpoint.oauth_timestamp.value = OAuth.timestamp();
 }
 function fresh Nonce() {
 document.v2_request_by_endpoint.oauth_nonce.value = OAuth.nonce(11);
 }
	 function copy To Clipboard Balance (text) {
 var text Area = document.create Element("textarea");

 // Place in top-left corner of screen regardless of scroll position.
 text Area.style.position = 'fixed';
 text Area.style.top = 0;
 text Area.style.left = 0;

 // Ensure it has a small width and height. Setting to 1px / 1em
 // doesn't work as this gives a negative w/h on some browsers.
 text Area.style.width = '2em';
 text Area.style.height = '2em';

 // We don't need padding, reducing the size if it does flash render.
 text Area.style.padding = 0;

 // Clean up any borders.
 text Area.style.border = 'none';
 text Area.style.outline = 'none';
 text Area.style.box Shadow = 'none';

 // Avoid flash of white box if rendered for any reason.
 text Area.style.background = 'transparent';

 if (text == 'curl'){
	text Area.value = curl Balance Text;
 } else if ( text =='php'){
	text Area.value = php Balance Text;
 } else {
 text Area.value = ruby Balance Text;
 }
 document.body.append Child (text Area);

 text Area.select();

 try {
 var successful = document.exec Command('copy');
 var msg = successful ? 'successful' : 'unsuccessful';
 console.log('Copying text command was ' + msg);
 } catch (err) {
 console.log('Oops, unable to copy');
 }

 document.body.remove Child (text Area);

 
 }
</script>

<form name="v2_request_by_endpoint">

 
 <p></p>
 <input type="button" class="doc-button" style="font-size: 100%; padding: 2px 6px 3px 6px;" value="Sign" onclick="signv2Get Balance (document.v2_request_by_endpoint)" />
 <p></p>
</form>

<ul class="nav nav-tabs" id="get Balance Tab">
 <li class="active">[CURL](#get BalanceCURL)</li>
 <li>[PHP](#get BalancePHP)</li>
 <li>[Ruby](#get Balance Ruby)</li>
</ul>

 <button class="doc-button" onclick="copy To Clipboard Balance('php')">Copy to clipboard</button>
 <pre>
 <code class="php" id="php Request"></code>
 </pre>

 <button class="doc-button" onclick="copy To Clipboard Balance('ruby')">Copy to clipboard</button>
 <pre>
 <code class="language-ruby" id="ruby Request"></code>
 </pre>

### /api/v2/get-balance/manager

#### Введение

Запрос баланса менеджером инициируется через HTTPS POST запрос с использованием [URL](#api-v2-get-balance-manager-request-url) и [параметров](#api-v2-get-balance-manager-request-parameters), указанных ниже. Для аутентификации используется [OAuth HMAC-SHA1](https://doc.payneteasy.ru/integration/general_api_usage/request_authentication_methods/oauth.html.md). См. [Статусы](https://doc.payneteasy.ru/integration/reference/statuses.html.md). Также доступно в UI. Для подключения данной функциональности обратитесь в службу технической поддержки.

#### API URL

> **Note:** Путь API URL не должен быть задан фиксированным значением, т.к. он может быть изменён позднее.

| Интеграционная среда | Производственная среда |
|------------------------------------------------------------------------------|---------------------------------------------------------------------------|
| https://sandbox.payneteasy.ru/paynet/api/v2/get-balance/manager/MANAGERLOGIN | https://gate.payneteasy.ru/paynet/api/v2/get-balance/manager/MANAGERLOGIN |

#### Параметры запроса

> **Note:** Запрос должен иметь content-type=application/x-www-form-urlencoded и [заголовки авторизации](https://doc.payneteasy.ru/integration/general_api_usage/request_authentication_methods/oauth.html.md).

| Название параметра | Описание | Значение |
|----------------------|-------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|
| balance-name | Название баланса. Если параметр не указан, в результате будут возвращены все доступные балансы. | `Необходимость`: Опционально `Тип`: String `Длина`: 128 |

#### Параметры ответа

> **Note:** Ответ имеет заголовок Content-Type: text/html;charset=utf-8. Все поля имеют кодировку x-www-form-urlencoded, с символом (0xA) в конце значения каждого параметра.

| Параметры ответа | Описание |
|------------------------------|----------------------------------------------------------------------------------------------------------|
| name | Название баланса. |
| amount | Текущий баланс с учётом STH и Rolling reserve. |
| online-balance-live-amount | Текущий баланс, рассчитанный по конфигурации без учёта STH и Rolling reserve. Live = current - STH - RR. |
| total-short-term-hold-amount | Текущая сумма удержания на основе Date bumping function. |
| total-rolling-reserve-amount | Текущая сумма, рассчитанная на основе удержания тарифного плана. |
| currency | Валюта, используемая для выбранного баланса. |
| merchant Login | Логин Торговца для данного баланса. |
| amount-buffer-hold | Рассчитанная сумма для исходящих операций без финального статуса. |

#### Пример запроса

```http
POST /paynet/api/v2/get-balance/manager/BalanceTestManager HTTP/1.1
Host: sandbox.payneteasy.ru
User-Agent: curl/7.83.0
Accept: */*
Authorization: OAuth realm="",oauth_version="1.0",oauth_consumer_key="BalanceTestManager",oauth_timestamp="1686924196",oauth_nonce="sT33IbJ4QHs",oauth_signature_method="HMAC-SHA1",oauth_signature="LyKy7M8P%2F%2FZxyLnh7ULW405ODVs%3D"
Content-Length: 156
Content-Type: application/x-www-form-urlencoded
Connection: close

balance-name=saa
&oauth_consumer_key=BalanceTestManager
&oauth_nonce=sT33IbJ4QHs
&oauth_signature_method=HMAC-SHA1
&oauth_timestamp=1686924196
&oauth_version=1.0
```

#### Пример успешного ответа

```http
HTTP/1.1 200
Server: server
Date: Tue, 16 May 2023 08:06:05 GMT
Content-Length: 192
Connection: close
X-XSS-Protection: 1
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000
Strict-Transport-Security: max-age=31536000

[
  {
    "name":"saa",
    "amount":219.500,
    "online-balance-live-amount":219.500,
    "total-short-term-hold-amount":0.000,
    "total-rolling-reserve-amount":0.000,
    "currency":"USD",
    "merchantLogin":"balance_test_merchant14",
    "externalMerchantIdentifier":null,
    "amount-buffer-hold":0.000
  }
]
```

#### Пример неуспешного ответа

```http
HTTP/1.1 403
Server: server
Date: Fri, 16 Jun 2023 13:23:37 GMT
Content-Type: text/html
Content-Length: 735
Connection: close
X-XSS-Protection: 1
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000

...
<body>
    <p>Access is denied</p>
</body>
```

#### Коллекция Postman

<div class="postman-run-button"
 data-postman-action="collection/fork"
 data-postman-var-1="23519287-cf364588-7f3e-42d5-ad40-b86941d6a995"
 data-postman-collection-url="entity Id=23519287-cf364588-7f3e-42d5-ad40-b86941d6a995&entity Type=collection&workspace Id=7be78bd7-9f10-4be9-a60e-bd36ff1b6783"
 data-postman-param="env%5BPayment%20gateway%20ENV%5D=W3sia2V5IjoiVVJMIiwidm FsdWUi Oi IiLCJlbm FibGVk Ijp0cn VlLCJ0eXBl IjoiZGVmYXVsdCJ9XQ=="></div>
<script type="text/javascript">
 (function (p,o,s,t,m,a,n) {
 !p[s] && (p[s] = function () { (p[t] || (p[t] = [])).push (arguments); });
 !o.get Element By Id (s+t) && o.get Elements By Tag Name("head")[0].append Child((
 (n = o.create Element("script")),
 (n.id = s+t), (n.async = 1), (n.src = m), n
 ));
 }(window, document, "_pm", "Postman Run Object", "https://run.pstmn.io/button.js"));
 var env Name = "Payment gateway ENV";
	 var env Data = {
 URL:'sandbox.payneteasy.ru' + "/" + 'paynet'
 };
 \_pm('env.replace', env Name, env Data);
</script>

#### Конструктор запросов

<meta http-equiv="Cache-Control" content="no-cache">
<script src="../_static/js/generate_card_number.js"></script>
<script src="../_static/js/crypto-js/sha1.js"></script>
<script src="../_static/js/oauth/sha1.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<script src="../_static/js/oauth/oauth.js"></script>

<link rel="stylesheet" href="../_static/js/highlight/styles/default.css">
<script src="../_static/js/highlight/highlight.pack.js"></script>

<script type="text/javascript">
$(document).ready (function(){
 $("#get Manager Balance Tab a").click (function (e){
 	e.prevent Default();
 	$(this).tab('show');
 });
});
</script>
<script type="text/javascript">

		var curl Manager Balance Text = "";

		var php Manager Balance Text = "";

		var ruby Manager Balance Text = "";
 function sign Get Balancev2Manager (form) {
	 var url = "";
		var sandbox = "";
		var params = "";
		var formURL = document.request_Manager_v2. URL.value;

		if (document.request_Manager_v2.operationname.value =="by Manager"){
		 formURL += form.oauth_consumer_key.value;
		}

		var xhttp = new XMLHttp Request();
		xhttp.onreadystatechange = function() {
		if (xhttp.ready State == 4 && xhttp.status == 200) {
			if (url == "../_static/examples/PHP/params_with_header_PHP.txt"){
				php Manager Balance Text = xhttp.response Text;}
			else {
				ruby Manager Balance Text = xhttp.response Text;}
			}
		}

		url = "../_static/examples/PHP/params_with_header_PHP.txt";
		xhttp.open("GET", url, false);
		xhttp.send();
		url = "../_static/examples/Ruby/params_with_header_Ruby.txt";
		xhttp.open("GET", url, false);
		xhttp.send();

 var accessor Manager = { consumer Secret: form.consumer Secret.value
 , token Secret : form.token Secret.value};
 var message Manager = { method: form.http Method.value
 , action: formURL
 , parameters: OAuth.decode Form (form.parameters.value)
 };
 for (var e = 0; e < form.elements.length; ++e) {
 var input = form.elements[e];
 if (input.name != null)
 if (input.name.substring(0, 6) == "oauth_") {
 if (input.value != null)
 if (input.value != "")
 if (!(input.type == "checkbox" || input.type == "radio") || input.checked)
 {
 message Manager.parameters.push([input.name, input.value]);

						 params += " '" + input.name + "' => '" + input.value + "', \\n";
 }
			}else if (input.name.substring(0, 10) == "parameters"){
					 var example = input.value.split('&');
 for (var i = 0; i < example.length; i++){
					 var split = example[i].split('=');
						params += " '" + split[0] + "' => '" + split[1] + "', \\n";

					 }
					}

 }
 OAuth. Signature Method.sign (message Manager, accessor Manager);
 show Text Manager("normalized Parameters Manager", OAuth. Signature Method.normalize Parameters (message Manager.parameters));
 show Text Manager("signature Base String Manager" , OAuth. Signature Method.get Base String (message Manager));
 show Text Manager("signature Manager" , OAuth.get Parameter (message Manager.parameters, "oauth_signature"));
 show Text Manager("authorization Header Manager" , OAuth.get Authorization Header("", message Manager.parameters));

	curl Manager Balance Text = "curl -H 'Authorization: " + OAuth.get Authorization Header("", message Manager.parameters) + "' --data '" + OAuth. Signature Method.normalize Parameters (message Manager.parameters) + "' '" + formURL + "'";

 show Text Manager("curl Request Manager" , curl Manager Balance Text);

 php Manager Balance Text = php Manager Balance Text.replace('{$Authorization}', OAuth.get Authorization Header("", message Manager.parameters));
	php Manager Balance Text = php Manager Balance Text.replace('{$sandbox}', formURL );
	php Manager Balance Text = php Manager Balance Text.replace("{$generated parameters with values code}", params);

	ruby Manager Balance Text = ruby Manager Balance Text.replace("{$generated parameters with values code}", params);
 ruby Manager Balance Text = ruby Manager Balance Text.replace('{$Authorization}', OAuth.get Authorization Header("", message Manager.parameters));
	ruby Manager Balance Text = ruby Manager Balance Text.replace('{$sandbox}', formURL );

	show Text Manager("php Request Manager" , php Manager Balance Text);
	show Text Manager("ruby Request Manager" , ruby Manager Balance Text);
		$(document).ready (function() {
 $('pre code').each (function (i, block) {
 hljs.highlight Block (block);
 });
 });
	return false;
 }
 function show Text Manager (element Id, text) {
 var child = document.create Text Node (text);
 var element = document.get Element By Id (element Id);
			element.innerHTML ="";
 if (element.has Child Nodes()) {
 element.replace Child (child, element.first Child);
 } else {
 element.append Child (child);
 }
 }
 function fresh Manager Timestamp() {
 document.request_Manager_v2.oauth_timestamp.value = OAuth.timestamp();
 }
 function fresh Manager Nonce() {
 document.request_Manager_v2.oauth_nonce.value = OAuth.nonce(11);
 }
	 function copy To Clipboard Manager Balance (text) {
 var text Area = document.create Element("textarea");

 // Place in top-left corner of screen regardless of scroll position.
 text Area.style.position = 'fixed';
 text Area.style.top = 0;
 text Area.style.left = 0;

 // Ensure it has a small width and height. Setting to 1px / 1em
 // doesn't work as this gives a negative w/h on some browsers.
 text Area.style.width = '2em';
 text Area.style.height = '2em';

 // We don't need padding, reducing the size if it does flash render.
 text Area.style.padding = 0;

 // Clean up any borders.
 text Area.style.border = 'none';
 text Area.style.outline = 'none';
 text Area.style.box Shadow = 'none';

 // Avoid flash of white box if rendered for any reason.
 text Area.style.background = 'transparent';

 if (text == 'curl'){
	text Area.value = curl Manager Balance Text;
 } else if ( text =='php'){
	text Area.value = php Manager Balance Text;
 } else {
 text Area.value = ruby Manager Balance Text;
 }
 document.body.append Child (text Area);

 text Area.select();

 try {
 var successful = document.exec Command('copy');
 var msg = successful ? 'successful' : 'unsuccessful';
 console.log('Copying text command was ' + msg);
 } catch (err) {
 console.log('Oops, unable to copy');
 }

 document.body.remove Child (text Area);

 
 }
</script>

<form name="request_Manager_v2">
 <select hidden class="doc-select" name="operationname" size="1" >
 <option value="by Manager">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;by Manager login</option>
 </select>

 
 <p></p>
 <input type="button" class="doc-button" style="font-size: 100%; padding: 2px 6px 3px 6px;" value="Sign" onclick="sign Get Balancev2Manager (document.request_Manager_v2)" />
 <p></p>
</form>

<ul class="nav nav-tabs" id="get Manager Balance Tab">
 <li class="active">[CURL](#get Manager BalanceCURL)</li>
 <li>[PHP](#get Manager BalancePHP)</li>
 <li>[Ruby](#get Manager Balance Ruby)</li>
 </ul>

 <button class="doc-button" onclick="copy To Clipboard Manager Balance('php')">Copy to clipboard</button>
 <pre>
 <code class="php" id="php Request Manager"></code>
 </pre>

 <button class="doc-button" onclick="copy To Clipboard Manager Balance('ruby')">Copy to clipboard</button>
 <pre>
 <code class="language-ruby" id="ruby Request Manager"></code>
 </pre>

### /api/v2/get-balance/merchant

#### Введение

Get Balance by Merchant инициируется через HTTPS POST запрос с использованием [URL](#api-v2-get-balance-merchant-request-url) и [параметров](#api-v2-get-balance-merchant-request-parameters), указанных ниже. Для аутентификации используйте [OAuth HMAC-SHA1](https://doc.payneteasy.ru/integration/general_api_usage/request_authentication_methods/oauth.html.md). См. [Статусы](https://doc.payneteasy.ru/integration/reference/statuses.html.md). Также можно просмотреть в интерфейсе. Свяжитесь со службой поддержки, чтобы включить эту функцию.

#### API URL

> **Note:** Путь API URL не должен быть задан фиксированным значением, т.к. он может быть изменён позднее.

| Интеграционная среда | Производственная среда |
|--------------------------------------------------------------------------------|-----------------------------------------------------------------------------|
| https://sandbox.payneteasy.ru/paynet/api/v2/get-balance/merchant/MERCHANTLOGIN | https://gate.payneteasy.ru/paynet/api/v2/get-balance/merchant/MERCHANTLOGIN |

#### Параметры запроса

> **Note:** Запрос должен иметь content-type=application/x-www-form-urlencoded и [заголовки авторизации](https://doc.payneteasy.ru/integration/general_api_usage/request_authentication_methods/oauth.html.md).

| Название параметра | Описание | Значение |
|----------------------|-------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|
| balance-name | Название баланса. Если параметр не указан, в результате будут возвращены все доступные балансы. | `Необходимость`: Опционально `Тип`: String `Длина`: 128 |

#### Параметры ответа

> **Note:** Ответ имеет заголовок Content-Type: text/html;charset=utf-8. Все поля имеют кодировку x-www-form-urlencoded, с символом (0xA) в конце значения каждого параметра.

| Параметры ответа | Описание |
|------------------------------|----------------------------------------------------------------------------------------------------------|
| name | Название баланса. |
| amount | Текущий баланс с учётом STH и Rolling reserve. |
| online-balance-live-amount | Текущий баланс, рассчитанный по конфигурации без учёта STH и Rolling reserve. Live = current - STH - RR. |
| total-short-term-hold-amount | Текущая сумма удержания на основе Date bumping function. |
| total-rolling-reserve-amount | Текущая сумма, рассчитанная на основе удержания тарифного плана. |
| currency | Валюта, используемая для выбранного баланса. |
| amount-buffer-hold | Рассчитанная сумма для исходящих операций без финального статуса. |

#### Пример запроса

```http
POST /paynet/api/v2/get-balance/merchant/balance_test_merchant14 HTTP/1.1
Host: sandbox.payneteasy.ru
User-Agent: curl/7.83.0
Accept: */*
Authorization: OAuth realm="",oauth_version="1.0",oauth_consumer_key="balance_test_merchant14",oauth_timestamp="1686924613",oauth_nonce="qoJPcins4Aw",oauth_signature_method="HMAC-SHA1",oauth_signature="M6fTXbI0tFz4Dy7YEL3SBzCN1I0%3D"
Content-Length: 161
Content-Type: application/x-www-form-urlencoded
Connection: close

balance-name=saa
&oauth_consumer_key=balance_test_merchant14
&oauth_nonce=qoJPcins4Aw
&oauth_signature_method=HMAC-SHA1
&oauth_timestamp=1686924613
&oauth_version=1.0
```

#### Пример успешного ответа

```http
HTTP/1.1 200
Server: server
Date: Tue, 16 May 2023 08:06:05 GMT
Content-Length: 192
Connection: close
X-XSS-Protection: 1
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000
Strict-Transport-Security: max-age=31536000

[
  {
    "name":"Test1",
    "amount":8854.000,
    "online-balance-live-amount":8854.000,
    "total-short-term-hold-amount":0.000,
    "total-rolling-reserve-amount":0.000,
    "currency":"AUD",
    "amount-buffer-hold":0.000
  }
]
```

#### Пример неуспешного ответа

```http
HTTP/1.1 200
Server: server
Date: Tue, 16 May 2023 08:06:05 GMT
Content-Length: 192
Connection: close
X-XSS-Protection: 1
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000
Strict-Transport-Security: max-age=31536000

...
<body>
    <p>Access is denied</p>
</body>
```

#### Коллекция Postman

<div class="postman-run-button"
 data-postman-action="collection/fork"
 data-postman-var-1="23519287-ecf18b2e-a924-4ef4-8288-0e541223f38f"
 data-postman-collection-url="entity Id=23519287-ecf18b2e-a924-4ef4-8288-0e541223f38f&entity Type=collection&workspace Id=7be78bd7-9f10-4be9-a60e-bd36ff1b6783"
 data-postman-param="env%5BPayment%20gateway%20ENV%5D=W3sia2V5IjoiVVJMIiwidm FsdWUi Oi IiLCJlbm FibGVk Ijp0cn VlLCJ0eXBl IjoiZGVmYXVsdCJ9XQ=="></div>
<script type="text/javascript">
 (function (p,o,s,t,m,a,n) {
 !p[s] && (p[s] = function () { (p[t] || (p[t] = [])).push (arguments); });
 !o.get Element By Id (s+t) && o.get Elements By Tag Name("head")[0].append Child((
 (n = o.create Element("script")),
 (n.id = s+t), (n.async = 1), (n.src = m), n
 ));
 }(window, document, "_pm", "Postman Run Object", "https://run.pstmn.io/button.js"));
 var env Name = "Payment gateway ENV";
	 var env Data = {
 URL:'sandbox.payneteasy.ru' + "/" + 'paynet'
 };
 \_pm('env.replace', env Name, env Data);
</script>

#### Конструктор запросов

<meta http-equiv="Cache-Control" content="no-cache">
<script src="../_static/js/generate_card_number.js"></script>
<script src="../_static/js/crypto-js/sha1.js"></script>
<script src="../_static/js/oauth/sha1.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<script src="../_static/js/oauth/oauth.js"></script>

<link rel="stylesheet" href="../_static/js/highlight/styles/default.css">
<script src="../_static/js/highlight/highlight.pack.js"></script>

<script type="text/javascript">
$(document).ready (function(){
 $("#get Merchant Balance Tab a").click (function (e){
 	e.prevent Default();
 	$(this).tab('show');
 });
});
</script>
<script type="text/javascript">

		var curl Merchant Balance Text = "";

		var php Merchant Balance Text = "";

		var ruby Merchant Balance Text = "";
 function sign Get Balance Merchant (form) {
	 var url = "";
		var sandbox = "";
		var params = "";
		var formURL = document.request Merchant. URL.value;

 if (document.request Merchant.operationname.value =="by Merchant"){
		 formURL += form.oauth_consumer_key.value;
 }

		var xhttp = new XMLHttp Request();
		xhttp.onreadystatechange = function() {
		if (xhttp.ready State == 4 && xhttp.status == 200) {
			if (url == "../_static/examples/PHP/params_with_header_PHP.txt"){
				php Merchant Balance Text = xhttp.response Text;}
			else {
				ruby Merchant Balance Text = xhttp.response Text;}
			}
		}

		url = "../_static/examples/PHP/params_with_header_PHP.txt";
		xhttp.open("GET", url, false);
		xhttp.send();
		url = "../_static/examples/Ruby/params_with_header_Ruby.txt";
		xhttp.open("GET", url, false);
		xhttp.send();

 var accessor Merchant = { consumer Secret: form.consumer Secret.value
 , token Secret : form.token Secret.value};
 var message Merchant = { method: form.http Method.value
 , action: formURL
 , parameters: OAuth.decode Form (form.parameters.value)
 };
 for (var e = 0; e < form.elements.length; ++e) {
 var input = form.elements[e];
 if (input.name != null)
 if (input.name.substring(0, 6) == "oauth_") {
 if (input.value != null)
 if (input.value != "")
 if (!(input.type == "checkbox" || input.type == "radio") || input.checked)
 {
 message Merchant.parameters.push([input.name, input.value]);

						 params += " '" + input.name + "' => '" + input.value + "', \\n";
 }
			}else if (input.name.substring(0, 10) == "parameters"){
					 var example = input.value.split('&');
 for (var i = 0; i < example.length; i++){
					 var split = example[i].split('=');
						params += " '" + split[0] + "' => '" + split[1] + "', \\n";

					 }
					}

 }
 OAuth. Signature Method.sign (message Merchant, accessor Merchant);
 show Text Merchant("normalized Parameters Merchant", OAuth. Signature Method.normalize Parameters (message Merchant.parameters));
 show Text Merchant("signature Base String Merchant" , OAuth. Signature Method.get Base String (message Merchant));
 show Text Merchant("signature Merchant" , OAuth.get Parameter (message Merchant.parameters, "oauth_signature"));
 show Text Merchant("authorization Header Merchant" , OAuth.get Authorization Header("", message Merchant.parameters));

	curl Merchant Balance Text = "curl -H 'Authorization: " + OAuth.get Authorization Header("", message Merchant.parameters) + "' --data '" + OAuth. Signature Method.normalize Parameters (message Merchant.parameters) + "' '" + formURL + "'";

 show Text Merchant("curl Request Merchant" , curl Merchant Balance Text);

 php Merchant Balance Text = php Merchant Balance Text.replace('{$Authorization}', OAuth.get Authorization Header("", message Merchant.parameters));
	php Merchant Balance Text = php Merchant Balance Text.replace('{$sandbox}', formURL );
	php Merchant Balance Text = php Merchant Balance Text.replace("{$generated parameters with values code}", params);

	ruby Merchant Balance Text = ruby Merchant Balance Text.replace("{$generated parameters with values code}", params);
 ruby Merchant Balance Text = ruby Merchant Balance Text.replace('{$Authorization}', OAuth.get Authorization Header("", message Merchant.parameters));
	ruby Merchant Balance Text = ruby Merchant Balance Text.replace('{$sandbox}', formURL );

	show Text Merchant("php Request Merchant" , php Merchant Balance Text);
	show Text Merchant("ruby Request Merchant" , ruby Merchant Balance Text);
		$(document).ready (function() {
 $('pre code').each (function (i, block) {
 hljs.highlight Block (block);
 });
 });
	return false;
 }
 function show Text Merchant (element Id, text) {
 var child = document.create Text Node (text);
 var element = document.get Element By Id (element Id);
			element.innerHTML ="";
 if (element.has Child Nodes()) {
 element.replace Child (child, element.first Child);
 } else {
 element.append Child (child);
 }
 }
 function fresh Merchant Timestamp() {
 document.request Merchant.oauth_timestamp.value = OAuth.timestamp();
 }
 function fresh Merchant Nonce() {
 document.request Merchant.oauth_nonce.value = OAuth.nonce(11);
 }
	 function copy To Clipboard Merchant Balance (text) {
 var text Area = document.create Element("textarea");

 // Place in top-left corner of screen regardless of scroll position.
 text Area.style.position = 'fixed';
 text Area.style.top = 0;
 text Area.style.left = 0;

 // Ensure it has a small width and height. Setting to 1px / 1em
 // doesn't work as this gives a negative w/h on some browsers.
 text Area.style.width = '2em';
 text Area.style.height = '2em';

 // We don't need padding, reducing the size if it does flash render.
 text Area.style.padding = 0;

 // Clean up any borders.
 text Area.style.border = 'none';
 text Area.style.outline = 'none';
 text Area.style.box Shadow = 'none';

 // Avoid flash of white box if rendered for any reason.
 text Area.style.background = 'transparent';

 if (text == 'curl'){
	text Area.value = curl Merchant Balance Text;
 } else if ( text =='php'){
	text Area.value = php Merchant Balance Text;
 } else {
 text Area.value = ruby Merchant Balance Text;
 }
 document.body.append Child (text Area);

 text Area.select();

 try {
 var successful = document.exec Command('copy');
 var msg = successful ? 'successful' : 'unsuccessful';
 console.log('Copying text command was ' + msg);
 } catch (err) {
 console.log('Oops, unable to copy');
 }

 document.body.remove Child (text Area);

 
 }
</script>

<form name="request Merchant">
 <select hidden class="doc-select" name="operationname" size="1" >
 <option value="by Merchant">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;by Merchant login</option>
 </select>

 
 <p></p>
 <input type="button" class="doc-button" style="font-size: 100%; padding: 2px 6px 3px 6px;" value="Sign" onclick="sign Get Balance Merchant (document.request Merchant)" />
 <p></p>
</form>

<ul class="nav nav-tabs" id="get Merchant Balance Tab">
 <li class="active">[CURL](#get Merchant BalanceCURL)</li>
 <li>[PHP](#get Merchant BalancePHP)</li>
 <li>[Ruby](#get Merchant Balance Ruby)</li>
 </ul>

 <button class="doc-button" onclick="copy To Clipboard Merchant Balance('php')">Copy to clipboard</button>
 <pre>
 <code class="php" id="php Request Merchant"></code>
 </pre>

 <button class="doc-button" onclick="copy To Clipboard Merchant Balance('ruby')">Copy to clipboard</button>
 <pre>
 <code class="language-ruby" id="ruby Request Merchant"></code>
 </pre>

### /api/v2/make-rebill-preauth

#### Введение

Повторная предавторизация инициируется через запрос HTTPS POST на указанный ниже [URL](#make-rebill-request-url) с использованием указанных [параметров](#make-rebill-request-parameters). Для аутентификации запроса используется [SHA-1](https://doc.payneteasy.ru/integration/general_api_usage/request_authentication_methods/sha.html.md). См. [Статусы транзакций](https://doc.payneteasy.ru/integration/reference/statuses.html.md).

#### API URL

> **Note:** Путь API URL не должен быть задан фиксированным значением, т.к. он может быть изменён позднее.

| Интеграционная среда | Производственная среда |
|---------------------------------------------------------------------------------------|------------------------------------------------------------------------------------|
| https://sandbox.payneteasy.ru/paynet/api/v2/make-rebill-preauth/ENDPOINTID | https://gate.payneteasy.ru/paynet/api/v2/make-rebill-preauth/ENDPOINTID |
| https://sandbox.payneteasy.ru/paynet/api/v2/make-rebill-preauth/group/ENDPOINTGROUPID | https://gate.payneteasy.ru/paynet/api/v2/make-rebill-preauth/group/ENDPOINTGROUPID |

#### Параметры запроса

> **Note:** Запрос должен иметь заголовок content-type=application/x-www-form-urlencoded.

| Название параметра | Описание | Значение |
|----------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------|
| login | Логин Присоединяющейся стороны в Системе. | `Необходимость`: Обязательно `Тип`: String `Длина`: 20 |
| client_orderid | Уникальный идентификатор заказа, присвоенный Присоединяющейся Стороной. | `Необходимость`: Обязательно `Тип`: String `Длина`: 128 |
| cardrefid | Ссылочный идентификатор, полученный на этапе регистрации карты (или иного платежного метода) [/api/v2/create-card-ref/](https://doc.payneteasy.ru/integration/api_v2_create-card-ref.html.md). | `Необходимость`: Обязательно `Тип`: String `Длина`: 20 |
| amount | Сумма к оплате. Сумма должна быть указана в наибольших единицах с разделителем .. Например, 10.5 для USD означает 10 долларов США и 50 центов. | `Необходимость`: Обязательно `Тип`: Numeric `Длина`: 10 |
| currency | Валюта, в которой проводится операция. Примеры значений: USD для доллара США, EUR для европейского евро, RUB для российского рубля. | `Необходимость`: Обязательно `Тип`: String `Длина`: 3 |
| enumerate_amounts | Парметр может содержать последовательность из нескольких сумм, разделенных запятой ,. Payneteasy проведет несколько попыток оплаты с указанными суммами, пока не будет получен успешный статус или пока не закончится последовательность переданных сумм. | `Необходимость`: Опционально `Тип`: String `Длина`: 128 |
| recurrent_scenario | Тип повторной оплаты. Возможные значения: REGULAR (регулярный) или IRREGULAR (нерегулярный). Если параметр передан в запросе, его значение имеет приоритет над значением этого параметра, установленном на шлюзе. Актуально только для некоторых Экваеров. | `Необходимость`: Опционально `Тип`: String `Длина`: 50 |
| recurrent_initiator | Инициатор повторной оплаты. Возможные значения: CARDHOLDER (держатель карты) или MERCHANT (торговец). Если параметр передан в запросе, его значение имеет приоритет над значением этого параметра, установленном на шлюзе. Актуально только для некоторых Экваеров. | `Необходимость`: Опционально `Тип`: String `Длина`: 50 |
| cvv2 | CVV2-код Плательщика. CVV2 (Card Verification Значение) — это трех- или четырех-значное число ПОСЛЕ номера кредитной карты в области подписи карты. Может быть пустым или отсутствовать, если эквайринговый канал поддерживает процессинг без CVV2 или он не актуален для данного платёжного метода. | `Необходимость`: Опционально `Тип`: Numeric `Длина`: 3-4 |
| ipaddress | IP-адрес Плательщика. Включен для отслеживания мошеннических действий. | `Необходимость`: Обязательно `Тип`: String `Длина`: 45 |
| comment | Короткий комментарий. | `Необходимость`: Опционально `Тип`: String `Длина`: 50 |
| order_desc | Описание заказа. | `Необходимость`: Обязательно `Тип`: String `Длина`: 64k |
| control | Контрольная сумма, сгенерированная [SHA-1](https://doc.payneteasy.ru/integration/general_api_usage/request_authentication_methods/sha.html.md). Строка для подписи представляет собой объединение следующих параметров: 1. Параметр запроса: login 2. Параметр запроса: client_orderid 3. Параметр запроса: cardrefid 4. Параметр запроса:amount в минимальных денежных единицах (если отправлен). 5. Параметр запроса: currency 6. merchant_control (Контрольный ключ, назначенный для учетной записи Присоединяющейся Cтороны в Payneteasy). | `Необходимость`: Обязательно `Тип`: String `Длина`: 40 |
| purpose | Получатель платежа. Это полезно для Присоединяющейся стороны, позволяющей клиентам переводить деньги с кредитной карты на какой-либо счёт клиента, например игровой счёт или счёт мобильного телефона. Примеры значений: +9999999999; mail@example.com и т. д. Это значение будет использоваться системой мониторинга мошенничества. | `Необходимость`: Опционально `Тип`: String `Длина`: 128 |
| redirect_url | URL-адрес, на который будет перенаправлен держатель карты после завершения транзакции. Обратите внимание: держатель карты будет перенаправлен в любом случае — независимо от того, была ли транзакция approved или declined. Этот параметр не следует использовать для получения результатов из Платёжного Шлюза Payneteasy, поскольку все параметры передаются через браузер клиента и могут быть потеряны при передаче. Для доставки корректного результата платежа в бэкенд следует использовать server_callback_url. Параметр обязателен для сценария 3DS и необязателен для сценария без 3DS. https://doc.payneteasy.ru можно использовать для тестирования, если неизвестно, используется ли 3DS. | `Необходимость`: Опционально `Тип`: String `Длина`: 1024 |
| server_callback_url | URL-адрес server_callback_url, по которому будет отправлен обратный вызов с результатом транзакции. Присоединяющаяся сторона может использовать обратные вызовы для индивидуальной обработки завершения транзакции (например, для сбора данных о платежах в информационной системе Присоединяющейся стороны). Список параметров, включенных в обратный вызов, см. в разделе [Обратного вызова Присоединяющейся стороны](https://doc.payneteasy.ru/integration/merchant_callback_parameters.html.md). Данный параметр может быть передан вместо notify_url. При использовании server_callback_url платежный шлюз отправляет callback-уведомление только при получении финального статуса исходной транзакции. При использовании notify_url платежный шлюз отправляет уведомление при получении финального статуса и продолжает отправлять уведомления о всех последующих изменениях (возвраты, chargeback и др.). | `Необходимость`: Опционально `Тип`: String `Длина`: 1024 |
| notify_url | URL-адрес notify_url, по которому будет отправлен обратный вызов с результатом транзакции. Присоединяющаяся сторона может использовать обратные вызовы для индивидуальной обработки завершения транзакции (например, для сбора данных о платежах в информационной системе Присоединяющейся стороны). Список параметров, включенных в обратный вызов, см. в разделе [Обратного вызова Присоединяющейся стороны](https://doc.payneteasy.ru/integration/merchant_callback_parameters.html.md). Данный параметр может быть передан вместо server_callback_url. При использовании notify_url платежный шлюз отправляет уведомление при получении финального статуса и продолжает отправлять уведомления о всех последующих изменениях (возвраты, chargeback и др.). При использовании server_callback_url платежный шлюз отправляет callback-уведомление только при получении финального статуса исходной транзакции. | `Необходимость`: Опционально `Тип`: String `Длина`: 1024 |
| merchant_data | Любая дополнительная информация о транзакции, которая может быть полезна во внешних системах Присоединяющейся стороны, например VIP клиент, лид промокампании на ТВ. | `Необходимость`: Опционально `Тип`: String `Длина`: 64 |

#### Параметры ответа

> **Note:** Ответ имеет заголовок Content-Type: text/html;charset=utf-8. Все поля имеют кодировку x-www-form-urlencoded, с символом (0xA) в конце значения каждого параметра.

| Параметры ответа | Описание |
|--------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| type | Тип ответа. Может принимать такие значения как - async-response, validation-error, error и т.д. Если тип равен validation-error или error, параметры error-message и error-code будут содержать сведения об ошибке. |
| serial-number | Уникальный номер, присваиваемый сервером Payneteasy конкретному запросу от Присоединяющейся стороны. |
| merchant-order-id | Номер заказа в системе Присоединяющейся Стороны. |
| paynet-order-id | Идентификатор заказа, присвоенный Payneteasy. |
| end-point-id | Идентификатор терминала, используемый для транзакции. |
| error-message | Для транзакций в статусе error этот параметр будет содержать причину отклонения или сведения об ошибке. |
| error-code | Код ошибки для транзакций в статусе error. |

#### Пример запроса

```http
POST /paynet/api/v2/make-rebill-preauth/46750 HTTP/1.1
Host: https://sandbox.payneteasy.ru
User-Agent: curl/7.85.0
Accept: */
Content-Length: 229
Content-Type: application/x-www-form-urlencoded
Connection: close

&login=login
&client_orderid=902B4FF5
&cardrefid=1461665
&amount=5.00
&currency=USD
&cvv2=321
&ipaddress=34.129.65.12
&comment=Information abount Rebill
&order_desc=Rebill order description
&control=a37f4972233b4a5dbfb4dcaae149ce7feed01ef9
```

#### Пример успешного ответа

```http
HTTP/1.1 200
Server: server
Date: Thu, 02 Feb 2023 13:10:44 GMT
Content-Type: text/html;charset=utf-8
Connection: close
Vary: Accept-Encoding
X-XSS-Protection: 1
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000
Content-Language: en-US
Strict-Transport-Security: max-age=31536000
Content-Length: 144

&type=async-response
&serial-number=00000000-0000-0000-0000-000002e0d498
&merchant-order-id=902B4FF5
&paynet-order-id=6937030
&end-point-id=46750
```

#### Пример неуспешного ответа

```http
HTTP/1.1 200
Server: server
Date: Thu, 02 Feb 2023 13:18:50 GMT
Content-Type: text/html;charset=utf-8
Connection: close
Vary: Accept-Encoding
X-XSS-Protection: 1
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000
Content-Language: en-US
Strict-Transport-Security: max-age=31536000
Content-Length: 164

type=validation-error
&serial-number=00000000-0000-0000-0000-000002e0d614
&merchant-order-id=902B4FF5
&error-message=End+point+with+id+99999+not+found
&error-code=3
```

#### Коллекция Postman

<div class="postman-run-button"
data-postman-action="collection/fork"
data-postman-var-1="23519287-2f522c74-71cf-4fea-8cea-73a2447820de"
data-postman-collection-url="entity Id=23519287-2f522c74-71cf-4fea-8cea-73a2447820de&entity Type=collection&workspace Id=7be78bd7-9f10-4be9-a60e-bd36ff1b6783"
data-postman-param="env%5BPayment%20gateway%20ENV%5D=W3sia2V5IjoiVVJMIiwidm FsdWUi Oi IiLCJlbm FibGVk Ijp0cn VlLCJ0eXBl IjoiZGVmYXVsdCJ9XQ=="></div>
<script type="text/javascript">
 (function (p,o,s,t,m,a,n) {
 !p[s] && (p[s] = function () { (p[t] || (p[t] = [])).push (arguments); });
 !o.get Element By Id (s+t) && o.get Elements By Tag Name("head")[0].append Child((
 (n = o.create Element("script")),
 (n.id = s+t), (n.async = 1), (n.src = m), n
 ));
 }(window, document, "_pm", "Postman Run Object", "https://run.pstmn.io/button.js"));
 var env Name = "Payment gateway ENV";
	 var env Data = {
 URL:'sandbox.payneteasy.ru' + "/" + 'paynet'
 };
 \_pm('env.replace', env Name, env Data);
</script>

#### Конструктор запросов

<meta http-equiv="Cache-Control" content="no-cache">
<script src="../_static/js/generate_card_number.js"></script>
<script src="../_static/js/crypto-js/sha1.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="../_static/js/highlight/styles/default.css">
<script src="../_static/js/highlight/highlight.pack.js"></script>

<script type="text/javascript">
$(document).ready (function(){
 $("#rebills Tab a").click (function (e){
 	e.prevent Default();
 	$(this).tab('show');
 });
});
</script>

<script type="text/javascript">
		var curl Request Text = "";

		var php Request Text = "";

		var ruby Request Text = "";
		var java Request Text = "";
function sign_rebill (form) {
 var signed Text = "";

		var curl Text = "";

		var sandbox = "";
		var params = "";
	 var url = "";
		var control = "";

 var amount Info = document.get Element By Id("amount Warning");

		var xhttp = new XMLHttp Request();
		xhttp.onreadystatechange = function() {
		if (xhttp.ready State == 4 && xhttp.status == 200) {
			if (url == "../_static/examples/PHP/params_no_header_PHP_new.txt"){
				php Request Text = xhttp.response Text;}
			else if (url == "../_static/examples/Ruby/params_no_header_Ruby (for new version).txt"){
				ruby Request Text = xhttp.response Text;}
			else{
			 java Request Text = xhttp.response Text;}
			}
		}

		url = "../_static/examples/PHP/params_no_header_PHP_new.txt";
		xhttp.open("GET", url, false);
		xhttp.send();
		url = "../_static/examples/Ruby/params_no_header_Ruby (for new version).txt";
		xhttp.open("GET", url, false);
		xhttp.send();
		url = "../_static/examples/Java/params_java.txt";
		xhttp.open("GET", url, false);
		xhttp.send();

 var signed Text = "";
 var curl Text = "";
 for (var e = 0; e < form.elements.length; ++e) {
 var input = form.elements[e];
 if (input.name != null)
 {
 if (input.name.substring(0, 5) == "sha1_")
 if (input.value != null)
 if (input.value != "")
 if (!(input.type == "checkbox" || input.type == "radio") || input.checked)
 {
 if (input.name == "sha1_amount")
 { var amount To Fix = input.value \* 100;
 var fixed Amount = amount To Fix.to Fixed(0);
 if (fixed Amount != amount To Fix)
 { $('#amount Warning').css("display", "block");amount Info.innerHTML = amount Info.innerHTML.replace("​", "Possible floating point imprecision (for more information check Floating Point Math)");}
 else {$('#amount Warning').css("display", "none");amount Info.innerHTML = amount Info.innerHTML.replace("Possible floating point imprecision (for more information check Floating Point Math)", "​");}
 signed Text = signed Text + fixed Amount;}
 else
 {signed Text = signed Text + input.value;}
 }
 if (input.value != null && input.name != null)
 if (input.value != "" && input.name != "" && input.name != "operationname")
 if (input.name.substring(0, 5) == "sha1_")
 {
 if (input.name != "sha1_merchant_control"){
 curl Text = curl Text + input.name.substring(5) + "=" + input.value + "&";
								 params += " '" + input.name.substring(5) + "' => '" + input.value + "', \\n";
								 }
 }
 else
 {
 if (input.name != "endpointid"){
 curl Text = curl Text + input.name + "=" + input.value + "&";
								 params += " '" + input.name + "' => '" + input.value + "', \\n";
								 }
 }
 }
 }

		sandbox = 'https://sandbox.payneteasy.ru/paynet/api/v2/' + document.rebill.operationname.value + '/' +
 document.rebill.endpointid.value;

		php Request Text = php Request Text.replace("{$generated parameters with values code}", params);
		php Request Text = php Request Text.replace("{$sandbox}", sandbox);

		ruby Request Text = ruby Request Text.replace("{$generated parameters with values code}", params);
		ruby Request Text = ruby Request Text.replace("{$sandbox}", sandbox);

	 control = " 'control' => '" + CryptoJS.SHA1 (signed Text) + "'";
		java Request Text = java Request Text.replace("{$targetURL}", sandbox);
		java Request Text = java Request Text.replace("{$has Headers}", "false");
	 java Request Text = java Request Text.replace("{$url Parameters}", curl Text);
	 java Request Text = java Request Text.replace("{$control Parameters}", signed Text);
		php Request Text = php Request Text.replace(/{\\$identifier Type Name}/g, document.rebill.operationname.value.match(/\\/group/) ? 'group Id' : 'endpoint Id');
		php Request Text = php Request Text.replace("{$endpoint Or Group Id}", document.rebill.endpointid.value);
		php Request Text = php Request Text.replace("{$merchant Control}", document.rebill.sha1_merchant_control.value);
		php Request Text = php Request Text.replace("{$additional vars}", '');
		php Request Text = php Request Text.replace("{$sign Function Call}", 'sign Payment Request($request Fields, $' + (document.rebill.operationname.value.match(/\\/group/) ? 'group Id' : 'endpoint Id') + ', $merchant Control)');

		php Request Text = php Request Text.replace("{$control}", control);
		ruby Request Text = ruby Request Text.replace("{$control}", control);

		curl Request Text = 'curl --data "' +
 curl Text +
 "control=" + CryptoJS.SHA1 (signed Text) +
 '" https://sandbox.payneteasy.ru/paynet/api/v2/' + document.rebill.operationname.value + '/' +
 document.rebill.endpointid.value;

		show Text("rebillsphpvalue" , php Request Text);

		show Text("rebillsrubyvalue" , ruby Request Text);
		show Text("rebillsjavavalue" , java Request Text);

 show Text("rebillsignedvalue" , signed Text);
 show Text("rebillsha1value" , CryptoJS.SHA1 (signed Text));
 show Text("rebillscurlvalue" , curl Request Text);
		 $(document).ready (function() {
 $('pre code').each (function (i, block) {
 hljs.highlight Block (block);
 });
 });
 return false;
 }

 function show Text (element Id, text) {
 var child = document.create Text Node (text);
 var element = document.get Element By Id (element Id);
				element.innerHTML ="";
 if (element.has Child Nodes()) {
 element.replace Child (child, element.first Child);
 } else {
 element.append Child (child);
 }
 }

 function rand Inv (c) {
 document.get Element By Id (c).value = "inv" + Math.floor (Math.random()\*10000000);
 }
	function copy To Clipboard Request Rebill (text) {
 var text Area = document.create Element("textarea");

 // Place in top-left corner of screen regardless of scroll position.
 text Area.style.position = 'fixed';
 text Area.style.top = 0;
 text Area.style.left = 0;

 // Ensure it has a small width and height. Setting to 1px / 1em
 // doesn't work as this gives a negative w/h on some browsers.
 text Area.style.width = '2em';
 text Area.style.height = '2em';

 // We don't need padding, reducing the size if it does flash render.
 text Area.style.padding = 0;

 // Clean up any borders.
 text Area.style.border = 'none';
 text Area.style.outline = 'none';
 text Area.style.box Shadow = 'none';

 // Avoid flash of white box if rendered for any reason.
 text Area.style.background = 'transparent';

 if (text == 'curl'){
	text Area.value = curl Request Text;
 } else if ( text =='php'){
	text Area.value = php Request Text;
 } else if ( text =='ruby'){
	text Area.value = ruby Request Text;
 } else {
 text Area.value = java Request Text;
 }
 document.body.append Child (text Area);

 text Area.select();

 try {
 var successful = document.exec Command('copy');
 var msg = successful ? 'successful' : 'unsuccessful';
 console.log('Copying text command was ' + msg);
 } catch (err) {
 console.log('Oops, unable to copy');
 }

 document.body.remove Child (text Area);

 }
</script>

<form name="rebill">

 <select class="doc-select" name="operationname" size="1">
 <option value="make-rebill-preauth">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rebill preauth (by ENDPOINTID)</option>
 <option value="make-rebill-preauth/group">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rebill preauth (by ENDPOINTGROUPID)</option>
 </select>
 
 <p></p>
 <input type="button" class="doc-button" style="font-size: 100%; padding: 2px 6px 3px 6px;" value="Sign rebill Request" onclick="sign_rebill (document.rebill)" />
 <p></p>
</form>

<ul class="nav nav-tabs" id="rebills Tab">
 <li class="active">[CURL](#rebillsCURL)</li>
 <li>[PHP](#rebillsPHP)</li>
 <li>[Ruby](#rebills Ruby)</li>
 <li>[Java](#rebills Java)</li>
</ul>

 <button class="doc-button" onclick="copy To Clipboard Request Rebill('php')">Copy to clipboard</button>
 <pre>
<code class="php" id="rebillsphpvalue">

</code>
</pre>

 <button class="doc-button" onclick="copy To Clipboard Request Rebill('ruby')">Copy to clipboard</button>
 <pre>
<code class="language-ruby" id="rebillsrubyvalue">

</code>
</pre>

 <button class="doc-button" onclick="copy To Clipboard Request Rebill('java')">Copy to clipboard</button>
 <pre>
<code class="language-java" id="rebillsjavavalue">

</code>
</pre>

### /api/v2/make-rebill-sale

#### Введение

Повторная оплата инициируется через запрос HTTPS POST на указанный ниже [URL](#api-v2-make-rebill-request-url) с использованием указанных [параметров](#api-v2-make-rebill-request-parameters). Для аутентификации запроса используется [SHA-1](https://doc.payneteasy.ru/integration/general_api_usage/request_authentication_methods/sha.html.md). См. [Статусы транзакций](https://doc.payneteasy.ru/integration/reference/statuses.html.md).

#### API URL

> **Note:** Путь API URL не должен быть задан фиксированным значением, т.к. он может быть изменён позднее.

| Интеграционная среда | Производственная среда |
|------------------------------------------------------------------------------------|---------------------------------------------------------------------------------|
| https://sandbox.payneteasy.ru/paynet/api/v2/make-rebill-sale/ENDPOINTID | https://gate.payneteasy.ru/paynet/api/v2/make-rebill-sale/ENDPOINTID |
| https://sandbox.payneteasy.ru/paynet/api/v2/make-rebill-sale/group/ENDPOINTGROUPID | https://gate.payneteasy.ru/paynet/api/v2/make-rebill-sale/group/ENDPOINTGROUPID |

#### Параметры запроса

> **Note:** Запрос должен иметь заголовок content-type=application/x-www-form-urlencoded.

| Название параметра | Описание | Значение |
|----------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------|
| login | Логин Присоединяющейся стороны в Системе. | `Необходимость`: Обязательно `Тип`: String `Длина`: 20 |
| client_orderid | Уникальный идентификатор заказа, присвоенный Присоединяющейся Стороной. | `Необходимость`: Обязательно `Тип`: String `Длина`: 128 |
| cardrefid | Ссылочный идентификатор, полученный на этапе регистрации карты (или иного платежного метода) [/api/v2/create-card-ref/](https://doc.payneteasy.ru/integration/api_v2_create-card-ref.html.md). | `Необходимость`: Обязательно `Тип`: String `Длина`: 20 |
| amount | Сумма к оплате. Сумма должна быть указана в наибольших единицах с разделителем .. Например, 10.5 для USD означает 10 долларов США и 50 центов. | `Необходимость`: Обязательно `Тип`: Numeric `Длина`: 10 |
| currency | Валюта, в которой проводится операция. Примеры значений: USD для доллара США, EUR для европейского евро, RUB для российского рубля. | `Необходимость`: Обязательно `Тип`: String `Длина`: 3 |
| enumerate_amounts | Парметр может содержать последовательность из нескольких сумм, разделенных запятой ,. Payneteasy проведет несколько попыток оплаты с указанными суммами, пока не будет получен успешный статус или пока не закончится последовательность переданных сумм. | `Необходимость`: Опционально `Тип`: String `Длина`: 128 |
| recurrent_scenario | Тип повторной оплаты. Возможные значения: REGULAR (регулярный) или IRREGULAR (нерегулярный). Если параметр передан в запросе, его значение имеет приоритет над значением этого параметра, установленном на шлюзе. Актуально только для некоторых Экваеров. | `Необходимость`: Опционально `Тип`: String `Длина`: 50 |
| recurrent_initiator | Инициатор повторной оплаты. Возможные значения: CARDHOLDER (держатель карты) или MERCHANT (торговец). Если параметр передан в запросе, его значение имеет приоритет над значением этого параметра, установленном на шлюзе. Актуально только для некоторых Экваеров. | `Необходимость`: Опционально `Тип`: String `Длина`: 50 |
| cvv2 | CVV2-код Плательщика. CVV2 (Card Verification Значение) — это трех- или четырех-значное число ПОСЛЕ номера кредитной карты в области подписи карты. Может быть пустым или отсутствовать, если эквайринговый канал поддерживает процессинг без CVV2 или он не актуален для данного платёжного метода. | `Необходимость`: Опционально `Тип`: Numeric `Длина`: 3-4 |
| ipaddress | IP-адрес Плательщика. Включен для отслеживания мошеннических действий. | `Необходимость`: Обязательно `Тип`: String `Длина`: 45 |
| comment | Короткий комментарий. | `Необходимость`: Опционально `Тип`: String `Длина`: 50 |
| order_desc | Описание заказа. | `Необходимость`: Обязательно `Тип`: String `Длина`: 64k |
| control | Контрольная сумма, сгенерированная [SHA-1](https://doc.payneteasy.ru/integration/general_api_usage/request_authentication_methods/sha.html.md). Строка для подписи представляет собой объединение следующих параметров: 1. Параметр запроса: login 2. Параметр запроса: client_orderid 3. Параметр запроса: cardrefid 4. Параметр запроса:amount в минимальных денежных единицах (если отправлен). 5. Параметр запроса: currency 6. merchant_control (Контрольный ключ, назначенный для учетной записи Присоединяющейся Cтороны в Payneteasy). | `Необходимость`: Обязательно `Тип`: String `Длина`: 40 |
| purpose | Получатель платежа. Это полезно для Присоединяющейся стороны, позволяющей клиентам переводить деньги с кредитной карты на какой-либо счёт клиента, например игровой счёт или счёт мобильного телефона. Примеры значений: +9999999999; mail@example.com и т. д. Это значение будет использоваться системой мониторинга мошенничества. | `Необходимость`: Опционально `Тип`: String `Длина`: 128 |
| redirect_url | URL-адрес, на который будет перенаправлен держатель карты после завершения транзакции. Обратите внимание: держатель карты будет перенаправлен в любом случае — независимо от того, была ли транзакция approved или declined. Этот параметр не следует использовать для получения результатов из Платёжного Шлюза Payneteasy, поскольку все параметры передаются через браузер клиента и могут быть потеряны при передаче. Для доставки корректного результата платежа в бэкенд следует использовать server_callback_url. Параметр обязателен для сценария 3DS и необязателен для сценария без 3DS. https://doc.payneteasy.ru можно использовать для тестирования, если неизвестно, используется ли 3DS. | `Необходимость`: Опционально `Тип`: String `Длина`: 1024 |
| server_callback_url | URL-адрес server_callback_url, по которому будет отправлен обратный вызов с результатом транзакции. Присоединяющаяся сторона может использовать обратные вызовы для индивидуальной обработки завершения транзакции (например, для сбора данных о платежах в информационной системе Присоединяющейся стороны). Список параметров, включенных в обратный вызов, см. в разделе [Обратного вызова Присоединяющейся стороны](https://doc.payneteasy.ru/integration/merchant_callback_parameters.html.md). Данный параметр может быть передан вместо notify_url. При использовании server_callback_url платежный шлюз отправляет callback-уведомление только при получении финального статуса исходной транзакции. При использовании notify_url платежный шлюз отправляет уведомление при получении финального статуса и продолжает отправлять уведомления о всех последующих изменениях (возвраты, chargeback и др.). | `Необходимость`: Опционально `Тип`: String `Длина`: 1024 |
| notify_url | URL-адрес notify_url, по которому будет отправлен обратный вызов с результатом транзакции. Присоединяющаяся сторона может использовать обратные вызовы для индивидуальной обработки завершения транзакции (например, для сбора данных о платежах в информационной системе Присоединяющейся стороны). Список параметров, включенных в обратный вызов, см. в разделе [Обратного вызова Присоединяющейся стороны](https://doc.payneteasy.ru/integration/merchant_callback_parameters.html.md). Данный параметр может быть передан вместо server_callback_url. При использовании notify_url платежный шлюз отправляет уведомление при получении финального статуса и продолжает отправлять уведомления о всех последующих изменениях (возвраты, chargeback и др.). При использовании server_callback_url платежный шлюз отправляет callback-уведомление только при получении финального статуса исходной транзакции. | `Необходимость`: Опционально `Тип`: String `Длина`: 1024 |
| merchant_data | Любая дополнительная информация о транзакции, которая может быть полезна во внешних системах Присоединяющейся стороны, например VIP клиент, лид промокампании на ТВ. | `Необходимость`: Опционально `Тип`: String `Длина`: 64 |

#### Параметры ответа

> **Note:** Ответ имеет заголовок Content-Type: text/html;charset=utf-8. Все поля имеют кодировку x-www-form-urlencoded, с символом (0xA) в конце значения каждого параметра.

| Параметры ответа | Описание |
|--------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| type | Тип ответа. Может принимать такие значения как - async-response, validation-error, error и т.д. Если тип равен validation-error или error, параметры error-message и error-code будут содержать сведения об ошибке. |
| serial-number | Уникальный номер, присваиваемый сервером Payneteasy конкретному запросу от Присоединяющейся стороны. |
| merchant-order-id | Номер заказа в системе Присоединяющейся Стороны. |
| paynet-order-id | Идентификатор заказа, присвоенный Payneteasy. |
| end-point-id | Идентификатор терминала, используемый для транзакции. |
| error-message | Для транзакций в статусе error этот параметр будет содержать причину отклонения или сведения об ошибке. |
| error-code | Код ошибки для транзакций в статусе error. |

#### Пример запроса

```http
POST /paynet/api/v2/make-rebill-sale/46750 HTTP/1.1
Host: https://sandbox.payneteasy.ru
User-Agent: curl/7.85.0
Accept: */
Content-Length: 229
Content-Type: application/x-www-form-urlencoded
Connection: close

&login=login
&client_orderid=902B4FF5
&cardrefid=1461665
&amount=5.00
&currency=USD
&cvv2=123
&ipaddress=34.129.65.12
&comment=Information abount Rebill
&order_desc=Rebill order description
&control=a37f4972233b4a5dbfb4dcaae149ce7feed01ef9
```

#### Пример успешного ответа

```http
HTTP/1.1 200
Server: server
Date: Thu, 02 Feb 2023 13:22:04 GMT
Content-Type: text/html;charset=utf-8
Connection: close
Vary: Accept-Encoding
X-XSS-Protection: 1
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000
Content-Language: en-US
Strict-Transport-Security: max-age=31536000
Content-Length: 144

type=async-response
&serial-number=00000000-0000-0000-0000-000002e0d6b9
&merchant-order-id=902B4FF5
&paynet-order-id=6937242
&end-point-id=46750
```

#### Пример неуспешного ответа

```http
HTTP/1.1 200
Server: server
Date: Thu, 02 Feb 2023 13:24:47 GMT
Content-Type: text/html;charset=utf-8
Connection: close
Vary: Accept-Encoding
X-XSS-Protection: 1
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000
Content-Language: en-US
Strict-Transport-Security: max-age=31536000
Content-Length: 164

type=validation-error
&serial-number=00000000-0000-0000-0000-000002e0d74c
&merchant-order-id=902B4FF5
&error-message=End+point+with+id+99999+not+found
&error-code=3
```

#### Коллекция Postman

<div class="postman-run-button"
data-postman-action="collection/fork"
data-postman-var-1="23519287-c3403f56-2630-4d01-9cad-021697fe3c1f"
data-postman-collection-url="entity Id=23519287-c3403f56-2630-4d01-9cad-021697fe3c1f&entity Type=collection&workspace Id=7be78bd7-9f10-4be9-a60e-bd36ff1b6783"
data-postman-param="env%5BPayment%20gateway%20ENV%5D=W3sia2V5IjoiVVJMIiwidm FsdWUi Oi IiLCJlbm FibGVk Ijp0cn VlLCJ0eXBl IjoiZGVmYXVsdCJ9XQ=="></div>
<script type="text/javascript">
 (function (p,o,s,t,m,a,n) {
 !p[s] && (p[s] = function () { (p[t] || (p[t] = [])).push (arguments); });
 !o.get Element By Id (s+t) && o.get Elements By Tag Name("head")[0].append Child((
 (n = o.create Element("script")),
 (n.id = s+t), (n.async = 1), (n.src = m), n
 ));
 }(window, document, "_pm", "Postman Run Object", "https://run.pstmn.io/button.js"));
 var env Name = "Payment gateway ENV";
	 var env Data = {
 URL:'sandbox.payneteasy.ru' + "/" + 'paynet'
 };
 \_pm('env.replace', env Name, env Data);
</script>

#### Конструктор запросов

<meta http-equiv="Cache-Control" content="no-cache">
<script src="../_static/js/generate_card_number.js"></script>
<script src="../_static/js/crypto-js/sha1.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="../_static/js/highlight/styles/default.css">
<script src="../_static/js/highlight/highlight.pack.js"></script>

<script type="text/javascript">
$(document).ready (function(){
 $("#rebills Tab a").click (function (e){
 	e.prevent Default();
 	$(this).tab('show');
 });
});
</script>

<script type="text/javascript">
		var curl Request Text = "";

		var php Request Text = "";

		var ruby Request Text = "";
		var java Request Text = "";
function sign_rebill (form) {
 var signed Text = "";

		var curl Text = "";

		var sandbox = "";
		var params = "";
	 var url = "";
		var control = "";

 var amount Info = document.get Element By Id("amount Warning");

		var xhttp = new XMLHttp Request();
		xhttp.onreadystatechange = function() {
		if (xhttp.ready State == 4 && xhttp.status == 200) {
			if (url == "../_static/examples/PHP/params_no_header_PHP_new.txt"){
				php Request Text = xhttp.response Text;}
			else if (url == "../_static/examples/Ruby/params_no_header_Ruby (for new version).txt"){
				ruby Request Text = xhttp.response Text;}
			else{
			 java Request Text = xhttp.response Text;}
			}
		}

		url = "../_static/examples/PHP/params_no_header_PHP_new.txt";
		xhttp.open("GET", url, false);
		xhttp.send();
		url = "../_static/examples/Ruby/params_no_header_Ruby (for new version).txt";
		xhttp.open("GET", url, false);
		xhttp.send();
		url = "../_static/examples/Java/params_java.txt";
		xhttp.open("GET", url, false);
		xhttp.send();

 var signed Text = "";
 var curl Text = "";
 for (var e = 0; e < form.elements.length; ++e) {
 var input = form.elements[e];
 if (input.name != null)
 {
 if (input.name.substring(0, 5) == "sha1_")
 if (input.value != null)
 if (input.value != "")
 if (!(input.type == "checkbox" || input.type == "radio") || input.checked)
 {
 if (input.name == "sha1_amount")
 { var amount To Fix = input.value \* 100;
 var fixed Amount = amount To Fix.to Fixed(0);
 if (fixed Amount != amount To Fix)
 { $('#amount Warning').css("display", "block");amount Info.innerHTML = amount Info.innerHTML.replace("​", "Possible floating point imprecision (for more information check Floating Point Math)");}
 else {$('#amount Warning').css("display", "none");amount Info.innerHTML = amount Info.innerHTML.replace("Possible floating point imprecision (for more information check Floating Point Math)", "​");}
 signed Text = signed Text + fixed Amount;}
 else
 {signed Text = signed Text + input.value;}
 }
 if (input.value != null && input.name != null)
 if (input.value != "" && input.name != "" && input.name != "operationname")
 if (input.name.substring(0, 5) == "sha1_")
 {
 if (input.name != "sha1_merchant_control"){
 curl Text = curl Text + input.name.substring(5) + "=" + input.value + "&";
								 params += " '" + input.name.substring(5) + "' => '" + input.value + "', \\n";
								 }
 }
 else
 {
 if (input.name != "endpointid"){
 curl Text = curl Text + input.name + "=" + input.value + "&";
								 params += " '" + input.name + "' => '" + input.value + "', \\n";
								 }
 }
 }
 }

		sandbox = 'https://sandbox.payneteasy.ru/paynet/api/v2/' + document.rebill.operationname.value + '/' +
 document.rebill.endpointid.value;

		php Request Text = php Request Text.replace("{$generated parameters with values code}", params);
		php Request Text = php Request Text.replace("{$sandbox}", sandbox);

		ruby Request Text = ruby Request Text.replace("{$generated parameters with values code}", params);
		ruby Request Text = ruby Request Text.replace("{$sandbox}", sandbox);

	 control = " 'control' => '" + CryptoJS.SHA1 (signed Text) + "'";
		java Request Text = java Request Text.replace("{$targetURL}", sandbox);
		java Request Text = java Request Text.replace("{$has Headers}", "false");
	 java Request Text = java Request Text.replace("{$url Parameters}", curl Text);
	 java Request Text = java Request Text.replace("{$control Parameters}", signed Text);
		php Request Text = php Request Text.replace(/{\\$identifier Type Name}/g, document.rebill.operationname.value.match(/\\/group/) ? 'group Id' : 'endpoint Id');
		php Request Text = php Request Text.replace("{$endpoint Or Group Id}", document.rebill.endpointid.value);
		php Request Text = php Request Text.replace("{$merchant Control}", document.rebill.sha1_merchant_control.value);
		php Request Text = php Request Text.replace("{$additional vars}", '');
		php Request Text = php Request Text.replace("{$sign Function Call}", 'sign Payment Request($request Fields, $' + (document.rebill.operationname.value.match(/\\/group/) ? 'group Id' : 'endpoint Id') + ', $merchant Control)');

		php Request Text = php Request Text.replace("{$control}", control);
		ruby Request Text = ruby Request Text.replace("{$control}", control);

		curl Request Text = 'curl --data "' +
 curl Text +
 "control=" + CryptoJS.SHA1 (signed Text) +
 '" https://sandbox.payneteasy.ru/paynet/api/v2/' + document.rebill.operationname.value + '/' +
 document.rebill.endpointid.value;

		show Text("rebillsphpvalue" , php Request Text);

		show Text("rebillsrubyvalue" , ruby Request Text);
		show Text("rebillsjavavalue" , java Request Text);

 show Text("rebillsignedvalue" , signed Text);
 show Text("rebillsha1value" , CryptoJS.SHA1 (signed Text));
 show Text("rebillscurlvalue" , curl Request Text);
		 $(document).ready (function() {
 $('pre code').each (function (i, block) {
 hljs.highlight Block (block);
 });
 });
 return false;
 }

 function show Text (element Id, text) {
 var child = document.create Text Node (text);
 var element = document.get Element By Id (element Id);
				element.innerHTML ="";
 if (element.has Child Nodes()) {
 element.replace Child (child, element.first Child);
 } else {
 element.append Child (child);
 }
 }

 function rand Inv (c) {
 document.get Element By Id (c).value = "inv" + Math.floor (Math.random()\*10000000);
 }
	function copy To Clipboard Request Rebill (text) {
 var text Area = document.create Element("textarea");

 // Place in top-left corner of screen regardless of scroll position.
 text Area.style.position = 'fixed';
 text Area.style.top = 0;
 text Area.style.left = 0;

 // Ensure it has a small width and height. Setting to 1px / 1em
 // doesn't work as this gives a negative w/h on some browsers.
 text Area.style.width = '2em';
 text Area.style.height = '2em';

 // We don't need padding, reducing the size if it does flash render.
 text Area.style.padding = 0;

 // Clean up any borders.
 text Area.style.border = 'none';
 text Area.style.outline = 'none';
 text Area.style.box Shadow = 'none';

 // Avoid flash of white box if rendered for any reason.
 text Area.style.background = 'transparent';

 if (text == 'curl'){
	text Area.value = curl Request Text;
 } else if ( text =='php'){
	text Area.value = php Request Text;
 } else if ( text =='ruby'){
	text Area.value = ruby Request Text;
 } else {
 text Area.value = java Request Text;
 }
 document.body.append Child (text Area);

 text Area.select();

 try {
 var successful = document.exec Command('copy');
 var msg = successful ? 'successful' : 'unsuccessful';
 console.log('Copying text command was ' + msg);
 } catch (err) {
 console.log('Oops, unable to copy');
 }

 document.body.remove Child (text Area);

 }
</script>

<form name="rebill">

 <select class="doc-select" name="operationname" size="1">
 <option value="make-rebill">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rebill (by ENDPOINTID)</option>
 <option value="make-rebill/group">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rebill (by ENDPOINTGROUPID)</option>
 </select>
 
 <p></p>
 <input type="button" class="doc-button" style="font-size: 100%; padding: 2px 6px 3px 6px;" value="Sign rebill Request" onclick="sign_rebill (document.rebill)" />
 <p></p>
</form>

<ul class="nav nav-tabs" id="rebills Tab">
 <li class="active">[CURL](#rebillsCURL)</li>
 <li>[PHP](#rebillsPHP)</li>
 <li>[Ruby](#rebills Ruby)</li>
 <li>[Java](#rebills Java)</li>
</ul>

 <button class="doc-button" onclick="copy To Clipboard Request Rebill('php')">Copy to clipboard</button>
 <pre>
<code class="php" id="rebillsphpvalue">

</code>
</pre>

 <button class="doc-button" onclick="copy To Clipboard Request Rebill('ruby')">Copy to clipboard</button>
 <pre>
<code class="language-ruby" id="rebillsrubyvalue">

</code>
</pre>

 <button class="doc-button" onclick="copy To Clipboard Request Rebill('java')">Copy to clipboard</button>
 <pre>
<code class="language-java" id="rebillsjavavalue">

</code>
</pre>

### /api/v2/payout-form

#### Введение

Оплата по форме инициируется через запрос методом HTTPS POST на указанный ниже [URL](#api-v2-payout-form-url) с использованием указанных [параметров](#api-v2-payout-form-parameters). Для аутентификации запроса используется [OAuth HMAC-SHA1](https://doc.payneteasy.ru/integration/general_api_usage/request_authentication_methods/oauth.html.md). См. [Статусы транзакций](https://doc.payneteasy.ru/integration/reference/statuses.html.md).

#### API URL

> **Note:** Путь API URL не должен быть задан фиксированным значением, т.к. он может быть изменён позднее.

| Интеграционная среда | Производственная среда |
|---------------------------------------------------------------------------------|----------------------------------------------------------------------------|
| https://sandbox.payneteasy.ru/paynet/api/v2/payout-form/ENDPOINTID | https://gate.payneteasy.ru/paynet/api/v2/payout-form/ENDPOINTID |
| https://sandbox.payneteasy.ru/paynet/api/v2/payout-form/group/ENDPOINTIDGROUPID | https://gate.payneteasy.ru/paynet/api/v2/payout-form/group/ENDPOINTGROUPID |

#### Параметры запроса

> **Note:** Запрос должен иметь content-type=application/x-www-form-urlencoded и [Заголовки авторизации](https://doc.payneteasy.ru/integration/general_api_usage/request_authentication_methods/oauth.html.md).

Уточните у менеджера поддержки, требуются ли условные поля для интеграции.
 

| Название параметра | Описание | Значение |
|-----------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| client_orderid | Идентификатор заказа, присвоенный Присоединяющейся Стороной. | `Необходимость`: Обязательно `Тип`: String `Длина`: 128 |
| amount | Сумма к оплате. Сумма должна быть указана в максимальных единицах с “.” разделителем. Например, 100.5 в RUB означает 100 российских рублей и 50 копеек. | `Необходимость`: Обязательно `Тип`: Numeric `Длина`: 10 |
| currency | Валюта, в которой проводится операция (трёхбуквенные алфавитные коды валют). Примеры значений: USD для доллара США, EUR для европейского евро, RUB для российского рубля. | `Необходимость`: Обязательно `Тип`: String `Длина`: 3 |
| order_desc | Описание заказа. | `Необходимость`: Обязательно `Тип`: String `Длина`: 65K |
| ipaddress | IP-адрес получателя (IPv4 или IPv6). | `Необходимость`: Условно `Тип`: String `Длина`: 7-45 |
| purpose | Назначение Payout. | `Необходимость`: Условно `Тип`: String `Длина`: 128 |
| server_callback_url | URL-адрес server_callback_url, по которому будет отправлен обратный вызов с результатом транзакции. Присоединяющаяся сторона может использовать обратные вызовы для индивидуальной обработки завершения транзакции (например, для сбора данных о платежах в информационной системе Присоединяющейся стороны). Список параметров, включенных в обратный вызов, см. в разделе [Обратного вызова Присоединяющейся стороны](https://doc.payneteasy.ru/integration/merchant_callback_parameters.html.md). Данный параметр может быть передан вместо notify_url. При использовании server_callback_url платежный шлюз отправляет callback-уведомление только при получении финального статуса исходной транзакции. При использовании notify_url платежный шлюз отправляет уведомление при получении финального статуса и продолжает отправлять уведомления о всех последующих изменениях (возвраты, chargeback и др.). | `Необходимость`: Опционально `Тип`: String `Длина`: 1024 |
| notify_url | URL-адрес notify_url, по которому будет отправлен обратный вызов с результатом транзакции. Присоединяющаяся сторона может использовать обратные вызовы для индивидуальной обработки завершения транзакции (например, для сбора данных о платежах в информационной системе Присоединяющейся стороны). Список параметров, включенных в обратный вызов, см. в разделе [Обратного вызова Присоединяющейся стороны](https://doc.payneteasy.ru/integration/merchant_callback_parameters.html.md). Данный параметр может быть передан вместо server_callback_url. При использовании notify_url платежный шлюз отправляет уведомление при получении финального статуса и продолжает отправлять уведомления о всех последующих изменениях (возвраты, chargeback и др.). При использовании server_callback_url платежный шлюз отправляет callback-уведомление только при получении финального статуса исходной транзакции. | `Необходимость`: Опционально `Тип`: String `Длина`: 1024 |
| redirect_url | URL, where the Receiver is redirected to upon completion of the transaction. Please note that redirection is performed in any case, no matter whether transaction is approved, declined in any other final [status](https://doc.payneteasy.ru/integration/reference/statuses.html.md). Connecting Party must not use the parameters come along with the redirect HTTP Request to treat the status of the transaction. Instead Connecting Party can utilize server_callback_url or [status API command](https://doc.payneteasy.ru/integration/api_v2_status.html.md). Pass https://doc.payneteasy.ru if you have no need to return Receiver anywhere. Use either redirect_url or combination of redirect_success_url and redirect_fail_url, not both. | `Необходимость`: требуется, если отсутствуют оба параметра redirect_success_url и redirect_fail_url `Тип`: String `Длина`: 1024 |
| redirect_success_url | URL, на который Получатель перенаправляется, когда статус транзакции — approved (см. [список статусов](https://doc.payneteasy.ru/integration/reference/statuses.html.md)). Connecting Party must not use the parameters come along with the redirect HTTP Request to treat the status of the transaction. Instead Connecting Party can utilize server_callback_url or [status API command](https://doc.payneteasy.ru/integration/api_v2_status.html.md). Otherwise put https://doc.payneteasy.ru if there is no need to redirect Receiver anywhere. Use either combination of redirect_success_url and redirect_fail_url or redirect_url, not both. | `Необходимость`: требуется, если отсутствует параметр redirect_url `Тип`: String `Длина`: 1024 |
| redirect_fail_url | URL, на который Получатель перенаправляется, когда статус транзакции не approved (см. [список статусов](https://doc.payneteasy.ru/integration/reference/statuses.html.md)). Connecting Party must not use the parameters come along with the redirect HTTP Request to treat the status of the transaction. Instead Connecting Party can utilize server_callback_url or [status API command](https://doc.payneteasy.ru/integration/api_v2_status.html.md). Pass https://doc.payneteasy.ru if you use non-3DS schema for transactions processing and you have no need to return Receiver anywhere. Use either combination of redirect_fail_url and redirect_success_url or redirect_url, not both. | `Необходимость`: требуется, если отсутствует параметр redirect_url `Тип`: String `Длина`: 1024 |
| account_number | Account номер. | `Необходимость`: Условно `Тип`: String `Длина`: 32 |
| account_name | Банковский счет | `Необходимость`: Условно `Тип`: String `Length`: 512 |
| ewallet_wallet | Идентификатор e-wallet. | `Необходимость`: Условно `Тип`: String `Длина`: 128 |
| crypto_wallet_address | Адрес криптокошелька. | `Необходимость`: Условно `Тип`: String `Длина`: 64 |
| bank_name | Имя банка. | `Необходимость`: Условно `Тип`: String `Length`: 512 |
| bank_branch | Имя банковского отделения. | `Необходимость`: Условно `Тип`: String `Length`: 512 |
| bank_code | Код банка. | `Необходимость`: Условно `Тип`: String `Длина`: 32 |
| bank_address1 | Адрес банка. | `Необходимость`: Условно `Тип`: String `Длина`: 255 |
| bank_zip_code | Почтовый индекс банка. | `Необходимость`: Условно `Тип`: String `Длина`: 32 |
| bank_province | Штат банка. | `Необходимость`: Условно `Тип`: String `Длина`: 128 |
| bank_area | Область банка | `Необходимость`: Условно `Тип`: String `Длина`: 128 |
| bank_city | Город банка. | `Необходимость`: Условно `Тип`: String `Длина`: 128 |
| routing_number | Номер маршрута, используется для определения отдела банка в Китае. | `Необходимость`: Условно `Тип`: String `Длина`: 32 |
| legal_person_name | Имя на юридическом документе. | `Необходимость`: Условно `Тип`: String `Длина`: 128 |
| legal_person_document_number | Номер юридического документа | `Необходимость`: Условно `Тип`: String `Длина`: 128 |
| receiver_first_name | Имя Получателя, так же можно отправить как first_name. | `Необходимость`: Условно `Тип`: String `Длина`: 128 |
| receiver_last_name | Фамилия Получателя, так же можно отправить как last_name. | `Необходимость`: Условно `Тип`: String `Длина`: 128 |
| receiver_birthday | Дата рождения получателя, так-же можно отправить как birthday. | `Необходимость`: Условно `Тип`: Numeric `Длина`: 30 |
| receiver_country_code | Код страны Получателя, также можно отправить как country. | `Необходимость`: Условно `Тип`: String `Длина`: 3 |
| receiver_state | Штат Получателя, обязательный параметр для стран, которые делятся на штаты (США, Канада, Австралия), также можно отправить как state. | `Необходимость`: Условно `Тип`: String `Длина`: 4 |
| receiver_city | Город Получателя, также можно отправить как city. | `Необходимость`: Условно `Тип`: String `Длина`: 128 |
| receiver_zip_code | Почтовый индекс Получателя, также можно отправить как zip_code. | `Необходимость`: Условно `Тип`: Numeric `Длина`: 32 |
| receiver_address1 | Адрес Получателя, также можно отправить как address1. | `Необходимость`: Условно `Тип`: String `Длина`: 255 |
| receiver_phone | Номер телефона Получателя, также можно отправить как phone. | `Необходимость`: Условно `Тип`: Numeric `Длина`: 128 |
| receiver_email | Адрес электронной почты Получателя, также можно отправить как email. | `Необходимость`: Условно `Тип`: String `Длина`: 128 |
| receiver_identity_document_id | Идентификатор удостоверения личности получателя, так-же можно отправитькак identity_document_id. | `Необходимость`: Условно `Тип`: String `Длина`: 128 |
| receiver_identity_document_number | Номер удостоверения личности получателя, так-же можно отправитькак identity_document_number. | `Необходимость`: Условно `Тип`: String `Длина`: 128 |
| merchant_data | Любая дополнительная информация для этой транзакции, которая может быть полезна во внешних системах Присоединяющейся стороны, например VIP-клиент, лид промокампании TV. Будет возвращена в ответе Status и Callback Присоединяющейся стороны. | `Необходимость`: Опционально `Тип`: String `Length`: 65k |
| merchant_form_data | Parameters sent in merchant_form_data API parameter are parsed into macros with the same name, the parameter is url-encoded, example: testparam%3Dtest1%26mynewparam%3Dtest2 and is parsed into $MFD_testparam = test1 and $MFD_mynewparam = test2 macros in the form. Parameter name characters[a-zA-Z0-9], parameter value characters[a-zA-Z0-9], only characters = and & are allowed as control characters, 2MB max size. For example, this parameter can be used to display payment form in light/dark mode depending on the value passed by Connecting Party (e.g. pass merchant_form_data=theme%3Ddark in request and $MFD_theme macro placeholder on payment form will be changed to dark. | `Необходимость`: Опционально `Тип`: String `Длина`: 2M |
| preferred_language | Предпочтительный язык. | `Необходимость`: Опционально `Тип`: String `Длина`: 2 |

#### Параметры ответа

> **Note:** Ответ имеет заголовок Content-Type: text/html;charset=utf-8. Все поля имеют формат x-www-form-urlencoded, с символом (0xA) в конце значения каждого параметра.

| Название параметра | Описание |
|----------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| type | Тип ответа. Может принимать такие значения как: async-response, validation-error, error и т.д. Если тип ответа validation-error или error, параметры error-message и error-code будут содержать детали ошибки. |
| paynet-order-id | Идентификатор заказа, присвоенный Payneteasy. |
| merchant-order-id | Идентификатор заказа Присоединяющейся Стороны. |
| serial-number | Уникальный номер, присваиваемый сервером Payneteasy конкретному запросу от Присоединяющейся стороны. |
| error-message | Для транзакций в статусе error этот параметр будет содержать причину отклонения или сведения об ошибке. |
| error-code | Код ошибки для транзакций в статусе error. |
| redirect_url | URL страницы, на которую Присоединяющаяся сторона должна перенаправить браузер клиента. Присоединяющаяся сторона должна отправить перенаправление HTTP 302. |

#### Пример запроса

```http
POST /paynet/api/v2/payout-form/39529 HTTP/1.1
Host: sandbox.doc2.com
User-Agent: curl/8.12.1
Accept: */*
Authorization: OAuth realm="",oauth_version="1.0",oauth_consumer_key="merchantlogin",oauth_timestamp="1753337681",oauth_nonce="T5v7kcMBsgi",oauth_signature_method="HMAC-SHA1",oauth_signature="wTTQQiN%2F2bGjfCTcSAQ3ZhAHMLw%3D"
Content-Length: 249
Content-Type: application/x-www-form-urlencoded
Connection: keep-alive

account_number=1234567890
&order_desc=Test_Order_Описание
&amount=100
&bank_branch=test_branch
&bank_name=test_bank
&client_orderid=12345
&currency=USD
&oauth_consumer_key=merchantlogin
&oauth_nonce=T5v7kcMBsgi
&oauth_signature_method=HMAC-SHA1
&oauth_timestamp=1753337681
&oauth_version=1.0
```

#### Пример успешного ответа

```http
HTTP/1.1 200
Server: server
Date: Thu, 24 Jul 2025 06:45:56 GMT
Content-Type: text/html;charset=utf-8
Connection: keep-alive
Keep-Alive: timeout=60
Vary: Accept-Encoding
X-XSS-Protection: 1
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000
Content-Language: en-US
Strict-Transport-Security: max-age=31536000
Content-Length: 142

type=async-response
&serial-number=00000000-0000-0000-0000-000002f3b45d
&merchant-order-id=12345
&paynet-order-id=7366391
&end-point-id=132490
```

#### Пример неуспешного ответа

```http
HTTP/1.1 403
Server: server
Date: Thu, 24 Jul 2025 06:26:23 GMT
Content-Type: application/x-www-form-urlencoded;charset=UTF-8
Connection: keep-alive
Keep-Alive: timeout=60
X-XSS-Protection: 1
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000
Content-Length: 102

type=error
&serial-number=00000000-0000-0000-0000-000002f3b456
&error-message=Forbidden
&error-code=-1
```

#### Test Scenario

Различные статусы транзакций Payout можно получить в sandbox в зависимости от значения account_number, переданного в запросе Payout.

Тестовые значения account_number:

> * account_number = 1234567890 для получения APPROVED
> * account_number = 0987654321 для получения DECLINED
> * account_number = 1987654321 для получения PROCESSOR_INTERNAL_ERROR

#### Open API Collection

Open this method in the OpenAPI Reference

<a class="openapi-reference-button" href="/openapi-doc/#POST/api/v2/payout-form/{endpoint Id}" target="_blank" rel="noopener">View in OpenAPI <svg xmlns="http://www.w3.org/2000/svg" view Box="0 0 24 24" fill="none" stroke="current Color" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg></a>

#### Коллекция Postman

<div class="postman-run-button"
data-postman-action="collection/fork"
data-postman-var-1="23519287-d7325a30-a8a9-4d2e-928f-488f92c8dc10"
data-postman-collection-url="entity Id=23519287-d7325a30-a8a9-4d2e-928f-488f92c8dc10&entity Type=collection&workspace Id=7be78bd7-9f10-4be9-a60e-bd36ff1b6783"
data-postman-param="env%5BPayment%20gateway%20ENV%5D=W3sia2V5IjoiVVJMIiwidm FsdWUi Oi IiLCJlbm FibGVk Ijp0cn VlLCJ0eXBl IjoiZGVmYXVsdCJ9XQ=="></div>
<script type="text/javascript">
 (function (p,o,s,t,m,a,n) {
 !p[s] && (p[s] = function () { (p[t] || (p[t] = [])).push (arguments); });
 !o.get Element By Id (s+t) && o.get Elements By Tag Name("head")[0].append Child((
 (n = o.create Element("script")),
 (n.id = s+t), (n.async = 1), (n.src = m), n
 ));
 }(window, document, "_pm", "Postman Run Object", "https://run.pstmn.io/button.js"));
 var env Name = "Payment gateway ENV";
	 var env Data = {
 URL:'sandbox.payneteasy.ru' + "/" + 'paynet'
 };
 \_pm('env.replace', env Name, env Data);
</script>

#### Конструктор запросов

<script src="../_static/js/oauth/sha1.js"></script>
<script src="../_static/js/oauth/oauth.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>

<link rel="stylesheet" href="../_static/js/highlight/styles/default.css">
<script src="../_static/js/highlight/highlight.pack.js"></script>

<script type="text/javascript">
 $(document).ready (function(){
		$("#pay Out Tab a").click (function (e){
			e.prevent Default();
			$(this).tab('show');
		});
	});
</script>

<script type="text/javascript">
 var curl Text ="";
	var php Text ="";
	var ruby Text ="";
	var java Text ="";
	 function sign (form) {
	 var accessor = { consumer Secret: form.consumer Secret.value
					, token Secret : form.token Secret.value};
	 var message = { method: form.http Method.value
				 , action: form. URL.value
				 , parameters: OAuth.decode Form (form.parameters.value)
				 };
	 for (var e = 0; e < form.elements.length; ++e) {
		 var input = form.elements[e];
		 if (input.name != null)
			 if (input.name.substring(0, 6) == "oauth_")
				 if (input.value != null)
					 if (input.value != "")
						 if (!(input.type == "checkbox" || input.type == "radio") || input.checked)
						 {
							 message.parameters.push([input.name, input.value]);
						 }
	 }

	 var xhttp = new XMLHttp Request();
		 xhttp.onreadystatechange = function() {
		 if (xhttp.ready State == 4 && xhttp.status == 200) {
			 if (url == "../_static/examples/PHP/params_with_header_PHP.txt"){
				php Text = xhttp.response Text;}
			 else if (url == "../_static/examples/Ruby/params_with_header_Ruby.txt") {
				 ruby Text = xhttp.response Text;}
			 else{
				 java Text = xhttp.response Text;}
			 }
		 }
		 url = "../_static/examples/PHP/params_with_header_PHP.txt";
		 xhttp.open("GET", url, false);
		 xhttp.send();
		 url = "../_static/examples/Ruby/params_with_header_Ruby.txt";
		 xhttp.open("GET", url, false);
		 xhttp.send();
		 url = "../_static/examples/Java/params_java_payout.txt";
		 xhttp.open("GET", url, false);
		 xhttp.send();

	 OAuth. Signature Method.sign (message, accessor);
	 var normalized Parameters = OAuth. Signature Method.normalize Parameters (message.parameters);
	 show Text("normalized Parameters", normalized Parameters);
	 show Text("signature Base String" , OAuth. Signature Method.get Base String (message));
	 show Text("signature" , OAuth.get Parameter (message.parameters, "oauth_signature"));
	 show Text("authorization Header" , OAuth.get Authorization Header("", message.parameters));
	 var rubyphp Parameters = normalized Parameters.replace(/&/g, "', \\n'");
	 rubyphp Parameters = rubyphp Parameters.replace(/=/g, "' => '");
	 rubyphp Parameters = "'" + rubyphp Parameters + "'";

	 curl Text = "curl -H 'Authorization: " + OAuth.get Authorization Header("", message.parameters) + "' --data '" + OAuth. Signature Method.normalize Parameters (message.parameters) + "' '" + form. URL.value + "'";

	 php Text = php Text.replace("{$generated parameters with values code}", rubyphp Parameters);
	 php Text = php Text.replace("{$sandbox}", form. URL.value);
	 php Text = php Text.replace("{$Authorization}", OAuth.get Authorization Header("", message.parameters));
	 var java Header = OAuth.get Authorization Header("", message.parameters).split('"').join('\\\\"');
	 java Header = '"' + java Header + '"';

	 ruby Text = ruby Text.replace("{$generated parameters with values code}", rubyphp Parameters);
	 ruby Text = ruby Text.replace("{$sandbox}", form. URL.value);
	 ruby Text = ruby Text.replace("{$Authorization}", OAuth.get Authorization Header("", message.parameters));
	 java Text = java Text.replace("{$targetURL}", form. URL.value);
	 java Text = java Text.replace("{$has Headers}", "true");
	 java Text = java Text.replace("{$oauth Header}", java Header);
	 java Text = java Text.replace("{$url Parameters}", OAuth. Signature Method.normalize Parameters (message.parameters));

	 show Text("pay Out Curl", curl Text);
	 show Text("pay Out Php", php Text);
	 show Text("pay Out Ruby", ruby Text);
	 show Text("pay Out Java", java Text);
	 $(document).ready (function() {
		 $('pre code').each (function (i, block) {
			 hljs.highlight Block (block);
		 });
		 });
		 return false;
	 return false;
	 }
	 function show Text (element Id, text) {
	 var child = document.create Text Node (text);
	 var element = document.get Element By Id (element Id);
	 element.innerHTML ="";
	 if (element.has Child Nodes()) {
		 element.replace Child (child, element.first Child);
	 } else {
		 element.append Child (child);
	 }
	 }
	 function fresh Timestamp() {
	 document.request.oauth_timestamp.value = OAuth.timestamp();
	 }
	 function fresh Nonce() {
	 document.request.oauth_nonce.value = OAuth.nonce(11);
	 }
 function copy To Clipboardo Auth (text) {
	 var text Area = document.create Element("textarea");

 // Place in top-left corner of screen regardless of scroll position.
 text Area.style.position = 'fixed';
 text Area.style.top = 0;
 text Area.style.left = 0;

 // Ensure it has a small width and height. Setting to 1px / 1em
 // doesn't work as this gives a negative w/h on some browsers.
 text Area.style.width = '2em';
 text Area.style.height = '2em';

 // We don't need padding, reducing the size if it does flash render.
 text Area.style.padding = 0;

 // Clean up any borders.
 text Area.style.border = 'none';
 text Area.style.outline = 'none';
 text Area.style.box Shadow = 'none';

 // Avoid flash of white box if rendered for any reason.
 text Area.style.background = 'transparent';

 if (text == 'curl') {
			 text Area.value = curl Text;
		 } else if (text == 'php') {
			 text Area.value = php Text;
		 } else if (text =='ruby'){
			 text Area.value = ruby Text;
		 } else{
			 text Area.value =java Text;}
 document.body.append Child (text Area);

 text Area.select();

 try {
	 var successful = document.exec Command('copy');
	 var msg = successful ? 'successful' : 'unsuccessful';
	 console.log('Copying text command was ' + msg);
 } catch (err) {
	 console.log('Oops, unable to copy');
 }

 document.body.remove Child (text Area);

 }
</script>

<form name="request">

 
 <p></p>
 <input type="button" class="doc-button" style="font-size: 100%; padding: 2px 6px 3px 6px;" value="Sign" on Click="sign (document.request)"/>
 <p></p>
</form>

<ul class="nav nav-tabs" id="pay Out Tab">
 <li class="active">[CURL](#curl)</li>
 <li>[PHP](#PHP)</li>
 <li>[Ruby](#Ruby)</li>
 <li>[Java](#Java)</li>
</ul>

 <button class="doc-button" onclick="copy To Clipboardo Auth('php')">Copy to clipboard</button>
 <pre>
 <code class="php" id="pay Out Php"></code>
 </pre>

 <button class="doc-button" onclick="copy To Clipboardo Auth('ruby')">Copy to clipboard</button>
 <pre>
 <code class="language-ruby" id="pay Out Ruby"></code>
 </pre>

 <button class="doc-button" onclick="copy To Clipboardo Auth('java')">Copy to clipboard</button>
 <pre>
 <code class="language-java" id="pay Out Java"></code>
 </pre>

### /api/v2/preauth-form

#### Введение

Предавторизация по форме инициируется через запрос методом HTTPS POST на указанный ниже [URL](#api-v2-preauth-form-url) с использованием указанных [параметров](#api-v2-preauth-form-request-parameters). Для аутентификации запроса используется [SHA-1](https://doc.payneteasy.ru/integration/general_api_usage/request_authentication_methods/sha.html.md). См. [Статусы транзакций](https://doc.payneteasy.ru/integration/reference/statuses.html.md).

#### API URL

> **Note:** Путь API URL не должен быть задан фиксированным значением, т.к. он может быть изменён позднее.

| Интеграционная среда | Производственная среда |
|--------------------------------------------------------------------------------|-----------------------------------------------------------------------------|
| https://sandbox.payneteasy.ru/paynet/api/v2/preauth-form/ENDPOINTID | https://gate.payneteasy.ru/paynet/api/v2/preauth-form/ENDPOINTID |
| https://sandbox.payneteasy.ru/paynet/api/v2/preauth-form/group/ENDPOINTGROUPID | https://gate.payneteasy.ru/paynet/api/v2/preauth-form/group/ENDPOINTGROUPID |

#### Параметры запроса

> **Note:** Запрос должен иметь заголовок content-type=application/x-www-form-urlencoded.

Банк может переопределить необходимость некоторых полей, сделав их обязательными.
 
Пробелы в начале и в конце значений параметров будут отсечены.
 

| Название параметра | Описание | Значение |
|------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------|
| client_orderid | Уникальный идентификатор заказа, присвоенный Присоединяющейся Стороной. | `Необходимость`: Обязательно `Тип`: String `Длина`: 128 |
| order_desc | Описание заказа. | `Необходимость`: Обязательно `Тип`: String `Длина`: 64k |
| amount | Сумма к оплате. Сумма должна быть указана в наибольших единицах с разделителем .. Например, 10.5 для USD означает 10 долларов США и 50 центов. | `Необходимость`: Обязательно `Тип`: Numeric `Длина`: 10 |
| currency | Валюта, в которой проводится операция (см. [Коды валют](https://doc.payneteasy.ru/integration/reference/currency_codes.html.md)). Примеры значений: USD для доллара США, EUR для европейского евро, RUB для российского рубля. | `Необходимость`: Обязательно `Тип`: String `Длина`: 3 |
| address1 | Адрес Плательщика, строка 1. (Обратите внимание, что в некоторых случаях невозможно отправить адрес длиной более 50 символов. Для получения более подробной информации обратитесь к вашему менеджеру.) | `Необходимость`: Обязательно `Тип`: String `Длина`: 256 |
| city | Город Плательщика. | `Необходимость`: Обязательно `Тип`: String `Длина`: 50 |
| zip_code | Почтовый индекс Плательщика. | `Необходимость`: Обязательно `Тип`: String `Длина`: 10 |
| country | Страна Плательщика. Для списка действительных кодов см. [Коды стран](https://doc.payneteasy.ru/integration/reference/country_codes.html.md). | `Необходимость`: Обязательно `Тип`: String `Длина`: 2 |
| phone | Полный международный номер телефона Плательщика, включая код страны. | `Необходимость`: Обязательно `Тип`: String `Длина`: 15 |
| email | Адрес электронной почты Плательщика. | `Необходимость`: Обязательно `Тип`: String `Длина`: 50 |
| ipaddress | IP-адрес Плательщика, передаётся для целей мониторинга мошенничества. | `Необходимость`: Обязательно `Тип`: String `Длина`: 45 |
| control | Контрольная сумма, сгенерированная [SHA-1](https://doc.payneteasy.ru/integration/general_api_usage/request_authentication_methods/sha.html.md). Строка для подписи представляет собой объединение следующих параметров: 1. <ENDPOINTID | ENDPOINTGROUPID (См.: [URL запроса](#api-v2-preauth-form-url)). 2. Параметр запроса:client_orderid. 4. Параметр запроса:amount в минимальных денежных единицах (если отправлен). 4. Параметр запроса: email, 5. merchant_control (Контрольный ключ, назначенный для учетной записи Присоединяющейся стороны в Payneteasy). | `Необходимость`: Обязательно `Тип`: String `Длина`: 40 |
| first_name | Имя Плательщика. | `Необходимость`: Обязательно `Тип`: String `Длина`: 50 |
| last_name | Фамилия Плательщика. | `Необходимость`: Обязательно `Тип`: String `Длина`: 50 |
| state | Штат Плательщика. Для списка действительных кодов штатов см. [Обязательные коды штатов](https://doc.payneteasy.ru/integration/reference/country_codes.html.md). Требуется для США, Канады и Австралии. | `Необходимость`: Условно `Тип`: String `Длина`: 2-3 |
| redirect_url | URL, where the Payer is redirected to upon completion of the transaction. Please note that redirection is performed in any case, no matter whether transaction is approved, declined in any other final [status](https://doc.payneteasy.ru/integration/reference/statuses.html.md). Connecting Party must not use the parameters come along with the redirect HTTP Request to treat the status of the transaction. Instead Connecting Party can utilize server_callback_url or [status API command](https://doc.payneteasy.ru/integration/api_v2_status.html.md). Pass http://https://doc.payneteasy.ru if you have no need to return payer anywhere. Use either redirect_url or combination of redirect_success_url and redirect_fail_url, not both. | `Необходимость`: Опционально `Тип`: String `Длина`: 1024 |
| redirect_success_url | URL-адрес, на который будет перенаправлен Плательщик после получения успешного статуса транзакции (см. [Статусы транзакций](https://doc.payneteasy.ru/integration/reference/statuses.html.md)). Connecting Party must not use the parameters come along with the redirect HTTP Request to treat the status of the transaction. Instead Connecting Party can utilize server_callback_url or [status API command](https://doc.payneteasy.ru/integration/api_v2_status.html.md). Otherwise put http://https://doc.payneteasy.ru if there is no need to redirect Payer anywhere. Use either combination of redirect_success_url and redirect_fail_url or redirect_url, not both. | `Необходимость`: Опционально `Тип`: String `Длина`: 1024 |
| redirect_fail_url | URL-адрес, на который будет перенаправлен Плательщик после получения неуспешного статуса транзакции (см. [Статусы транзакций](https://doc.payneteasy.ru/integration/reference/statuses.html.md)). Connecting Party must not use the parameters come along with the redirect HTTP Request to treat the status of the transaction. Instead Connecting Party can utilize server_callback_url or [status API command](https://doc.payneteasy.ru/integration/api_v2_status.html.md). Pass http://https://doc.payneteasy.ru if there is no need to redirect Payer anywhere. Use either combination of redirect_fail_url and redirect_success_url or redirect_url, not both. | `Необходимость`: Опционально `Тип`: String `Длина`: 1024 |
| ssn | Последние четыре цифры номера социального страхования Плательщика. | `Необходимость`: Опционально `Тип`: Numeric `Длина`: 32 |
| birthday | Дата рождения Плательщика в формате YYYYMMDD. | `Необходимость`: Опционально `Тип`: Numeric `Длина`: 8 |
| cell_phone | Полный международный мобильный номер телефона Плательщика, включая код страны. | `Необходимость`: Опционально `Тип`: String `Длина`: 15 |
| site_url | URL-адрес сайта электронной коммерции, откуда происходит платеж. | `Необходимость`: Опционально `Тип`: String `Длина`: 128 |
| server_callback_url | URL-адрес, по которому будет отправлен обратный вызов с результатом транзакции. Connecting Party may use server callback URL for custom processing of the transaction completion, e.g. to collect payment data in the Connecting Party’s information system. For the list of parameters which come along with server callback to server_callback_url refer to [Connecting Party callback parameters](https://doc.payneteasy.ru/integration/merchant_callback_parameters.html.md). This parameter can be sent instead of notify_url. If server_callback_url is sent, Payment Gateway sends callback notification only when original transaction receives final status. If notify_url is sent, Payment Gateway sends callback notification once the original transaction receives final status, and about every future update for this original transaction (reversal, chargeback, etc). | `Необходимость`: Опционально `Тип`: String `Длина`: 1024 |
| notify_url | URL-адрес, по которому будет отправлен обратный вызов с результатом транзакции. Connecting Party may use notify URL for custom processing of the transaction completion, e.g. to collect payment data in the Connecting Party’s information system. For the list of parameters which come along with server callback to notify_url refer to [Connecting Party callback parameters](https://doc.payneteasy.ru/integration/merchant_callback_parameters.html.md). This parameter can be sent instead of server_callback_url. If notify_url is sent, Payment Gateway sends callback notification once the original transaction receives final status, and about every future update for this original transaction (reversal, chargeback, etc). If server_callback_url is sent, Payment Gateway sends callback notification only when original transaction receives final status. | `Необходимость`: Опционально `Тип`: String `Длина`: 1024 |
| preferred_language | Двухбуквенный код языка Плательщика для многоязычных платежных форм. | `Необходимость`: Опционально `Тип`: String `Длина`: 2 |
| merchant_form_data | Parameters sent in MERCHANT_FORM_DATA API parameter are parsed into macros with the same name, the parameter is url-encoded, example: testparam%3Dtest1%26mynewparam%3Dtest2 and is parsed into $MFD_testparam = test1 and $MFD_mynewparam = test2 macros in the form. Parameter name characters[a-zA-Z0-9], parameter value characters[a-zA-Z0-9], only characters = and & are allowed as control characters, 2MB max size. For example, this parameter can be used to display payment form in light/dark mode depending on the value passed by Connecting Party (e.g. pass merchant_form_data=theme%3Ddark in request and $MFD_theme macro placeholder on payment form will be changed to dark. | `Необходимость`: Опционально `Тип`: String `Длина`: 128 |
| minimum_transaction_amount | Этот параметр можно использовать для ограничения минимальной суммы транзакции, если сумма транзакции доступна для указания Плательщиком в форме. Свяжитесь с менеджером службы поддержки, чтобы включить эту функцию. Формат значения такой же, как и в параметре amount. | `Необходимость`: Опционально `Тип`: Numeric `Длина`: 10 |
| maximum_transaction_amount | Этот параметр можно использовать для ограничения максимальной суммы транзакции, если сумма транзакции доступна для указания Плательщиком в форме. Свяжитесь с менеджером службы поддержки, чтобы включить эту функцию. Формат значения такой же, как и в параметре amount. | `Необходимость`: Опционально `Тип`: Numeric `Длина`: 10 |
| customer_level | Уровень клиента в системе CMS. | `Необходимость`: Опционально `Тип`: Varchar `Длина`: 32 |
| customer_id | Идентификатор клиента в системе CMS. Параметр становится обязательным, если включена система CMS в режиме определения клиента Платёжным шлюзом. | `Необходимость`: Опционально `Тип`: Int `Длина`: 10 |
| merchant_customer_identifier | Идентификатор клиента-продавца в системе CMS. Параметр становится обязательным, если включена система CMS в режиме CRM. | `Необходимость`: Опционально `Тип`: Varchar `Длина`: 64 |
| preferred_language | Двухбуквенный код языка Плательщика для многоязычных платежных форм. | `Необходимость`: Опционально `Тип`: String `Длина`: 2 |
| card_recurring_payment_id | Токенизированная платёжная информация держателя карты, также упоминающаяся как Идентификатор Повторного Платежа или Recurring Payment ID (RPI). Может быть создан с помощью запроса [токенизации v4](https://doc.payneteasy.ru/integration/api_v4_create-card-ref.html.md). | `Необходимость`: Условно `Тип`: Long |
| cardrefid | Ссылочный Идентификатор Платежа для последующих списаний. Может быть создан с помощью запроса [токенизации v4](https://doc.payneteasy.ru/integration/api_v4_create-card-ref.html.md) или запроса [токенизации v2](https://doc.payneteasy.ru/integration/api_v2_create-card-ref.html.md). | `Необходимость`: Условно `Тип`: Long |

#### Параметры ответа

> **Note:** Ответ имеет заголовок Content-Type: text/html;charset=utf-8. Все поля имеют кодировку x-www-form-urlencoded, с символом (0xA) в конце значения каждого параметра.

| Параметры ответа | Описание |
|--------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| type | Тип ответа. Может принимать такие значения как: async-response, validation-error, error и т.д. Если тип ответа validation-error или error, параметры error-message и error-code будут содержать детали ошибки. |
| paynet-order-id | Идентификатор заказа, присвоенный Payneteasy. |
| merchant-order-id | Идентификатор заказа Присоединяющейся Стороны. |
| serial-number | Уникальный номер, присваиваемый сервером Payneteasy конкретному запросу от Присоединяющейся стороны. |
| error-message | Для транзакций в статусе error этот параметр будет содержать причину отклонения или сведения об ошибке. |
| error-code | Код ошибки для транзакций в статусе error. |
| redirect-url | URL-адрес страницы, на которую Присоединяющаяся сторона должна перенаправить браузер клиента методом HTTP 302. Подробнее см. [General Payment-form Process Flow](https://doc.payneteasy.ru/integration/api_use_cases/sale_form.html.md). |

#### Пример запроса

```http
POST /paynet/api/v2/preauth-form/39539 HTTP/1.1
User-Agent: curl/7.83.0
Accept: */*
Content-Length: 314
Content-Type: application/x-www-form-urlencoded
Connection: close

client_orderid=902B4FF5
&order_desc=Test Order Описание
&first_name=John
&last_name=Smith
&ssn=1267&birthday=19820115
&address1=100 Main st
&city=Seattle
&state=WA
&zip_code=98102
&country=US
&phone=+12063582043
&cell_phone=+19023384543
&amount=69
&email=john.smith@gmail.com
&currency=USD
&ipaddress=65.153.12.232
&site_url=https://doc.payneteasy.ru
&credit_card_number=4538977399606732
&card_printed_name=CARD HOLDER
&expire_month=12
&expire_year=2099
&cvv2=123
&purpose=user_account1
&redirect_url=http://sandbox.payneteasy.ru/doc/dummy.htm
&server_callback_url=https://httpstat.us/200
&merchant_data=VIP customer
&merchant_form_data=testparam%3Dtest1%26mynewparam%3Dtest2
&control=b7ba0b0ce36fda192c3772e045520c7a9cb5e442
&preferred_language=en
```

#### Пример успешного ответа

```http
HTTP/1.1 200 OK
Server: server
Date: Thu, 13 Oct 2022 09:54:53 GMT
Content-Type: text/html;charset=utf-8
Connection: close
Vary: Accept-Encoding
X-XSS-Protection: 1
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000
Content-Language: en-US
Strict-Transport-Security: max-age=31536000
Content-Length: 280

type=async-form-response
&serial-number=00000000-0000-0000-0000-000002ddb0d3
&merchant-order-id=Test
&paynet-order-id=6863103
&redirect-url=https%3A%2F%2Fsandbox.payneteasy.ru%2Fpaynet%2Fform%2Finit%2FBB587546567A31587163597A68633370432F78675258396E6F78367975715973596936522B594B4F646168553D
```

#### Пример неуспешного ответа

```http
HTTP/1.1 200 OK
Server: server
Date: Thu, 13 Oct 2022 09:58:28 GMT
Content-Type: text/html;charset=utf-8
Connection: close
Vary: Accept-Encoding
X-XSS-Protection: 1
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000
Content-Language: en-US
Strict-Transport-Security: max-age=31536000
Content-Length: 170

type=validation-error
&serial-number=00000000-0000-0000-0000-000002ddb0d4
&error-message=Project+with+currency+RUB+does+not+apply+request+with+currency+USD
&error-code=16
```

#### Open API Collection

Open this method in the OpenAPI Reference

<a class="openapi-reference-button" href="/openapi-doc/#POST/api/v2/preauth-form/{endpoint Id}" target="_blank" rel="noopener">View in OpenAPI <svg xmlns="http://www.w3.org/2000/svg" view Box="0 0 24 24" fill="none" stroke="current Color" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg></a>

#### Коллекция Postman

<div class="postman-run-button"
data-postman-action="collection/fork"
data-postman-var-1="23519287-0948ef8b-74a4-42be-8795-f548ec8b0687"
data-postman-collection-url="entity Id=23519287-0948ef8b-74a4-42be-8795-f548ec8b0687&entity Type=collection&workspace Id=7be78bd7-9f10-4be9-a60e-bd36ff1b6783"
data-postman-param="env%5BPayment%20gateway%20ENV%5D=W3sia2V5IjoiVVJMIiwidm FsdWUi Oi IiLCJlbm FibGVk Ijp0cn VlLCJ0eXBl IjoiZGVmYXVsdCJ9XQ=="></div>
<script type="text/javascript">
 (function (p,o,s,t,m,a,n) {
 !p[s] && (p[s] = function () { (p[t] || (p[t] = [])).push (arguments); });
 !o.get Element By Id (s+t) && o.get Elements By Tag Name("head")[0].append Child((
 (n = o.create Element("script")),
 (n.id = s+t), (n.async = 1), (n.src = m), n
 ));
 }(window, document, "_pm", "Postman Run Object", "https://run.pstmn.io/button.js"));
 var env Name = "Payment gateway ENV";
	 var env Data = {
 URL:'sandbox.payneteasy.ru' + "/" + 'paynet'
 };
 \_pm('env.replace', env Name, env Data);
</script>

#### Конструктор запросов

<meta http-equiv="Cache-Control" content="no-cache">
<script src="../_static/js/crypto-js/sha1.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="../_static/js/highlight/styles/default.css">
<script src="../_static/js/highlight/highlight.pack.js"></script>

<script type="text/javascript">
$(document).ready (function(){ 
 $("#payment Form Request Tab a").click (function (e){
 	e.prevent Default();
 	$(this).tab('show');
 });
});
</script>

<script type="text/javascript">
	var paymentform_curl Request Text = "";
	var paymentform_php Request Text = "";
	var paymentform_ruby Request Text = "";
	var paymentform_java Request Text = "";

 function paymentform_sign (form) {

	if (form.elements['server_callback_url'].value && form.elements['notify_url'].value) {
		$(".errorinfo").show();
		return false;
	} else {
		$(".errorinfo").hide();
	}

 var signed Text = "";
	var curl Text = "";
	var sandbox = "";
	var params = "";
	var url = "";
	var control = "";
 var amount Info One = document.get Element By Id("amount Warning One");

	var xhttp = new XMLHttp Request();
 xhttp.onreadystatechange = function() {
 if (xhttp.ready State == 4 && xhttp.status == 200) {
	 if (url == "../_static/examples/PHP/params_no_header_PHP_new.txt"){
 paymentform_php Request Text = xhttp.response Text;}
		else if (url == "../_static/examples/Ruby/params_no_header_Ruby (for new version).txt"){
		 paymentform_ruby Request Text = xhttp.response Text;}
		else{
		 paymentform_java Request Text = xhttp.response Text;}

 }
 }

	url = "../_static/examples/PHP/params_no_header_PHP_new.txt";
 xhttp.open("GET", url, false);
 xhttp.send();
	url = "../_static/examples/Ruby/params_no_header_Ruby (for new version).txt";
 xhttp.open("GET", url, false);
 xhttp.send();
 url = "../_static/examples/Java/params_java.txt";
 xhttp.open("GET", url, false);
 xhttp.send();

 for (var e = 0; e < form.elements.length; ++e) {
 var input = form.elements[e];
 if (input.name != null)
 {
 if (input.name.substring(0, 5) == "sha1_")
 if (input.value != null)
 if (input.value != "")
 if (!(input.type == "checkbox" || input.type == "radio") || input.checked)
 {
 if (input.name == "sha1_amount")
 { var amount To Fix One = input.value \* 100;
 var fixed Amount One = amount To Fix One.to Fixed(0);
 if (fixed Amount One != amount To Fix One)
 { $('#amount Warning One').css("display", "block");amount Info One.innerHTML = amount Info One.innerHTML.replace("​", "Possible floating point imprecision (for more information check Floating Point Math)");}
 else {$('#amount Warning One').css("display", "none");amount Info One.innerHTML = amount Info One.innerHTML.replace("Possible floating point imprecision (for more information check Floating Point Math)", "​");}
 signed Text = signed Text + fixed Amount One;}
 else
 {signed Text = signed Text + input.value;}
 }
 if (input.value != null && input.name != null)
 if (input.value != "" && input.name != "" && input.name != "operationname")
 if (input.name.substring(0, 5) == "sha1_")
 {
 if (input.name != "sha1_merchant_control" && input.name != "sha1_endpointid"){
 curl Text = curl Text + input.name.substring(5) + "=" + input.value + "&";

								 params += " '" + input.name.substring(5) + "' => '" + input.value + "', \\n";

								 }
 }
 else {
 curl Text = curl Text + input.name + "=" + input.value + "&";

							 params += " '" + input.name + "' => '" + input.value + "', \\n";
							 }
 }
 }

		sandbox = 'https://sandbox.payneteasy.ru/paynet/api/v2/' + document.payment Formsale.operationname.value + '/' +
 document.payment Formsale.sha1_endpointid.value;

		paymentform_php Request Text = paymentform_php Request Text.replace("{$generated parameters with values code}", params);
		paymentform_php Request Text = paymentform_php Request Text.replace("{$sandbox}", sandbox);

		paymentform_ruby Request Text = paymentform_ruby Request Text.replace("{$generated parameters with values code}", params);
		paymentform_ruby Request Text = paymentform_ruby Request Text.replace("{$sandbox}", sandbox);

	 control = " 'control' => '" + CryptoJS.SHA1 (signed Text) + "'";
		paymentform_php Request Text = paymentform_php Request Text.replace(/{\\$identifier Type Name}/g, document.payment Formsale.operationname.value.match(/\\/group/) ? 'group Id' : 'endpoint Id');
		paymentform_php Request Text = paymentform_php Request Text.replace("{$endpoint Or Group Id}", document.payment Formsale.sha1_endpointid.value);
		paymentform_php Request Text = paymentform_php Request Text.replace("{$merchant Control}", document.payment Formsale.sha1_merchant_control.value);
		paymentform_php Request Text = paymentform_php Request Text.replace("{$additional vars}", '');
		paymentform_php Request Text = paymentform_php Request Text.replace("{$sign Function Call}", 'sign Payment Request($request Fields, $' + (document.payment Formsale.operationname.value.match(/\\/group/) ? 'group Id' : 'endpoint Id') + ', $merchant Control)');

		paymentform_php Request Text = paymentform_php Request Text.replace("{$control}", control);
		paymentform_ruby Request Text = paymentform_ruby Request Text.replace("{$control}", control);

		paymentform_curl Request Text = 'curl --data "' +
 curl Text +
 "control=" + CryptoJS.SHA1 (signed Text) +
 '" https://sandbox.payneteasy.ru/paynet/api/v2/' + document.payment Formsale.operationname.value + '/' +
 document.payment Formsale.sha1_endpointid.value;
	 paymentform_java Request Text = paymentform_java Request Text.replace("{$has Headers}", "false");
 paymentform_java Request Text = paymentform_java Request Text.replace("{$targetURL}", sandbox);
		paymentform_java Request Text = paymentform_java Request Text.replace("{$url Parameters}", curl Text);
		paymentform_java Request Text = paymentform_java Request Text.replace("{$control Parameters}", signed Text);

		show Text("payment Formphpvalue" , paymentform_php Request Text);

		show Text("payment Formrubyvalue" , paymentform_ruby Request Text);
		show Text("payment Formjavavalue" , paymentform_java Request Text);

 show Text("payment Formsignedvalue" , signed Text);
 show Text("payment Formsha1value" , CryptoJS.SHA1 (signed Text));
 show Text("payment Formcurlvalue" , paymentform_curl Request Text);
		 $(document).ready (function() {
 $('pre code').each (function (i, block) {
 hljs.highlight Block (block);
 });
 });
 return false;
 }

function show Text (element Id, text) {
 var child = document.create Text Node (text);
 var element = document.get Element By Id (element Id);
		element.innerHTML ="";
 if (element.has Child Nodes()) {
 element.replace Child (child, element.first Child);
 } else {
 element.append Child (child);
 }
 }

 function rand Inv1 (c) {
 document.get Element By Id (c).value = "inv" + Math.floor (Math.random()\*10000000);
 }
function copy To Clipboard Request_paymentform (text) {
 var text Area = document.create Element("textarea");

 // Place in top-left corner of screen regardless of scroll position.
 text Area.style.position = 'fixed';
 text Area.style.top = 0;
 text Area.style.left = 0;

 // Ensure it has a small width and height. Setting to 1px / 1em
 // doesn't work as this gives a negative w/h on some browsers.
 text Area.style.width = '2em';
 text Area.style.height = '2em';

 // We don't need padding, reducing the size if it does flash render.
 text Area.style.padding = 0;

 // Clean up any borders.
 text Area.style.border = 'none';
 text Area.style.outline = 'none';
 text Area.style.box Shadow = 'none';

 // Avoid flash of white box if rendered for any reason.
 text Area.style.background = 'transparent';

 if (text == 'curl'){
	text Area.value = paymentform_curl Request Text;
 } else if (text =='php'){
	text Area.value = paymentform_php Request Text;
 } else if (text =='ruby'){
 text Area.value = paymentform_ruby Request Text;
 } else{
 text Area.value = paymentform_java Request Text;}
 document.body.append Child (text Area);

 text Area.select();

 try {
 var successful = document.exec Command('copy');
 var msg = successful ? 'successful' : 'unsuccessful';
 console.log('Copying text command was ' + msg);
 } catch (err) {
 console.log('Oops, unable to copy');
 }

 document.body.remove Child (text Area);

 }
</script>

<form name="payment Formsale">

 <select class="doc-select" name="operationname" size="1">
 <option value="preauth-form">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;preauth-form (by ENDPOINTID)</option>
 <option value="preauth-form/group">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;preauth-form (by ENDPOINTGROUPID)</option>
 </select>
 
 <p></p>
 <input type="button" class="doc-button" style="font-size: 100%; padding: 2px 6px 3px 6px;" value="Sign preauth Request" onclick="paymentform_sign (document.payment Formsale)" />
 <p></p>
</form>

<ul class="nav nav-tabs" id="payment Form Request Tab">
 <li class="active">[CURL](#payment FormCURL)</li>
 <li>[PHP](#payment FormPHP)</li>
 <li>[Ruby](#payment Form Ruby)</li>
 <li>[Java](#payment Form Java)</li>
</ul>

 <button class="doc-button" onclick="copy To Clipboard Request_paymentform('php')">Copy to clipboard</button>
 <pre>
			<code class="php" id="payment Formphpvalue"></code>
		</pre>

 <button class="doc-button" onclick="copy To Clipboard Request_paymentform('ruby')">Copy to clipboard</button>
 <pre>
			<code class="language-ruby" id="payment Formrubyvalue"></code>
		</pre>

 <button class="doc-button" onclick="copy To Clipboard Request_paymentform('java')">Copy to clipboard</button>
 <pre>
			<code class="language-java" id="payment Formjavavalue"></code>
		</pre>

### /api/v2/preauth

#### Введение

Preauth инициируется запросом HTTPS POST с использованием указанных ниже [URL](#api-v2-preauth-request-url) и [параметров](#api-v2-preauth-request-parameters-url). Для аутентификации используйте [SHA-1](https://doc.payneteasy.ru/integration/general_api_usage/request_authentication_methods/sha.html.md). См. [статусы](https://doc.payneteasy.ru/integration/reference/statuses.html.md).

#### API URL

> **Note:** Путь API URL не должен быть задан фиксированным значением, т.к. он может быть изменён позднее.

| Интеграционная среда | Производственная среда |
|---------------------------------------------------------------------------|------------------------------------------------------------------------|
| https://sandbox.payneteasy.ru/paynet/api/v2/preauth/ENDPOINTID | https://gate.payneteasy.ru/paynet/api/v2/preauth/ENDPOINTID |
| https://sandbox.payneteasy.ru/paynet/api/v2/preauth/group/ENDPOINTGROUPID | https://gate.payneteasy.ru/paynet/api/v2/preauth/group/ENDPOINTGROUPID |

#### Параметры запроса

> **Note:** Запрос должен иметь заголовок content-type=application/x-www-form-urlencoded.

| Название параметра | Описание | Значение |
|------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------|
| client_orderid | Уникальный идентификатор заказа, присвоенный Присоединяющейся Стороной. | `Необходимость`: Обязательно `Тип`: String `Длина`: 128 |
| order_desc | Описание заказа. | `Необходимость`: Обязательно `Тип`: String `Длина`: 1525 |
| amount | Сумма к оплате. Сумма должна быть указана в наибольших единицах с разделителем .. Например, 10.5 для USD означает 10 долларов США и 50 центов. | `Необходимость`: Обязательно `Тип`: Numeric `Длина`: 10 |
| currency | Валюта, в которой проводится операция (см. [Коды валют](https://doc.payneteasy.ru/integration/reference/currency_codes.html.md)). Примеры значений: USD для доллара США, EUR для европейского евро, RUB для российского рубля. | `Необходимость`: Обязательно `Тип`: String `Длина`: 3 |
| address1 | Адрес Плательщика, строка 1. (Обратите внимание, что в некоторых случаях невозможно отправить адрес длиной более 50 символов. Для получения более подробной информации обратитесь к вашему менеджеру.) | `Необходимость`: Обязательно `Тип`: String `Длина`: 256 |
| city | Город Плательщика. | `Необходимость`: Обязательно `Тип`: String `Длина`: 50 |
| zip_code | Почтовый индекс Плательщика. | `Необходимость`: Обязательно `Тип`: String `Длина`: 10 |
| country | Страна Плательщика. Для списка действительных кодов см. [Коды стран](https://doc.payneteasy.ru/integration/reference/country_codes.html.md). | `Необходимость`: Обязательно `Тип`: String `Длина`: 2 |
| phone | Полный международный номер телефона Плательщика, включая код страны. | `Необходимость`: Обязательно `Тип`: String `Длина`: 15 |
| email | Адрес электронной почты Плательщика. | `Необходимость`: Обязательно `Тип`: String `Длина`: 50 |
| ipaddress | IP-адрес Плательщика, передаётся для целей мониторинга мошенничества. | `Необходимость`: Обязательно `Тип`: String `Длина`: 45 |
| control | Контрольная сумма, сгенерированная [SHA-1](https://doc.payneteasy.ru/integration/general_api_usage/request_authentication_methods/sha.html.md). Строка для подписи представляет собой объединение следующих параметров: 1. <ENDPOINTID | ENDPOINTGROUPID (См.: [URL запроса](#api-v2-preauth-request-url)). 2. Параметр запроса:client_orderid. 3. Параметр запроса: amount в минимальных денежных единицах, 4. Параметр запроса: email, 5. merchant_control (Контрольный ключ, назначенный для учетной записи Присоединяющейся стороны в Payneteasy). | `Необходимость`: Обязательно `Тип`: String `Длина`: 40 |
| cvv2 | Код CVV2 плательщика. CVV2 (Card Verification Значение) — это трех - или четырехзначное число, напечатанное на обратной стороне карты в области подписи. | `Необходимость`: Обязательно `Тип`: Numeric `Длина`: 3-4 |
| credit_card_number | Номер банковской карты плательщика (также известный как PAN — Primary Account Number). | `Необходимость`: Обязательно `Тип`: Numeric `Длина`: 20 |
| card_recurring_payment_id | Идентификатор токенизированных данных держателя карты Плательщика. Отправьте либо card_recurring_payment_id, либо комбинацию credit_card_number, card_printed_name, expire_month и expire_year, но не все значения одновременно. Сведения о создании card_recurring_payment_id см. в [/api/v2/create-card-ref](https://doc.payneteasy.ru/integration/api_v2_create-card-ref.html.md). | `Необходимость`: Обязательно `Тип`: Long `Длина`: 20 |
| card_printed_name | Имя владельца карты, напечатанное на банковской карте. | `Необходимость`: Обязательно `Тип`: String `Длина`: 64k |
| expire_month | Месяц окончания срока действия банковской карты. | `Необходимость`: Обязательно `Тип`: Numeric `Длина`: 2 |
| expire_year | Год окончания срока действия банковской карты. | `Необходимость`: Обязательно `Тип`: Numeric `Длина`: 4 |
| first_name | Имя Плательщика. | `Необходимость`: Обязательно `Тип`: String `Длина`: 50 |
| last_name | Фамилия Плательщика. | `Необходимость`: Обязательно `Тип`: String `Длина`: 50 |
| state | Штат Плательщика. Для списка действительных кодов штатов см. [Обязательные коды штатов](https://doc.payneteasy.ru/integration/reference/country_codes.html.md). Требуется для США, Канады и Австралии. | `Необходимость`: Условно `Тип`: String `Длина`: 2-3 |
| redirect_url | URL, where the Payer is redirected to upon completion of the transaction. Please note that redirection is performed in any case, no matter whether transaction is approved, declined in any other final [status](https://doc.payneteasy.ru/integration/reference/statuses.html.md). Connecting Party must not use the parameters come along with the redirect HTTP Request to treat the status of the transaction. Instead Connecting Party can utilize server_callback_url or [status API command](https://doc.payneteasy.ru/integration/api_v2_status.html.md). Pass https://doc.payneteasy.ru if you have no need to return payer anywhere. Use either redirect_url or combination of redirect_success_url and redirect_fail_url, not both. | `Необходимость`: Опционально `Тип`: String `Длина`: 1024 |
| redirect_success_url | URL-адрес, на который будет перенаправлен Плательщик после получения успешного статуса транзакции (см. [Статусы транзакций](https://doc.payneteasy.ru/integration/reference/statuses.html.md)). Connecting Party must not use the parameters come along with the redirect HTTP Request to treat the status of the transaction. Instead Connecting Party can utilize server_callback_url or [status API command](https://doc.payneteasy.ru/integration/api_v2_status.html.md). Otherwise put https://doc.payneteasy.ru if there is no need to redirect Payer anywhere. Use either combination of redirect_success_url and redirect_fail_url or redirect_url, not both. | `Необходимость`: Опционально `Тип`: String `Длина`: 1024 |
| redirect_fail_url | URL-адрес, на который будет перенаправлен Плательщик после получения неуспешного статуса транзакции (см. [Статусы транзакций](https://doc.payneteasy.ru/integration/reference/statuses.html.md)). Connecting Party must not use the parameters come along with the redirect HTTP Request to treat the status of the transaction. Instead Connecting Party can utilize server_callback_url or [status API command](https://doc.payneteasy.ru/integration/api_v2_status.html.md). Pass https://doc.payneteasy.ru if there is no need to redirect Payer anywhere. Use either combination of redirect_fail_url and redirect_success_url or redirect_url, not both. | `Необходимость`: Опционально `Тип`: String `Длина`: 1024 |
| ssn | Последние четыре цифры номера социального страхования Плательщика. | `Необходимость`: Опционально `Тип`: Numeric `Длина`: 32 |
| birthday | Дата рождения Плательщика в формате YYYYMMDD. | `Необходимость`: Опционально `Тип`: Numeric `Длина`: 8 |
| cell_phone | Полный международный мобильный номер телефона Плательщика, включая код страны. | `Необходимость`: Опционально `Тип`: String `Длина`: 15 |
| site_url | URL-адрес сайта электронной коммерции, откуда происходит платеж. | `Необходимость`: Опционально `Тип`: String `Длина`: 128 |
| purpose | Получатель платежа. Это полезно для Присоединяющихся сторон, позволяющих плательщикам пополнять свои счета банковской картой (счета мобильных телефонов, игровые счета и т. д.). Примеры значений: +9999999999; mail@example.com и т. д. Это значение может использоваться системой мониторинга мошенничества. | `Необходимость`: Опционально `Тип`: String `Длина`: 128 |
| server_callback_url | URL-адрес, по которому будет отправлен обратный вызов с результатом транзакции. Connecting Party may use server callback URL for custom processing of the transaction completion, e.g. to collect payment data in the Connecting Party’s information system. For the list of parameters which come along with server callback to server_callback_url refer to [Connecting Party callback parameters](https://doc.payneteasy.ru/integration/merchant_callback_parameters.html.md). This parameter can be sent instead of notify_url. If server_callback_url is sent, Payment Gateway sends callback notification only when original transaction receives final status. If notify_url is sent, Payment Gateway sends callback notification once the original transaction receives final status, and about every future update for this original transaction (reversal, chargeback, etc). | `Необходимость`: Опционально `Тип`: String `Длина`: 1024 |
| notify_url | URL-адрес, по которому будет отправлен обратный вызов с результатом транзакции. Connecting Party may use notify URL for custom processing of the transaction completion, e.g. to collect payment data in the Connecting Party’s information system. For the list of parameters which come along with server callback to notify_url refer to [Connecting Party callback parameters](https://doc.payneteasy.ru/integration/merchant_callback_parameters.html.md). This parameter can be sent instead of server_callback_url. If notify_url is sent, Payment Gateway sends callback notification once the original transaction receives final status, and about every future update for this original transaction (reversal, chargeback, etc). If server_callback_url is sent, Payment Gateway sends callback notification only when original transaction receives final status. | `Необходимость`: Опционально `Тип`: String `Длина`: 1024 |
| merchant_data | Дополнительные сведения о транзакции для Присоединяющейся Стороны, которые можно прикрепить к транзакции и получить обратно в ответе на [запрос статуса](https://doc.payneteasy.ru/integration/api_v2_status.html.md), [обратном вызове Присоединяющейся Стороны](https://doc.payneteasy.ru/integration/merchant_callback_parameters.html.md) или server_callback_url. Может содержать данные, которые будут полезны во внешней системе Присоединяющейся Стороны, например VIP клиент, телевизионная промо-кампания. Информация возвращается в ответе на запрос статуса и в обратном вызове Присоединяющейся Стороны. | `Необходимость`: Опционально `Тип`: String `Длина`: 64k |
| minimum_transaction_amount | Этот параметр можно использовать для ограничения минимальной суммы транзакции, если сумма транзакции доступна для указания Плательщиком в форме. Свяжитесь с менеджером службы поддержки, чтобы включить эту функцию. Формат значения такой же, как и в параметре amount. | `Необходимость`: Опционально `Тип`: Numeric `Длина`: 10 |
| maximum_transaction_amount | Этот параметр можно использовать для ограничения максимальной суммы транзакции, если сумма транзакции доступна для указания Плательщиком в форме. Свяжитесь с менеджером службы поддержки, чтобы включить эту функцию. Формат значения такой же, как и в параметре amount. | `Необходимость`: Опционально `Тип`: Numeric `Длина`: 10 |
| customer_level | Уровень клиента в системе CMS. | `Необходимость`: Опционально `Тип`: Varchar `Длина`: 32 |
| customer_id | Идентификатор клиента в системе CMS. Параметр становится обязательным, если включена система CMS в режиме определения клиента Платёжным шлюзом. | `Необходимость`: Опционально `Тип`: Int `Длина`: 10 |
| merchant_customer_identifier | Идентификатор клиента-продавца в системе CMS. Параметр становится обязательным, если включена система CMS в режиме CRM. | `Необходимость`: Опционально `Тип`: Varchar `Длина`: 64 |
| recurring-payment-id | Recurring Payment ID может быть передан вместо данных держателя карты. Для нативных транзакций CVV не требуется. Обновление данных клиента возможно через /api/v4/update-recurring-payment/. Процесс создания Recurring Payment ID инициируется HTTPS POST запросом с использованием указанных ниже [URLs](https://doc.payneteasy.ru/integration/api_v4_create-card-ref.html.md). и [параметров](https://doc.payneteasy.ru/integration/api_v4_create-card-ref.html.md), используйте [OAuth RSA-SHA256](https://doc.payneteasy.ru/integration/general_api_usage/request_authentication_methods/oauth.html.md) для аутентификация | `Необходимость`: Условно `Тип`: Long |

#### Дополнительные поля для транзакций Preauth

##### Для Присоединяющейся Стороны

> **Note:** Данные браузера для 3DS 2. X собираются системой Payneteasy на этапе 3DS-аутентификации. Однако для некоторых каналов обработки данные браузера и/или URL Присоединяющейся стороны для результатов 3DS challenge должны быть переданы в первоначальном запросе транзакции. Обратитесь к менеджеру поддержки, чтобы уточнить, следует ли включать эти параметры в параметры запроса.

Сайт Присоединяющейся Стороны должен точно заполнять информацию о браузере по каждой транзакции. Эти данные могут быть получены серверами Присоединяющейся Стороны. Убедитесь, что данные не изменены и не жестко запрограммированы, и что они уникальны для каждой транзакции.

| Название параметра | Описание | Значение |
|----------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------|
| ipaddress | IP-адрес браузера, возвращаемый HTTP-заголовками инициатору запроса 3DS. | `Необходимость`: Обязательно `Тип`: String `Длина`: 45 |
| customer_browser_accept_header | Точное содержание заголовков HTTP Accept, отправленное инициатору запроса 3DS из браузера владельца карты. | `Необходимость`: Обязательно `Тип`: String `Длина`: 2048 |
| customer_browser_javascript_enabled | Boolean, представляющий cпособность браузера владельца карты запускать Java Script. | `Необходимость`: Обязательно `Тип`: Boolean `Длина`: - |
| customer_browser_accept_language | Значение, представляющее язык браузера, по определено IETF BCP47. | `Необходимость`: Обязательно `Тип`: String `Длина`: 8 |
| customer_browser_user_agent | Точное содержание заголовка HTTP user-agent. | `Необходимость`: Обязательно `Тип`: String `Длина`: 2048 |
| tds_areq_notification_url, alias tds_cres_notification_url | Полный URL-адрес системы Присоединяющейся Стороны, которая получит сообщение CRes или сообщение об ошибке. Это сообщение CRes должно быть отправлено Payneteasy. См. [Загрузка результата CRes](https://doc.payneteasy.ru/integration/upload-cres-result.html.md). | `Необходимость`: Опционально `Тип`: String `Длина`: 256 |
| customer_browser_info | Если true, параметры, приведенные ниже, должны быть указаны. | `Необходимость`: Опционально `Тип`: Boolean `Длина`: - |
| customer_browser_color_depth | Значение, представляющее разрядность цветовой палитры для отображения изображений, в битах на пиксель. Становится обязательным, когда browser_java Script_enabled = true». | `Необходимость`: Опционально `Тип`: String `Длина`: 2 |
| customer_browser_java_enabled | Boolean, который представляет способность браузера владельца карты запускать Java. Становится обязательным, когда browser_java Script_enabled = true. | `Необходимость`: Опционально `Тип`: Boolean `Длина`: - |
| customer_browser_screen_height | Общая высота экрана владельца карты в пикселях. Требуется, когда browser_java Script_enabled = true. | `Необходимость`: Опционально `Тип`: Numeric `Длина`: 6 |
| customer_browser_screen_width | Общая ширина экрана владельца карты в пикселях. Требуется, когда browser_java Script_enabled = true. | `Необходимость`: Опционально `Тип`: Numeric `Длина`: 6 |
| customer_browser_time_zone | Смещение часового пояса в минутах между UTC и местным временем браузера держателя карты. Обратите внимание, что смещение является положительным, если местный часовой пояс отстает от UTC, и отрицательным, если он опережает UTC. Становится обязательным, когда browser_java Script_enabled = true. | `Необходимость`: Опционально `Тип`: String `Длина`: 5 |

##### Для платежных учреждений

PSP или эквайер могут заполнить результаты 3DS для каждой транзакции, если выполнение 3DS аутентификации происходит на их стороне.

| Parameter Name | Description | Value |
|------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------|
| tds_authentication_result_type | Type of result. Possible values are: - SIMPLE | `Type`: String `Length`: 6 |
| tds_authentication_result_authentication_type | Authentication Type. Indicates the type of authentication method the Issuer will use to challenge the Cardholder, whether in the ARes message or what was used by the ACS when in the RReq message. Possible values are: - 01 = Static - 02 = Dynamic - 03 = OOB - 04 = Decoupled - 05-79 = Reserved for EMVCo future use (values invalid until defined by EMVCo) - 80-99 = Reserved for DS use | `Type`: String `Length`: 2 |
| tds_authentication_result_authentication_value | Authentication Value. Payment System-specific value provided by the ACS or the DS using an algorithm defined by Payment System. Authentication Value may be used to provide proof of authentication. A 20-byte value that has been Base64 encoded, giving a 28-byte result | `Type`: String `Length`: 19-28 |
| tds_authentication_result_transaction_id | xid for 1.0.2 or ds TransID for 2.1.0/2.2.0 | `Type`: String `Length`: 19-36 |
| tds_authentication_result_transaction_status | Transaction Status. Indicates whether a transaction qualifies as an authenticated transaction or account verification. Possible values are: - Y = Authentication Verification Successful - N = Not Authenticated/Account Not Verified, Transaction denied - U = Authentication/Account Verification Could Not Be Performed, Technical or other problem, as indicated in ARes or RReq - A = Attempts Processing Performed, Not Authenticated/Verified, but a proof of attempted authentication/verification is provided - C = Challenge Required, Additional authentication is required using the CReq/CRes - D = Challenge Required, Decoupled Authentication confirmed - R = Authentication/ Account Verification Rejected, Issuer is rejecting | `Type`: String `Length`: 1 |
| tds_authentication_result_message_version | Message Version Number. Protocol version identifier This shall be the Protocol Version Number of the specification utilised by the system creating this message. The Message Version Number is set by the 3DS Server which originates the protocol with the AReq message. The Message Version Number does not change during a 3DS transaction. Possible values are: - 1.0.2 - 2.1.0 - 2.2.0 | `Type`: String `Length`: 5 |

#### Параметры ответа

> **Note:** Ответ имеет заголовок Content-Type: text/html;charset=utf-8. Все поля имеют кодировку x-www-form-urlencoded, с символом (0xA) в конце значения каждого параметра.

| Параметры ответа | Описание |
|--------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| type | Тип ответа. Может принимать такие значения как - async-response, validation-error, error и т.д. Если тип равен validation-error или error, параметры error-message и error-code будут содержать сведения об ошибке. |
| paynet-order-id | Идентификатор заказа, присвоенный Payneteasy. |
| merchant-order-id | Идентификатор заказа Присоединяющейся Стороны. |
| serial-number | Уникальный номер, присваиваемый сервером Payneteasy конкретному запросу от Присоединяющейся стороны. |
| error-message | Для транзакций в статусе error этот параметр будет содержать причину отклонения или сведения об ошибке. |
| error-code | Код ошибки для транзакций в статусе error. |
| end-point-id | Идентификатор терминала, используемый для транзакции. |

#### Пример запроса с данными владельца карты

```http
POST /paynet/api/v2/preauth/39549 HTTP/1.1
User-Agent: curl/7.83.0
Accept: */*
Content-Length: 314
Content-Type: application/x-www-form-urlencoded
Connection: close

credit_card_number=4538977399606732
&card_printed_name=CARD HOLDER
&expire_month=12
&expire_year=2099
&cvv2=123
&client_orderid=902B4FF5
&order_desc=Test Order Описание
&first_name=John
&last_name=Smith
&ssn=1267
&birthday=19820115
&address1=100 Main st
&city=Seattle
&state=WA
&zip_code=98102
&country=US
&phone=%2B12063582043
&cell_phone=%2B19023384543
&email=john.smith@gmail.com
&currency=USD
&amount=10.42
&ipaddress=65.153.12.232
&site_url=https://doc.payneteasy.ru
&purpose=user_account1
&redirect_url=https://doc.payneteasy.ru/doc/dummy.htm
&server_callback_url=https://httpstat.us/200
&merchant_data=VIP customer
&control=768eb8162fc361a3e14150ec46e9a6dd8fbfa483
```

#### Пример запроса с идентификатором регулярного платежа по карте

```http
POST /paynet/api/v2/preauth/39549 HTTP/1.1
User-Agent: curl/7.83.0
Accept: */*
Content-Length: 314
Content-Type: application/x-www-form-urlencoded
Connection: close

card_recurring_payment_id=1491927
&cvv2=123
&client_orderid=34T43R77N
&order_desc=Test Order Описание
&amount=777
&currency=USD
&ipaddress=65.153.12.232
&redirect_url=https://doc.payneteasy.ru/doc/dummy.htm
&server_callback_url=https://httpstat.us/200
&control=218d377897ce25c2ac69d99de42bc6902eb5bcd8
```

#### Пример успешного ответа

```http
HTTP/1.1 200 OK
Server: server
Date: Mon, 05 Sep 2022 10:43:57 GMT
Content-Type: text/html;charset=utf-8
Connection: close
Vary: Accept-Encoding
X-XSS-Protection: 1
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000
Content-Language: en-US
Strict-Transport-Security: max-age=31536000
Content-Length: 139

type=async-response
&serial-number=00000000-0000-0000-0000-000002ddb018
&merchant-order-id=123
&paynet-order-id=6863073
&end-point-id=39914
```

#### Пример неуспешного ответа

```http
HTTP/1.1 200 OK
Server: server
Date: Mon, 05 Sep 2022 10:51:14 GMT
Content-Type: text/html;charset=utf-8
Connection: close
Vary: Accept-Encoding
X-XSS-Protection: 1
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000
Content-Language: en-US
Strict-Transport-Security: max-age=31536000
Content-Length: 208

type=validation-error
&serial-number=00000000-0000-0000-0000-000002ddb019
&merchant-order-id=123
&error-message=Validate+card+number+failed.+Card+Number+length+must+be+between+16+and+19+digits..
&error-code=8
```

#### Open API Collection

Open this method in the OpenAPI Reference

<a class="openapi-reference-button" href="/openapi-doc/#POST/api/v2/preauth/{endpoint Id}" target="_blank" rel="noopener">View in OpenAPI <svg xmlns="http://www.w3.org/2000/svg" view Box="0 0 24 24" fill="none" stroke="current Color" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg></a>

#### Коллекция Postman

<div class="postman-run-button"
data-postman-action="collection/fork"
data-postman-var-1="23519287-5c1f5a93-3367-4fde-bb8e-c047dcf05710"
data-postman-collection-url="entity Id=23519287-5c1f5a93-3367-4fde-bb8e-c047dcf05710&entity Type=collection&workspace Id=7be78bd7-9f10-4be9-a60e-bd36ff1b6783"
data-postman-param="env%5BPayment%20gateway%20ENV%5D=W3sia2V5IjoiVVJMIiwidm FsdWUi Oi IiLCJlbm FibGVk Ijp0cn VlLCJ0eXBl IjoiZGVmYXVsdCJ9XQ=="></div>
<script type="text/javascript">
 (function (p,o,s,t,m,a,n) {
 !p[s] && (p[s] = function () { (p[t] || (p[t] = [])).push (arguments); });
 !o.get Element By Id (s+t) && o.get Elements By Tag Name("head")[0].append Child((
 (n = o.create Element("script")),
 (n.id = s+t), (n.async = 1), (n.src = m), n
 ));
 }(window, document, "_pm", "Postman Run Object", "https://run.pstmn.io/button.js"));
 var env Name = "Payment gateway ENV";
	 var env Data = {
 URL:'sandbox.payneteasy.ru' + "/" + 'paynet'
 };
 \_pm('env.replace', env Name, env Data);
</script>

#### Конструктор запросов

<meta http-equiv="Cache-Control" content="no-cache">
<script src="../_static/js/generate_card_number.js"></script>
<script src="../_static/js/crypto-js/sha1.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="../_static/js/highlight/styles/default.css">
<script src="../_static/js/highlight/highlight.pack.js"></script>

<script type="text/javascript">
$(document).ready (function(){ 
 $("#preauth Request Tab a").click (function (e){
 	e.prevent Default();
 	$(this).tab('show');
 });
});
</script>

<script type="text/javascript">

 var preauthcurl Request Text = "";
 var preauthphp Request Text = "";
	var preauthruby Request Text = "";
	var preauthjava Request Text = "";

function sign_preauth_request (form) {

 if (form.elements['server_callback_url'].value && form.elements['notify_url'].value) {
		$(".errorinfo").show();
		return false;
	} else {
		$(".errorinfo").hide();
	}

 var signed Text = "";
	var curl Text = "";
	var sandbox = "";
	var params = "";
	var url = "";
	var control = "";
 var amount Info = document.get Element By Id("amount Warning");

	var xhttp = new XMLHttp Request();
 xhttp.onreadystatechange = function() {
 if (xhttp.ready State == 4 && xhttp.status == 200) {
	 if (url == "../_static/examples/PHP/params_no_header_PHP_new.txt"){
 preauthphp Request Text = xhttp.response Text;}
		else if (url == "../_static/examples/Ruby/params_no_header_Ruby (for new version).txt"){
		 preauthruby Request Text = xhttp.response Text;}
		 else{
		 preauthjava Request Text = xhttp.response Text;}
 }
 }

	url = "../_static/examples/PHP/params_no_header_PHP_new.txt";
 xhttp.open("GET", url, false);
 xhttp.send();
	url = "../_static/examples/Ruby/params_no_header_Ruby (for new version).txt";
 xhttp.open("GET", url, false);
 xhttp.send();
 url = "../_static/examples/Java/params_java.txt";
 xhttp.open("GET", url, false);
 xhttp.send();

 for (var e = 0; e < form.elements.length; ++e) {
 var input = form.elements[e];
 if (input.name != null)
 {
 if (input.name.substring(0, 5) == "sha1_")
 if (input.value != null)
 if (input.value != "")
 if (!(input.type == "checkbox" || input.type == "radio") || input.checked)
 {
 if (input.name == "sha1_amount")
 { var amount To Fix = input.value \* 100;
 var fixed Amount = amount To Fix.to Fixed(0);
 if (fixed Amount != amount To Fix)
 { $('#amount Warning').css("display", "block");amount Info.innerHTML = amount Info.innerHTML.replace("​", "Possible floating point imprecision (for more information check Floating Point Math)");}
 else {$('#amount Warning').css("display", "none");amount Info.innerHTML = amount Info.innerHTML.replace("Possible floating point imprecision (for more information check Floating Point Math)", "​");}
 signed Text = signed Text + fixed Amount;}
 else
 {signed Text = signed Text + input.value;}
 }
 if (input.value != null && input.name != null)
 if (input.value != "" && input.name != "" && input.name != "operationname")
 if (input.name.substring(0, 5) == "sha1_")
 {
 if (input.name != "sha1_merchant_control" && input.name != "sha1_endpointid"){
 curl Text = curl Text + input.name.substring(5) + "=" + input.value + "&";
								 params += " '" + input.name.substring(5) + "' => '" + input.value + "', \\n";
								 }
 }
 else{
 curl Text = curl Text + input.name + "=" + input.value + "&";
							 params += " '" + input.name + "' => '" + input.value + "', \\n";
							 }
 }
 }
		sandbox = 'https://sandbox.payneteasy.ru/paynet/api/v2/' + document.preauth_request.operationname.value + '/' +
 document.preauth_request.sha1_endpointid.value;

		preauthphp Request Text = preauthphp Request Text.replace("{$generated parameters with values code}", params);
		preauthphp Request Text = preauthphp Request Text.replace("{$sandbox}", sandbox);
		preauthphp Request Text = preauthphp Request Text.replace(/{\\$identifier Type Name}/g, document.preauth_request.operationname.value.match(/\\/group/) ? 'group Id' : 'endpoint Id');
		preauthphp Request Text = preauthphp Request Text.replace("{$endpoint Or Group Id}", document.preauth_request.sha1_endpointid.value);
		preauthphp Request Text = preauthphp Request Text.replace("{$merchant Control}", document.preauth_request.sha1_merchant_control.value);
		preauthphp Request Text = preauthphp Request Text.replace("{$additional vars}", '');
		preauthphp Request Text = preauthphp Request Text.replace("{$sign Function Call}", 'sign Payment Request($request Fields, $' + (document.preauth_request.operationname.value.match(/\\/group/) ? 'group Id' : 'endpoint Id') + ', $merchant Control)');

		preauthruby Request Text = preauthruby Request Text.replace("{$generated parameters with values code}", params);
		preauthruby Request Text = preauthruby Request Text.replace("{$sandbox}", sandbox);

	 control = " 'control' => '" + CryptoJS.SHA1 (signed Text) + "'";

		preauthphp Request Text = preauthphp Request Text.replace("{$control}", control);
		preauthruby Request Text = preauthruby Request Text.replace("{$control}", control);

		preauthcurl Request Text = 'curl --data "' +
 curl Text +
 "control=" + CryptoJS.SHA1 (signed Text) +
 '" https://sandbox.payneteasy.ru/paynet/api/v2/' + document.preauth_request.operationname.value + '/' +
 document.preauth_request.sha1_endpointid.value;
 preauthjava Request Text = preauthjava Request Text.replace("{$targetURL}", sandbox);
		preauthjava Request Text = preauthjava Request Text.replace("{$has Headers}", "false");
	 preauthjava Request Text = preauthjava Request Text.replace("{$url Parameters}", curl Text);
 preauthjava Request Text = preauthjava Request Text.replace("{$control Parameters}", signed Text);

		show Text("preauthrequestphpvalue" , preauthphp Request Text);

		show Text("preauthrequestrubyvalue" , preauthruby Request Text);
		show Text("preauthrequestjavavalue" , preauthjava Request Text);

 show Text("preauthrequestsignedvalue" , signed Text);
 show Text("preauthrequestsha1value" , CryptoJS.SHA1 (signed Text));
 show Text("preauthrequestcurlvalue" , preauthcurl Request Text);
		$(document).ready (function() {
 $('pre code').each (function (i, block) {
 hljs.highlight Block (block);
 });
 });
 return false;
 }

 function show Text (element Id, text) {
 var child = document.create Text Node (text);
 var element = document.get Element By Id (element Id);
		element.innerHTML ="";
 if (element.has Child Nodes()) {
 element.replace Child (child, element.first Child);
 } else {
 element.append Child (child);
 }
 }

 function rand Inv (c) {
 document.get Element By Id (c).value = "inv" + Math.floor (Math.random()\*10000000);
 }
function copy To Clipboard Request Preauth Request (text) {
 var text Area = document.create Element("textarea");

 // Place in top-left corner of screen regardless of scroll position.
 text Area.style.position = 'fixed';
 text Area.style.top = 0;
 text Area.style.left = 0;

 // Ensure it has a small width and height. Setting to 1px / 1em
 // doesn't work as this gives a negative w/h on some browsers.
 text Area.style.width = '2em';
 text Area.style.height = '2em';

 // We don't need padding, reducing the size if it does flash render.
 text Area.style.padding = 0;

 // Clean up any borders.
 text Area.style.border = 'none';
 text Area.style.outline = 'none';
 text Area.style.box Shadow = 'none';

 // Avoid flash of white box if rendered for any reason.
 text Area.style.background = 'transparent';

 if (text == 'curl'){
	text Area.value = preauthcurl Request Text;
 } else if ( text =='php'){
	text Area.value = preauthphp Request Text;
 } else if ( text == 'ruby') {
 text Area.value = preauthruby Request Text;
 } else{
 text Area.value = preauthjava Request Text;
 }
 document.body.append Child (text Area);

 text Area.select();

 try {
 var successful = document.exec Command('copy');
 var msg = successful ? 'successful' : 'unsuccessful';
 console.log('Copying text command was ' + msg);
 } catch (err) {
 console.log('Oops, unable to copy');
 }

 document.body.remove Child (text Area);

 }
</script>

<form name="preauth_request">

 <select class="doc-select" name="operationname" size="1">
 <option value="preauth">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;preauth (by ENDPOINTID)</option>
 <option value="preauth/group">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;preauth (by ENDPOINTGROUPID)</option>
 </select>
 
 <p></p>
 <input type="button" class="doc-button" style="font-size: 100%; padding: 2px 6px 3px 6px;" value="Sign preauth Request" onclick="sign_preauth_request (document.preauth_request)" />
 <p></p>
</form>

<ul class="nav nav-tabs" id="preauth Request Tab">
 <li class="active">[CURL](#preauth RequestCURL)</li>
 <li>[PHP](#preauth RequestPHP)</li>
 <li>[Ruby](#preauth Request Ruby)</li>
 <li>[Java](#preauth Request Java)</li>
</ul>

 <button class="doc-button" onclick="copy To Clipboard Request Preauth Request('php')">Copy to clipboard</button>
 <pre>
<code class="php" id="preauthrequestphpvalue">

</code>
</pre>

 <button class="doc-button" onclick="copy To Clipboard Request Preauth Request('ruby')">Copy to clipboard</button>
 <pre>
<code class="language-ruby" id="preauthrequestrubyvalue">

</code>
</pre>

 <button class="doc-button" onclick="copy To Clipboard Request Preauth Request('java')">Copy to clipboard</button>
 <pre>
<code class="language-java" id="preauthrequestjavavalue">

</code>
</pre>

### /api/v2/return

#### Введение

Транзакции Return можно инициировать только после получения транзакцией окончательного успешного статуса. См. [Статусы](https://doc.payneteasy.ru/integration/reference/statuses.html.md). Для Preauth создаётся транзакция Cancel, для Capture и Sale — Reversal. Транзакции Return инициируются запросом HTTPS POST с использованием указанных ниже [URL-адресов](#api-v2-return-request-url) и [параметров](#api-v2-return-request-parameters-url). Для аутентификации используйте [SHA-1](https://doc.payneteasy.ru/integration/general_api_usage/request_authentication_methods/sha.html.md).

#### API URL

> **Note:** Путь API URL не должен быть задан фиксированным значением, т.к. он может быть изменён позднее.

| Интеграционная среда | Производственная среда |
|--------------------------------------------------------------------------|-----------------------------------------------------------------------|
| https://sandbox.payneteasy.ru/paynet/api/v2/return/ENDPOINTID | https://gate.payneteasy.ru/paynet/api/v2/return/ENDPOINTID |
| https://sandbox.payneteasy.ru/paynet/api/v2/return/group/ENDPOINTGROUPID | https://gate.payneteasy.ru/paynet/api/v2/return/group/ENDPOINTGROUPID |

#### Параметры запроса

> **Note:** Запрос должен иметь заголовок content-type=application/x-www-form-urlencoded.

> **Warning:** В значениях параметров необходимо экранировать следующие символы: & + “.

| Название параметра | Описание | Значение |
|----------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|
| login | Логин Присоединяющейся Стороны в Платёжном Шлюзе. | `Необходимость`: Обязательно `Тип`: String `Длина`: 20 |
| orderid | Уникальный идентификационный номер транзакции, присвоенный системой Payneteasy. | `Необходимость`: Обязательно `Тип`: String `Длина`: 20 |
| client_orderid | Уникальный идентификационный номер Присоединяющейся Стороны. | `Необходимость`: Обязательно `Тип`: String `Длина`: 128 |
| control | Контрольная сумма, сгенерированная [SHA-1](https://doc.payneteasy.ru/integration/general_api_usage/request_authentication_methods/sha.html.md). Строка для подписи представляет собой объединение следующих параметров: 1. Параметр запроса:login. 2. Параметр запроса:client_orderid. 3. Параметр запроса:orderid. 4. Параметр запроса: amount (в минимальных единицах). 5. Параметр запроса: currency. 6. merchant_control (Контрольный ключ, назначенный для учетной записи Присоединяющейся Cтороны в Payneteasy). | `Необходимость`: Условно `Тип`: String `Длина`: 128 |
| amount | Сумма должна быть указана в минимальных единицах с . разделителем. Например, 100.5 в RUB означает 100 российских рублей и 50 копеек. Если данный параметр пропущен, будет произведен возврат всей суммы. Данный параметр имеет смысл для возвратов, но не отмены. Сумма не может быть больше изначальной суммы транзакции. Важно! Если указана сумма, необходимо также указать валюту! | `Необходимость`: Обязательно `Тип`: Numeric `Длина`: 10 |
| currency | Валюта, в которой проводится операция (см. [Коды валют](https://doc.payneteasy.ru/integration/reference/currency_codes.html.md)). Примеры значений: USD для доллара США, EUR для европейского евро, RUB для российского рубля. | `Необходимость`: Обязательно `Тип`: String `Длина`: 50 |
| comment | Краткое описание. | `Необходимость`: Обязательно `Тип`: String `Длина`: 50 |

#### Параметры ответа

> **Note:** Ответ имеет заголовок Content-Type: text/html;charset=utf-8. Все поля имеют кодировку x-www-form-urlencoded, с символом (0xA) в конце значения каждого параметра.

| Название параметра | Описание |
|----------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| type | Тип ответа. Может принимать такие значения как: async-response, validation-error, error и т.д. Если тип ответа validation-error или error, параметры error-message и error-code будут содержать детали ошибки. |
| paynet-order-id | Идентификатор заказа, присвоенный Payneteasy. |
| merchant-order-id | Идентификатор заказа Присоединяющейся Стороны. |
| serial-number | Уникальный номер, присваиваемый сервером Payneteasy конкретному запросу от Присоединяющейся стороны. |
| end-point-id | Идентификатор терминала, используемый для транзакции. |
| error-message | Для транзакций в статусе error этот параметр будет содержать причину отклонения или сведения об ошибке. |
| error-code | Код ошибки для транзакций в статусе error. |

#### Пример запроса

```http
POST /paynet/api/v2/return/39914 HTTP/1.1
Host: sandbox.payneteasy.ru
User-Agent: curl/7.83.0
Accept: */*
Content-Length: 162
Content-Type: application/x-www-form-urlencoded
Connection: close

login=TestMerchant
&client_orderid=Test
&orderid=6862958
&amount=5.00
&currency=RUB
&comment=Service not provided
&control=2dfdb99c4eff5b31c978ecb8bc4b4d094e24c1d4
```

#### Пример успешного ответа

```http
HTTP/1.1 200 OK
Server: server
Date: Mon, 08 Aug 2022 07:50:08 GMT
Content-Type: text/html;charset=utf-8
Connection: close
Vary: Accept-Encoding
X-XSS-Protection: 1
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000
Content-Language: en-US
Strict-Transport-Security: max-age=31536000
Content-Length: 141

type=async-response
&serial-number=00000000-0000-0000-0000-000002ddad4a
&merchant-order-id=Test
&paynet-order-id=6862958
&end-point-id=39914
```

#### Пример неуспешного ответа

```http
HTTP/1.1 200 OK
Server: server
Date: Mon, 08 Aug 2022 10:45:32 GMT
Content-Type: text/html;charset=utf-8
Connection: close
Vary: Accept-Encoding
X-XSS-Protection: 1
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000
Content-Language: en-US
Strict-Transport-Security: max-age=31536000
Content-Length: 153

type=validation-error
&serial-number=00000000-0000-0000-0000-000002ddad5c
&error-message=Reversal+currency+does+not+match+project+currency
&error-code=16
```

#### Open API Collection

Open this method in the OpenAPI Reference

<a class="openapi-reference-button" href="/openapi-doc/#POST/api/v2/return/{endpoint Id}" target="_blank" rel="noopener">View in OpenAPI <svg xmlns="http://www.w3.org/2000/svg" view Box="0 0 24 24" fill="none" stroke="current Color" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg></a>

#### Коллекция Postman

<div class="postman-run-button"
data-postman-action="collection/fork"
data-postman-var-1="23519287-eb336009-8c3d-4db4-ad53-dece552334d2"
data-postman-collection-url="entity Id=23519287-eb336009-8c3d-4db4-ad53-dece552334d2&entity Type=collection&workspace Id=7be78bd7-9f10-4be9-a60e-bd36ff1b6783"
data-postman-param="env%5BPayment%20gateway%20ENV%5D=W3sia2V5IjoiVVJMIiwidm FsdWUi Oi IiLCJlbm FibGVk Ijp0cn VlLCJ0eXBl IjoiZGVmYXVsdCJ9XQ=="></div>
<script type="text/javascript">
 (function (p,o,s,t,m,a,n) {
 !p[s] && (p[s] = function () { (p[t] || (p[t] = [])).push (arguments); });
 !o.get Element By Id (s+t) && o.get Elements By Tag Name("head")[0].append Child((
 (n = o.create Element("script")),
 (n.id = s+t), (n.async = 1), (n.src = m), n
 ));
 }(window, document, "_pm", "Postman Run Object", "https://run.pstmn.io/button.js"));
 var env Name = "Payment gateway ENV";
	 var env Data = {
 URL:'sandbox.payneteasy.ru' + "/" + 'paynet'
 };
 \_pm('env.replace', env Name, env Data);
</script>

#### Конструктор запросов

<meta http-equiv="Cache-Control" content="no-cache">
<script src="../_static/js/crypto-js/sha1.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="../_static/js/highlight/styles/default.css">
<script src="../_static/js/highlight/highlight.pack.js"></script>

<script type="text/javascript">
$(document).ready (function(){ 
 $("#return Request Tab a").click (function (e){
 	e.prevent Default();
 	$(this).tab('show');
 });
});
</script>
<script type="text/javascript">
		var curl Request Text = "";
 
		var php Request Text = "";
		
		var ruby Request Text = "";

		var java Request Text = "";
 function sign_return_request (form) {
 var signed Text = "";
		
		var curl Text = "";
		
		var sandbox = "";
		var params = "";
	 var url = "";
		var control = "";

		var amount Info = document.get Element By Id("amount Warning");

		var xhttp = new XMLHttp Request();
		xhttp.onreadystatechange = function() {
		if (xhttp.ready State == 4 && xhttp.status == 200) {
			if (url == "../_static/examples/PHP/params_no_header_PHP_new.txt"){
				php Request Text = xhttp.response Text;}
			else if (url == "../_static/examples/Ruby/params_no_header_Ruby (for new version).txt") {
				ruby Request Text = xhttp.response Text;}
			else{
			 java Request Text = xhttp.response Text;}
			}
		}
	
		url = "../_static/examples/PHP/params_no_header_PHP_new.txt";
		xhttp.open("GET", url, false);
		xhttp.send();
		url = "../_static/examples/Ruby/params_no_header_Ruby (for new version).txt";
		xhttp.open("GET", url, false);
		xhttp.send();
		url = "../_static/examples/Java/params_java.txt";
		xhttp.open("GET", url, false);
		xhttp.send();
	
 for (var e = 0; e < form.elements.length; ++e) {
 var input = form.elements[e];
 if (input.name != null) 
 {
 if (input.name.substring(0, 5) == "sha1_") 
 if (input.value != null) 
 if (input.value != "") 
 if ( (!(input.type == "checkbox" || input.type == "radio") || input.checked)
 && !( document.return_request.operationname.value.substring(0, 4) == "void" 
 && (input.name == "sha1_amount" || input.name == "sha1_currency" )) )
 {
 if (input.name == "sha1_amount")
 { var amount To Fix = input.value \* 100;
 var fixed Amount = amount To Fix.to Fixed(0);
 if (fixed Amount != amount To Fix)
 { $('#amount Warning').css("display", "block");amount Info.innerHTML = amount Info.innerHTML.replace("​", "Possible floating point imprecision (for more information check Floating Point Math)");}
 else {$('#amount Warning').css("display", "none");amount Info.innerHTML = amount Info.innerHTML.replace("Possible floating point imprecision (for more information check Floating Point Math)", "​");}
 signed Text = signed Text + fixed Amount;}
 else
 {signed Text = signed Text + input.value;}
 }
 if (input.value != null && input.name != null) 
 if (input.value != "" && input.name != "" && input.name != "operationname") 
 if (input.name.substring(0, 5) == "sha1_")
 {
 if (input.name != "sha1_merchant_control" 
 && !( document.return_request.operationname.value.substring(0, 4) == "void" 
 && (input.name == "sha1_amount" || input.name == "sha1_currency" )) ){
 curl Text = curl Text + input.name.substring(5) + "=" + input.value + "&";
								 params += " '" + input.name.substring(5) + "' => '" + input.value + "', \\n";								 
								 }
 }
 else 
 {
 if (input.name != "endpointid"){
 curl Text = curl Text + input.name + "=" + input.value + "&";
								 params += " '" + input.name + "' => '" + input.value + "', \\n";	
								 }
 }
 }
 }
		sandbox = 'https://sandbox.payneteasy.ru/paynet/api/v2/' + document.return_request.operationname.value + '/' +
 document.return_request.endpointid.value;

		php Request Text = php Request Text.replace("{$generated parameters with values code}", params);
		php Request Text = php Request Text.replace("{$sandbox}", sandbox);
		php Request Text = php Request Text.replace(/{\\$identifier Type Name}/g, document.return_request.operationname.value.match(/\\/group/) ? 'group Id' : 'endpoint Id');
		php Request Text = php Request Text.replace("{$endpoint Or Group Id}", document.return_request.endpointid.value);
		php Request Text = php Request Text.replace("{$merchant Control}", document.return_request.sha1_merchant_control.value);
		php Request Text = php Request Text.replace("{$additional vars}", '');
		php Request Text = php Request Text.replace("{$sign Function Call}", 'sign Payment Request($request Fields, $' + (document.return_request.operationname.value.match(/\\/group/) ? 'group Id' : 'endpoint Id') + ', $merchant Control)');

		ruby Request Text = ruby Request Text.replace("{$generated parameters with values code}", params);
		ruby Request Text = ruby Request Text.replace("{$sandbox}", sandbox);

 java Request Text = java Request Text.replace("{$has Headers}", "false");
 java Request Text = java Request Text.replace("{$targetURL}", sandbox);	 control = " 'control' => '" + CryptoJS.SHA1 (signed Text) + "'";
 java Request Text = java Request Text.replace("{$url Parameters}", curl Text);
 java Request Text = java Request Text.replace("{$control Parameters}", signed Text);

		php Request Text = php Request Text.replace("{$control}", control);
		ruby Request Text = ruby Request Text.replace("{$control}", control);
		
		curl Request Text = 'curl --data "' +
 curl Text +
 "control=" + CryptoJS.SHA1 (signed Text) +
 '" https://sandbox.payneteasy.ru/paynet/api/v2/' + document.return_request.operationname.value + '/' +
 document.return_request.endpointid.value;

		show Text("returnreqphpvalue" , php Request Text);
		
		show Text("returnreqrubyvalue" , ruby Request Text);
		show Text("returnreqjavavalue" , java Request Text);

 show Text("returnreqsignedvalue" , signed Text);
 show Text("returnreqsha1value" , CryptoJS.SHA1 (signed Text));
 show Text("returnreqcurlvalue" , curl Request Text);
		 $(document).ready (function() {
 $('pre code').each (function (i, block) {
 hljs.highlight Block (block);
 });
 }); 
 return false;
 }

 function show Text (element Id, text) {
 var child = document.create Text Node (text);
 var element = document.get Element By Id (element Id);
		element.innerHTML ="";
 if (element.has Child Nodes()) {
 element.replace Child (child, element.first Child);
 } else {
 element.append Child (child);
 }
 }

function copy To Clipboard Request Return Request (text) {
 var text Area = document.create Element("textarea");

 // Place in top-left corner of screen regardless of scroll position.
 text Area.style.position = 'fixed';
 text Area.style.top = 0;
 text Area.style.left = 0;

 // Ensure it has a small width and height. Setting to 1px / 1em
 // doesn't work as this gives a negative w/h on some browsers.
 text Area.style.width = '2em';
 text Area.style.height = '2em';

 // We don't need padding, reducing the size if it does flash render.
 text Area.style.padding = 0;

 // Clean up any borders.
 text Area.style.border = 'none';
 text Area.style.outline = 'none';
 text Area.style.box Shadow = 'none';

 // Avoid flash of white box if rendered for any reason.
 text Area.style.background = 'transparent';

 if (text == 'curl'){
	text Area.value = curl Request Text;
 } else if (text =='php'){
	text Area.value = php Request Text;
 } else if (text == 'ruby'){
 	text Area.value = ruby Request Text;
 } else if (text == 'java'){
 text Area.value = java Request Text;
 }
 document.body.append Child (text Area);

 text Area.select();

 try {
 var successful = document.exec Command('copy');
 var msg = successful ? 'successful' : 'unsuccessful';
 console.log('Copying text command was ' + msg);
 } catch (err) {
 console.log('Oops, unable to copy');
 }

 document.body.remove Child (text Area);

 }
</script>

<form name="return_request">

 <select class="doc-select" name="operationname" size="1">
 <option value="return">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return (by ENDPOINTID)</option>
 <option value="return/group">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return (by ENDPOINTGROUPID)</option>
 </select>
 
 <p></p>
 <input type="button" class="doc-button" style="font-size: 100%; padding: 2px 6px 3px 6px;" value="Sign return Request" onclick="sign_return_request (document.return_request)" />
 <p></p>
</form>

 <ul class="nav nav-tabs" id="return Request Tab">
 <li class="active">[CURL](#return RequestCURL)</li>
 <li>[PHP](#return RequestPHP)</li>
 <li>[Ruby](#return Request Ruby)</li>
 <li>[Java](#return Request Java)</li>
 </ul>

	 <button class="doc-button" onclick="copy To Clipboard Request Return Request('php')">Copy to clipboard</button>	
		<pre>
			<code class="php" id="returnreqphpvalue"> </code>
		</pre>

		<button class="doc-button" onclick="copy To Clipboard Request Return Request('ruby')">Copy to clipboard</button>	
		<pre>
			<code class="language-ruby" id="returnreqrubyvalue"></code>
		</pre>

		<button class="doc-button" onclick="copy To Clipboard Request Return Request('java')">Copy to clipboard</button>
		<pre>
			<code class="language-java" id="returnreqjavavalue"></code>
		</pre>

### /api/v2/sale-form

#### Введение

Оплата по форме инициируется через запрос методом HTTPS POST на указанный ниже [URL](#api-v2-sale-form-url) с использованием указанных [параметров](#api-v2-sale-form-request-parameters). Для аутентификации запроса используется [SHA-1](https://doc.payneteasy.ru/integration/general_api_usage/request_authentication_methods/sha.html.md). См. [Статусы транзакций](https://doc.payneteasy.ru/integration/reference/statuses.html.md).

#### API URL

> **Note:** Путь API URL не должен быть задан фиксированным значением, т.к. он может быть изменён позднее.

| Интеграционная среда | Производственная среда |
|-----------------------------------------------------------------------------|--------------------------------------------------------------------------|
| https://sandbox.payneteasy.ru/paynet/api/v2/sale-form/ENDPOINTID | https://gate.payneteasy.ru/paynet/api/v2/sale-form/ENDPOINTID |
| https://sandbox.payneteasy.ru/paynet/api/v2/sale-form/group/ENDPOINTGROUPID | https://gate.payneteasy.ru/paynet/api/v2/sale-form/group/ENDPOINTGROUPID |

#### Параметры запроса

> **Note:** Запрос должен иметь заголовок content-type=application/x-www-form-urlencoded.

Банк может переопределить необходимость некоторых полей, сделав их обязательными.
 
Пробелы в начале и в конце значений параметров будут отсечены.
 

> **Warning:** В значениях параметров необходимо экранировать следующие символы: & + “.

| Название параметра | Описание | Значение |
|------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------|
| client_orderid | Уникальный идентификатор заказа, присвоенный Присоединяющейся Стороной. | `Необходимость`: Обязательно `Тип`: String `Длина`: 128 |
| order_desc | Описание заказа. | `Необходимость`: Обязательно `Тип`: String `Длина`: 64k |
| first_name | Имя Плательщика. Необходимость параметра зависит от канала эквайринга и необходимость параметра, необходимо уточнять у техподдержки. | `Необходимость`: Обязательно `Тип`: String `Длина`: 50 |
| last_name | Фамилия Плательщика. Необходимость параметра зависит от канала эквайринга и необходимость параметра, необходимо уточнять у техподдержки. | `Необходимость`: Обязательно `Тип`: String `Длина`: 50 |
| ssn | Последние четыре цифры номера социального страхования Плательщика. | `Необходимость`: Опционально `Тип`: Numeric `Длина`: 32 |
| birthday | Дата рождения Плательщика в формате YYYYMMDD. | `Необходимость`: Опционально `Тип`: Numeric `Длина`: 8 |
| address1 | Адрес Плательщика, строка 1. (Обратите внимание, что в некоторых случаях невозможно отправить адрес длиной более 50 символов. Для получения более подробной информации обратитесь к вашему менеджеру.) | `Необходимость`: Обязательно `Тип`: String `Длина`: 256 |
| city | Город Плательщика. | `Необходимость`: Обязательно `Тип`: String `Длина`: 50 |
| state | Штат Плательщика. Для списка действительных кодов штатов см. [Обязательные коды штатов](https://doc.payneteasy.ru/integration/reference/country_codes.html.md). Требуется для США, Канады и Австралии. | `Необходимость`: Условно `Тип`: String `Длина`: 2-3 |
| zip_code | Почтовый индекс Плательщика. | `Необходимость`: Обязательно `Тип`: String `Длина`: 10 |
| country | Страна Плательщика. Для списка действительных кодов см. [Коды стран](https://doc.payneteasy.ru/integration/reference/country_codes.html.md). | `Необходимость`: Обязательно `Тип`: String `Длина`: 2 |
| phone | Полный международный номер телефона Плательщика, включая код страны. | `Необходимость`: Обязательно `Тип`: String `Длина`: 15 |
| cell_phone | Полный международный мобильный номер телефона Плательщика, включая код страны. | `Необходимость`: Опционально `Тип`: String `Длина`: 15 |
| email | Адрес электронной почты Плательщика. | `Необходимость`: Обязательно `Тип`: String `Длина`: 50 |
| purpose | Назначение платежа. Параметр может использоваться для указания пополняемого счёта (счета мобильных телефонов, игровые учётные записи и т. д.). Примеры значений:+9999999999; mail@example.com и т. д. Это значение может проверяться системой защиты от мошенничества. | `Необходимость`: Опционально `Тип`: String `Длина`: 128 |
| amount | Сумма к оплате. Сумма должна быть указана в наибольших единицах с разделителем .. Например, 10.5 для USD означает 10 долларов США и 50 центов. | `Необходимость`: Обязательно `Тип`: Numeric `Длина`: 10 |
| currency | Валюта, в которой проводится операция (см. [Коды валют](https://doc.payneteasy.ru/integration/reference/currency_codes.html.md)). Примеры значений: USD для доллара США, EUR для европейского евро, RUB для российского рубля. | `Необходимость`: Обязательно `Тип`: String `Длина`: 3 |
| ipaddress | IP-адрес Плательщика, передаётся для целей мониторинга мошенничества. | `Необходимость`: Обязательно `Тип`: String `Длина`: 20 |
| site_url | URL-адрес сайта электронной коммерции, откуда происходит платеж. | `Необходимость`: Опционально `Тип`: String `Длина`: 128 |
| control | Контрольная сумма, сгенерированная [SHA-1](https://doc.payneteasy.ru/integration/general_api_usage/request_authentication_methods/sha.html.md). Строка для подписи представляет собой объединение следующих параметров: 1. <ENDPOINTID | ENDPOINTGROUPID (См.: [URL запроса](#api-v2-sale-form-url)) 2. Параметр запроса: client_orderid 3. Параметр запроса: amount в минимальных денежных единицах, 4. Параметр запроса: email 5. merchant_control (Контрольный ключ, назначенный для учетной записи Присоединяющейся стороны в Payneteasy). | `Необходимость`: Обязательно `Тип`: String `Длина`: 40 |
| redirect_url | URL, where the Payer is redirected to upon completion of the transaction. Please note that redirection is performed in any case, no matter whether transaction is approved, declined in any other final [status](https://doc.payneteasy.ru/integration/reference/statuses.html.md). Connecting Party must not use the parameters come along with the redirect HTTP Request to treat the status of the transaction. Instead Connecting Party can utilize server_callback_url or [status API command](https://doc.payneteasy.ru/integration/api_v2_status.html.md). Pass http://https://doc.payneteasy.ru if you have no need to return payer anywhere. Use either redirect_url or combination of redirect_success_url and redirect_fail_url, not both. | `Необходимость`: Опционально `Тип`: String `Длина`: 1024 |
| redirect_success_url | URL-адрес, на который будет перенаправлен Плательщик после получения успешного статуса транзакции (см. [Статусы транзакций](https://doc.payneteasy.ru/integration/reference/statuses.html.md)). Connecting Party must not use the parameters come along with the redirect HTTP Request to treat the status of the transaction. Instead Connecting Party can utilize server_callback_url or [status API command](https://doc.payneteasy.ru/integration/api_v2_status.html.md). Otherwise put http://https://doc.payneteasy.ru if there is no need to redirect Payer anywhere. Use either combination of redirect_success_url and redirect_fail_url or redirect_url, not both. | `Необходимость`: Опционально `Тип`: String `Длина`: 1024 |
| redirect_fail_url | URL-адрес, на который будет перенаправлен Плательщик после получения неуспешного статуса транзакции (см. [Статусы транзакций](https://doc.payneteasy.ru/integration/reference/statuses.html.md)). Connecting Party must not use the parameters come along with the redirect HTTP Request to treat the status of the transaction. Instead Connecting Party can utilize server_callback_url or [status API command](https://doc.payneteasy.ru/integration/api_v2_status.html.md). Pass http://https://doc.payneteasy.ru if there is no need to redirect Payer anywhere. Use either combination of redirect_fail_url and redirect_success_url or redirect_url, not both. | `Необходимость`: Опционально `Тип`: String `Длина`: 1024 |
| server_callback_url | URL-адрес server_callback_url, по которому будет отправлен обратный вызов с результатом транзакции. Присоединяющаяся сторона может использовать обратные вызовы для индивидуальной обработки завершения транзакции (например, для сбора данных о платежах в информационной системе Присоединяющейся стороны). Список параметров, включенных в обратный вызов, см. в разделе [Обратного вызова Присоединяющейся стороны](https://doc.payneteasy.ru/integration/merchant_callback_parameters.html.md). Данный параметр может быть передан вместо notify_url. При использовании server_callback_url платежный шлюз отправляет callback-уведомление только при получении финального статуса исходной транзакции. При использовании notify_url платежный шлюз отправляет уведомление при получении финального статуса и продолжает отправлять уведомления о всех последующих изменениях (возвраты, chargeback и др.). | `Необходимость`: Опционально `Тип`: String `Длина`: 1024 |
| notify_url | URL-адрес notify_url, по которому будет отправлен обратный вызов с результатом транзакции. Присоединяющаяся сторона может использовать обратные вызовы для индивидуальной обработки завершения транзакции (например, для сбора данных о платежах в информационной системе Присоединяющейся стороны). Список параметров, включенных в обратный вызов, см. в разделе [Обратного вызова Присоединяющейся стороны](https://doc.payneteasy.ru/integration/merchant_callback_parameters.html.md). Данный параметр может быть передан вместо server_callback_url. При использовании notify_url платежный шлюз отправляет уведомление при получении финального статуса и продолжает отправлять уведомления о всех последующих изменениях (возвраты, chargeback и др.). При использовании server_callback_url платежный шлюз отправляет callback-уведомление только при получении финального статуса исходной транзакции. | `Необходимость`: Опционально `Тип`: String `Длина`: 1024 |
| preferred_language | Двухбуквенный код языка Плательщика для многоязычных платежных форм. | `Необходимость`: Опционально `Тип`: String `Длина`: 2 |
| merchant_data | Дополнительные сведения о транзакции для Присоединяющейся Стороны, которые можно прикрепить к транзакции и получить обратно в ответе на [запрос статуса](https://doc.payneteasy.ru/integration/api_v2_status.html.md), [обратном вызове Присоединяющейся Стороны](https://doc.payneteasy.ru/integration/merchant_callback_parameters.html.md) или server_callback_url. Может содержать данные, которые будут полезны во внешней системе Присоединяющейся Стороны, например VIP клиент, телевизионная промо-кампания. Информация возвращается в ответе на запрос статуса и в обратном вызове Присоединяющейся Стороны. | `Необходимость`: Опционально `Тип`: String `Длина`: 64k |
| merchant_form_data | Parameters sent in MERCHANT_FORM_DATA API parameter are parsed into macros with the same name, the parameter is url-encoded, example: testparam%3Dtest1%26mynewparam%3Dtest2 and is parsed into $MFD_testparam = test1 and $MFD_mynewparam = test2 macros in the form. Название параметра characters[a-zA-Z0-9], parameter value characters[a-zA-Z0-9], only characters = and & are allowed as control characters, 2MB max size. For example, this parameter can be used to display payment form in light/dark mode depending on the value passed by Connecting Party (e.g. pass merchant_form_data=theme%3Ddark in request and $MFD_theme macro placeholder on payment form will be changed to dark. | `Необходимость`: Опционально `Тип`: String `Длина`: 128 |
| minimum_transaction_amount | Этот параметр можно использовать для ограничения минимальной суммы транзакции, если сумма транзакции доступна для указания Плательщиком в форме. Свяжитесь с менеджером службы поддержки, чтобы включить эту функцию. Формат значения такой же, как и в параметре amount. | `Необходимость`: Опционально `Тип`: Numeric `Длина`: 10 |
| maximum_transaction_amount | Этот параметр можно использовать для ограничения максимальной суммы транзакции, если сумма транзакции доступна для указания Плательщиком в форме. Свяжитесь с менеджером службы поддержки, чтобы включить эту функцию. Формат значения такой же, как и в параметре amount. | `Необходимость`: Опционально `Тип`: Numeric `Длина`: 10 |
| customer_level | Уровень клиента в системе CMS. | `Необходимость`: Опционально `Тип`: Varchar `Длина`: 32 |
| customer_id | Идентификатор клиента в системе CMS. Параметр становится обязательным, если включена система CMS в режиме определения клиента Платёжным шлюзом. | `Необходимость`: Опционально `Тип`: Int `Длина`: 10 |
| merchant_customer_identifier | Идентификатор клиента-продавца в системе CMS. Параметр становится обязательным, если включена система CMS в режиме CRM. | `Необходимость`: Опционально `Тип`: Varchar `Длина`: 64 |
| card_recurring_payment_id | Токенизированная платёжная информация держателя карты, также упоминающаяся как Идентификатор Повторного Платежа или Recurring Payment ID (RPI). Может быть создан с помощью запроса [токенизации v4](https://doc.payneteasy.ru/integration/api_v4_create-card-ref.html.md). | `Необходимость`: Условно `Тип`: Long |
| cardrefid | Ссылочный Идентификатор Платежа для последующих списаний. Может быть создан с помощью запроса [токенизации v4](https://doc.payneteasy.ru/integration/api_v4_create-card-ref.html.md) или запроса [токенизации v2](https://doc.payneteasy.ru/integration/api_v2_create-card-ref.html.md). | `Необходимость`: Условно `Тип`: Long |

#### Параметры ответа

> **Note:** Ответ имеет заголовок Content-Type: text/html;charset=utf-8. Все поля имеют кодировку x-www-form-urlencoded, с символом (0xA) в конце значения каждого параметра.

| Название параметра | Описание |
|----------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| type | Тип ответа. Может принимать такие значения как async-form-response, validation-error, error. Если тип равен validation-error или error, параметры error-message и error-code будут содержать сведения об ошибке. |
| paynet-order-id | Идентификатор заказа, присвоенный Payneteasy. |
| merchant-order-id | Идентификатор заказа Присоединяющейся Стороны. |
| serial-number | Уникальный номер, присваиваемый сервером Payneteasy конкретному запросу от Присоединяющейся стороны. |
| error-message | Для транзакций в статусе declined или error, этот параметр будет содержать причину отклонения или сведения об ошибке. |
| error-code | Код ошибки для транзакций в статусе declined или error. |
| redirect-url | URL-адрес страницы, на которую Присоединяющаяся сторона должна перенаправить браузер клиента методом HTTP 302. Подробнее см. [General Payment-form Process Flow](https://doc.payneteasy.ru/integration/api_use_cases/sale_form.html.md). |

#### Пример запроса

```http
POST /paynet/api/v2/sale-form/39519 HTTP/1.1
User-Agent: curl/7.83.0
Accept: */*
Content-Length: 314
Content-Type: application/x-www-form-urlencoded
Connection: close

client_orderid=inv1409911
&order_desc=Test Order Описание
&first_name=John
&last_name=Smith
&ssn=1267
&birthday=19820115
&address1=100 Main st
&city=Seattle
&state=WA
&zip_code=98102
&country=US
&phone=+12063582043
&cell_phone=+19023384543
&amount=156
&email=john.smith@gmail.com
&currency=USD
&ipaddress=65.153.12.232
&site_url=https://doc.payneteasy.ru
&purpose=user_account1
&redirect_url=http://connectingparty.com/result
&server_callback_url=https://httpstat.us/200
&merchant_data=VIP customer
&merchant_form_data=testparam%3Dtest1%26mynewparam%3Dtest2
&control=185aea68b751221b78fa9138e9d44a6aa4c2c446
```

#### Пример успешного ответа

```http
HTTP/1.1 200 OK
Server: server
Date: Tue, 11 Oct 2022 14:25:25 GMT
Content-Type: text/html;charset=utf-8
Connection: close
Vary: Accept-Encoding
X-XSS-Protection: 1
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000
Content-Language: en-US
Strict-Transport-Security: max-age=31536000
Content-Length: 280

type=async-form-response
&serial-number=00000000-0000-0000-0000-000002ddb0b9
&merchant-order-id=Test
&paynet-order-id=6863099
&redirect-url=https%3A%2F%2Fsandbox.payneteasy.ru%2Fpaynet%2Fform%2Finit%2FBB587546567A31587163597A68633370432F786752582F6154674965594A696F4D41306C50596E334F5453553D
```

#### Пример неуспешного ответа

```http
HTTP/1.1 200 OK
Server: server
Date: Tue, 11 Oct 2022 14:16:06 GMT
Content-Type: text/html;charset=utf-8
Connection: close
Vary: Accept-Encoding
X-XSS-Protection: 1
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000
Content-Language: en-US
Strict-Transport-Security: max-age=31536000
Content-Length: 170

type=validation-error
&serial-number=00000000-0000-0000-0000-000002ddb0b7
&error-message=Project+with+currency+RUB+does+not+apply+request+with+currency+USD
&error-code=16
```

#### Open API Collection

Open this method in the OpenAPI Reference

<a class="openapi-reference-button" href="/openapi-doc/#POST/api/v2/sale-form/{endpoint Id}" target="_blank" rel="noopener">View in OpenAPI <svg xmlns="http://www.w3.org/2000/svg" view Box="0 0 24 24" fill="none" stroke="current Color" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg></a>

#### Коллекция Postman

<div class="postman-run-button"
data-postman-action="collection/fork"
data-postman-var-1="23519287-51bb5994-7c04-4416-ad03-f3e3d0e979f8"
data-postman-collection-url="entity Id=23519287-51bb5994-7c04-4416-ad03-f3e3d0e979f8&entity Type=collection&workspace Id=7be78bd7-9f10-4be9-a60e-bd36ff1b6783"
data-postman-param="env%5BPayment%20gateway%20ENV%5D=W3sia2V5IjoiVVJMIiwidm FsdWUi Oi IiLCJlbm FibGVk Ijp0cn VlLCJ0eXBl IjoiZGVmYXVsdCJ9XQ=="></div>
<script type="text/javascript">
 (function (p,o,s,t,m,a,n) {
 !p[s] && (p[s] = function () { (p[t] || (p[t] = [])).push (arguments); });
 !o.get Element By Id (s+t) && o.get Elements By Tag Name("head")[0].append Child((
 (n = o.create Element("script")),
 (n.id = s+t), (n.async = 1), (n.src = m), n
 ));
 }(window, document, "_pm", "Postman Run Object", "https://run.pstmn.io/button.js"));
 var env Name = "Payment gateway ENV";
	 var env Data = {
 URL:'sandbox.payneteasy.ru' + "/" + 'paynet'
 };
 \_pm('env.replace', env Name, env Data);
</script>

#### Конструктор запросов

<meta http-equiv="Cache-Control" content="no-cache">
<script src="../_static/js/crypto-js/sha1.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="../_static/js/highlight/styles/default.css">
<script src="../_static/js/highlight/highlight.pack.js"></script>

<script type="text/javascript">
$(document).ready (function(){ 
 $("#payment Form Request Tab a").click (function (e){
 	e.prevent Default();
 	$(this).tab('show');
 });
});
</script>

<script type="text/javascript">

 var paymentform_curl Request Text = "";
 var paymentform_php Request Text = "";
 var paymentform_ruby Request Text = "";
 var paymentform_java Request Text = "";

 function paymentform_sign (form) {

 if (form.elements['server_callback_url'].value && form.elements['notify_url'].value) {
		$(".errorinfo").show();
		return false;
	} else {
		$(".errorinfo").hide();
	}

 var signed Text = "";
	var curl Text = "";
	var sandbox = "";
	var params = "";
	var url = "";
	var control = "";
 var amount Info One = document.get Element By Id("amount Warning One");

	var xhttp = new XMLHttp Request();
 xhttp.onreadystatechange = function() {
 if (xhttp.ready State == 4 && xhttp.status == 200) {
	 if (url == "../_static/examples/PHP/params_no_header_PHP_new.txt"){
 paymentform_php Request Text = xhttp.response Text;}
		else if (url == "../_static/examples/Ruby/params_no_header_Ruby (for new version).txt"){
		 paymentform_ruby Request Text = xhttp.response Text;}
		else{
		 paymentform_java Request Text = xhttp.response Text;}

 }
 }

	url = "../_static/examples/PHP/params_no_header_PHP_new.txt";
 xhttp.open("GET", url, false);
 xhttp.send();
	url = "../_static/examples/Ruby/params_no_header_Ruby (for new version).txt";
 xhttp.open("GET", url, false);
 xhttp.send();
 url = "../_static/examples/Java/params_java.txt";
 xhttp.open("GET", url, false);
 xhttp.send();

 for (var e = 0; e < form.elements.length; ++e) {
 var input = form.elements[e];
 if (input.name != null)
 {
 if (input.name.substring(0, 5) == "sha1_")
 if (input.value != null)
 if (input.value != "")
 if (!(input.type == "checkbox" || input.type == "radio") || input.checked)
 {
 if (input.name == "sha1_amount")
 { var amount To Fix One = input.value \* 100;
 var fixed Amount One = amount To Fix One.to Fixed(0);
 if (fixed Amount One != amount To Fix One)
 { $('#amount Warning One').css("display", "block");amount Info One.innerHTML = amount Info One.innerHTML.replace("​", "Possible floating point imprecision (for more information check Floating Point Math)");}
 else {$('#amount Warning One').css("display", "none");amount Info One.innerHTML = amount Info One.innerHTML.replace("Possible floating point imprecision (for more information check Floating Point Math)", "​");}
 signed Text = signed Text + fixed Amount One;}
 else
 {signed Text = signed Text + input.value;}
 }
 if (input.value != null && input.name != null)
 if (input.value != "" && input.name != "" && input.name != "operationname")
 if (input.name.substring(0, 5) == "sha1_")
 {
 if (input.name != "sha1_merchant_control" && input.name != "sha1_endpointid"){
 curl Text = curl Text + input.name.substring(5) + "=" + input.value + "&";

								 params += " '" + input.name.substring(5) + "' => '" + input.value + "', \\n";

								 }
 }
 else {
 curl Text = curl Text + input.name + "=" + input.value + "&";

							 params += " '" + input.name + "' => '" + input.value + "', \\n";
							 }
 }
 }

		sandbox = 'https://sandbox.payneteasy.ru/paynet/api/v2/' + document.payment Formsale.operationname.value + '/' +
 document.payment Formsale.sha1_endpointid.value;

		paymentform_php Request Text = paymentform_php Request Text.replace("{$generated parameters with values code}", params);
		paymentform_php Request Text = paymentform_php Request Text.replace("{$sandbox}", sandbox);

		paymentform_ruby Request Text = paymentform_ruby Request Text.replace("{$generated parameters with values code}", params);
		paymentform_ruby Request Text = paymentform_ruby Request Text.replace("{$sandbox}", sandbox);

	 control = " 'control' => '" + CryptoJS.SHA1 (signed Text) + "'";
		paymentform_php Request Text = paymentform_php Request Text.replace(/{\\$identifier Type Name}/g, document.payment Formsale.operationname.value.match(/\\/group/) ? 'group Id' : 'endpoint Id');
		paymentform_php Request Text = paymentform_php Request Text.replace("{$endpoint Or Group Id}", document.payment Formsale.sha1_endpointid.value);
		paymentform_php Request Text = paymentform_php Request Text.replace("{$merchant Control}", document.payment Formsale.sha1_merchant_control.value);
		paymentform_php Request Text = paymentform_php Request Text.replace("{$additional vars}", '');
		paymentform_php Request Text = paymentform_php Request Text.replace("{$sign Function Call}", 'sign Payment Request($request Fields, $' + (document.payment Formsale.operationname.value.match(/\\/group/) ? 'group Id' : 'endpoint Id') + ', $merchant Control)');

		paymentform_php Request Text = paymentform_php Request Text.replace("{$control}", control);
		paymentform_ruby Request Text = paymentform_ruby Request Text.replace("{$control}", control);

		paymentform_curl Request Text = 'curl --data "' +
 curl Text +
 "control=" + CryptoJS.SHA1 (signed Text) +
 '" https://sandbox.payneteasy.ru/paynet/api/v2/' + document.payment Formsale.operationname.value + '/' +
 document.payment Formsale.sha1_endpointid.value;
	 paymentform_java Request Text = paymentform_java Request Text.replace("{$has Headers}", "false");
 paymentform_java Request Text = paymentform_java Request Text.replace("{$targetURL}", sandbox);
		paymentform_java Request Text = paymentform_java Request Text.replace("{$url Parameters}", curl Text);
		paymentform_java Request Text = paymentform_java Request Text.replace("{$control Parameters}", signed Text);

		show Text("payment Formphpvalue" , paymentform_php Request Text);

		show Text("payment Formrubyvalue" , paymentform_ruby Request Text);
		show Text("payment Formjavavalue" , paymentform_java Request Text);

 show Text("payment Formsignedvalue" , signed Text);
 show Text("payment Formsha1value" , CryptoJS.SHA1 (signed Text));
 show Text("payment Formcurlvalue" , paymentform_curl Request Text);
		 $(document).ready (function() {
 $('pre code').each (function (i, block) {
 hljs.highlight Block (block);
 });
 });
 return false;
 }

function show Text (element Id, text) {
 var child = document.create Text Node (text);
 var element = document.get Element By Id (element Id);
		element.innerHTML ="";
 if (element.has Child Nodes()) {
 element.replace Child (child, element.first Child);
 } else {
 element.append Child (child);
 }
 }

 function rand Inv1 (c) {
 document.get Element By Id (c).value = "inv" + Math.floor (Math.random()\*10000000);
 }
function copy To Clipboard Request_paymentform (text) {
 var text Area = document.create Element("textarea");

 // Place in top-left corner of screen regardless of scroll position.
 text Area.style.position = 'fixed';
 text Area.style.top = 0;
 text Area.style.left = 0;

 // Ensure it has a small width and height. Setting to 1px / 1em
 // doesn't work as this gives a negative w/h on some browsers.
 text Area.style.width = '2em';
 text Area.style.height = '2em';

 // We don't need padding, reducing the size if it does flash render.
 text Area.style.padding = 0;

 // Clean up any borders.
 text Area.style.border = 'none';
 text Area.style.outline = 'none';
 text Area.style.box Shadow = 'none';

 // Avoid flash of white box if rendered for any reason.
 text Area.style.background = 'transparent';

 if (text == 'curl'){
	text Area.value = paymentform_curl Request Text;
 } else if (text =='php'){
	text Area.value = paymentform_php Request Text;
 } else if (text =='ruby'){
 text Area.value = paymentform_ruby Request Text;
 } else{
 text Area.value = paymentform_java Request Text;}
 document.body.append Child (text Area);

 text Area.select();

 try {
 var successful = document.exec Command('copy');
 var msg = successful ? 'successful' : 'unsuccessful';
 console.log('Copying text command was ' + msg);
 } catch (err) {
 console.log('Oops, unable to copy');
 }

 document.body.remove Child (text Area);

 }
</script>

<form name="payment Formsale">

 <select class="doc-select" name="operationname" size="1">
 <option value="sale-form">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sale-form (by ENDPOINTID)</option>
 <option value="sale-form/group">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sale-form (by ENDPOINTGROUPID)</option>
 </select>
 
 <p></p>
 <input type="button" class="doc-button" style="font-size: 100%; padding: 2px 6px 3px 6px;" value="Sign sale Request" onclick="paymentform_sign (document.payment Formsale)" />
 <p></p>
</form>

<ul class="nav nav-tabs" id="payment Form Request Tab">
 <li class="active">[CURL](#payment FormCURL)</li>
 <li>[PHP](#payment FormPHP)</li>
 <li>[Ruby](#payment Form Ruby)</li>
 <li>[Java](#payment Form Java)</li>
</ul>

 <button class="doc-button" onclick="copy To Clipboard Request_paymentform('php')">Copy to clipboard</button>
 <pre>
			<code class="php" id="payment Formphpvalue"></code>
		</pre>

 <button class="doc-button" onclick="copy To Clipboard Request_paymentform('ruby')">Copy to clipboard</button>
 <pre>
			<code class="language-ruby" id="payment Formrubyvalue"></code>
		</pre>

 <button class="doc-button" onclick="copy To Clipboard Request_paymentform('java')">Copy to clipboard</button>
 <pre>
			<code class="language-java" id="payment Formjavavalue"></code>
		</pre>

### /api/v2/sale

#### Введение

Оплата инициируется через запрос HTTPS POST на указанный ниже [URL](#api-v2-sale-request-url) с использованием указанных [параметров](#api-v2-sale-request-parameters). Для аутентификации запроса используется [SHA-1](https://doc.payneteasy.ru/integration/general_api_usage/request_authentication_methods/sha.html.md). См. [Статусы транзакций](https://doc.payneteasy.ru/integration/reference/statuses.html.md).

#### API URL

> **Note:** Путь API URL не должен быть задан фиксированным значением, т.к. он может быть изменён позднее.

| Интеграционная среда | Производственная среда |
|------------------------------------------------------------------------|---------------------------------------------------------------------|
| https://sandbox.payneteasy.ru/paynet/api/v2/sale/ENDPOINTID | https://gate.payneteasy.ru/paynet/api/v2/sale/ENDPOINTID |
| https://sandbox.payneteasy.ru/paynet/api/v2/sale/group/ENDPOINTGROUPID | https://gate.payneteasy.ru/paynet/api/v2/sale/group/ENDPOINTGROUPID |

#### Параметры запроса

> **Note:** Запрос должен иметь заголовок content-type=application/x-www-form-urlencoded.

Банк может переопределить необходимость некоторых полей, сделав их обязательными.
 
Пробелы в начале и в конце значений параметров будут отсечены.
 

> **Warning:** В значениях параметров необходимо экранировать следующие символы: & + “.

| Название параметра | Описание | Значение |
|------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------|
| client_orderid | Уникальный идентификатор заказа, присвоенный Присоединяющейся Стороной. | `Необходимость`: Обязательно `Тип`: String `Длина`: 128 |
| order_desc | Описание заказа. | `Необходимость`: Обязательно `Тип`: String `Длина`: 64k |
| amount | Сумма к оплате. Сумма должна быть указана в наибольших единицах с разделителем .. Например, 10.5 для USD означает 10 долларов США и 50 центов. | `Необходимость`: Обязательно `Тип`: Numeric `Длина`: 10 |
| currency | Валюта, в которой проводится операция (см. [Коды валют](https://doc.payneteasy.ru/integration/reference/currency_codes.html.md)). Примеры значений: USD для доллара США, EUR для европейского евро, RUB для российского рубля. | `Необходимость`: Обязательно `Тип`: String `Длина`: 3 |
| address1 | Адрес Плательщика, строка 1. (Обратите внимание, что в некоторых случаях невозможно отправить адрес длиной более 50 символов. Для получения более подробной информации обратитесь к вашему менеджеру.) | `Необходимость`: Обязательно `Тип`: String `Длина`: 256 |
| city | Город Плательщика. | `Необходимость`: Обязательно `Тип`: String `Длина`: 50 |
| zip_code | Почтовый индекс Плательщика. | `Необходимость`: Обязательно `Тип`: String `Длина`: 10 |
| country | Страна Плательщика. Для списка действительных кодов см. [Коды стран](https://doc.payneteasy.ru/integration/reference/country_codes.html.md). | `Необходимость`: Обязательно `Тип`: String `Длина`: 2 |
| phone | Полный международный номер телефона Плательщика, включая код страны. | `Необходимость`: Обязательно `Тип`: String `Длина`: 15 |
| email | Адрес электронной почты Плательщика. | `Необходимость`: Обязательно `Тип`: String `Длина`: 50 |
| ipaddress | IP-адрес Плательщика, передаётся для целей мониторинга мошенничества. | `Необходимость`: Обязательно `Тип`: String `Длина`: 45 |
| control | Контрольная сумма, сгенерированная [SHA-1](https://doc.payneteasy.ru/integration/general_api_usage/request_authentication_methods/sha.html.md). Строка для подписи представляет собой объединение следующих параметров: 1. <ENDPOINTID | ENDPOINTGROUPID (См.: [URL запроса](#api-v2-sale-request-url)) 2. Параметр запроса: client_orderid 3. Параметр запроса: amount в минимальных денежных единицах 4. Параметр запроса: email 5. merchant_control (Контрольный ключ, назначенный для учетной записи Присоединяющейся стороны в Payneteasy). | `Необходимость`: Обязательно `Тип`: String `Длина`: 40 |
| cvv2 | CVV2-код Плательщика. CVV2 (Card Verification Значение) — это трех- или четырех-значное число ПОСЛЕ номера кредитной карты в области подписи карты. | `Необходимость`: Обязательно `Тип`: Numeric `Длина`: 3-4 |
| credit_card_number | Номер банковской карты Плательщика. Нужно отправлять или комбинацию из credit_card_number, card_printed_name, expire_month и expire_year или параметр card_recurring_payment_id, но не все в одном запросе. | `Необходимость`: Условно `Тип`: Numeric `Длина`: 20 |
| card_recurring_payment_id | Токенизированный идентификатор владельца карты. Нужно отправлять или параметр card_recurring_payment_id или комбинацию из credit_card_number, card_printed_name, expire_month и expire_year, но не все в одном запросе. Для создания card_recurring_payment_id см. [/api/v4/create-card-ref](https://doc.payneteasy.ru/integration/api_v4_create-card-ref.html.md). | `Необходимость`: Условно `Тип`: Long `Длина`: 20 |
| card_printed_name | Имя владельца карты, напечатанное на банковской карте. | `Необходимость`: Условно `Тип`: String `Длина`: 128 |
| expire_month | Месяц окончания срока действия банковской карты. | `Необходимость`: Условно `Тип`: Numeric `Длина`: 2 |
| expire_year | Год окончания срока действия банковской карты. | `Необходимость`: Условно `Тип`: Numeric `Длина`: 4 |
| first_name | Имя Плательщика. Необходимость параметра можно уточнить у отдела поддержки. Зависит от канала эквайринга. | `Необходимость`: Обязательно `Тип`: String `Длина`: 50 |
| last_name | Фамилия Плательщика. Необходимость параметра зависит от канала эквайринга и необходимость параметра, необходимо уточнять у техподдержки. | `Необходимость`: Обязательно `Тип`: String `Длина`: 50 |
| state | Штат Плательщика. Для списка действительных кодов штатов см. [Обязательные коды штатов](https://doc.payneteasy.ru/integration/reference/country_codes.html.md). Требуется для США, Канады и Австралии. | `Необходимость`: Условно `Тип`: String `Длина`: 2-3 |
| redirect_url | URL-адрес, на который будет перенаправлен Плательщик после завершения транзакции. Перенаправление выполняется в любом случае, независимо от того, получила ли транзакция статус successful, unsuccessful или любой другой конечный статус (см. [Статусы транзакций](https://doc.payneteasy.ru/integration/reference/statuses.html.md)). Присоединяющаяся Сторона не должна использовать параметры, которые посылаются вместе с HTTP-запросом перенаправления на обработку статуса транзакции. Вместо этого Присоединяющаяся Сторона может использовать server_callback_url или [АПИ команду запроса статуса](https://doc.payneteasy.ru/integration/api_v2_status.html.md). Если же нет необходимости перенаправлять Плательщика, вписать http://https://doc.payneteasy.ru. Использовать или параметр redirect_url, или комбинацию параметров redirect_success_url и redirect_fail_url, не оба. | `Необходимость`: Опционально `Тип`: String `Длина`: 1024 |
| redirect_success_url | URL-адрес, на который будет перенаправлен Плательщик после получения успешного статуса транзакции (см. [Статусы транзакций](https://doc.payneteasy.ru/integration/reference/statuses.html.md)). Не следует использовать параметры, отправленные вместе с HTTP-запросом перенаправления, для обработки статуса транзакции. Вместо этого необходимо использовать server_callback_url или [запрос статуса](https://doc.payneteasy.ru/integration/api_v2_status.html.md). Если транзакция не предполагает возврата плательщика, параметр может быть использован со значением http://https://doc.payneteasy.ru. Допускается использование либо параметра redirect_url, либо комбинации параметров redirect_success_url и redirect_success_url, но не и того, и другого одновременно. | `Необходимость`: Опционально `Тип`: String `Длина`: 1024 |
| redirect_fail_url | URL-адрес, на который будет перенаправлен Плательщик после получения неуспешного статуса транзакции (см. [Статусы транзакций](https://doc.payneteasy.ru/integration/reference/statuses.html.md)). Не следует использовать параметры, отправленные вместе с HTTP-запросом перенаправления, для обработки статуса транзакции. Вместо этого необходимо использовать server_callback_url или [запрос статуса](https://doc.payneteasy.ru/integration/api_v2_status.html.md). Если транзакция не предполагает возврата плательщика, параметр может быть использован со значением http://https://doc.payneteasy.ru. Допускается использование либо параметра redirect_url, либо комбинации параметров redirect_success_url и redirect_success_url, но не и того, и другого одновременно. | `Необходимость`: Опционально `Тип`: String `Длина`: 1024 |
| ssn | Последние четыре цифры номера социального страхования Плательщика. | `Необходимость`: Опционально `Тип`: Numeric `Длина`: 32 |
| birthday | Дата рождения Плательщика в формате YYYYMMDD. | `Необходимость`: Опционально `Тип`: Numeric `Длина`: 8 |
| cell_phone | Полный международный мобильный номер телефона Плательщика, включая код страны. | `Необходимость`: Опционально `Тип`: String `Длина`: 15 |
| site_url | URL-адрес сайта электронной коммерции, откуда происходит платеж. | `Необходимость`: Опционально `Тип`: String `Длина`: 128 |
| purpose | Назначение платежа. Параметр может использоваться для указания пополняемого счёта (счета мобильных телефонов, игровые учётные записи и т. д.). Примеры значений:+9999999999; mail@example.com и т. д. Это значение может проверяться системой защиты от мошенничества. | `Необходимость`: Опционально `Тип`: String `Длина`: 128 |
| server_callback_url | URL-адрес server_callback_url, по которому будет отправлен обратный вызов с результатом транзакции. Присоединяющаяся сторона может использовать обратные вызовы для индивидуальной обработки завершения транзакции (например, для сбора данных о платежах в информационной системе Присоединяющейся стороны). Список параметров, включенных в обратный вызов, см. в разделе [Обратного вызова Присоединяющейся стороны](https://doc.payneteasy.ru/integration/merchant_callback_parameters.html.md). Данный параметр может быть передан вместо notify_url. При использовании server_callback_url платежный шлюз отправляет callback-уведомление только при получении финального статуса исходной транзакции. При использовании notify_url платежный шлюз отправляет уведомление при получении финального статуса и продолжает отправлять уведомления о всех последующих изменениях (возвраты, chargeback и др.). | `Необходимость`: Опционально `Тип`: String `Длина`: 1024 |
| notify_url | URL-адрес notify_url, по которому будет отправлен обратный вызов с результатом транзакции. Присоединяющаяся сторона может использовать обратные вызовы для индивидуальной обработки завершения транзакции (например, для сбора данных о платежах в информационной системе Присоединяющейся стороны). Список параметров, включенных в обратный вызов, см. в разделе [Обратного вызова Присоединяющейся стороны](https://doc.payneteasy.ru/integration/merchant_callback_parameters.html.md). Данный параметр может быть передан вместо server_callback_url. При использовании notify_url платежный шлюз отправляет уведомление при получении финального статуса и продолжает отправлять уведомления о всех последующих изменениях (возвраты, chargeback и др.). При использовании server_callback_url платежный шлюз отправляет callback-уведомление только при получении финального статуса исходной транзакции. | `Необходимость`: Опционально `Тип`: String `Длина`: 1024 |
| merchant_data | Дополнительные сведения о транзакции для Присоединяющейся Стороны, которые можно прикрепить к транзакции и получить обратно в ответе на [запрос статуса](https://doc.payneteasy.ru/integration/api_v2_status.html.md), [обратном вызове Присоединяющейся Стороны](https://doc.payneteasy.ru/integration/merchant_callback_parameters.html.md) или server_callback_url. Может содержать данные, которые будут полезны во внешней системе Присоединяющейся Стороны, например VIP клиент, телевизионная промо-кампания. Информация возвращается в ответе на запрос статуса и в обратном вызове Присоединяющейся Стороны. | `Необходимость`: Опционально `Тип`: String `Длина`: 64k |
| dapi_imei | Уникальный идентификатор устройства. | `Необходимость`: Опционально `Тип`: String `Длина`: 32 |
| minimum_transaction_amount | Этот параметр можно использовать для ограничения минимальной суммы транзакции, если сумма транзакции доступна для указания Плательщиком в форме. Свяжитесь с менеджером службы поддержки, чтобы включить эту функцию. Формат значения такой же, как и в параметре amount. | `Необходимость`: Опционально `Тип`: Numeric `Длина`: 10 |
| maximum_transaction_amount | Этот параметр можно использовать для ограничения максимальной суммы транзакции, если сумма транзакции доступна для указания Плательщиком в форме. Свяжитесь с менеджером службы поддержки, чтобы включить эту функцию. Формат значения такой же, как и в параметре amount. | `Необходимость`: Опционально `Тип`: Numeric `Длина`: 10 |
| customer_level | Уровень клиента в системе CMS. | `Необходимость`: Опционально `Тип`: Varchar `Длина`: 32 |
| customer_id | Идентификатор клиента в системе CMS. Параметр становится обязательным, если включена система CMS в режиме определения клиента Платёжным шлюзом. | `Необходимость`: Опционально `Тип`: Int `Длина`: 10 |
| merchant_customer_identifier | Идентификатор клиента в системе CMS, назначенный Присоединяющейся Стороной. Параметр становится обязательным, если включена система CMS в режиме CRM. | `Необходимость`: Опционально `Тип`: Varchar `Длина`: 64 |
| recurring-payment-id | Recurring Payment ID может быть передан вместо данных держателя карты. Для нативных транзакций CVV не требуется. Обновление данных клиента возможно через /api/v4/update-recurring-payment/. Процесс создания Recurring Payment ID инициируется HTTPS POST запросом с использованием указанных ниже [URLs](https://doc.payneteasy.ru/integration/api_v4_create-card-ref.html.md). и [параметров](https://doc.payneteasy.ru/integration/api_v4_create-card-ref.html.md), используйте [OAuth RSA-SHA256](https://doc.payneteasy.ru/integration/general_api_usage/request_authentication_methods/oauth.html.md) для аутентификация | `Необходимость`: Условно `Тип`: Long |

#### Дополнительные параметры

##### Для Присоединяющейся Стороны

> **Note:** Данные браузера для 3DS 2. X собираются системой Присоединяющейся Стороны на этапе 3DS аутентификации. Однако для некоторых каналов обработки браузерные данные и/или URL-адрес Присоединяющейся Стороны для результатов 3DS challenge должны быть указаны в изначальном запросе на проведение транзакции. Свяжитесь с менеджером службы поддержки, чтобы уточнить, следует ли включать эти параметры в параметры запроса.

Сайт Присоединяющейся Стороны должен точно заполнять информацию о браузере по каждой транзакции. Эти данные могут быть получены серверами Присоединяющейся Стороны. Убедитесь, что данные не изменены и не жестко запрограммированы, и что они уникальны для каждой транзакции.

| Название параметра | Описание | Значение |
|----------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------|
| customer_browser_accept_header | Точное содержание заголовков HTTP Accept, отправленное инициатору запроса 3DS из браузера владельца карты. | `Необходимость`: Обязательно `Тип`: String `Длина`: 2048 |
| customer_browser_javascript_enabled | Boolean, представляющий cпособность браузера владельца карты запускать Java Script. | `Необходимость`: Обязательно `Тип`: Boolean `Длина`: - |
| customer_browser_accept_language | Значение, представляющее язык браузера, по определено IETF BCP47. | `Необходимость`: Обязательно `Тип`: String `Длина`: 8 |
| customer_browser_user_agent | Точное содержание заголовка HTTP user-agent. | `Необходимость`: Обязательно `Тип`: String `Длина`: 2048 |
| customer_browser_info | Если true, параметры, приведенные ниже, должны быть указаны. | `Необходимость`: Опционально `Тип`: Boolean `Длина`: - |
| customer_browser_color_depth | Значение, представляющее разрядность цветовой палитры для отображения изображений, в битах на пиксель. Становится обязательным, когда browser_java Script_enabled = true». | `Необходимость`: Опционально `Тип`: String `Длина`: 2 |
| customer_browser_java_enabled | Boolean, который представляет способность браузера владельца карты запускать Java. Становится обязательным, когда browser_java Script_enabled = true. | `Необходимость`: Опционально `Тип`: Boolean `Длина`: - |
| customer_browser_screen_height | Общая высота экрана владельца карты в пикселях. Требуется, когда browser_java Script_enabled = true. | `Необходимость`: Опционально `Тип`: Numeric `Длина`: 6 |
| customer_browser_screen_width | Общая ширина экрана владельца карты в пикселях. Требуется, когда browser_java Script_enabled = true. | `Необходимость`: Опционально `Тип`: Numeric `Длина`: 6 |
| customer_browser_time_zone | Смещение часового пояса в минутах между UTC и местным временем браузера держателя карты. Обратите внимание, что смещение является положительным, если местный часовой пояс отстает от UTC, и отрицательным, если он опережает UTC. Становится обязательным, когда browser_java Script_enabled = true. | `Необходимость`: Опционально `Тип`: String `Длина`: 5 |
| tds_areq_notification_url, alias tds_cres_notification_url | Полный URL-адрес системы Присоединяющейся Стороны, которая получит сообщение CRes или сообщение об ошибке. Это сообщение CRes должно быть отправлено Payneteasy. См. [Загрузка результата CRes](https://doc.payneteasy.ru/integration/upload-cres-result.html.md). | `Необходимость`: Опционально `Тип`: String `Длина`: 256 |

##### Для платежных учреждений

PSP или эквайер могут заполнить результаты 3DS для каждой транзакции, если выполнение 3DS аутентификации происходит на их стороне.

| Parameter Name | Description | Value |
|------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------|
| tds_authentication_result_type | Type of result. Possible values are: - SIMPLE | `Type`: String `Length`: 6 |
| tds_authentication_result_authentication_type | Authentication Type. Indicates the type of authentication method the Issuer will use to challenge the Cardholder, whether in the ARes message or what was used by the ACS when in the RReq message. Possible values are: - 01 = Static - 02 = Dynamic - 03 = OOB - 04 = Decoupled - 05-79 = Reserved for EMVCo future use (values invalid until defined by EMVCo) - 80-99 = Reserved for DS use | `Type`: String `Length`: 2 |
| tds_authentication_result_authentication_value | Authentication Value. Payment System-specific value provided by the ACS or the DS using an algorithm defined by Payment System. Authentication Value may be used to provide proof of authentication. A 20-byte value that has been Base64 encoded, giving a 28-byte result | `Type`: String `Length`: 19-28 |
| tds_authentication_result_transaction_id | xid for 1.0.2 or ds TransID for 2.1.0/2.2.0 | `Type`: String `Length`: 19-36 |
| tds_authentication_result_transaction_status | Transaction Status. Indicates whether a transaction qualifies as an authenticated transaction or account verification. Possible values are: - Y = Authentication Verification Successful - N = Not Authenticated/Account Not Verified, Transaction denied - U = Authentication/Account Verification Could Not Be Performed, Technical or other problem, as indicated in ARes or RReq - A = Attempts Processing Performed, Not Authenticated/Verified, but a proof of attempted authentication/verification is provided - C = Challenge Required, Additional authentication is required using the CReq/CRes - D = Challenge Required, Decoupled Authentication confirmed - R = Authentication/ Account Verification Rejected, Issuer is rejecting | `Type`: String `Length`: 1 |
| tds_authentication_result_message_version | Message Version Number. Protocol version identifier This shall be the Protocol Version Number of the specification utilised by the system creating this message. The Message Version Number is set by the 3DS Server which originates the protocol with the AReq message. The Message Version Number does not change during a 3DS transaction. Possible values are: - 1.0.2 - 2.1.0 - 2.2.0 | `Type`: String `Length`: 5 |

#### Параметры ответа

> **Note:** Ответ имеет заголовок Content-Type: text/html;charset=utf-8. Все поля имеют кодировку x-www-form-urlencoded, с символом (0xA) в конце значения каждого параметра.

| Название параметра | Описание |
|----------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| type | Тип ответа. Может принимать такие значения как: async-response, validation-error, error и т.д. Если тип равен validation-error или error, параметры error-message и error-code будут содержать сведения об ошибке. |
| paynet-order-id | Идентификатор заказа, присвоенный Payneteasy. |
| merchant-order-id | Идентификатор заказа Присоединяющейся Стороны. |
| serial-number | Уникальный номер, присваиваемый сервером Payneteasy конкретному запросу от Присоединяющейся стороны. |
| error-message | Для транзакций в статусе declined или error, этот параметр будет содержать причину отклонения или сведения об ошибке. |
| error-code | Код ошибки для транзакций в статусе declined или error. |
| end-point-id | Идентификатор терминала, используемый для транзакции. |

#### Пример запроса с данными владельца карты

```http
POST /paynet/api/v2/sale/39529 HTTP/1.1
User-Agent: curl/7.83.0
Accept: */*
Content-Length: 314
Content-Type: application/x-www-form-urlencoded
Connection: close

credit_card_number=4538977399606732
&card_printed_name=John
&expire_month=01
&expire_year=2042
&cvv2=123
&client_orderid=34T43R77N
&order_desc=Test Order Описание
&first_name=John
&last_name=Smith
&ssn=1267
&birthday=19820115
&address1=100%20Main%20st
&city=Seattle
&state=WA
&zip_code=98102
&country=US
&phone=+12063582043
&cell_phone=+19023384543
&amount=156
&email=john.smith@gmail.com
&currency=RUB
&ipaddress=65.153.12.232
&site_url=https://doc.payneteasy.ru
&purpose=user_account1
&redirect_url=http%3A%2F%2Fhttps://doc.payneteasy.ru%2Fdoc%2Fdummy.htm
&server_callback_url=https%3A%2F%2Fhttpstat.us%2F200
&merchant_data=VIP customer
&dapi_imei=123
&control=c821e33bd22773c05c23725d0b1d2dbd9f191399
```

#### Пример запроса с идентификатором регулярного платежа по карте

```http
POST /paynet/api/v2/sale/39915 HTTP/1.1
Host: sandbox.payneteasy.ru
User-Agent: curl/7.83.0
Accept: */*
Content-Length: 317
Content-Type: application/x-www-form-urlencoded
Connection: close

card_recurring_payment_id=1491954
&cvv2=123
&client_orderid=34T43R77N
&order_desc=Test Order Описание
&amount=777
&currency=USD
&ipaddress=65.153.12.232
&redirect_url=http://doc2.doc2.com/doc/dummy.htm
&server_callback_url=https://httpstat.us/200
&control=80761544c64373d1624240add048d36d42fe528a
```

#### Пример успешного ответа

```http
HTTP/1.1 200
Server: server
Date: Wed, 17 Nov 2021 11:03:17 GMT
Content-Type: text/html;charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
Keep-Alive: timeout=60
Vary: Accept-Encoding
X-XSS-Protection: 1
Strict-Transport-Security: max-age=31536000
Content-Language: ru-RU
P3P: CP="NOI ADM DEV COM NAV OUR STP"
Content-Encoding: gzip

type=async-response
&serial-number=00000000-0000-0000-0000-000002d9b22a
&merchant-order-id=inv4097763
&paynet-order-id=6768788
&end-point-id=22903
```

#### Пример неуспешного ответа

```http
HTTP/1.1 200
Server: server
Date: Wed, 17 Nov 2021 13:14:40 GMT
Content-Type: text/html;charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
Keep-Alive: timeout=60
Vary: Accept-Encoding
X-XSS-Protection: 1
Strict-Transport-Security: max-age=31536000
Content-Language: ru-RU
P3P: CP="NOI ADM DEV COM NAV OUR STP"
Content-Encoding: gzip

type=validation-error
&serial-number=00000000-0000-0000-0000-000002b36f64
&merchant-order-id=inv4097763
&error-message=End+point+with+id+22903+not+found
&error-code=3
```

#### Open API Collection

Open this method in the OpenAPI Reference

<a class="openapi-reference-button" href="/openapi-doc/#POST/api/v2/sale/{endpoint Id}" target="_blank" rel="noopener">View in OpenAPI <svg xmlns="http://www.w3.org/2000/svg" view Box="0 0 24 24" fill="none" stroke="current Color" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg></a>

#### Коллекция Postman

<div class="postman-run-button"
data-postman-action="collection/fork"
data-postman-var-1="23519287-91b1093a-dcc9-4c11-8651-c56d73715e77"
data-postman-collection-url="entity Id=23519287-91b1093a-dcc9-4c11-8651-c56d73715e77&entity Type=collection&workspace Id=7be78bd7-9f10-4be9-a60e-bd36ff1b6783"
data-postman-param="env%5BPayment%20gateway%20ENV%5D=W3sia2V5IjoiVVJMIiwidm FsdWUi Oi IiLCJlbm FibGVk Ijp0cn VlLCJ0eXBl IjoiZGVmYXVsdCJ9XQ=="></div>
<script type="text/javascript">
 (function (p,o,s,t,m,a,n) {
 !p[s] && (p[s] = function () { (p[t] || (p[t] = [])).push (arguments); });
 !o.get Element By Id (s+t) && o.get Elements By Tag Name("head")[0].append Child((
 (n = o.create Element("script")),
 (n.id = s+t), (n.async = 1), (n.src = m), n
 ));
 }(window, document, "_pm", "Postman Run Object", "https://run.pstmn.io/button.js"));
 var env Name = "Payment gateway ENV";
	 var env Data = {
 URL:'sandbox.payneteasy.ru' + "/" + 'paynet'
 };
 \_pm('env.replace', env Name, env Data);
</script>

#### Конструктор запросов

<meta http-equiv="Cache-Control" content="no-cache">
<script src="../_static/js/generate_card_number.js"></script>
<script src="../_static/js/crypto-js/sha1.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="../_static/js/highlight/styles/default.css">
<script src="../_static/js/highlight/highlight.pack.js"></script>

<script type="text/javascript">
$(document).ready (function(){ 
 $("#sale Request Tab a").click (function (e){
 	e.prevent Default();
 	$(this).tab('show');
 });
});
</script>

<script type="text/javascript">
 var curl Sale Request Text = "";
	var php Sale Request Text = "";
	var ruby Sale Request Text = "";
	var java Sale Request Text = "";

 function sign_sale_request (form) {

 	if (form.elements['server_callback_url'].value && form.elements['notify_url'].value) {
			$(".errorinfo").show();
			return false;
		} else {
			$(".errorinfo").hide();
		}

 var signed Text = "";
		var curl Text = "";
		var sandbox = "";
		var params = "";
		var control = "";
	 var url = "";
	 var amount Info = document.get Element By Id("amount Warning");

 var xhttp = new XMLHttp Request();
 xhttp.onreadystatechange = function() {
 if (xhttp.ready State == 4 && xhttp.status == 200) {
 if (url == "../_static/examples/PHP/params_no_header_PHP_new.txt"){
 php Sale Request Text = xhttp.response Text;}
 else if (url == "../_static/examples/Ruby/params_no_header_Ruby (for new version).txt") {
 ruby Sale Request Text = xhttp.response Text;}
 else {
 java Sale Request Text = xhttp.response Text;}
 }
 }

 url = "../_static/examples/PHP/params_no_header_PHP_new.txt";
 xhttp.open("GET", url, false);
 xhttp.send();
 url = "../_static/examples/Ruby/params_no_header_Ruby (for new version).txt";
 xhttp.open("GET", url, false);
 xhttp.send();
 url = "../_static/examples/Java/params_java.txt";
 xhttp.open("GET", url, false);
 xhttp.send();

 for (var e = 0; e < form.elements.length; ++e) {
 var input = form.elements[e];
 if (input.name != null) {
 if (input.name.substring(0, 5) == "sha1_")
 if (input.value != null && input.value != "")
 if (!(input.type == "checkbox" || input.type == "radio") || input.checked) {
 if (input.name == "sha1_amount") {
 var amount To Fix = input.value \* 100;
 var fixed Amount = amount To Fix.to Fixed(0);

 if (fixed Amount != amount To Fix) {
 $('#amount Warning').css("display", "block");
 amount Info.innerHTML = amount Info.innerHTML.replace("​", "Possible floating point imprecision (for more information check Floating Point Math)");
 } else {
 $('#amount Warning').css("display", "none");
 amount Info.innerHTML = amount Info.innerHTML.replace("Possible floating point imprecision (for more information check Floating Point Math)", "​");
 }
 signed Text = signed Text + fixed Amount;
 } else {
 signed Text = signed Text + input.value;
 }
 }
 if (input.value != null && input.name != null)
 if (input.value != "" && input.name != "" && input.name != "operationname")
 if (input.name.substring(0, 5) == "sha1_") {
 if (input.name != "sha1_merchant_control" && input.name != "sha1_endpointid") {
 curl Text = curl Text + input.name.substring(5) + "=" + input.value + "&";

 params += " '" + input.name.substring(5) + "' => '" + input.value + "', \\n";
 }
 }
 else {

 curl Text = curl Text + input.name + "=" + input.value + "&";

 params += " '" + input.name + "' => '" + input.value + "', \\n";
 }
 }
 }

		sandbox = 'https://sandbox.payneteasy.ru/paynet/api/v2/' + document.sale_request.operationname.value + '/' + document.sale_request.sha1_endpointid.value;

		php Sale Request Text = php Sale Request Text.replace("{$generated parameters with values code}", params);
		php Sale Request Text = php Sale Request Text.replace(/{\\$identifier Type Name}/g, document.sale_request.operationname.value.match(/\\/group/) ? 'group Id' : 'endpoint Id');
		php Sale Request Text = php Sale Request Text.replace("{$endpoint Or Group Id}", document.sale_request.sha1_endpointid.value);
		php Sale Request Text = php Sale Request Text.replace("{$merchant Control}", document.sale_request.sha1_merchant_control.value);
		php Sale Request Text = php Sale Request Text.replace("{$additional vars}", '');
		php Sale Request Text = php Sale Request Text.replace("{$sign Function Call}", 'sign Payment Request($request Fields, $' + (document.sale_request.operationname.value.match(/\\/group/) ? 'group Id' : 'endpoint Id') + ', $merchant Control)');
		php Sale Request Text = php Sale Request Text.replace("{$sandbox}", sandbox);

		ruby Sale Request Text = ruby Sale Request Text.replace("{$generated parameters with values code}", params);
		ruby Sale Request Text = ruby Sale Request Text.replace("{$sandbox}", sandbox);
		java Sale Request Text = java Sale Request Text.replace("{$targetURL}", sandbox);
		java Sale Request Text = java Sale Request Text.replace("{$has Headers}", "false");
	 control = " 'control' => '" + CryptoJS.SHA1 (signed Text) + "'";

	 java Sale Request Text = java Sale Request Text.replace("{$url Parameters}", curl Text);
	 java Sale Request Text = java Sale Request Text.replace("{$control Parameters}", signed Text);

		php Sale Request Text = php Sale Request Text.replace("{$control}", control);
		ruby Sale Request Text = ruby Sale Request Text.replace("{$control}", control);

		show Text("salerequestphpvalue" , php Sale Request Text);

		show Text("salerequestrubyvalue" , ruby Sale Request Text);

		curl Sale Request Text = 'curl --data "' +
 curl Text +
 "control=" + CryptoJS.SHA1 (signed Text) +
 '" https://sandbox.payneteasy.ru/paynet/api/v2/' + document.sale_request.operationname.value + '/' +
 document.sale_request.sha1_endpointid.value;

 show Text("salerequestsignedvalue" , signed Text);
 show Text("salerequestsha1value" , CryptoJS.SHA1 (signed Text));
 show Text("salerequestcurlvalue" , curl Sale Request Text);
 show Text("salerequestjavavalue" , java Sale Request Text);

 $(document).ready (function() {
 $('pre code').each (function (i, block) {
 hljs.highlight Block (block);
 });
 });

 return false;
 }

 function show Text (element Id, text) {
 var child = document.create Text Node (text);
 var element = document.get Element By Id (element Id);
		element.innerHTML ="";
 if (element.has Child Nodes()) {
 element.replace Child (child, element.first Child);
 } else {
 element.append Child (child);
 }
 }

 function rand Inv (c) {
 document.get Element By Id (c).value = "inv" + Math.floor (Math.random()\*10000000);
 }

 function copy To Clipboard Sale Request (text) {
 var text Area = document.create Element("textarea");

 // Place in top-left corner of screen regardless of scroll position.
 text Area.style.position = 'fixed';
 text Area.style.top = 0;
 text Area.style.left = 0;

 // Ensure it has a small width and height. Setting to 1px / 1em
 // doesn't work as this gives a negative w/h on some browsers.
 text Area.style.width = '2em';
 text Area.style.height = '2em';

 // We don't need padding, reducing the size if it does flash render.
 text Area.style.padding = 0;

 // Clean up any borders.
 text Area.style.border = 'none';
 text Area.style.outline = 'none';
 text Area.style.box Shadow = 'none';

 // Avoid flash of white box if rendered for any reason.
 text Area.style.background = 'transparent';

 if (text == 'curl'){
	text Area.value = curl Sale Request Text;
 } else if ( text =='php'){
	text Area.value = php Sale Request Text;
 } else if( text == 'ruby'){
 	text Area.value = ruby Sale Request Text;
 } else {
 text Area.value = java Sale Request Text;
 }
 document.body.append Child (text Area);

 text Area.select();

 try {
 var successful = document.exec Command('copy');
 var msg = successful ? 'successful' : 'unsuccessful';
 console.log('Copying text command was ' + msg);
 } catch (err) {
 console.log('Oops, unable to copy');
 }

 document.body.remove Child (text Area);

 }
</script>

<form name="sale_request">

 <select class="doc-select" name="operationname" size="1" >
 <option value="sale">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sale (by ENDPOINTID)</option>
 <option value="sale/group">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sale (by ENDPOINTGROUPID)</option>
 </select>
 
 <p></p>
 <input type="button" class="doc-button" style="font-size: 100%; padding: 2px 6px 3px 6px;" value="Sign sale Request" on Click="sign_sale_request (document.sale_request)"/>
 <p></p>
</form>

<ul class="nav nav-tabs" id="sale Request Tab">
 <li class="active">[CURL](#sale RequestCURL)</li>
 <li>[PHP](#sale RequestPHP)</li>
 <li>[Ruby](#sale Request Ruby)</li>
 <li>[Java](#sale Request Java)</li>
</ul>

 <button class="doc-button" onclick="copy To Clipboard Sale Request('php')">Copy to clipboard</button>
 <pre>
<code class="php" id="salerequestphpvalue">

</code>
</pre>

 <button class="doc-button" onclick="copy To Clipboard Sale Request('ruby')">Copy to clipboard</button>
 <pre>
<code class="language-ruby" id="salerequestrubyvalue">

</code>
</pre>

 <button class="doc-button" onclick="copy To Clipboard Sale Request('java')">Copy to clipboard</button>
 <pre>
<code class="language-java" id="salerequestjavavalue">

</code>
</pre>

### /api/v2/status

#### Введение

Получение статуса транзакции осуществляется через запрос методом HTTPS POST на указанный ниже [URL](#status-request-url) с использованием указанных [параметров](#status-request-parameters). Для аутентификации запроса используется [SHA-1](https://doc.payneteasy.ru/integration/general_api_usage/request_authentication_methods/sha.html.md). См. [Статусы транзакций](https://doc.payneteasy.ru/integration/reference/statuses.html.md).

#### API URL

> **Note:** Путь API URL не должен быть задан фиксированным значением, т.к. он может быть изменён позднее.

| Интеграционная среда | Производственная среда |
|--------------------------------------------------------------------------|-----------------------------------------------------------------------|
| https://sandbox.payneteasy.ru/paynet/api/v2/status/ENDPOINTID | https://gate.payneteasy.ru/paynet/api/v2/status/ENDPOINTID |
| https://sandbox.payneteasy.ru/paynet/api/v2/status/group/ENDPOINTGROUPID | https://gate.payneteasy.ru/paynet/api/v2/status/group/ENDPOINTGROUPID |

#### Параметры запроса

> **Note:** Запрос должен иметь заголовок content-type=application/x-www-form-urlencoded.

| Название параметра | Описание | Необходимость |
|----------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------|
| login | Логин Присоединяющейся Стороны в Платёжном Шлюзе. | Обязательно |
| client_orderid | Уникальный идентификатор заказа, присвоенный Присоединяющейся Стороной. | Обязательно |
| orderid | Идентификатор заказа, присвоенный Payneteasy. | С условием |
| by-request-sn | Серийный номер, присвоенный Payneteasy конкретному API-запросу. Если параметр присутствует в запросе статуса, ответ на запрос будет возвращён только для той стадии транзакции, на которой она находилась в момент совершения запроса с таким серийным номером. Параметр может быть включён в запрос для получения такой стадии в специальных случаях. Для получения наиболее актуального статуса транзакции, не следует включать этот параметр в запрос. | Опционально |
| control | Контрольная сумма, сгенерированная [SHA-1](https://doc.payneteasy.ru/integration/general_api_usage/request_authentication_methods/sha.html.md). Строка для подписи представляет собой объединение следующих параметров: 1. Параметр запроса:login. 2. Параметр запроса:client_orderid. 3. Параметр запроса:orderid. 4. merchant_control (Контрольный ключ, назначенный для аккаунта Присоединяющейся стороны в системе Payneteasy). | Обязательно |
 
В большинстве случаев наилучшим вариантом является включение обоих параметров client_orderid и orderid в запрос статуса. Статус заказа можно запросить только с client_orderid, если он уникален для Торговца и orderid не получен. Если orderid не получен в ответе, но ответ содержитошибку, см. полученное сообщение об ошибке, чтобы получить информацию о том, почему транзакция не была создана в системе.
 

#### Параметры ответа

API команда запроса статуса участвует во множестве сценариев использования API, поэтому некоторые из указанных параметров могут не встречаться в определенных сценариях. Ниже предоставлен полный список возможных параметров ответа.
 

> **Note:** Ответ имеет заголовок Content-Type: text/html;charset=utf-8. Все поля имеют кодировку x-www-form-urlencoded, с символом (0xA) в конце значения каждого параметра.

\* - эти параметры не возвращаются в ответе по умолчанию. Для их получения необходимо связаться со службой поддержки.
 

| Параметры ответа на запрос статуса | Описание |
|-------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| type | Тип ответа. Может быть status-response. |
| status | Подробности см. в [Список статусов](https://doc.payneteasy.ru/integration/reference/statuses.html.md). |
| amount | Фактическая сумма транзакции. Данное значение может быть изменено в ходе транзакции. |
| currency | Валюта, в которой взимается транзакция (трехбуквенный код валюты). Примеры допустимых значений параметров: USD для доллара США EUR для евро. |
| paynet-order-id | Идентификатор заказа, присвоенный заказу gate.payneteasy.ru. |
| merchant-order-id | Идентификатор заказа Присоединяющейся Стороны. |
| phone | Полный международный номер телефона Плательщика, включая код страны. |
| html | HTML-код формы авторизации 3DS, закодированный в формате MIME application/x-www-form-urlencoded. Торговец должен декодировать этот параметр перед показом формы Плательщику. Система gate.payneteasy.ru возвращает следующие параметры ответа, когда получает форму авторизации 3DS от Банка-эмитента. Он содержит HTML-код формы авторизации, который должен быть передан без каких-либо изменений в браузер клиента. Этот параметр существует и имеет значение только тогда, когда HTML перенаправления уже доступен. Для не-3DS этого никогда не происходит. Для 3DS HTML имеет значение через некоторое короткое время после начала обработки. |
| redirect-to | Для авторизации 3DS Торговец может перенаправить плательщика на URL, указанный в данном параметре, вместо отображения страницы, указанной в параметре html. Параметр redirect-to возвращается только в том случае, если возвращается параметр html. Для перенаправления Торговец должен использовать метод HTTP GET. Данный параметр должен использоваться для работы с 3DS 2.0. |
| serial-number | Уникальный номер, присваиваемый сервером gate.payneteasy.ru конкретному запросу от присоединяющейся стороны. |
| last-four-digits | Последние четыре цифры номера банковской карты Плательщика. |
| dest-last-four-digits | Последние четыре цифры номера кредитной карты клиента. Относится только к транзакциям перевода. |
| bin | BIN банка или номер банковской карты плательщика. |
| card-type | Тип банковской карты Плательщика (VISA, MASTERCARD и т.д.). |
| gate-partial-reversal | Возможность проведения частичного возврата (enabled - возможно, disabled - невозможно). |
| gate-partial-capture | Возможность проведения частичного списания захолдированной суммы (enabled - возможно, disabled - невозможно). |
| transaction-type | Тип тпанзакции (продажа, возврат, списание, преавторизация). |
| processor-rrn | Регистрационный номер банка-получателя. |
| processor-tx-id | Идентификатор транзакции, присвоенный Эквайером. |
| receipt-id | Электронная ссылка на квитанцию: https://gate.payneteasy.ru/paynet/view-receipt/ENDPOINTID/receipt-id/. |
| name | Имя плательщика |
| card-ref-id | Ссылочный идентификатор, используемый в последующих повторяющихся платежах. Имеет значение только в том случае, если card-ref-id был создан для первоначальной транзакции. |
| cardholder-name | Имя владельца карты. |
| card-exp-month | Месяц окончания срока действия банковской карты. |
| card-exp-year | Год окончания срока действия банковской карты. |
| card-hash-id | Уникальный идентификатор карты для использования в программах лояльности или проверках на мошенничество. |
| card-country-alpha-three-code | Трехбуквенный код страны эмитента карты отправителя. Подробности см. в [Коды стран и штатов](https://doc.payneteasy.ru/integration/reference/country_codes.html.md). |
| destination-card-country-alpha-three-code | Трехбуквенный код страны эмитента карты получателя. Подробности см. в [Коды стран и штатов](https://doc.payneteasy.ru/integration/reference/country_codes.html.md). |
| dest-bin | Банковский BIN кредитной карты клиента. |
| dest-card-type | Тип кредитной карты клиента (VISA, MASTERCARD и т.д.). |
| dest-bank-name | Наименование банка по BIN карты клиента. |
| destination-hash-id | Уникальный идентификатор карты для использования в программах лояльности или проверках на мошенничество. Актуально только для транзакций переводов. |
| destination-card-hash-id | Уникальный идентификатор карты для использования в программах лояльности или проверках на мошенничество. |
| first-name | Имя плательщика. |
| last-name | Фамилия Плательщика. |
| email | Электронная почта плательщика. |
| Параметр country \* | Страна плательщика (двухбуквенный код страны). Список допустимых кодов стран см. в [Коды стран и штатов](https://doc.payneteasy.ru/integration/reference/country_codes.html.md). |
| Параметр state \* | Штат плательщика. Список допустимых кодов штатов см. в [Коды стран и штатов](https://doc.payneteasy.ru/integration/reference/country_codes.html.md). Обязательно для США, Канады и Австралии. |
| Параметр city \* | Город Плательщика. |
| Параметр zip_code \* | Почтовый индекс Плательщика. |
| Параметр address1 \* | Адрес Плательщика, строка 1. |
| purpose | Место назначения платежа. Это полезно для продавцов, которые позволяют своим плательщикам пополнять свои счета с помощью банковских карт (счета мобильных телефонов, игровые счета и т. д.). Примеры значений: +9999999999; mail@example.com и т. д. Данное значение может использоваться системой мониторинга мошенничества. |
| bank-name | Наименование банка по BIN карты плательщика. |
| terminal-id | Идентификатор терминала эквайера, который будет указан в чеке. |
| paynet-processing-date | Дата обработки транзакции эквайером. |
| approval-code | Код одобрения банка. |
| order-stage | Текущая стадия обработки транзакции. Подробности см. в [Стадии транзакции](https://doc.payneteasy.ru/integration/reference/order_stage.html.md). |
| total-reversal-amount | Сумма последнего обработанного возврата. Актуально только для транзакций возврата. |
| reversal-amount | Сумма последнего обработанного возврата. Актуально только для транзакций возврата. |
| auth-response-code | Код ответа, используемый в протоколе Iso8583. Возвращается только в определенных случаях. |
| acquirer-processing-date | Дата обработки транзакции эквайером. |
| processor-auth-credit-code | Код одобрения кредита. Возвращается только в определенных случаях. |
| processor-credit-rrn | Номер ссылки извлечения для кредитной транзакции. |
| processor-credit-arn | Ссылочный номер карты-эквайера для кредитной транзакции. |
| processor-debit-arn | Ссылочный номер карты-эквайера для дебитной транзакции. |
| loyalty-balance | Текущий баланс бонусов программы лояльности для текущей операции. если доступно. |
| loyalty-message | Сообщение от программы лояльности. если доступно. |
| loyalty-bonus | Бонусная стоимость программы лояльности для текущей операции если доступно. |
| loyalty-program | Название программы лояльности для текущей операции если доступно. |
| descriptor | Банковский идентификатор получателя платежа. |
| original-gate-descriptor | Дескриптор, который устанавливается на уровне шлюза в системе. |
| error-message | Если статус declined, error или filtered, этот параметр содержит причину отклонения. |
| error-code | Код ошибки для транзакций в статусе declined, error, filtered. |
| by-request-sn | Серийный номер, назначенный конкретному запросу gate.payneteasy.ru. Если это поле существует в запросе статуса, ответ статуса возвращается для этого конкретного запроса. |
| verified-3d-status | Подробную информацию см. [Список статусов 3D Secure](https://doc.payneteasy.ru/integration/reference/statuses.html.md). |
| verified-rsc-status | Возвращается, если была выполнена проверка случайной суммы. См. [Альтернативная аутентификация держателя карты](https://doc.payneteasy.ru/integration/reference/3ds_overview.html.md) |
| eci | Индикатор электронной коммерции (Visa). |
| ips-src-payment-product-code | Код карты, установленный международной финансовой службой (Visa/Mastercard). |
| ips-src-payment-product-name | Расшифрованный код для карты, установленный международной финансовой службой (Visa/Mastercard). |
| ips-src-payment-type-code | Код типа карты, установленный международной финансовой службой (Visa/Mastercard). |
| ips-src-payment-type-name | Расшифрованный код типа карты, установленный международной финансовой службой (Visa/Mastercard). |
| merchantdata | Если параметр merchant_data и его значение указаны в первоначальном запросе, они будут включены в ответ о статусе. |
| initial-amount | Сумма, установленная при инициировании транзакции, без каких-либо сборов или комиссий. Это значение не может измениться в ходе транзакции. |
| seller-commission | Общая комиссия за обработанную транзакцию. Это необязательный параметр. Пожалуйста, свяжитесь с вашим менеджером в Payneteasy, если вы хотите его получить. |
| acquirer-commission | Комиссия эквайера за обработанную транзакцию. Это необязательный параметр. Обратитесь к своему менеджеру в Payneteasy, если хотите его получить. |
| motivational-message | Опциональный параметр, содержаний сообщение с расширенной информацией по причине отклонения транзакции. |
| transaction-date | Дата присвоения окончательного статуса транзакции. |
| orig-amount | Содержит исходную сумму запроса, если она была преобразована на вспомогательном терминале в интеграции с параллельной формой. Актуально только для транзакций Payment Cashier. |
| orig-currency | Содержит исходную валюту запроса, если она была преобразована на вспомогательном терминале в интеграции с параллельной формой. Актуально только для транзакций Payment Cashier. |

#### Параметры ответа на запрос статуса Pa Req Form

| Название | Описание |
|------------------------|-------------------------------------------------------------------------------------|
| tds-pareq-form-pareq | Данные ACS 3DS Pa Req, полученные Присоединяющейся Стороной. |
| tds-pareq-form-acs-url | ACS URL для перенаправления Плательщика в рамках сценария аутентификации 3DS 1.0.2. |

#### Параметры ответа на запрос статуса CReq Form

| Название | Описание |
|-----------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| tds-creq-form-creq | Сообщение CReq инициирует взаимодействие держателя карты в полной проверке 3DS (Challenge) и используется для передачи аутентификационных данных. Формируется сервером 3DS торговцем через браузер держателя карты в адрес ACS URL. |
| tds-creq-form-acs-url | ACS URL для перенаправления Плательщика для полной проверки 3DS (Challenge). |

#### Параметры ответа на запрос статуса Method Url Frame

| Название | Описание |
|------------------------------------------|---------------------------------------------------------------------------------------------------------------------|
| tds-method-url-frame-3ds-server-trans-id | Универсальный уникальный идентификатор транзакции, присвоенный 3DS-сервером для идентификации отдельной транзакции. |
| tds-method-url-frame-3ds-method-url | URL 3DS Метода используется в форме iframe, передающейся от торговца к Плательщику. |

Правила создания HTML формы.

Данные метода 3DS: threeDSMethod Data (threeDSMethod NotificationURL + threeDSServer TransID).
 

#### Пример запроса

```http
POST /paynet/api/v2/status/37211 HTTP/1.1
Host: sandbox.payneteasy.ru
User-Agent: curl/7.77.0
Accept: */*
Content-Length: 99
Content-Type: application/x-www-form-urlencoded
Connection: close

login=TestYujik
&client_orderid=123
&orderid=6863082
&control=647f0581bbceb804a73e98d9ea7e78640a75bf1c
```

#### Пример успешного ответа

```http
HTTP/1.1 200 OK
Server: server
Date: Mon, 12 Sep 2022 09:02:42 GMT
Content-Type: text/html;charset=utf-8
Connection: close
Vary: Accept-Encoding
X-XSS-Protection: 1
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000
Content-Language: en-US
X-Cached: EXPIRED
Content-Length: 1275

type=status-response
&serial-number=00000000-0000-0000-0000-000002ddb056
&merchant-order-id=123
&processor-tx-id=PNTEST-6863082
&paynet-order-id=6863082
&status=approved
&amount=555.00
&currency=USD
&descriptor=XXXX
&original-gate-descriptor=XXXX
&gate-partial-reversal=enabled
&gate-partial-capture=enabled
&transaction-type=sale
&receipt-id=081c0c0b-0dd1-3083-b251-e624ac8e57b4
&name=CARD+HOLDER
&cardholder-name=CARD+HOLDER
&card-exp-month=12
&card-exp-year=2099
&email=john.smith%40gmail.com
&last-name=Smith
&first-name=John
&processor-rrn=0225083062885
&approval-code=979249
&order-stage=sale_approved
&merchantdata=VIP+customer
&last-four-digits=2063
&bin=410002
&card-type=VISA
&phone=12063582043
&bank-name=BANCO+ITAUCARD+S.A.
&auth-response-code=00
&terminal-id=12345678
&paynet-processing-date=2022-09-07+13%3A22%3A39+MSK
&acquirer-processing-date=2022-09-07+13%3A22%3A39+MSK
&processor-auth-credit-code=206551
&card-hash-id=2639503
&card-country-alpha-three-code=BRA
&verified-3d-status=NOT_AUTHENTICATED
&processor-credit-rrn=0225060914211
&processor-credit-arn=809124106
&processor-debit-arn=601904020
&purpose=user_account1
&ips-src-payment-product-code=F
&ips-src-payment-product-name=Visa+Classic
&ips-src-payment-type-code=Credit
&ips-src-payment-type-name=VISA+Credit
&initial-amount=555.00
```

#### Пример неуспешного ответа

```http
HTTP/1.1 200 OK
Server: server
Date: Mon, 12 Sep 2022 09:08:02 GMT
Content-Type: text/html;charset=utf-8
Connection: close
Vary: Accept-Encoding
X-XSS-Protection: 1
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000
Content-Language: en-US
X-Cached: MISS
Content-Length: 137

type=validation-error
&serial-number=00000000-0000-0000-0000-000002ddb057
&error-message=End+point+with+id+372118+not+found
&error-code=3
```

#### Open API Collection

Open this method in the OpenAPI Reference

<a class="openapi-reference-button" href="/openapi-doc/#POST/api/v2/status/{endpoint Id}" target="_blank" rel="noopener">View in OpenAPI <svg xmlns="http://www.w3.org/2000/svg" view Box="0 0 24 24" fill="none" stroke="current Color" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg></a>

#### Коллекция Postman

<div class="postman-run-button"
data-postman-action="collection/fork"
data-postman-var-1="23519287-ea926107-d311-4ae5-9fc0-d99378de8f1a"
data-postman-collection-url="entity Id=23519287-ea926107-d311-4ae5-9fc0-d99378de8f1a&entity Type=collection&workspace Id=7be78bd7-9f10-4be9-a60e-bd36ff1b6783"
data-postman-param="env%5BPayment%20gateway%20ENV%5D=W3sia2V5IjoiVVJMIiwidm FsdWUi Oi IiLCJlbm FibGVk Ijp0cn VlLCJ0eXBl IjoiZGVmYXVsdCJ9XQ=="></div>
<script type="text/javascript">
 (function (p,o,s,t,m,a,n) {
 !p[s] && (p[s] = function () { (p[t] || (p[t] = [])).push (arguments); });
 !o.get Element By Id (s+t) && o.get Elements By Tag Name("head")[0].append Child((
 (n = o.create Element("script")),
 (n.id = s+t), (n.async = 1), (n.src = m), n
 ));
 }(window, document, "_pm", "Postman Run Object", "https://run.pstmn.io/button.js"));
 var env Name = "Payment gateway ENV";
	 var env Data = {
 URL:'sandbox.payneteasy.ru' + "/" + 'paynet'
 };
 \_pm('env.replace', env Name, env Data);
</script>

#### Конструктор запросов

<meta http-equiv="Cache-Control" content="no-cache">
<script src="../_static/js/generate_card_number.js"></script>
<script src="../_static/js/crypto-js/sha1.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="../_static/js/highlight/styles/default.css">
<script src="../_static/js/highlight/highlight.pack.js"></script>

<script type="text/javascript">
$(document).ready (function(){
 $("#sale Order Tab a").click (function (e){
 	e.prevent Default();
 	$(this).tab('show');
 });
});
</script>

<script type="text/javascript">
		var curl Sale Order Text = "";

		var php Sale Order Text = "";

		var ruby Sale Order Text = "";
		var java Sale Order Text = "";
 function sign_sale_status (form) {
 var signed Text = "";

 var post Text = "";

		var curl Text = "";

		var params = "";
		var sandbox = "";
	 var url = "";
		var control = "";

	var xhttp = new XMLHttp Request();
 xhttp.onreadystatechange = function() {
 if (xhttp.ready State == 4 && xhttp.status == 200) {
	 if (url == "../_static/examples/PHP/params_no_header_PHP_new.txt"){
 php Sale Order Text = xhttp.response Text;}
		else if (url == "../_static/examples/Ruby/params_no_header_Ruby.txt"){
		 ruby Sale Order Text = xhttp.response Text;}
		else{
		 java Sale Order Text = xhttp.response Text;}
 }
 }

	url = "../_static/examples/PHP/params_no_header_PHP_new.txt";
 xhttp.open("GET", url, false);
 xhttp.send();
	url = "../_static/examples/Ruby/params_no_header_Ruby.txt";
 xhttp.open("GET", url, false);
 xhttp.send();
 url = "../_static/examples/Java/params_java.txt";
 xhttp.open("GET", url, false);
 xhttp.send();

		for (var e = 0; e < form.elements.length; ++e) {
 var input = form.elements[e];
 if (input.name != null)
 {
 if (input.name.substring(0, 5) == "sha1_")
 if (input.value != null)
 if (input.value != "")
 if (!(input.type == "checkbox" || input.type == "radio") || input.checked)
 {signed Text = signed Text + input.value;}
 if (input.value != null && input.name != null)
 if (input.value != "" && input.name != "" && input.name != "operationname")
 if (input.name.substring(0, 5) == "sha1_")
 {
 if (input.name != "sha1_merchant_control"){
 curl Text = curl Text + input.name.substring(5) + "=" + input.value + "&";
								 params += " '" + input.name.substring(5) + "' => '" + input.value + "', \\n";
								 }
 }
 else
 {
 if (input.name != "endpointid"){
 curl Text = curl Text + input.name + "=" + input.value + "&";
								 params += " '" + input.name + "' => '" + input.value + "', \\n";
								 }
 }
 }
 }

		sandbox = 'https://sandbox.payneteasy.ru/paynet/api/v2/' + document.sale_status.operationname.value + '/' + document.sale_status.endpointid.value;

		php Sale Order Text = php Sale Order Text.replace("{$generated parameters with values code}", params);
 php Sale Order Text = php Sale Order Text.replace(/{\\$identifier Type Name}/g, document.sale_status.operationname.value.match(/\\/group/) ? 'group Id' : 'endpoint Id');
 php Sale Order Text = php Sale Order Text.replace("{$endpoint Or Group Id}", document.sale_status.endpointid.value);
 php Sale Order Text = php Sale Order Text.replace("{$merchant Control}", document.sale_status.sha1_merchant_control.value);
 php Sale Order Text = php Sale Order Text.replace("{$additional vars}", '$login = "' + document.sale_status.sha1_login.value + '";');
 php Sale Order Text = php Sale Order Text.replace("{$sign Function Call}", 'sign Status Request($request Fields, $login, $merchant Control)');
		php Sale Order Text = php Sale Order Text.replace("{$sandbox}", sandbox);

		ruby Sale Order Text = ruby Sale Order Text.replace("{$generated parameters with values code}", params);
		ruby Sale Order Text = ruby Sale Order Text.replace("{$sandbox}", sandbox);

 	 control = " 'control' => '" + CryptoJS.SHA1 (signed Text) + "'";

 	 java Sale Order Text = java Sale Order Text.replace("{$targetURL}", sandbox);
		java Sale Order Text = java Sale Order Text.replace("{$has Headers}", "false");
	 java Sale Order Text = java Sale Order Text.replace("{$url Parameters}", curl Text);
	 java Sale Order Text = java Sale Order Text.replace("{$control Parameters}", signed Text);

		php Sale Order Text = php Sale Order Text.replace("{$control}", control);
		ruby Sale Order Text = ruby Sale Order Text.replace("{$control}", control);

		show Text("saleorderstatusphpvalue" , php Sale Order Text);

		show Text("saleorderstatusrubyvalue" , ruby Sale Order Text);
		show Text("saleorderstatusjavavalue" , java Sale Order Text);

 show Text("saleorderstatussignedvalue" , signed Text);
 show Text("saleorderstatussha1value" , CryptoJS.SHA1 (signed Text));

		curl Sale Order Text = 'curl --data "' +
 curl Text +
 "control=" + CryptoJS.SHA1 (signed Text) +
 '" https://sandbox.payneteasy.ru/paynet/api/v2/' + document.sale_status.operationname.value + '/' +
 document.sale_status.endpointid.value;

 show Text("saleorderstatuscurlvalue" , curl Sale Order Text);
 $(document).ready (function() {
 $('pre code').each (function (i, block) {
 hljs.highlight Block (block);
 });
 });
 return false;
 }

 	function show Text (element Id, text) {
 var child = document.create Text Node (text);
 var element = document.get Element By Id (element Id);
		element.innerHTML ="";
 if (element.has Child Nodes()) {
 element.replace Child (child, element.first Child);
 } else {
 element.append Child (child);
 }
 }

 function copy To Clipboard Sale Order (text) {
 var text Area = document.create Element("textarea");

 // Place in top-left corner of screen regardless of scroll position.
 text Area.style.position = 'fixed';
 text Area.style.top = 0;
 text Area.style.left = 0;

 // Ensure it has a small width and height. Setting to 1px / 1em
 // doesn't work as this gives a negative w/h on some browsers.
 text Area.style.width = '2em';
 text Area.style.height = '2em';

 // We don't need padding, reducing the size if it does flash render.
 text Area.style.padding = 0;

 // Clean up any borders.
 text Area.style.border = 'none';
 text Area.style.outline = 'none';
 text Area.style.box Shadow = 'none';

 // Avoid flash of white box if rendered for any reason.
 text Area.style.background = 'transparent';

 if (text == 'curl'){
	text Area.value = curl Sale Order Text;
 } else if (text =='php'){
	text Area.value = php Sale Order Text;
 } else if (text == 'ruby'){
 	text Area.value = ruby Sale Order Text;
 } else if (text == 'java'){
 text Area.value = java Sale Order Text;
 }
 document.body.append Child (text Area);

 text Area.select();

 try {
 var successful = document.exec Command('copy');
 var msg = successful ? 'successful' : 'unsuccessful';
 console.log('Copying text command was ' + msg);
 } catch (err) {
 console.log('Oops, unable to copy');
 }

 document.body.remove Child (text Area);

 }
</script>

<form name="sale_status">

 <select class="doc-select" name="operationname" size="1" >
 <option value="status">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;by ENDPOINTID</option>
 <option value="status/group">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;by ENDPOINTGROUPID</option>
 </select>
 
 <p></p>
 <input type="button" class="doc-button" style="font-size: 100%; padding: 2px 6px 3px 6px;" value="Sign status Request" on Click="sign_sale_status (document.sale_status)"/>
 <p></p>
</form>

<ul class="nav nav-tabs" id="sale Order Tab">
 <li class="active">[CURL](#sale OrderCURL)</li>
 <li>[PHP](#sale OrderPHP)</li>
 <li>[Ruby](#sale Order Ruby)</li>
 <li>[Java](#sale Order Java)</li>
</ul>

 <button class="doc-button" onclick="copy To Clipboard Sale Order('php')">Copy to clipboard</button>
 <pre>
<code class="php" id="saleorderstatusphpvalue"></code>
</pre>

 <button class="doc-button" onclick="copy To Clipboard Sale Order('ruby')">Copy to clipboard</button>
 <pre>
<code class="language-ruby" id="saleorderstatusrubyvalue"></code>
</pre>

 <button class="doc-button" onclick="copy To Clipboard Sale Order('java')">Copy to clipboard</button>
 <pre>
<code class="language-java" id="saleorderstatusjavavalue"></code>
</pre>

### /api/v2/void

#### Введение

Void может быть обработан только для транзакций Sale и Capture с финальным успешным статусом (см. [Статусы](https://doc.payneteasy.ru/integration/reference/statuses.html.md)). Чтобы выполнить запрос Void, отправьте запрос HTTPS POST на указанные [URL](#api-v2-void-request-url) и [параметры](#api-v2-void-request-parameters-url). Для аутентификации используйте [SHA-1](https://doc.payneteasy.ru/integration/general_api_usage/request_authentication_methods/sha.html.md).

#### API URL

> **Note:** Путь API URL не должен быть задан фиксированным значением, т.к. он может быть изменён позднее.

| Интеграционная среда | Производственная среда |
|------------------------------------------------------------------------|--------------------------------------------------------------------|
| https://sandbox.payneteasy.ru/paynet/api/v2/void/ENDPOINTID | https://gate.payneteasy.ru/paynet/api/v2/void/ENDPOINTID |
| https://sandbox.payneteasy.ru/paynet/api/v2/void/group/ENDPOINTGROUPID | https://gate.payneteasy.ru/paynet/api/v2/void/void/ENDPOINTGROUPID |

#### Параметры запроса

> **Note:** Запрос должен иметь заголовок content-type=application/x-www-form-urlencoded.

> **Warning:** В значениях параметров необходимо экранировать следующие символы: & + “.

| Название параметра | Описание | Значение |
|----------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|
| login | Логин Присоединяющейся Стороны в Платёжном Шлюзе. | `Необходимость`: Обязательно `Тип`: String `Длина`: 20 |
| orderid | Уникальный идентификационный номер транзакции, присвоенный системой Payneteasy. | `Необходимость`: Обязательно `Тип`: String `Длина`: 20 |
| client_orderid | Уникальный идентификационный номер Присоединяющейся Стороны. | `Необходимость`: Обязательно `Тип`: Numeric `Длина`: 10 |
| amount | Этот необязательный параметр указывает сумму для Reversal. | `Необходимость`: Обязательно `Тип`: String `Длина`: 10 |
| currency | Валюта, в которой проводится операция (см. [Коды валют](https://doc.payneteasy.ru/integration/reference/currency_codes.html.md)). Примеры значений: USD для доллара США, EUR для европейского евро, RUB для российского рубля. | `Необходимость`: Условно `Тип`: String `Длина`: 3 |
| control | Контрольная сумма, сгенерированная [SHA-1](https://doc.payneteasy.ru/integration/general_api_usage/request_authentication_methods/sha.html.md). Строка для подписи представляет собой объединение следующих параметров: 1. Параметр запроса: login 2. Параметр запроса: client_orderid 3. Параметр запроса: orderid 4. merchant_control (Контрольный ключ, назначенный для аккаунта Присоединяющейся стороны в системе Payneteasy). | `Необходимость`: Условно `Тип`: String `Длина`: 128 |
| comment | Краткое описание. | `Необходимость`: Обязательно `Тип`: String `Длина`: 50 |

#### Параметры ответа

> **Note:** Ответ имеет заголовок Content-Type: text/html;charset=utf-8. Все поля имеют кодировку x-www-form-urlencoded, с символом (0xA) в конце значения каждого параметра.

| Название параметра | Описание |
|----------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| type | Тип ответа. Может принимать такие значения как: async-response, validation-error, error и т.д. Если тип ответа validation-error или error, параметры error-message и error-code будут содержать детали ошибки. |
| paynet-order-id | Идентификатор заказа, присвоенный Payneteasy. |
| merchant-order-id | Идентификатор заказа Присоединяющейся Стороны. |
| serial-number | Уникальный номер, присваиваемый сервером Payneteasy конкретному запросу от Присоединяющейся стороны. |
| end-point-id | Идентификатор терминала, используемый для транзакции. |
| error-message | Для транзакций в статусе error этот параметр будет содержать причину отклонения или сведения об ошибке. |
| error-code | Код ошибки для транзакций в статусе error. |

#### Пример запроса

```http
POST /paynet/api/v2/void/39914 HTTP/1.1
Host: sandbox.payneteasy.ru
User-Agent: curl/7.83.0
Accept: */*
Content-Length: 123
Content-Type: application/x-www-form-urlencoded
Connection: close

login=Test
&client_orderid=55
&orderid=6862995
&comment=Service not provided
&control=246e0a2074f9e4b84cff59b2567ed48ec3aab87d
```

#### Пример успешного ответа

```http
HTTP/1.1 200 OK
Server: server
Date: Tue, 16 Aug 2022 06:57:40 GMT
Content-Type: text/html;charset=utf-8
Connection: close
Vary: Accept-Encoding
X-XSS-Protection: 1
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000
Content-Language: en-US
Strict-Transport-Security: max-age=31536000
Content-Length: 138

type=async-response
&serial-number=00000000-0000-0000-0000-000002ddae76
&merchant-order-id=55
&paynet-order-id=6862995
&end-point-id=39914
```

#### Пример неуспешного ответа

```http
HTTP/1.1 200 OK
Server: server
Date: Tue, 16 Aug 2022 07:21:37 GMT
Content-Type: text/html;charset=utf-8
Connection: close
Vary: Accept-Encoding
X-XSS-Protection: 1
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000
Content-Language: en-US
Strict-Transport-Security: max-age=31536000
Content-Length: 148

type=validation-error
&serial-number=00000000-0000-0000-0000-000002ddae78
&merchant-order-id=Test
&error-message=INVALID_CONTROL_CODE
&error-code=2
```

#### Open API Collection

Open this method in the OpenAPI Reference

<a class="openapi-reference-button" href="/openapi-doc/#POST/api/v2/void/{endpoint Id}" target="_blank" rel="noopener">View in OpenAPI <svg xmlns="http://www.w3.org/2000/svg" view Box="0 0 24 24" fill="none" stroke="current Color" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg></a>

#### Коллекция Postman

<div class="postman-run-button"
data-postman-action="collection/fork"
data-postman-var-1="23519287-eb336009-8c3d-4db4-ad53-dece552334d2"
data-postman-collection-url="entity Id=23519287-eb336009-8c3d-4db4-ad53-dece552334d2&entity Type=collection&workspace Id=7be78bd7-9f10-4be9-a60e-bd36ff1b6783"
data-postman-param="env%5BPayment%20gateway%20ENV%5D=W3sia2V5IjoiVVJMIiwidm FsdWUi Oi IiLCJlbm FibGVk Ijp0cn VlLCJ0eXBl IjoiZGVmYXVsdCJ9XQ=="></div>
<script type="text/javascript">
 (function (p,o,s,t,m,a,n) {
 !p[s] && (p[s] = function () { (p[t] || (p[t] = [])).push (arguments); });
 !o.get Element By Id (s+t) && o.get Elements By Tag Name("head")[0].append Child((
 (n = o.create Element("script")),
 (n.id = s+t), (n.async = 1), (n.src = m), n
 ));
 }(window, document, "_pm", "Postman Run Object", "https://run.pstmn.io/button.js"));
 var env Name = "Payment gateway ENV";
	 var env Data = {
 URL:'sandbox.payneteasy.ru' + "/" + 'paynet'
 };
 \_pm('env.replace', env Name, env Data);
</script>

#### Конструктор запросов

<meta http-equiv="Cache-Control" content="no-cache">
<script src="../_static/js/crypto-js/sha1.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="../_static/js/highlight/styles/default.css">
<script src="../_static/js/highlight/highlight.pack.js"></script>

<script type="text/javascript">
$(document).ready (function(){ 
 $("#return Request Tab a").click (function (e){
 	e.prevent Default();
 	$(this).tab('show');
 });
});
</script>
<script type="text/javascript">
		var curl Request Text = "";
 
		var php Request Text = "";
		
		var ruby Request Text = "";

		var java Request Text = "";
 function sign_return_request (form) {
 var signed Text = "";

 var post Text = "";
		
		var curl Text = "";
		
		var sandbox = "";
		var params = "";
	 var url = "";
		var control = "";

		var amount Info = document.get Element By Id("amount Warning One");

		var xhttp = new XMLHttp Request();
		xhttp.onreadystatechange = function() {
		if (xhttp.ready State == 4 && xhttp.status == 200) {
			if (url == "../_static/examples/PHP/params_no_header_PHP_new.txt"){
				php Request Text = xhttp.response Text;}
			else if (url == "../_static/examples/Ruby/params_no_header_Ruby (for new version).txt") {
				ruby Request Text = xhttp.response Text;}
			else{
			 java Request Text = xhttp.response Text;}
			}
		}
	
		url = "../_static/examples/PHP/params_no_header_PHP_new.txt";
		xhttp.open("GET", url, false);
		xhttp.send();
		url = "../_static/examples/Ruby/params_no_header_Ruby (for new version).txt";
		xhttp.open("GET", url, false);
		xhttp.send();
		url = "../_static/examples/Java/params_java.txt";
		xhttp.open("GET", url, false);
		xhttp.send();
	

 for (var e = 0; e < form.elements.length; ++e) {
 var input = form.elements[e];
 if (input.name != null)
 {
 if (input.name.substring(0, 5) == "sha1_")
 if (input.value != null)
 if (input.value != "")
 if (!(input.type == "checkbox" || input.type == "radio") || input.checked)
 {
 if (input.name == "sha1_amount")
 { var amount To Fix = input.value \* 100;
 var fixed Amount = amount To Fix.to Fixed(0);
 if (fixed Amount != amount To Fix)
 { $('#amount Warning One').css("display", "block");amount Info.innerHTML = amount Info.innerHTML.replace("​", "Possible floating point imprecision (for more information check Floating Point Math)");}
 else {$('#amount Warning One').css("display", "none");amount Info.innerHTML = amount Info.innerHTML.replace("Possible floating point imprecision (for more information check Floating Point Math)", "​");}
 signed Text = signed Text + fixed Amount;}
 else
 {signed Text = signed Text + input.value;}
 }
 if (input.value != null && input.name != null)
 if (input.value != "" && input.name != "" && input.name != "operationname")
 if (input.name.substring(0, 5) == "sha1_")
 {
 if (input.name != "sha1_merchant_control" && input.name != "sha1_endpointid")
 {
 curl Text = curl Text + input.name.substring(5) + "=" + input.value + "&";

								 params += " '" + input.name.substring(5) + "' => '" + input.value + "', \\n";

 post Text = post Text +
 '<input type="hidden" name="' + input.name.substring(5) +
 '" value="' + input.value + '">';
 }
 }
 else
 {

 curl Text = curl Text + input.name + "=" + input.value + "&";

							 params += " '" + input.name + "' => '" + input.value + "', \\n";

							 post Text = post Text +
 '<input type="hidden" name="' + input.name +
 '" value="' + input.value + '">';
 }
 }
 }

		sandbox = 'https://sandbox.payneteasy.ru/paynet/api/v2/' + document.return_request.operationname.value + '/' +
 document.return_request.sha1_endpointid.value;

		php Request Text = php Request Text.replace("{$generated parameters with values code}", params);
		php Request Text = php Request Text.replace("{$sandbox}", sandbox);
		php Request Text = php Request Text.replace(/{\\$identifier Type Name}/g, document.return_request.operationname.value.match(/\\/group/) ? 'group Id' : 'endpoint Id');
		php Request Text = php Request Text.replace("{$endpoint Or Group Id}", document.return_request.sha1_endpointid.value);
		php Request Text = php Request Text.replace("{$merchant Control}", document.return_request.sha1_merchant_control.value);
		php Request Text = php Request Text.replace("{$additional vars}", '');
		php Request Text = php Request Text.replace("{$sign Function Call}", 'sign Payment Request($request Fields, $' + (document.return_request.operationname.value.match(/\\/group/) ? 'group Id' : 'endpoint Id') + ', $merchant Control)');

		ruby Request Text = ruby Request Text.replace("{$generated parameters with values code}", params);
		ruby Request Text = ruby Request Text.replace("{$sandbox}", sandbox);

 java Request Text = java Request Text.replace("{$has Headers}", "false");
 java Request Text = java Request Text.replace("{$targetURL}", sandbox);	 control = " 'control' => '" + CryptoJS.SHA1 (signed Text) + "'";
 java Request Text = java Request Text.replace("{$url Parameters}", curl Text);
 java Request Text = java Request Text.replace("{$control Parameters}", signed Text);

		php Request Text = php Request Text.replace("{$control}", control);
		ruby Request Text = ruby Request Text.replace("{$control}", control);
		
		curl Request Text = 'curl --data "' +
 curl Text +
 "control=" + CryptoJS.SHA1 (signed Text) +
 '" https://sandbox.payneteasy.ru/paynet/api/v2/' + document.return_request.operationname.value + '/' +
 document.return_request.sha1_endpointid.value;

		show Text("returnreqphpvalue" , php Request Text);
		
		show Text("returnreqrubyvalue" , ruby Request Text);
		show Text("returnreqjavavalue" , java Request Text);

 show Text("returnreqsignedvalue" , signed Text);
 show Text("returnreqsha1value" , CryptoJS.SHA1 (signed Text));
 show Text("returnreqcurlvalue" , curl Request Text);
		 $(document).ready (function() {
 $('pre code').each (function (i, block) {
 hljs.highlight Block (block);
 });
 }); 
 return false;
 }

 function show Text (element Id, text) {
 var child = document.create Text Node (text);
 var element = document.get Element By Id (element Id);
		element.innerHTML ="";
 if (element.has Child Nodes()) {
 element.replace Child (child, element.first Child);
 } else {
 element.append Child (child);
 }
 }

function copy To Clipboard Request Return Request (text) {
 var text Area = document.create Element("textarea");

 // Place in top-left corner of screen regardless of scroll position.
 text Area.style.position = 'fixed';
 text Area.style.top = 0;
 text Area.style.left = 0;

 // Ensure it has a small width and height. Setting to 1px / 1em
 // doesn't work as this gives a negative w/h on some browsers.
 text Area.style.width = '2em';
 text Area.style.height = '2em';

 // We don't need padding, reducing the size if it does flash render.
 text Area.style.padding = 0;

 // Clean up any borders.
 text Area.style.border = 'none';
 text Area.style.outline = 'none';
 text Area.style.box Shadow = 'none';

 // Avoid flash of white box if rendered for any reason.
 text Area.style.background = 'transparent';

 if (text == 'curl'){
	text Area.value = curl Request Text;
 } else if (text =='php'){
	text Area.value = php Request Text;
 } else if (text == 'ruby'){
 	text Area.value = ruby Request Text;
 } else if (text == 'java'){
 text Area.value = java Request Text;
 }
 document.body.append Child (text Area);

 text Area.select();

 try {
 var successful = document.exec Command('copy');
 var msg = successful ? 'successful' : 'unsuccessful';
 console.log('Copying text command was ' + msg);
 } catch (err) {
 console.log('Oops, unable to copy');
 }

 document.body.remove Child (text Area);

 }
</script>

<form name="return_request">

 <select class="doc-select" name="operationname" size="1">
 <option value="void">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void (by ENDPOINTID)</option>
 <option value="void/group">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void (by ENDPOINTGROUPID)</option>
 </select>
 
 <p></p>
 <input type="button" class="doc-button" style="font-size: 100%; padding: 2px 6px 3px 6px;" value="Sign return Request" onclick="sign_return_request (document.return_request)" />
 <p></p>
</form>

 <ul class="nav nav-tabs" id="return Request Tab">
 <li class="active">[CURL](#return RequestCURL)</li>
 <li>[PHP](#return RequestPHP)</li>
 <li>[Ruby](#return Request Ruby)</li>
 <li>[Java](#return Request Java)</li>
 </ul>

	 <button class="doc-button" onclick="copy To Clipboard Request Return Request('php')">Copy to clipboard</button>	
		<pre>
			<code class="php" id="returnreqphpvalue"> </code>
		</pre>

		<button class="doc-button" onclick="copy To Clipboard Request Return Request('ruby')">Copy to clipboard</button>	
		<pre>
			<code class="language-ruby" id="returnreqrubyvalue"></code>
		</pre>

		<button class="doc-button" onclick="copy To Clipboard Request Return Request('java')">Copy to clipboard</button>
		<pre>
			<code class="language-java" id="returnreqjavavalue"></code>
		</pre>

### /api/v4/create-card-ref

#### Введение

Создание Card reference ID и Recurring Payment ID инициируется через HTTPS POST запрос с использованием [URL](#api-v4-card-ref-id-request-url) и [параметров](#v4-card-ref-id-request-parameters), указанных ниже. Для аутентификации используйте [OAuth RSA-SHA256](https://doc.payneteasy.ru/integration/general_api_usage/request_authentication_methods/oauth.html.md).

#### API URL

> **Note:** Путь API URL не должен быть задан фиксированным значением, т.к. он может быть изменён позднее.

| Интеграционная среда | Производственная среда |
|-----------------------------------------------------------------------------------|--------------------------------------------------------------------------------|
| https://sandbox.payneteasy.ru/paynet/api/v4/create-card-ref/ENDPOINTID | https://gate.payneteasy.ru/paynet/api/v4/create-card-ref/ENDPOINTID |
| https://sandbox.payneteasy.ru/paynet/api/v4/create-card-ref/group/ENDPOINTGROUPID | https://gate.payneteasy.ru/paynet/api/v4/create-card-ref/group/ENDPOINTGROUPID |

#### Параметры запроса

> **Note:** Запрос должен иметь content-type=application/x-www-form-urlencoded и [Заголовки авторизации](https://doc.payneteasy.ru/integration/general_api_usage/request_authentication_methods/oauth.html.md).

| Параметры запроса Sale | Описание |
|--------------------------|-----------------------------------------------------------------------------------|
| login | Логин Присоединяющейся стороны в Системе. |
| client_orderid | Уникальный идентификатор заказа, присвоенный Присоединяющейся Стороной. |
| orderid | Идентификатор заказа транзакции, присвоенный Платёжным Шлюзом. |

Присоединяющаяся Сторона должна предоставить orderid и client_orderid, связанные с первой платёжной транзакцией. Это подчёркивает, что первый платёж является обязательным шагом для обработки рекуррентных платежей. Для авторизации кредитной карты информация о ней должна быть достаточной, а первоначальный платёж должен находиться в [финальном статусе](https://doc.payneteasy.ru/integration/reference/statuses.html.md).

#### Параметры ответа

> **Note:** Ответ имеет заголовок Content-Type: text/html;charset=utf-8. Все поля имеют кодировку x-www-form-urlencoded, с символом (0xA) в конце значения каждого параметра.

| Параметр ответа на регистрацию | Описание |
|----------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| type | Тип ответа. Может быть create-card-ref-response, validation-error, error. Если type равен validation-error или error, параметры error-message и error-code содержат детали ошибки. |
| serial-number | Уникальный номер, присваиваемый сервером Payneteasy конкретному запросу от Присоединяющейся стороны. |
| card-ref-id | Card reference ID, используемый в последующих рекуррентных платежах. |
| unq-card-ref-id | Уникальный идентификатор ссылки на карту для каждого PAN. Может использоваться Присоединяющейся стороной для программ лояльности или контроля мошенничества. |
| recurring-payment-id | ID токенизированных данных держателя карты Плательщика, называемый Recurring Payment ID (RPI). |
| dst-card-ref-id | Card reference ID Получателя, используемый в последующих рекуррентных платежах. Может использоваться только в transfer API. |
| dst-unq-card-ref-id | Уникальный card reference ID Получателя для каждого PAN. Может использоваться Присоединяющейся Стороной для программ лояльности или контроля фрода. Может использоваться только в transfer API. |
| dst-recurring-payment-id | ID токенизированных данных держателя карты Получателя, называемый Recurring Payment ID (RPI). Может использоваться только в transfer API. |
| error-message | Для транзакций в статусе declined или error этот параметр будет содержать причину отклонения или сведения об ошибке. |
| error-code | Код ошибки для транзакций в статусе declined или error. |
| status | Подробности см. в [Список статусов](https://doc.payneteasy.ru/integration/reference/statuses.html.md). |

#### Пример запроса

```http
POST /paynet/api/v4/create-card-ref/39915 HTTP/1.1
Host: sandbox.payneteasy.ru
User-Agent: curl/7.83.0
Accept: */*
Authorization: OAuth oauth_consumer_key="TestMerchant", oauth_nonce="KT6cZmuVGqg0V6Jm2RE3q4o79KXC1v2q", oauth_signature="KucF0eYk3WZCV7oKwOi1z6PR%2BkHxiZwPucD6Sx%2BX2mV%2BbaidPy9K9USh8ciMKM60NNl1LYYjywdaErB1uTIdFFbQ8ZKs8M1smaMPOaHDaApceTOlDh6E7u3BzBTKYhBc%2BWnksZz9Wyz8%2B39lHCIODo0KZmNmXCTjjZmlx%2FrFNkK%2FhwJV9Kwq1nPbA5QZTkF686O0O0lHFy3Prx649AIRgsrqDLb5%2FgHL9M8fSScVUPnGdLGJ2hSgKJFpIOFibT0nC89Xg8odn1hR9WIa1650glaqZntSkocBzXAkOKa7kIbSOZW1sFCiBjksy6o1sny9hmc%2F9cC9t86RoEY1QhVYuvOLztQm1dLhpRy%2FPOL9LCmIzO3B%2FUB2wJUXPkEyFsSLZVeqQl%2B0IukljV6Cr1ZfuyUktbvvXJsnod5AK%2FsV2GaxEf%2BttqqWv%2FFNjPLoUZYrPB6rKsIpw%2FOftinIwIxYzLY3FMmbKQd6zxnMJLJm7M2s6cQFGiAnfgvZFAMZhugBuuigy4T9Ckq1t5N9vQkl2htDv0TTnswx50wpF%2F7OKiXTVFNqOE%2FCj%2F07ZwZbxbD%2FMxKhOhfNMME1jGxzgI0wEj1166eKpxnCOk%2BTlYTJvNW5%2BbKuGnU43Q2Nmga0aQ007NKRfIV%2FWk6e%2BUuGO48wGdi0CiKxS9hpnpvjyPLc%2BsA%3D", oauth_signature_method="RSA-SHA256", oauth_timestamp="1673335450", oauth_version="1.0"
Content-Length: 40
Content-Type: application/x-www-form-urlencoded
Connection: close

client_orderid=34T43R77N
&orderid=6868305
```

#### Пример успешного ответа

```http
HTTP/1.1 200
Server: server
Date: Tue, 10 Jan 2023 07:24:36 GMT
Content-Type: text/html;charset=utf-8
Connection: close
Vary: Accept-Encoding
X-XSS-Protection: 1
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000
Content-Language: en-US
Strict-Transport-Security: max-age=31536000
Content-Length: 174

type=create-card-ref-response
&serial-number=00000000-0000-0000-0000-000002de3113
&card-ref-id=1461608
&recurring-payment-id=1491863
&dst-card-ref-id=1461608
&status=approved
```

#### Пример неуспешного ответа

```http
HTTP/1.1 403
Server: server
Date: Tue, 10 Jan 2023 07:34:08 GMT
Content-Type: text/html
Content-Length: 735
Connection: close
X-XSS-Protection: 1
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>403</title>

    
</head>

<body>
    <p>Access is denied</p>
</body>
</html>
```

#### Open API Collection

Open this method in the OpenAPI Reference

<a class="openapi-reference-button" href="/openapi-doc/#POST/api/v4/create-card-ref/{endpoint Id}" target="_blank" rel="noopener">View in OpenAPI <svg xmlns="http://www.w3.org/2000/svg" view Box="0 0 24 24" fill="none" stroke="current Color" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg></a>

#### Коллекция Postman

<div class="postman-run-button"
data-postman-action="collection/fork"
data-postman-var-1="23519287-0e721eb3-fb7e-4589-be2f-466bf8a8e6de"
data-postman-collection-url="entity Id=23519287-0e721eb3-fb7e-4589-be2f-466bf8a8e6de&entity Type=collection&workspace Id=7be78bd7-9f10-4be9-a60e-bd36ff1b6783"
data-postman-param="env%5BPayment%20gateway%20ENV%5D=W3sia2V5IjoiVVJMIiwidm FsdWUi Oi IiLCJlbm FibGVk Ijp0cn VlLCJ0eXBl IjoiZGVmYXVsdCJ9XQ=="></div>
<script type="text/javascript">
 (function (p,o,s,t,m,a,n) {
 !p[s] && (p[s] = function () { (p[t] || (p[t] = [])).push (arguments); });
 !o.get Element By Id (s+t) && o.get Elements By Tag Name("head")[0].append Child((
 (n = o.create Element("script")),
 (n.id = s+t), (n.async = 1), (n.src = m), n
 ));
 }(window, document, "_pm", "Postman Run Object", "https://run.pstmn.io/button.js"));
 var env Name = "Payment gateway ENV";
	 var env Data = {
 URL:'sandbox.payneteasy.ru' + "/" + 'paynet'
 };
 \_pm('env.replace', env Name, env Data);
</script>

#### Конструктор запросов

Вставьте приватный ключ PKCS#1 PEM для среды sandbox в поле ниже. Конструктор запросов поддерживает длину ключа до 4096.
 
<link rel="stylesheet" href="../_static/pygments.css" type="text/css">
<script type="text/javascript" src="../_static/js/d2cdebug/oauth-1.0a-rsa-sha256.js"></script>
<script type="text/javascript" src="../_static/js/d2cdebug/jsrsasign-latest-all-min.js"></script>
<script src="../_static/js/generate_card_number.js"></script>
<meta http-equiv="Cache-Control" content="no-cache">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="../_static/js/highlight/styles/default.css">
<script src="../_static/js/highlight/highlight.pack.js"></script>

<script type="text/javascript">
$(document).ready (function(){
 $("#token Request Tab a").click (function (e){
 	e.prevent Default();
 	$(this).tab('show');
 });
});
</script>

<script type="text/javascript">
 var RSAPrivate KeyPEM = "";
 var curl Token Request Text = "";
 var php Token Request Text = "";
 var ruby Token Request Text = "";
 var java Token Request Text = "";

 function generateRSAsign Token() {
 RSAPrivate KeyPEM = document.get Element By Id("prvkey").value;

 var oauth = OAuth({
 consumer: {
 public: document.v4Token Request.elements['login'].value
 },
 signature_method: 'RSA-SHA256'
 });

 var request Url = document.v4Token Request.elements['url'].value;

 var req_data = "";

 req_data = {
 url: request Url,
 method: 'POST',
 data: {
 //'login': document.v4Token Request.elements['login'].value, --not included in request parameters as "login", only as "oauth_consumer_key"
 'client_orderid': document.v4Token Request.elements['client_orderid'].value,
 'orderid': document.v4Token Request.elements['orderid'].value,

 }
 };

 //excluding empty parameters from output
 function remove Empty (obj) {
 Object.keys (obj).for Each((key) => (obj[key] == "") && delete obj[key]);
 };
 remove Empty (req_data.data);

 var oauth_data = oauth.authorize (req_data);
 var data_for_base_string = {
 "oauth_consumer_key": oauth_data.oauth_consumer_key,
 "oauth_nonce": oauth_data.oauth_nonce,
 "oauth_signature_method": oauth_data.oauth_signature_method,
 "oauth_timestamp": oauth_data.oauth_timestamp,
 "oauth_version": oauth_data.oauth_version
 };

 var xhttp = new XMLHttp Request();
 xhttp.onreadystatechange = function() {
 if (xhttp.ready State == 4 && xhttp.status == 200) {
	 if (url == "../_static/examples/PHP/params_with_header_PHP.txt"){
 php Token Request Text = xhttp.response Text;}
		 else if (url == "../_static/examples/Ruby/params_with_header_Ruby.txt") {
		 ruby Token Request Text = xhttp.response Text;}
		 else{
		 java Token Request Text = xhttp.response Text;}
 }
 }
	 url = "../_static/examples/PHP/params_with_header_PHP.txt";
 xhttp.open("GET", url, false);
 xhttp.send();
	 url = "../_static/examples/Ruby/params_with_header_Ruby.txt";
 xhttp.open("GET", url, false);
 xhttp.send();
	 url = "../_static/examples/Java/params_java_v4.txt";
 xhttp.open("GET", url, false);
 xhttp.send();

 var params = "";

 for (var key in req_data) {
 if (key == 'data'){
 for (var key in req_data.data){
 params +=(" '"+ key + "' => '" + req_data.data[key] + "', \\n" );
 }
 }
 }

 php Token Request Text = php Token Request Text.replace("{$generated parameters with values code}", params);
		php Token Request Text = php Token Request Text.replace("{$sandbox}", request Url);
		php Token Request Text = php Token Request Text.replace("{$Authorization}", oauth.to Header (oauth_data). Authorization);

		ruby Token Request Text = ruby Token Request Text.replace("{$generated parameters with values code}", params);
		ruby Token Request Text = ruby Token Request Text.replace("{$sandbox}", request Url);
		ruby Token Request Text = ruby Token Request Text.replace("{$Authorization}", oauth.to Header (oauth_data). Authorization);

 show Text("tokenrequestbasestring", oauth.get Base String (req_data, data_for_base_string));
 show Text("tokenrequestparameters", oauth.get Parameter String NoOAuth (req_data));
 show Text("tokenrequestheaders", oauth.to Header (oauth_data). Authorization);
 show Text("tokenrequesthexsign", oauth_data.hex_signature);
 show Text("tokenrequestb64sign", oauth_data.oauth_signature);
 var java Header = oauth.to Header (oauth_data). Authorization.split('"').join('\\\\"');
 java Header = '"' + java Header + '"';

 java Token Request Text = java Token Request Text.replace("{$targetURL}", request Url);
		java Token Request Text = java Token Request Text.replace("{$has Headers}", "true");
		java Token Request Text = java Token Request Text.replace("{$oauth Header}", java Header);
	 java Token Request Text = java Token Request Text.replace("{$url Parameters}", oauth.get Parameter String NoOAuth (req_data));

 curl Token Request Text = 'curl -H \\'Authorization: '
 + oauth.to Header (oauth_data). Authorization
 + '\\' --data \\''
 + oauth.get Parameter String NoOAuth (req_data)
 + '\\' \\'' + req_data.url + '\\'';

 show Text("token4requestphpvalue", php Token Request Text);
 show Text("token4requestrubyvalue", ruby Token Request Text);
 show Text("token4requestjavavalue", java Token Request Text);
 show Text("token4requestcurlvalue", curl Token Request Text);

 function show Text (element Id, text) {
 var child = document.create Text Node (text);
 var element = document.get Element By Id (element Id);
 element.innerHTML = "";
 if (element.has Child Nodes()) {
 element.replace Child (child, element.first Child);
 } else {
 element.append Child (child);
 }
 }

 $(document).ready (function() {
 $('pre code').each (function (i, block) {
 hljs.highlight Block (block);
 });
 });
 }

 function rand Inv (c) {
 document.get Element By Id (c).value = "inv" + Math.floor (Math.random() \* 10000000);
 }

 function copy To Clipboard Token Request (text) {
 var text Area = document.create Element("textarea");

 // Place in top-left corner of screen regardless of scroll position.
 text Area.style.position = 'fixed';
 text Area.style.top = 0;
 text Area.style.left = 0;

 // Ensure it has a small width and height. Setting to 1px / 1em
 // doesn't work as this gives a negative w/h on some browsers.
 text Area.style.width = '2em';
 text Area.style.height = '2em';

 // We don't need padding, reducing the size if it does flash render.
 text Area.style.padding = 0;

 // Clean up any borders.
 text Area.style.border = 'none';
 text Area.style.outline = 'none';
 text Area.style.box Shadow = 'none';

 // Avoid flash of white box if rendered for any reason.
 text Area.style.background = 'transparent';

 if (text == 'curl') {
 text Area.value = curl Token Request Text;
 } else if (text == 'php') {
 text Area.value = php Token Request Text;
 } else if (text == 'ruby'){
 text Area.value = ruby Token Request Text;
 }else{
 text Area.value = java Token Request Text;
 }
 document.body.append Child (text Area);

 text Area.select();

 try {
 var successful = document.exec Command('copy');
 var msg = successful ? 'successful' : 'unsuccessful';
 console.log('Copying text command was ' + msg);
 } catch (err) {
 console.log('Oops, unable to copy');
 }

 document.body.remove Child (text Area);
 document.onreadystatechange = function() {
 if (document.ready State == "complete") {
 generateRSAsign Token();
 }
 };

 }

 function sign_v4Token Request (form) {
 generateRSAsign Token();
 return false;
 }

</script>

<body>

<textarea id="prvkey" style="font-family: monospace; min-height:19em;height:100%;" rows="10" cols="66">-----BEGIN RSA PRIVATE KEY-----
MIIJKQIBAAKCAgEA16QK2iwgYUb Mr2Gq SbaS0PQZKF2Dkst Sj0dakW+hASTz5Ams
R5s DnurfeR4m+Htaxiv69MMdvoDLu CmZE8KQzsEOZovZ9UYSh9CKK4/FzQSZ8ZDP
8cpKLN7/git WiM14iuC9Pi74TTLeg7Pu Gjeoc0j Us0WMf7sV6uzf Zwvq YgUVRljY
gscwDRiTSGJQum Qtan Cs/LMIkxou Th LztSSEm Hhh Ez2aWOomqR5hHO+HJ4I1AfET
V7VpKJ4c1+z Mes Dfp DxZ8Vp Qpno9iikFG64MigDFm BeskI6q15t BwbROYSfqNEmG
LwhYQ+SXnojueazkSJ45CeQRh6dn3GgD7kex2N3lK97qpq DcWOLqcsbe+ZyTGALn
WGzTZWjleO+yrdE6awD34kUYVnzD/9Wvd YqpH2pXBDqOIXu6lm4g Le5pKTRiFEc+
Tjg Vb34tJGEERkrvqktSEmRQz MgZQn Zk/5//7+csUIcSPmqd Un5oB6ng Vue Zkk7v
wtL6dc Cxr5is WgXQEO+o Ybt72Ns5RjLVWiXWv2ZNFd+iR4O6+et BxYNz+mg/2B5c
PO8NWyvv FlaBUu4I5GG1XntBGWncKQiZ49WCv LcYEb SfUEkWLj6zq JaDS/buT3jU
rWQ0WEI8G1HnTQp0cqmx9WpXDLx4n3yt Rj Hu He3ND9AYE28yhfFY5baIU3UCAwEA
AQKCAgAC4QrQDOTFx7c15DzszQY6yfeIBW+b Ry Gs Dgz UgkQJCuBCv Cp Trmsm9QXU
zSVCDguRN8ca+3vr LjcKF2w WynM6f3NcxSM81hmrPIq Lu Fiwuw3/HqrYFJZW8QdC
SqfWHc At Qo Dk UqY4CaTU51MXgIS8PU2xsw0EK5BIWa9F5e/ULTMyhD8nx9cJZbmZ
rs5b Hrl Ig Yadv RoxNJl Hq5Mba QhoLLtHEXx9EWt Au ModI8mPKnrgssJKWn6z7yB9
d Yjp XqfdvnyI72bCQkGOFaweyX0b XpVEyZQh Pf Zj+IuxNWIShADpf83N1POwvF2V
3Ugp0bgejBZA3o2pXP/S/oSG6ugh8dZHfa8vkw0x5N28393IzIMpzwE2Ens BidN1
ca7Nw Dpmp UyuULSpi3Yo ViUYY1i4Mwngv2XQdkbvo Gus Qwg Wo NrppmDKxlL5qEBf
lIPCZAgZSR79KHYw2VOzkm84hu0jDXMthpt9A2g Lk Rh Gn Ggb4n5Kzy CpY9iuFK2w
CO5FdjloXOjRLZb7G1JCeU6Qh0kjSE7seh9ltyo+VsWOLx4UwVOYGCMAF45yO0wF
/MJd Yo Ut1vC5G/DK8itTTjwb/x PlGDiC441TOReWVwF6n36+shb6szlI2EmqKBkp
2Sr5xQ5VNZkcG2W/BUF7+n8Rvisu17TyW0HmwDEBDfJQzgzgpQKCAQEA7RpBNVBH
Jx8gR7h Qdbyi4/6U5Ki YorkzuoK4KkjRWJfq Jvp9uGZS2v Dw OoIC8kCAXMwu3OCI
U0xk DvH7bb/qedn0IG7+72FUCKlxqk Mk4lv03zE9yUPcYNT+w573uh+rXQ/mcsFF
+a BtupRZi Dqqd4vuvj Tpjw5Q4tyk/lx Zfbe10S2NyxY4d Zsbm8gl0Syp Ls/rLYjZ
8Znt Rp ZozIWoenrF3AnvtR114WBDpBVwSJ9KNd8xB5Fufc9TqsZ/EKPjDVrn2Sq2
Lt/xKSopwx Py IhKG1zm Ae Yhv8Q+GYUOQYCf Bj2opDC3AOxANw2j9M8n YjCMDm PaP
5iDCUla35srp/wKCAQEA6NPj8auPGGFen2ZJoydpEPKgU3z Adv05VlKVIvbA9c+Y
oy7z Nhn Nw0PCkk YpB9jPGvpdn6KFh2ZTU/mgm Iys Kri LcLN4g Kho7JUCU3kvg1mv
z Jiz/5fR0xCCRNPLAANh6uJ+CXyssjb Uoe9Emy VxKX3l2z Kmy1zOKRc/Fb Akql07
ItDReryb64IjsfT4GtU4nBK7z CzI+yya1BjL/McnGBcpKIwp9HCwaTQK7yxa7ThY
Tsf TuxoyZM1/xZE0cKRJGVLtkao1Vf Oy0SDd Cp+Rwt Bv Vmt3Wt6v VcL6qG0LW5Fe
Uz0PN+Ceb MfhBCaqWXIXeuMUo+Rd Ln Gn113Tl6i6iwKCAQEAz+NzRUGMAXtDHF84
/OJWmD1BY3OH0TU9a8ztmPWby Gf6gA6la Kcf AqS6nTId TzbK1ZKZjES6gv65x Hjb
ERFyj0BQ0pc/o7fcrHOVG8ofbv Fdt MxB9l QvyB84+WBKqMDXyZMFZZyctBC75Rnp
no6Bp KvmupM+LZZJyX/YksV6GcaX/j5I0sY63rMO8/n7XnogJNFczOHu5e0mo/uB
C8ItRKadER8NM+o Oz3tOE3JQrvwr Xyz Amngj Pu An5daA1qA7lhwcq MbQUi08D/HO
CCNW7BT+c Xs Tc Hv2WpBYLLPGx Oh WyF42e10p7R9YUfud9miGG+kfYGDf LtGOUA+E
0z EbFQKCAQEA4lcz Dnqolpv5394RkiG6+zXTdLYfaM2NUw TfZOka9xx El8c Juztk
lAIoggjg1HcKB4EDSTA2vUVVlppjb Em9CZ70N7DRYcn Wjr/h TgLOlNO4mp6Mxdny
qkwvR/fZLf8bzrs2qc Rh IrM5DN/NA0Jn+10f+nMIQUTMSpg FxPDDBDe0SIlWTApV
Ta Lr TpIGLBf Ce7+ef8O98qgPMEeW7vsw XzQM2BVCqBZw+SUVyCOHl XukJZo PlKHI
Ac ThBNC/eQ3M3miG+YfNZ+y Mls9q82viyM/WnN3GXzm CnE37XYb8dp0gZK1EQR8F
BF1fu6hXDLNkbhu ZsiZMC92DvFPDYnku NwKCAQA6/2K8PLl OeK+0p/IGVsg Jpg Hn
Uh3BehVKHXeG/Buhn5bMXX3cB2hEHg2tz4pw3JxfZ1UflhyhKD43Xnpxu Mmt81Ka
Ja5MeXDg0kfnl XolVA4ezx2V2EohMEx UykkOIfQBDTa Ntjsg5PB4HLKFId3kJ6u/
JCXuy0EA07vl/k Nl+cDEBLJs VtvtxHLdpd JhO1POi3IIg OpddO+a/O/GDsdlAWog
hy Eb6r7+b Wurjw0YjHX+R5ZQ+0XtnzXU20d2NiP/oH2Iv QzXRUQ1U17Kzzn5PAhs
YC7r9lRV4Vjbh Ei3Zk2FBPrrzs2ie Xo5aHXCnz FywQ99nlrz0Ic8vV16WR1x
-----END RSA PRIVATE KEY-----
</textarea>

<h5>Debug form</h5>

<form name="v4Token Request">

 
 <p></p>
 <input type="button" class="doc-button" style="font-size: 100%; padding: 2px 6px 3px 6px;" value="Sign token Request" onclick="sign_v4Token Request (document.v4Token Request)" />
 <p></p>
</form>

<sup>\* HEX encoded string is for debug purposes only. You shouldn't send this string to the server neither in HEX nor in Encoded HEX representation.</sup>

<sup>\* Binary RSA-SHA256 signature directly encoded in base64 should be sent to the server.</sup>

<ul class="nav nav-tabs" id="token Request Tab">
 <li class="active">[CURL](#token RequestCURL)</li>
 <li>[PHP](#token RequestPHP)</li>
 <li>[Ruby](#token Request Ruby)</li>
 <li>[Java](#token Request Java)</li>
</ul>

 <button class="doc-button" onclick="copy To Clipboard Token Request('php')">Copy to clipboard</button>
 <pre><code class="php" id="token4requestphpvalue"></code></pre>

 <button class="doc-button" onclick="copy To Clipboard Token Request('ruby')">Copy to clipboard</button>
 <pre><code class="language-ruby" id="token4requestrubyvalue"></code></pre>

 <button class="doc-button" onclick="copy To Clipboard Token Request('java')">Copy to clipboard</button>
 <pre><code class="language-java" id="token4requestjavavalue"></code></pre>

### /api/v4/transfer-by-ref

#### Введение

Трансфер Deposit to card (D2C) - это тип перевода средств с банковского аккаунта Присоединяющейся Стороны (Депозит) на номер банковской карты Получателя (PAN) или токенизированный идентификатор карточных данных (Card Reference ID). Deposit to card инициируется через запрос HTTPS POST на указанный ниже [URLs](#api-v4-transfer-by-ref-url) с использованием [указанных параметров](#api-v4-transfer-by-ref-request). Для аутентификации запроса используется [OAuth RSA-SHA256](https://doc.payneteasy.ru/integration/general_api_usage/request_authentication_methods/oauth.html.md).

#### API URL

> **Note:** Путь API URL не должен быть задан фиксированным значением, т.к. он может быть изменён позднее.

| Интеграционная среда | Производственная среда |
|-----------------------------------------------------------------------------------|--------------------------------------------------------------------------------|
| https://sandbox.payneteasy.ru/paynet/api/v4/transfer-by-ref/ENDPOINTID | https://gate.payneteasy.ru/paynet/api/v4/transfer-by-ref/ENDPOINTID |
| https://sandbox.payneteasy.ru/paynet/api/v4/transfer-by-ref/group/ENDPOINTGROUPID | https://gate.payneteasy.ru/paynet/api/v4/transfer-by-ref/group/ENDPOINTGROUPID |

#### Параметры запроса

> **Note:** Запрос должен иметь content-type=application/x-www-form-urlencoded и [Заголовки авторизации](https://doc.payneteasy.ru/integration/general_api_usage/request_authentication_methods/oauth.html.md).

Параметры отмеченные как Опциональные\* могут быть Обязательными в зависимости от интеграции. Свяжитесь с менеджером Payneteasy для получения дополнительной информации.
 

| Название параметра | Описание | Значение |
|-----------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------|
| client_orderid | Идентификационный номер транзакции, присовенный Присоединяющейся Стороной. | `Необходимость`: Обязательно `Тип`: String `Длина`: 128 |
| login | Логин Присоединяющейся Стороны. Должен быть использован как параметри oauth_consumer_key в авторизации OAuth и не должен быть включен в запрос как параметр login. | `Необходимость`: Обязательно `Тип`: String `Длина`: 20 |
| destination-card-no | Номер карты Получателя. Параметр является обязательным в случае присутствия destination-card-ref-id. Для сценариев выплат на карту внутри системы, данная карта будет расцениваться как целевая и все процессинговые лимиты, листы и Фрод очки применятся как к целевой карте. | `Необходимость`: Условно `Тип`: String `Длина`: 16-19 |
| destination-card-ref-id | Ссылочный идентификатор карты, полученный на шаге Регистрации Карты. Параметр является обязательным в случае присутствия destination-card-no. Для сценариев выплат на карту внутри системы, данная карта будет расцениваться как целевая и все процессинговые лимиты, листы и Фрод очки применятся как к целевой карте. | `Необходимость`: Условно `Тип`: Numeric `Длина`: 20 |
| destination_expire_month | Месяц истечения срока действия карты получателя. | `Необходимость`: Условно `Тип`: String `Длина`: 512 |
| destination_expire_year | Год истечения срока действия карты получателя. | `Необходимость`: Условно `Тип`: String `Длина`: 2-3 |
| amount | Сумма для перевода. Сумма должна быть указана в старших единицах с разделителем .. Например, 10.5 для USD означает 10 долларов США и 50 центов. | `Необходимость`: Обязательно `Тип`: Numeric `Длина`: 10 |
| currency | Валюта, в которой проводится операция. Примеры значений: USD для доллара США, EUR для европейского евро, RUB для российского рубля. | `Необходимость`: Обязательно `Тип`: String `Тип`: 3 |
| order_desc | Описание заказа. | `Необходимость`: Обязательно `Тип`: String `Длина`: 64k |
| receiver_identity_document_series | Серия докумета, удостоверяющего личность Получателя. | `Необходимость`: Опционально `Тип`: String `Длина`: 512 |
| receiver_identity_document_number | Номер докумета, удостоверяющего личность Получателя. | `Необходимость`: Опционально `Тип`: String `Длина`: 512 |
| receiver_identity_document_id | Идентификационный номер документа, удостоверяющего личноть Получателя. Возможные значения: 21 для местного паспорта или 31 для международного. | `Необходимость`: Опционально `Тип`: String `Длина`: 512 |
| receiver_address1 | Адрес Получателя. | `Необходимость`: Опционально `Тип`: String `Длина`: 512 |
| receiver_city | Город Получателя. | `Необходимость`: Опционально `Тип`: String `Длина`: 512 |
| receiver_first_name | Имя Получателя. | `Необходимость`: Обязательно `Тип`: String `Длина`: 128 |
| receiver_middle_name | Среднее имя/патроним Получателя. | `Необходимость`: Опционально `Тип`: String `Длина`: 128 |
| receiver_last_name | Фамилия Получателя. | `Необходимость`: Обязательно `Тип`: String `Длина`: 128 |
| receiver_phone | Полный номер мобильного телефона Получателя, включая код страны. | `Необходимость`: Опционально `Тип`: String `Длина`: 128 |
| receiver_resident | Является ли Получатель резидентом? | `Необходимость`: Опционально `Тип`: Boolean `Длина`: true/false |
| ipaddress | IP-адрес Плательщика. Включен для отслеживания мошеннических действий. | `Необходимость`: Опционально `Тип`: String `Длина`: 45 |
| first_name | Имя Отправителя. | `Необходимость`: Опционально `Тип`: String `Длина`: 128 |
| middle_name | Среднее имя/патроним Отправителя. | `Необходимость`: Опционально `Тип`: String `Длина`: 128 |
| last_name | Фамилия Отправителя. | `Необходимость`: Опционально `Тип`: String `Длина`: 128 |
| ssn | Последние четыре цифры номера социального страхования Отправителя. | `Необходимость`: Опционально `Тип`: Numeric `Длина`: 32 |
| birthday | Дата рождения Отправителя в формате MMDDYY. | `Необходимость`: Опционально `Тип`: Numeric `Длина`: 8 |
| address1 | Адрес Плательщика, строка 1. (Обратите внимание, что в некоторых случаях невозможно отправить адрес длиной более 50 символов. Для получения более подробной информации обратитесь к вашему менеджеру.) | `Необходимость`: Опционально `Тип`: String `Длина`: 256 |
| city | Город Отправителя. | `Необходимость`: Опционально `Тип`: String `Длина`: 50 |
| state | Регион отправителя. Список допустимых кодов регионов см. в Приложении A. Обязателен для США, Канады и Австралии. | `Необходимость`: Опционально `Тип`: String `Длина`: 2-3 |
| zip_code | Почтовый индекс Отправителя. | `Необходимость`: Опционально `Тип`: String `Длина`: 10 |
| receiver_zip_code | Почтовый индекс Получателя. | `Необходимость`: Опционально `Тип`: String `Длина`: 10 |
| country | Страна отправителя (двухбуквенный код страны). Список допустимых кодов стран см. в приложении B. | `Необходимость`: Опционально `Тип`: String `Длина`: 2 |
| receiver_country_code | Страна получателя (двухбуквенный код страны). Список допустимых кодов стран см. в Приложении B. | `Необходимость`: Опционально `Тип`: String `Длина`: 2 |
| phone | Полный международный номер телефона Отправителя, включая код страны. | `Необходимость`: Опционально `Тип`: String `Длина`: 15 |
| cell_phone | Полный номер мобильного телефона Отправителя, включая код страны. | `Необходимость`: Опционально `Тип`: String `Длина`: 15 |
| email | Электронный адрес Отправителя. | `Необходимость`: Опционально `Тип`: String `Длина`: 50 |
| purpose | Куда совершается платёж. Может быть полезно для Присоединяющихся Сторон, позволяющих своим клиентам совершать трансфер с кредитной карты на какой-либо тип аккаунта клиента, например, игры или аккаунт мобильного телефона. Например: +9999999999; mail@example.com и т.д. Данный параметр может быть использован в целях отслеживания мошеннических действий. | `Необходимость`: Опционально `Тип`: String `Длина`: 128 |
| server_callback_url | URL-адрес server_callback_url, по которому будет отправлен обратный вызов с результатом транзакции. Присоединяющаяся сторона может использовать обратные вызовы для индивидуальной обработки завершения транзакции (например, для сбора данных о платежах в информационной системе Присоединяющейся стороны). Список параметров, включенных в обратный вызов, см. в разделе [Обратного вызова Присоединяющейся стороны](https://doc.payneteasy.ru/integration/merchant_callback_parameters.html.md). Данный параметр может быть передан вместо notify_url. При использовании server_callback_url платежный шлюз отправляет callback-уведомление только при получении финального статуса исходной транзакции. При использовании notify_url платежный шлюз отправляет уведомление при получении финального статуса и продолжает отправлять уведомления о всех последующих изменениях (возвраты, chargeback и др.). | `Необходимость`: Опционально `Тип`: String `Длина`: 128 |
| notify_url | URL-адрес notify_url, по которому будет отправлен обратный вызов с результатом транзакции. Присоединяющаяся сторона может использовать обратные вызовы для индивидуальной обработки завершения транзакции (например, для сбора данных о платежах в информационной системе Присоединяющейся стороны). Список параметров, включенных в обратный вызов, см. в разделе [Обратного вызова Присоединяющейся стороны](https://doc.payneteasy.ru/integration/merchant_callback_parameters.html.md). Данный параметр может быть передан вместо server_callback_url. При использовании notify_url платежный шлюз отправляет уведомление при получении финального статуса и продолжает отправлять уведомления о всех последующих изменениях (возвраты, chargeback и др.). При использовании server_callback_url платежный шлюз отправляет callback-уведомление только при получении финального статуса исходной транзакции. | `Необходимость`: Опционально `Тип`: String `Длина`: 128 |
| redirect_url | URL, на который держатель карты будет перенаправлен после завершения транзакции. Перенаправление выполняется независимо от одобрения или отклонения транзакции. Подробнее см. в [статусах](https://doc.payneteasy.ru/integration/reference/statuses.html.md). | `Необходимость`: Опционально `Тип`: String `Длина`: 250 |
| redirect_success_url | URL-адрес, на который будет перенаправлен Плательщик после завершения транзакции. Перенаправление осуществляется только в случае получения транзакцией статуса успешно | `Необходимость`: Опционально `Тип`: String `Длина`: 1024 |
| redirect_fail_url | URL-адрес, на который будет перенаправлен Плательщик после завершения транзакции. Перенаправление осуществляется только в случае получения транзакцией статуса неуспешно или отфильтровано | `Необходимость`: Опционально `Тип`: String `Длина`: 1024 |
| merchant_data | Любая дополнительная информация о транзакции, которая может быть полезна во внешних системах Присоединяющейся стороны, например VIP клиент, лид промокампании на ТВ. | `Необходимость`: Опционально `Тип`: String `Длина`: 64k |

#### Параметры ответа

> **Note:** Ответ имеет заголовок Content-Type: text/html;charset=utf-8. Все поля имеют кодировку x-www-form-urlencoded, с символом (0xA) в конце значения каждого параметра.

| Параметр ответа | Описание |
|-------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| type | Тип ответа. Может принимать такие значения как: async-response, validation-error, error и т.д. Если тип ответа validation-error или error, параметры error-message и error-code будут содержать детали ошибки. |
| paynet-order-id | Идентификатор заказа, присвоенный Payneteasy. |
| merchant-order-id | Идентификатор заказа Присоединяющейся Стороны. |
| serial-number | Уникальный номер, присваиваемый сервером Payneteasy конкретному запросу от Присоединяющейся стороны. |
| error-message | Для транзакций в статусе error этот параметр будет содержать причину отклонения или сведения об ошибке. |
| error-code | Код ошибки для транзакций в статусе error. |

#### Пример запроса

```http
POST /paynet/api/v4/transfer-by-ref/39915 HTTP/1.1
Host: sandbox.payneteasy.ru
User-Agent: curl/7.83.0
Accept: */*
Authorization: OAuth oauth_consumer_key="TestMerchant", oauth_nonce="w1rmMzx2Sq2k5Hi7KAZmdhHHD6BygKcE", oauth_signature="rXn0DwLOlaV%2Ft1q3s%2FJdLybJTdxKKN0XeFtyVNZ0U5bG0Qfcc6iyHqQG66Ohb852CYKjhrxvG3wf33RlIQdO9f23OSg91JkdrUgl8QDrMqntC5myWGR1woums%2BMjpV821fAY8AS%2BBByNUKOuC1mwFgLYwr5YinbhjDa6P8aEdHgbf%2FVw5vg9OqjwKxJhSXPGB5mIg7T9gTNXF4n4YTUJA0l%2BWyeGcIjuTSsiCUnbsrNjBOGYc0PlUSuHirwJ0NiKVdHk3qaZrGaEw8SZEq%2F8x0naoaaOXUq%2FkpqPfTJT%2FjTl%2FbGyX1x%2FwTl6EYgIElavHYj2psIGmFnyUk%2FYnaGZHikE00rSf4IkG5Ye2M4hyl7lKQOCXMZMvvGtfvLm0RsAod8o30KuDD5Tw%2BRmDiQNCqN8GeZawHsZipgwZuy2IdZ3sHiot3U6NEt1OVH9TsWDU%2FstfBJOWBBStTRTTh4hn3Zvf5jLuTfTcepKz4CIgdQGGmMmRSz6dcBnkYJaa7VRTh27dz%2BnEuC0laEYAytVuzQA43MvUXNLmAuh9JlmqQquAZwB%2BRFfLPgOj%2FVVsFsqX35UWBYQtWlWdEVc3jWBVxCjEW0s8cAcowlb4R2g4V48HC2Rz3ggfINzP9%2FWtX1nkNnIlzQAeYbMREguYqFrK%2BYK6Lqyu%2BM1jeo6j9CWhhk%3D", oauth_signature_method="RSA-SHA256", oauth_timestamp="1697442690", oauth_version="1.0"
Content-Length: 805
Content-Type: application/x-www-form-urlencoded
Connection: close

address1=10020Main%20st
&amount=100
&birthday=19820115
&cell_phone=%2B19023384543
&city=Seattle
&client_orderid=34T43R77N
&country=US
&currency=USD
&destination-card-ref-id=1461819
&card-exp-month=07
&card-exp-year=2028
&email=john.smith%40gmail.com
&first_name=John
&ipaddress=65.153.12.232
&last_name=Smith
&merchant_data=VIP%20customer
&middle_name=M
&order_desc=Test%20Order%20Описание
&phone=%2B12063582043
&purpose=user_account1
&receiver_address1=Red%20Sq%2C%201a
&receiver_city=Moscow
&receiver_first_name=Jane
&receiver_identity_document_id=21
&receiver_identity_document_number=222222
&receiver_identity_document_series=1111
&receiver_last_name=Doe
&receiver_middle_name=L
&receiver_phone=%2B79031110022
&receiver_resident=true
&redirect_url=http%3A%2F%2Fwww.example.com%2F
&server_callback_url=https%3A%2F%2Fhttpstat.us%2F200
&ssn=1267&state=WA
&zip_code=98102
```

#### Пример успешного ответа

```http
HTTP/1.1 200
Server: server
Date: Mon, 16 Oct 2023 13:20:25 GMT
Content-Type: text/html;charset=utf-8
Connection: close
Vary: Accept-Encoding
X-XSS-Protection: 1
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000
Content-Language: en-US
Strict-Transport-Security: max-age=31536000
Content-Length: 145

type=async-response
&serial-number=00000000-0000-0000-0000-000002ee3a57
&merchant-order-id=34T43R77N
&paynet-order-id=7234671
&end-point-id=39915
```

#### Пример неуспешного ответа

```http
HTTP/1.1 200
Server: server
Date: Mon, 16 Oct 2023 07:54:11 GMT
Content-Type: text/html;charset=utf-8
Connection: close
Vary: Accept-Encoding
X-XSS-Protection: 1
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000
Content-Language: en-US
Strict-Transport-Security: max-age=31536000
Content-Length: 162

type=validation-error
&serial-number=00000000-0000-0000-0000-000002ee3a4f
&merchant-order-id=34T43R77N
&error-message=Rebill+1461819+was+not+found
&error-code=104
```

#### Open API Collection

Open this method in the OpenAPI Reference

<a class="openapi-reference-button" href="/openapi-doc/#POST/api/v4/transfer-by-ref/{endpoint Id}" target="_blank" rel="noopener">View in OpenAPI <svg xmlns="http://www.w3.org/2000/svg" view Box="0 0 24 24" fill="none" stroke="current Color" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg></a>

#### Коллекция Postman

<div class="postman-run-button"
 data-postman-action="collection/fork"
 data-postman-var-1="23519287-c8b59236-6e4f-499b-9a3e-6a98e75ab3b2"
 data-postman-collection-url="entity Id=23519287-c8b59236-6e4f-499b-9a3e-6a98e75ab3b2&entity Type=collection&workspace Id=7be78bd7-9f10-4be9-a60e-bd36ff1b6783"
 data-postman-param="env%5BPayment%20gateway%20ENV%5D=W3sia2V5IjoiVVJMIiwidm FsdWUi Oi IiLCJlbm FibGVk Ijp0cn VlLCJ0eXBl IjoiZGVmYXVsdCJ9XQ=="></div>
<script type="text/javascript">
 (function (p,o,s,t,m,a,n) {
 !p[s] && (p[s] = function () { (p[t] || (p[t] = [])).push (arguments); });
 !o.get Element By Id (s+t) && o.get Elements By Tag Name("head")[0].append Child((
 (n = o.create Element("script")),
 (n.id = s+t), (n.async = 1), (n.src = m), n
 ));
 }(window, document, "_pm", "Postman Run Object", "https://run.pstmn.io/button.js"));
 var env Name = "Payment gateway ENV";
 var env Data = {
 URL:'sandbox.payneteasy.ru' + "/" + 'paynet'
 };
 \_pm('env.replace', env Name, env Data);
</script>

#### Конструктор запросов

Введите приватный ключ, содержащийся в PKCS#1. См. [RSA-SHA256](https://doc.payneteasy.ru/integration/general_api_usage/request_authentication_methods/oauth.html.md).

<link rel="stylesheet" href="../_static/pygments.css" type="text/css">
<script type="text/javascript" src="../_static/js/d2cdebug/oauth-1.0a-rsa-sha256gbv4.js"></script>
<script type="text/javascript" src="../_static/js/d2cdebug/jsrsasign-latest-all-min.js"></script>
<script src="../_static/js/generate_card_number.js"></script>
<meta http-equiv="Cache-Control" content="no-cache">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="../_static/js/highlight/styles/default.css">
<script src="../_static/js/highlight/highlight.pack.js"></script>

<script type="text/javascript">
 $(document).ready (function(){
 $("#sale Request Tab a").click (function (e){
 e.prevent Default();
 $(this).tab('show');
 });
 });
</script>

<script type="text/javascript">
 var RSAPrivate KeyPEM = "";
 var curl Transfer Request Text = "";
 var php Transfer Request Text = "";
 var ruby Transfer Request Text = "";
 var java Transfer Request Text = "";

 function generateRSAsign() {
 RSAPrivate KeyPEM = document.get Element By Id("prvkey").value;

 var oauth = OAuthgb({
 consumer: {
 public: document.deposit2cardtransfer.elements['login'].value
 },
 signature_method: 'RSA-SHA256'
 });

 request Url = document.deposit2cardtransfer.url.value;

 var request_data = "";

 request_data = {
 url: request Url,
 method: 'POST',
 data: {
 //'login': document.deposit2cardtransfer.elements['login'].value, --not included in request parameters as "login", only as "oauth_consumer_key"
 'client_orderid': document.deposit2cardtransfer.elements['client_orderid'].value,
 'order_desc': document.deposit2cardtransfer.elements['order_desc'].value,
 'amount': document.deposit2cardtransfer.elements['amount'].value,
 'currency': document.deposit2cardtransfer.elements['currency'].value,
 'ipaddress': document.deposit2cardtransfer.elements['ipaddress'].value,
 'first_name': document.deposit2cardtransfer.elements['first_name'].value,
 'middle_name': document.deposit2cardtransfer.elements['middle_name'].value,
 'last_name': document.deposit2cardtransfer.elements['last_name'].value,
 'ssn': document.deposit2cardtransfer.elements['ssn'].value,
 'birthday': document.deposit2cardtransfer.elements['birthday'].value,
 'address1': document.deposit2cardtransfer.elements['address1'].value,
 'city': document.deposit2cardtransfer.elements['city'].value,
 'state': document.deposit2cardtransfer.elements['state'].value,
 'zip_code': document.deposit2cardtransfer.elements['zip_code'].value,
 'country': document.deposit2cardtransfer.elements['country'].value,
 'phone': document.deposit2cardtransfer.elements['phone'].value,
 'cell_phone': document.deposit2cardtransfer.elements['cell_phone'].value,
 'email': document.deposit2cardtransfer.elements['email'].value,
 'purpose': document.deposit2cardtransfer.elements['purpose'].value,
 'receiver_first_name': document.deposit2cardtransfer.elements['receiver_first_name'].value,
 'receiver_middle_name': document.deposit2cardtransfer.elements['receiver_middle_name'].value,
 'receiver_last_name': document.deposit2cardtransfer.elements['receiver_last_name'].value,
 'receiver_phone': document.deposit2cardtransfer.elements['receiver_phone'].value,
 'receiver_resident': document.deposit2cardtransfer.elements['receiver_resident'].value,
 'receiver_identity_document_series': document.deposit2cardtransfer.elements['receiver_identity_document_series'].value,
 'receiver_identity_document_number': document.deposit2cardtransfer.elements['receiver_identity_document_number'].value,
 'receiver_identity_document_id': document.deposit2cardtransfer.elements['receiver_identity_document_id'].value,
 'receiver_address1': document.deposit2cardtransfer.elements['receiver_address1'].value,
 'receiver_city': document.deposit2cardtransfer.elements['receiver_city'].value,
 'redirect_url': document.deposit2cardtransfer.elements['redirect_url'].value,
 'redirect_success_url': document.deposit2cardtransfer.elements['redirect_success_url'].value,
 'redirect_fail_url': document.deposit2cardtransfer.elements['redirect_fail_url'].value,
 'server_callback_url': document.deposit2cardtransfer.elements['server_callback_url'].value,
 'merchant_data': document.deposit2cardtransfer.elements['merchant_data'].value
 }
 };

 if (document.deposit2cardtransfer.elements['destination-card-no'].value != "")
 { request_data.data['destination-card-no'] = document.deposit2cardtransfer.elements['destination-card-no'].value }

 else if (document.deposit2cardtransfer.elements['destination-card-no'].value === "" && document.deposit2cardtransfer.elements['destination-card-ref-id'].value != "")
 { request_data.data['destination-card-ref-id'] = document.deposit2cardtransfer.elements['destination-card-ref-id'].value }

 //excluding empty parameters from output
 function remove Empty (obj) {
 Object.keys (obj).for Each((key) => (obj[key] == "") && delete obj[key]);
 };
 remove Empty (request_data.data);

 var oauth_data = oauth.authorize (request_data);
 var data_for_base_string = {
 "oauth_consumer_key": oauth_data.oauth_consumer_key,
 "oauth_nonce": oauth_data.oauth_nonce,
 "oauth_signature_method": oauth_data.oauth_signature_method,
 "oauth_timestamp": oauth_data.oauth_timestamp,
 "oauth_version": oauth_data.oauth_version
 };

 var xhttp = new XMLHttp Request();
 xhttp.onreadystatechange = function() {
 if (xhttp.ready State == 4 && xhttp.status == 200) {
	 if (url == "../_static/examples/PHP/params_with_header_PHP.txt"){
 php Transfer Request Text = xhttp.response Text;}
		 else if (url == "../_static/examples/Ruby/params_with_header_Ruby.txt") {
		 ruby Transfer Request Text = xhttp.response Text;}
		 else{
		 java Transfer Request Text = xhttp.response Text;}
 }
 }
	 url = "../_static/examples/PHP/params_with_header_PHP.txt";
 xhttp.open("GET", url, false);
 xhttp.send();
	 url = "../_static/examples/Ruby/params_with_header_Ruby.txt";
 xhttp.open("GET", url, false);
 xhttp.send();
	 url = "../_static/examples/Java/params_java_v4.txt";
 xhttp.open("GET", url, false);
 xhttp.send();

 var params = "";

 for (var key in request_data) {
 if (key == 'data'){
 for (var key in request_data.data){
 params +=(" '"+ key + "' => '" + request_data.data[key] + "', \\n" );
 }
 }
 }

 php Transfer Request Text = php Transfer Request Text.replace("{$generated parameters with values code}", params);
		php Transfer Request Text = php Transfer Request Text.replace("{$sandbox}", request Url);
		php Transfer Request Text = php Transfer Request Text.replace("{$Authorization}", oauth.to Header (oauth_data). Authorization);

		ruby Transfer Request Text = ruby Transfer Request Text.replace("{$generated parameters with values code}", params);
		ruby Transfer Request Text = ruby Transfer Request Text.replace("{$sandbox}", request Url);
		ruby Transfer Request Text = ruby Transfer Request Text.replace("{$Authorization}", oauth.to Header (oauth_data). Authorization);

 show Text("transferrequestbasestring", oauth.get Base String (request_data, data_for_base_string));
 show Text("transferrequestparameters", oauth.get Parameter String NoOAuth (request_data));
 show Text("transferrequestheaders", oauth.to Header (oauth_data). Authorization);
 show Text("transferrequesthexsign", oauth_data.hex_signature);
 show Text("transferrequestb64sign", oauth_data.oauth_signature);
 var java Header = oauth.to Header (oauth_data). Authorization.split('"').join('\\\\"');
 java Header = '"' + java Header + '"';

 java Transfer Request Text = java Transfer Request Text.replace("{$targetURL}", request Url);
		java Transfer Request Text = java Transfer Request Text.replace("{$has Headers}", "true");
		java Transfer Request Text = java Transfer Request Text.replace("{$oauth Header}", java Header);
	 java Transfer Request Text = java Transfer Request Text.replace("{$url Parameters}", oauth.get Parameter String NoOAuth (request_data));

 curl Transfer Request Text = 'curl -H \\'Authorization: '
 + oauth.to Header (oauth_data). Authorization
 + '\\' --data \\''
 + oauth.get Parameter String NoOAuth (request_data)
 + '\\' \\'' + request_data.url + '\\'';

 show Text("salerequestphpvalue", php Transfer Request Text);
 show Text("salerequestrubyvalue", ruby Transfer Request Text);
 show Text("salerequestjavavalue", java Transfer Request Text);
 show Text("salerequestcurlvalue", curl Transfer Request Text);

 function show Text (element Id, text) {
 var child = document.create Text Node (text);
 var element = document.get Element By Id (element Id);
 element.innerHTML = "";
 if (element.has Child Nodes()) {
 element.replace Child (child, element.first Child);
 } else {
 element.append Child (child);
 }
 }

 $(document).ready (function() {
 $('pre code').each (function (i, block) {
 hljs.highlight Block (block);
 });
 });
 }

 function rand Inv (c) {
 document.get Element By Id (c).value = "inv" + Math.floor (Math.random() \* 10000000);
 }

 function copy To Clipboard Sale Request (text) {
 var text Area = document.create Element("textarea");

 // Place in top-left corner of screen regardless of scroll position.
 text Area.style.position = 'fixed';
 text Area.style.top = 0;
 text Area.style.left = 0;

 // Ensure it has a small width and height. Setting to 1px / 1em
 // doesn't work as this gives a negative w/h on some browsers.
 text Area.style.width = '2em';
 text Area.style.height = '2em';

 // We don't need padding, reducing the size if it does flash render.
 text Area.style.padding = 0;

 // Clean up any borders.
 text Area.style.border = 'none';
 text Area.style.outline = 'none';
 text Area.style.box Shadow = 'none';

 // Avoid flash of white box if rendered for any reason.
 text Area.style.background = 'transparent';

 if (text == 'curl') {
 text Area.value = curl Transfer Request Text;
 } else if (text == 'php') {
 text Area.value = php Transfer Request Text;
 } else if (text == 'ruby'){
 text Area.value = ruby Transfer Request Text;
 }else{
 text Area.value = java Transfer Request Text;
 }
 document.body.append Child (text Area);

 text Area.select();

 try {
 var successful = document.exec Command('copy');
 var msg = successful ? 'successful' : 'unsuccessful';
 console.log('Copying text command was ' + msg);
 } catch (err) {
 console.log('Oops, unable to copy');
 }

 document.body.remove Child (text Area);
 document.onreadystatechange = function() {
 if (document.ready State == "complete") {
 generateRSAsign();
 }
 };

 }

 function sign_deposit2cardtransfer (form) {
 generateRSAsign();
 return false;
 }

</script>

<textarea id="prvkey" style="font-family: monospace; min-height:19em;height:100%;" rows="10" cols="66">-----BEGIN RSA PRIVATE KEY-----
MIIJKQIBAAKCAgEA16QK2iwgYUb Mr2Gq SbaS0PQZKF2Dkst Sj0dakW+hASTz5Ams
R5s DnurfeR4m+Htaxiv69MMdvoDLu CmZE8KQzsEOZovZ9UYSh9CKK4/FzQSZ8ZDP
8cpKLN7/git WiM14iuC9Pi74TTLeg7Pu Gjeoc0j Us0WMf7sV6uzf Zwvq YgUVRljY
gscwDRiTSGJQum Qtan Cs/LMIkxou Th LztSSEm Hhh Ez2aWOomqR5hHO+HJ4I1AfET
V7VpKJ4c1+z Mes Dfp DxZ8Vp Qpno9iikFG64MigDFm BeskI6q15t BwbROYSfqNEmG
LwhYQ+SXnojueazkSJ45CeQRh6dn3GgD7kex2N3lK97qpq DcWOLqcsbe+ZyTGALn
WGzTZWjleO+yrdE6awD34kUYVnzD/9Wvd YqpH2pXBDqOIXu6lm4g Le5pKTRiFEc+
Tjg Vb34tJGEERkrvqktSEmRQz MgZQn Zk/5//7+csUIcSPmqd Un5oB6ng Vue Zkk7v
wtL6dc Cxr5is WgXQEO+o Ybt72Ns5RjLVWiXWv2ZNFd+iR4O6+et BxYNz+mg/2B5c
PO8NWyvv FlaBUu4I5GG1XntBGWncKQiZ49WCv LcYEb SfUEkWLj6zq JaDS/buT3jU
rWQ0WEI8G1HnTQp0cqmx9WpXDLx4n3yt Rj Hu He3ND9AYE28yhfFY5baIU3UCAwEA
AQKCAgAC4QrQDOTFx7c15DzszQY6yfeIBW+b Ry Gs Dgz UgkQJCuBCv Cp Trmsm9QXU
zSVCDguRN8ca+3vr LjcKF2w WynM6f3NcxSM81hmrPIq Lu Fiwuw3/HqrYFJZW8QdC
SqfWHc At Qo Dk UqY4CaTU51MXgIS8PU2xsw0EK5BIWa9F5e/ULTMyhD8nx9cJZbmZ
rs5b Hrl Ig Yadv RoxNJl Hq5Mba QhoLLtHEXx9EWt Au ModI8mPKnrgssJKWn6z7yB9
d Yjp XqfdvnyI72bCQkGOFaweyX0b XpVEyZQh Pf Zj+IuxNWIShADpf83N1POwvF2V
3Ugp0bgejBZA3o2pXP/S/oSG6ugh8dZHfa8vkw0x5N28393IzIMpzwE2Ens BidN1
ca7Nw Dpmp UyuULSpi3Yo ViUYY1i4Mwngv2XQdkbvo Gus Qwg Wo NrppmDKxlL5qEBf
lIPCZAgZSR79KHYw2VOzkm84hu0jDXMthpt9A2g Lk Rh Gn Ggb4n5Kzy CpY9iuFK2w
CO5FdjloXOjRLZb7G1JCeU6Qh0kjSE7seh9ltyo+VsWOLx4UwVOYGCMAF45yO0wF
/MJd Yo Ut1vC5G/DK8itTTjwb/x PlGDiC441TOReWVwF6n36+shb6szlI2EmqKBkp
2Sr5xQ5VNZkcG2W/BUF7+n8Rvisu17TyW0HmwDEBDfJQzgzgpQKCAQEA7RpBNVBH
Jx8gR7h Qdbyi4/6U5Ki YorkzuoK4KkjRWJfq Jvp9uGZS2v Dw OoIC8kCAXMwu3OCI
U0xk DvH7bb/qedn0IG7+72FUCKlxqk Mk4lv03zE9yUPcYNT+w573uh+rXQ/mcsFF
+a BtupRZi Dqqd4vuvj Tpjw5Q4tyk/lx Zfbe10S2NyxY4d Zsbm8gl0Syp Ls/rLYjZ
8Znt Rp ZozIWoenrF3AnvtR114WBDpBVwSJ9KNd8xB5Fufc9TqsZ/EKPjDVrn2Sq2
Lt/xKSopwx Py IhKG1zm Ae Yhv8Q+GYUOQYCf Bj2opDC3AOxANw2j9M8n YjCMDm PaP
5iDCUla35srp/wKCAQEA6NPj8auPGGFen2ZJoydpEPKgU3z Adv05VlKVIvbA9c+Y
oy7z Nhn Nw0PCkk YpB9jPGvpdn6KFh2ZTU/mgm Iys Kri LcLN4g Kho7JUCU3kvg1mv
z Jiz/5fR0xCCRNPLAANh6uJ+CXyssjb Uoe9Emy VxKX3l2z Kmy1zOKRc/Fb Akql07
ItDReryb64IjsfT4GtU4nBK7z CzI+yya1BjL/McnGBcpKIwp9HCwaTQK7yxa7ThY
Tsf TuxoyZM1/xZE0cKRJGVLtkao1Vf Oy0SDd Cp+Rwt Bv Vmt3Wt6v VcL6qG0LW5Fe
Uz0PN+Ceb MfhBCaqWXIXeuMUo+Rd Ln Gn113Tl6i6iwKCAQEAz+NzRUGMAXtDHF84
/OJWmD1BY3OH0TU9a8ztmPWby Gf6gA6la Kcf AqS6nTId TzbK1ZKZjES6gv65x Hjb
ERFyj0BQ0pc/o7fcrHOVG8ofbv Fdt MxB9l QvyB84+WBKqMDXyZMFZZyctBC75Rnp
no6Bp KvmupM+LZZJyX/YksV6GcaX/j5I0sY63rMO8/n7XnogJNFczOHu5e0mo/uB
C8ItRKadER8NM+o Oz3tOE3JQrvwr Xyz Amngj Pu An5daA1qA7lhwcq MbQUi08D/HO
CCNW7BT+c Xs Tc Hv2WpBYLLPGx Oh WyF42e10p7R9YUfud9miGG+kfYGDf LtGOUA+E
0z EbFQKCAQEA4lcz Dnqolpv5394RkiG6+zXTdLYfaM2NUw TfZOka9xx El8c Juztk
lAIoggjg1HcKB4EDSTA2vUVVlppjb Em9CZ70N7DRYcn Wjr/h TgLOlNO4mp6Mxdny
qkwvR/fZLf8bzrs2qc Rh IrM5DN/NA0Jn+10f+nMIQUTMSpg FxPDDBDe0SIlWTApV
Ta Lr TpIGLBf Ce7+ef8O98qgPMEeW7vsw XzQM2BVCqBZw+SUVyCOHl XukJZo PlKHI
Ac ThBNC/eQ3M3miG+YfNZ+y Mls9q82viyM/WnN3GXzm CnE37XYb8dp0gZK1EQR8F
BF1fu6hXDLNkbhu ZsiZMC92DvFPDYnku NwKCAQA6/2K8PLl OeK+0p/IGVsg Jpg Hn
Uh3BehVKHXeG/Buhn5bMXX3cB2hEHg2tz4pw3JxfZ1UflhyhKD43Xnpxu Mmt81Ka
Ja5MeXDg0kfnl XolVA4ezx2V2EohMEx UykkOIfQBDTa Ntjsg5PB4HLKFId3kJ6u/
JCXuy0EA07vl/k Nl+cDEBLJs VtvtxHLdpd JhO1POi3IIg OpddO+a/O/GDsdlAWog
hy Eb6r7+b Wurjw0YjHX+R5ZQ+0XtnzXU20d2NiP/oH2Iv QzXRUQ1U17Kzzn5PAhs
YC7r9lRV4Vjbh Ei3Zk2FBPrrzs2ie Xo5aHXCnz FywQ99nlrz0Ic8vV16WR1x
-----END RSA PRIVATE KEY-----
</textarea>

<h5>Debug form</h5>
<p>Use either destination-card-no or destination-card-ref-id</p>
<form name="deposit2cardtransfer">
 
 <p></p>
 <input type="button" class="doc-button" style="font-size: 100%; padding: 2px 6px 3px 6px;" value="Sign transfer Request" onclick="sign_deposit2cardtransfer (document.deposit2cardtransfer)" />
 <p></p>
</form>

<sup>\* HEX encoded string is for debug purposes only. You shouldn't send this string to the server neither in HEX nor in Encoded HEX representation.</sup>

<sup>\* Binary RSA-SHA256 signature directly encoded in base64 should be sent to the server.</sup>

<ul class="nav nav-tabs" id="sale Request Tab">
 <li class="active">[CURL](#sale RequestCURL)</li>
 <li>[PHP](#sale RequestPHP)</li>
 <li>[Ruby](#sale Request Ruby)</li>
 <li>[Java](#sale Request Java)</li>
</ul>

 <button class="doc-button" onclick="copy To Clipboard Sale Request('php')">Copy to clipboard</button>
 <pre><code class="php" id="salerequestphpvalue"></code></pre>

 <button class="doc-button" onclick="copy To Clipboard Sale Request('ruby')">Copy to clipboard</button>
 <pre><code class="language-ruby" id="salerequestrubyvalue"></code></pre>

 <button class="doc-button" onclick="copy To Clipboard Sale Request('java')">Copy to clipboard</button>
 <pre><code class="language-java" id="salerequestjavavalue"></code></pre>

### /api/v4/payout-check

#### Введение

Выплата инициируется через зарос HTTPS POST на указанный ниже [Ссылки](#payout-check-apis) с использованием указанных [параметров](#payout-check-parameters) в зависимости от типа выплаты. Для аутентификации запроса используется [OAuth RSA-SHA256](https://doc.payneteasy.ru/integration/general_api_usage/request_authentication_methods/oauth.html.md)

#### API URL

> **Note:** Путь API URL не должен быть задан фиксированным значением, т.к. он может быть изменён позднее.

| Интеграционная среда | Производственная среда |
|--------------------------------------------------------------------------------|-----------------------------------------------------------------------------|
| https://sandbox.payneteasy.ru/paynet/api/v4/payout-check/ENDPOINTID | https://gate.payneteasy.ru/paynet/api/v4/payout-check/ENDPOINTID |
| https://sandbox.payneteasy.ru/paynet/api/v4/payout-check/group/ENDPOINTGROUPID | https://gate.payneteasy.ru/paynet/api/v4/payout-check/group/ENDPOINTGROUPID |

#### Параметры запроса

> **Note:** Запрос должен иметь content-type=application/x-www-form-urlencoded и [Заголовки авторизации](https://doc.payneteasy.ru/integration/general_api_usage/request_authentication_methods/oauth.html.md).

| Название параметра | Описание | Значение |
|-----------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------|
| client_orderid | Идентификатор заказа, присвоенный Присоединяющейся Стороной. | `Необходимость`: Обязательно `Тип`: String `Длина`: 128 |
| amount | Сумма к оплате. Сумма должна быть указана в максимальных единицах с “.” разделителем. Например, 100.5 в RUB означает 100 российских рублей и 50 копеек. | `Необходимость`: Обязательно `Тип`: Numeric `Длина`: 10 |
| currency | Валюта, в которой проводится операция (трёхбуквенные алфавитные коды валют). Примеры значений: USD для доллара США, EUR для европейского евро, RUB для российского рубля. | `Необходимость`: Обязательно `Тип`: String `Длина`: 3 |
| order_desc | Описание заказа. | `Необходимость`: Опционально `Тип`: String `Длина`: 64 |
| ipaddress | IP-адрес получателя (IPv4 или IPv6) | `Необходимость`: Условно `Тип`: String `Длина`: 7-45 |
| purpose | Назначение платежа. | `Необходимость`: Условно `Тип`: String `Длина`: 128 |
| server_callback_url | URL-адрес server_callback_url, по которому будет отправлен обратный вызов с результатом транзакции. Присоединяющаяся сторона может использовать обратные вызовы для индивидуальной обработки завершения транзакции (например, для сбора данных о платежах в информационной системе Присоединяющейся стороны). Список параметров, включенных в обратный вызов, см. в разделе [Обратного вызова Присоединяющейся стороны](https://doc.payneteasy.ru/integration/merchant_callback_parameters.html.md). Данный параметр может быть передан вместо notify_url. При использовании server_callback_url платежный шлюз отправляет callback-уведомление только при получении финального статуса исходной транзакции. При использовании notify_url платежный шлюз отправляет уведомление при получении финального статуса и продолжает отправлять уведомления о всех последующих изменениях (возвраты, chargeback и др.). | `Необходимость`: Опционально `Тип`: String `Длина`: 128 |
| notify_url | URL-адрес notify_url, по которому будет отправлен обратный вызов с результатом транзакции. Присоединяющаяся сторона может использовать обратные вызовы для индивидуальной обработки завершения транзакции (например, для сбора данных о платежах в информационной системе Присоединяющейся стороны). Список параметров, включенных в обратный вызов, см. в разделе [Обратного вызова Присоединяющейся стороны](https://doc.payneteasy.ru/integration/merchant_callback_parameters.html.md). Данный параметр может быть передан вместо server_callback_url. При использовании notify_url платежный шлюз отправляет уведомление при получении финального статуса и продолжает отправлять уведомления о всех последующих изменениях (возвраты, chargeback и др.). При использовании server_callback_url платежный шлюз отправляет callback-уведомление только при получении финального статуса исходной транзакции. | `Необходимость`: Опционально `Тип`: String `Длина`: 128 |
| redirect_url | URL, where the Receiver is redirected to upon completion of the transaction. Please note that redirection is performed in any case, no matter whether transaction is approved, declined in any other final [status](https://doc.payneteasy.ru/integration/reference/statuses.html.md). Connecting Party must not use the parameters come along with the redirect HTTP Request to treat the status of the transaction. Instead Connecting Party can utilize server_callback_url or [status API command](https://doc.payneteasy.ru/integration/api_v2_status.html.md). Pass https://doc.payneteasy.ru if you have no need to return Receiver anywhere. Use either redirect_url or combination of redirect_success_url and redirect_fail_url, not both. | `Необходимость`: Опционально `Тип`: String `Длина`: 128 |
| redirect_success_url | URL, на который Получатель перенаправляется, когда статус транзакции — approved (см. [список статусов](https://doc.payneteasy.ru/integration/reference/statuses.html.md)). Connecting Party must not use the parameters come along with the redirect HTTP Request to treat the status of the transaction. Instead Connecting Party can utilize server_callback_url or [status API command](https://doc.payneteasy.ru/integration/api_v2_status.html.md). Otherwise put https://doc.payneteasy.ru if there is no need to redirect Receiver anywhere. Use either combination of redirect_success_url and redirect_fail_url or redirect_url, not both. | `Необходимость`: Опционально `Тип`: String `Длина`: 1024 |
| redirect_fail_url | URL, на который Получатель перенаправляется, когда статус транзакции не approved (см. [список статусов](https://doc.payneteasy.ru/integration/reference/statuses.html.md)). Connecting Party must not use the parameters come along with the redirect HTTP Request to treat the status of the transaction. Instead Connecting Party can utilize server_callback_url or [status API command](https://doc.payneteasy.ru/integration/api_v2_status.html.md). Pass https://doc.payneteasy.ru if there is no need to redirect Receiver anywhere. Use either combination of redirect_fail_url and redirect_success_url or redirect_url, not both. | `Необходимость`: Опционально `Тип`: String `Длина`: 1024 |
| credit_card_number | Номер банковской карты клиента. **Примечание: Для сценария оплаты на карту внутри системы, эта карта рассматривается как источник, и к ней будут относиться все процессинговые ограничения, списки и проверки мошенничества.** | `Необходимость`: Условно `Тип`: Numeric `Длина`: 20 |
| card_printed_name | Имя владельца карты, напечатанное на банковской карте. | `Необходимость`: Условно `Тип`: String `Длина`: 128 |
| expire_month | Месяц окончания срока действия банковской карты. | `Необходимость`: Условно `Тип`: Numeric `Длина`: 2 |
| expire_year | Год окончания срока действия банковской карты. | `Необходимость`: Условно `Тип`: Numeric `Длина`: 4 |
| cvv2 | CVV2-код Плательщика. CVV2 (Card Verification Значение) — это трех- или четырех-значное число ПОСЛЕ номера кредитной карты в области подписи карты. | `Необходимость`: Условно `Тип`: Numeric `Длина`: 3-4 |
| account_number | Номер банковского счета | `Необходимость`: Условно `Тип`: String `Длина`: 32 |
| account_name | Банковский счет | `Необходимость`: Опционально `Тип`: String `Длина`: 128 |
| ewallet_type | Тип e-wallet. | `Необходимость`: Условно `Тип`: String `Длина`: 64 |
| ewallet_wallet | Идентификатор e-wallet. | `Необходимость`: Условно `Тип`: String `Длина`: 128 |
| crypto_wallet_address | Адрес криптокошелька. | `Необходимость`: Условно `Тип`: String `Длина`: 64 |
| bank_name | Имя банка. | `Необходимость`: Условно `Тип`: String `Длина`: 255 |
| bank_branch | Имя банковского отделения. | `Необходимость`: Условно `Тип`: String `Длина`: 255 |
| bank_code | Код банка. | `Необходимость`: Условно `Тип`: String `Длина`: 32 |
| bank_city | Город банка. | `Необходимость`: Условно `Тип`: String `Длина`: 128 |
| bank_address1 | Адрес банка. | `Необходимость`: Условно `Тип`: String `Длина`: 255 |
| bank_zip_code | Почтовый индекс банка. | `Необходимость`: Условно `Тип`: String `Длина`: 255 |
| bank_province | Штат банка. | `Необходимость`: Условно `Тип`: String `Длина`: 255 |
| bank_area | Область банка | `Необходимость`: Условно `Тип`: String `Длина`: 255 |
| routing_number | Номер маршрута, используется для определения отдела банка в Китае. | `Необходимость`: Условно `Тип`: String `Длина`: 16 |
| legal_person_name | Имя на юридическом документе. | `Необходимость`: Условно `Тип`: String `Длина`: 128 |
| legal_person_document_number | Номер юридического документа | `Необходимость`: Условно `Тип`: String `Длина`: 128 |
| receiver_first_name | Имя Получателя, так же можно отправить как first_name. | `Необходимость`: Условно `Тип`: String `Длина`: 128 |
| receiver_last_name | Фамилия Получателя, так же можно отправить как last_name. | `Необходимость`: Условно `Тип`: String `Длина`: 128 |
| receiver_middle_name | Отчество получателя, так-же можно отправить как middle_name. | `Необходимость`: Условно `Тип`: String `Длина`: 128 |
| receiver_birthday | Дата рождения получателя, так-же можно отправить как birthday. | `Необходимость`: Условно `Тип`: Numeric `Длина`: 30 |
| receiver_country_code | Код страны Получателя, также можно отправить как country. | `Необходимость`: Условно `Тип`: String `Длина`: 3 |
| receiver_state | Штат Получателя, обязательный параметр для стран, которые делятся на штаты (США, Канада, Австралия), также можно отправить как state. | `Необходимость`: Условно `Тип`: String `Длина`: 4 |
| receiver_city | Город Получателя, также можно отправить как city. | `Необходимость`: Условно `Тип`: String `Длина`: 128 |
| receiver_zip_code | Почтовый индекс Получателя, также можно отправить как zip_code. | `Необходимость`: Условно `Тип`: Numeric `Длина`: 32 |
| receiver_address1 | Адрес Получателя, также можно отправить как address1. | `Необходимость`: Условно `Тип`: String `Длина`: 256 |
| receiver_phone | Номер телефона Получателя, также можно отправить как phone. | `Необходимость`: Условно `Тип`: Numeric `Длина`: 128 |
| receiver_email | Адрес электронной почты Получателя, также можно отправить как email. | `Необходимость`: Условно `Тип`: String `Длина`: 128 |
| receiver_identity_document_id | Идентификатор удостоверения личности получателя, так-же можно отправитькак identity_document_id. | `Необходимость`: Условно `Тип`: String `Длина`: 128 |
| receiver_identity_document_number | Номер удостоверения личности получателя, так-же можно отправитькак identity_document_number. | `Необходимость`: Условно `Тип`: String `Длина`: 128 |
| merchant_data | Любая дополнительная информация о транзакции, которая может быть полезна во внешних системах Присоединяющейся стороны, например VIP клиент, лид промокампании на ТВ. | `Необходимость`: Опционально `Тип`: String `Длина`: 64k |
| bank_bic | BIC-код банка получателя | `Необходимость`: Опционально `Тип`: String `Длина`: 128 |
| receiver_inn | Уникальный идентификатор для налогообложения получателя | `Необходимость`: Опционально `Тип`: String `Длина`: 128 |
| customer_level | Уровень клиента в системе CMS. | `Необходимость`: Опционально `Тип`: Varchar `Длина`: 32 |
| customer_id | Идентификатор клиента в системе CMS. Параметр становится обязательным, если включена система CMS в режиме определения клиента Платёжным шлюзом. | `Необходимость`: Опционально `Тип`: Int `Длина`: 10 |
| merchant_customer_identifier | Идентификатор клиента-продавца в системе CMS. Параметр становится обязательным, если включена система CMS в режиме CRM. | `Необходимость`: Опционально `Тип`: Varchar `Длина`: 64 |
| card_recurring_payment_id | Токенизированный идентификатор владельца карты. Нужно отправлять или параметр card_recurring_payment_id или комбинацию из credit_card_number, card_printed_name, expire_month и expire_year, но не все в одном запросе. Для создания card_recurring_payment_id см. [/api/v4/create-card-ref](https://doc.payneteasy.ru/integration/api_v4_create-card-ref.html.md). **Примечание: ля сценария оплаты на карту внутри системы, эта карта рассматривается как источник, и к ней будут относиться все процессинговые ограничения, списки и проверки мошенничества.** | `Необходимость`: Условно `Тип`: Long |
| recurring-payment-id | Recurring Payment ID может быть передан вместо данных держателя карты. Для нативных транзакций CVV не требуется. Обновление данных клиента возможно через /api/v4/update-recurring-payment/. Процесс создания Recurring Payment ID инициируется HTTPS POST запросом с использованием указанных ниже [URLs](https://doc.payneteasy.ru/integration/api_v4_create-card-ref.html.md) и [параметров](https://doc.payneteasy.ru/integration/api_v4_create-card-ref.html.md). Используйте [OAuth RSA-SHA256](https://doc.payneteasy.ru/integration/general_api_usage/request_authentication_methods/oauth.html.md) для аутентификации | `Необходимость`: Условно `Тип`: Long |

\* Спросите менеджера службы поддержки если условные параметры обязательны для интеграции

#### Параметры ответа

> **Note:** Ответ имеет заголовок Content-Type: text/html;charset=utf-8. Все поля имеют кодировку x-www-form-urlencoded, с символом (0xA) в конце значения каждого параметра.

| Параметры ответа выплаты | Описание |
|----------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| type | Тип ответа. Может принимать такие значения как: async-response, validation-error, error и т.д. Если тип ответа validation-error или error, параметры error-message и error-code будут содержать детали ошибки. |
| paynet-order-id | Идентификатор заказа, присвоенный Payneteasy. |
| merchant-order-id | Идентификатор заказа Присоединяющейся Стороны. |
| serial-number | Уникальный номер, присваиваемый сервером Payneteasy конкретному запросу от Присоединяющейся стороны. |
| error-message | Для транзакций в статусе error этот параметр будет содержать причину отклонения или сведения об ошибке. |
| error-code | Код ошибки для транзакций в статусе error. |

#### Пример запроса

```http
POST /paynet/api/v4/payout-check/39915 HTTP/1.1
Host: sandbox.payneteasy.ru
User-Agent: curl/7.83.0
Accept: */*
Authorization: OAuth oauth_consumer_key="TestMerchant", oauth_nonce="b5E31Tw6SVjauE29uOf2jOLnuUSXmVdE", oauth_signature="WrW79JHNUVwDRhCGWQYgaN6xmJXpQxy8XSNyCOL6b2Wyf7V5BWGMe2TZa1bjC9ZeO0Q3FcQxeGGHv0%2F7hsMAsJNQEET321VNsbDwao2Ep%2Bp7eoYiGYrVveSrSW1diCrBf3AJYJZM0PTJ67Sl8XyeTVBHT4kpC5qBu3xDQ3aFfKnmRTmn9fiVsYsYu3DQrsHM1K9uAoltGt3Muz0kCDZ3MWNGrNqtdpWuar8HRQD3kckcPjuN9D6VrSuQm9eLx27G%2FvkiP%2BZ44i8ghIUp61NWSrJ4Ky69JiZ%2FoaVVmUTEaanc%2F%2B%2BQT6jBwWy%2Bb%2FTLUrxtSakeNfcjn1JVwRf4aCX2fhyG5ozH%2BjiXF6eRb83WVqBUAwykSq35pLU3Vmua3pKMKAJK1ZRDZdjGrT50KJg5tBniC4JFzdQqjQf%2FhFnDYodfIK3S2qZo%2FD3Bmlya46iEcK6SAQdNBBQue3E5Qi8FEHYrY1o7K8wDyzT1QzqqHF%2BQdmXcElSGu9ge0Y655%2BbGtXhnsUWnKEO0NGqErvAwzm7yUg0e5QWHVf505aE7pr5K4z%2Fzj7AvkuD7R1savqam%2BnnuSfq1E%2BnnnN7mTcC0g18Sr38vdTshcGq99YW3xWKc%2FpuooZYdYa5A6u46o%2BREZSTCD2XexcV49%2F9eVn3xdoTXYq4NISJSY8U7ThKnr0g%3D", oauth_signature_method="RSA-SHA256", oauth_timestamp="1677831012", oauth_version="1.0"
Content-Length: 150
Content-Type: application/x-www-form-urlencoded
Connection: close

account_name=1234
&account_number=1234
&amount=10.42
&client_orderid=1
&currency=USD
&routing_number=15
&server_callback_url=https%3A%2F%2Fhttpstat.us%2F200
```

#### Пример успешного ответа

```http
HTTP/1.1 200
Server: server
Date: Fri, 03 Mar 2023 08:10:34 GMT
Content-Type: text/html;charset=utf-8
Connection: close
Vary: Accept-Encoding
X-XSS-Protection: 1
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000
Content-Language: en-US
Strict-Transport-Security: max-age=31536000
Content-Length: 137

type=async-response
&serial-number=00000000-0000-0000-0000-000002e2c322
&merchant-order-id=1
&paynet-order-id=6982864
&end-point-id=39915
```

#### Пример неуспешного ответа

```http
HTTP/1.1 403 Forbidden
Server: server
Date: Thu, 25 Aug 2022 06:50:16 GMT
Content-Type: text/html
Content-Length: 735
Connection: close
X-XSS-Protection: 1
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000

<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  <title>403</title>

</head>

<body>
<p>Access is denied</p>
</body>
</html>
```

#### Open API Collection

Open this method in the OpenAPI Reference

<a class="openapi-reference-button" href="/openapi-doc/#POST/api/v4/payout-check/{endpoint Id}" target="_blank" rel="noopener">View in OpenAPI <svg xmlns="http://www.w3.org/2000/svg" view Box="0 0 24 24" fill="none" stroke="current Color" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg></a>

#### Коллекция Postman

<div class="postman-run-button"
 data-postman-action="collection/fork"
 data-postman-var-1="23519287-8e44964b-17bf-4594-b42b-d026399abaab"
 data-postman-collection-url="entity Id=23519287-8e44964b-17bf-4594-b42b-d026399abaab&entity Type=collection&workspace Id=9d67e1d4-210e-44ce-b0ba-f1dfdab944c0"
 data-postman-param="env%5BPayment%20gateway%20ENV%5D=W3sia2V5IjoiVVJMIiwidm FsdWUi Oi IiLCJlbm FibGVk Ijp0cn VlLCJ0eXBl IjoiZGVmYXVsdCJ9XQ=="></div>
<script type="text/javascript">
 (function (p,o,s,t,m,a,n) {
 !p[s] && (p[s] = function () { (p[t] || (p[t] = [])).push (arguments); });
 !o.get Element By Id (s+t) && o.get Elements By Tag Name("head")[0].append Child((
 (n = o.create Element("script")),
 (n.id = s+t), (n.async = 1), (n.src = m), n
 ));
 }(window, document, "_pm", "Postman Run Object", "https://run.pstmn.io/button.js"));
 var env Name = "Payment gateway ENV";
 var env Data = {
 URL:'sandbox.payneteasy.ru' + "/" + 'paynet'
 };
 \_pm('env.replace', env Name, env Data);
</script>

#### Конструктор запросов

Вставьте приватный ключ PKCS#1 PEM для среды sandbox в поле ниже. Конструктор запросов поддерживает длину ключа до 4096.

<link rel="stylesheet" href="../_static/pygments.css" type="text/css">
<script type="text/javascript" src="../_static/js/d2cdebug/oauth-1.0a-rsa-sha256.js"></script>
<script type="text/javascript" src="../_static/js/d2cdebug/jsrsasign-latest-all-min.js"></script>
<script src="../_static/js/generate_card_number.js"></script>
<meta http-equiv="Cache-Control" content="no-cache">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="../_static/js/highlight/styles/default.css">
<script src="../_static/js/highlight/highlight.pack.js"></script>

<script type="text/javascript">
$(document).ready (function(){
 $("#sale Request Tab a").click (function (e){
 	e.prevent Default();
 	$(this).tab('show');
 });
});
</script>

<script type="text/javascript">
 var RSAPrivate KeyPEM = "";
 var curlpayout Request Text = "";
 var phppayout Request Text = "";
 var rubypayout Request Text = "";
 var javapayout Request Text = "";

 function generateRSAsignpayout() {
 RSAPrivate KeyPEM = document.get Element By Id("prvkey").value;

 var oauth = OAuth({
 consumer: {
 public: document.v4payout Request.elements['login'].value
 },
 signature_method: 'RSA-SHA256'
 });

 var request Url = v4payout Request.url.value;

 var req_data = "";

 req_data = {
 url: request Url,
 method: 'POST',
 data: get Params (v4payout Request.parameters.value)
 };

 //excluding empty parameters from output
 function remove Empty (obj) {
 Object.keys (obj).for Each((key) => (obj[key] == "") && delete obj[key]);
 };
 remove Empty (req_data.data);

 var oauth_data = oauth.authorize (req_data);
 var data_for_base_string = {
 "oauth_consumer_key": oauth_data.oauth_consumer_key,
 "oauth_nonce": oauth_data.oauth_nonce,
 "oauth_signature_method": oauth_data.oauth_signature_method,
 "oauth_timestamp": oauth_data.oauth_timestamp,
 "oauth_version": oauth_data.oauth_version
 };

 var xhttp = new XMLHttp Request();
 xhttp.onreadystatechange = function() {
 if (xhttp.ready State == 4 && xhttp.status == 200) {
	 if (url == "../_static/examples/PHP/params_with_header_PHP.txt"){
 phppayout Request Text = xhttp.response Text;}
		 else if (url == "../_static/examples/Ruby/params_with_header_Ruby.txt") {
		 rubypayout Request Text = xhttp.response Text;}
		 else{
		 javapayout Request Text = xhttp.response Text;}
 }
 }
	 url = "../_static/examples/PHP/params_with_header_PHP.txt";
 xhttp.open("GET", url, false);
 xhttp.send();
	 url = "../_static/examples/Ruby/params_with_header_Ruby.txt";
 xhttp.open("GET", url, false);
 xhttp.send();
	 url = "../_static/examples/Java/params_java_v4.txt";
 xhttp.open("GET", url, false);
 xhttp.send();

 var params = "";

 for (var key in req_data) {
 if (key == 'data'){
 for (var key in req_data.data){
 params +=(" '"+ key + "' => '" + req_data.data[key] + "', \\n" );
 }
 }
 }

 phppayout Request Text = phppayout Request Text.replace("{$generated parameters with values code}", params);
		phppayout Request Text = phppayout Request Text.replace("{$sandbox}", request Url);
		phppayout Request Text = phppayout Request Text.replace("{$Authorization}", oauth.to Header (oauth_data). Authorization);

		rubypayout Request Text = rubypayout Request Text.replace("{$generated parameters with values code}", params);
		rubypayout Request Text = rubypayout Request Text.replace("{$sandbox}", request Url);
		rubypayout Request Text = rubypayout Request Text.replace("{$Authorization}", oauth.to Header (oauth_data). Authorization);

 show Text("payoutrequestbasestring", oauth.get Base String (req_data, data_for_base_string));
 show Text("payoutrequestparameters", oauth.get Parameter String NoOAuth (req_data));
 show Text("payoutrequestheaders", oauth.to Header (oauth_data). Authorization);
 show Text("payoutrequesthexsign", oauth_data.hex_signature);
 show Text("payoutrequestb64sign", oauth_data.oauth_signature);
 var java Header = oauth.to Header (oauth_data). Authorization.split('"').join('\\\\"');
 java Header = '"' + java Header + '"';

 javapayout Request Text = javapayout Request Text.replace("{$targetURL}", request Url);
		javapayout Request Text = javapayout Request Text.replace("{$has Headers}", "true");
		javapayout Request Text = javapayout Request Text.replace("{$oauth Header}", java Header);
	 javapayout Request Text = javapayout Request Text.replace("{$url Parameters}", oauth.get Parameter String NoOAuth (req_data));

 curlpayout Request Text = 'curl -H \\'Authorization: '
 + oauth.to Header (oauth_data). Authorization
 + '\\' --data \\''
 + oauth.get Parameter String NoOAuth (req_data)
 + '\\' \\'' + req_data.url + '\\'';

 show Text("salerequestphpvalue", phppayout Request Text);
 show Text("salerequestrubyvalue", rubypayout Request Text);
 show Text("salerequestjavavalue", javapayout Request Text);
 show Text("salerequestcurlvalue", curlpayout Request Text);

 function show Text (element Id, text) {
 var child = document.create Text Node (text);
 var element = document.get Element By Id (element Id);
 element.innerHTML = "";
 if (element.has Child Nodes()) {
 element.replace Child (child, element.first Child);
 } else {
 element.append Child (child);
 }
 }

 $(document).ready (function() {
 $('pre code').each (function (i, block) {
 hljs.highlight Block (block);
 });
 });
 }

 function rand Inv (c) {
 document.get Element By Id (c).value = "inv" + Math.floor (Math.random() \* 10000000);
 }

 function get Params (str) {
 var map = {};

 str.split('&').for Each (el => {
 var [key, value] = el.split('=');
 map[key] = value;
 });

 return map;
 }

 function copy To Clipboard Sale Request (text) {
 var text Area = document.create Element("textarea");

 // Place in top-left corner of screen regardless of scroll position.
 text Area.style.position = 'fixed';
 text Area.style.top = 0;
 text Area.style.left = 0;

 // Ensure it has a small width and height. Setting to 1px / 1em
 // doesn't work as this gives a negative w/h on some browsers.
 text Area.style.width = '2em';
 text Area.style.height = '2em';

 // We don't need padding, reducing the size if it does flash render.
 text Area.style.padding = 0;

 // Clean up any borders.
 text Area.style.border = 'none';
 text Area.style.outline = 'none';
 text Area.style.box Shadow = 'none';

 // Avoid flash of white box if rendered for any reason.
 text Area.style.background = 'transparent';

 if (text == 'curl') {
 text Area.value = curlpayout Request Text;
 } else if (text == 'php') {
 text Area.value = phppayout Request Text;
 } else if (text == 'ruby'){
 text Area.value = rubypayout Request Text;
 }else{
 text Area.value = javapayout Request Text;
 }
 document.body.append Child (text Area);

 text Area.select();

 try {
 var successful = document.exec Command('copy');
 var msg = successful ? 'successful' : 'unsuccessful';
 console.log('Copying text command was ' + msg);
 } catch (err) {
 console.log('Oops, unable to copy');
 }

 document.body.remove Child (text Area);
 document.onreadystatechange = function() {
 if (document.ready State == "complete") {
 generateRSAsignpayout();
 }
 };

 }

 function sign_v4payout Request (form) {
 generateRSAsignpayout();
 return false;
 }

</script>

<textarea id="prvkey" style="font-family: monospace; min-height:19em;height:100%;" rows="10" cols="66">-----BEGIN RSA PRIVATE KEY-----
MIIJKQIBAAKCAgEA16QK2iwgYUb Mr2Gq SbaS0PQZKF2Dkst Sj0dakW+hASTz5Ams
R5s DnurfeR4m+Htaxiv69MMdvoDLu CmZE8KQzsEOZovZ9UYSh9CKK4/FzQSZ8ZDP
8cpKLN7/git WiM14iuC9Pi74TTLeg7Pu Gjeoc0j Us0WMf7sV6uzf Zwvq YgUVRljY
gscwDRiTSGJQum Qtan Cs/LMIkxou Th LztSSEm Hhh Ez2aWOomqR5hHO+HJ4I1AfET
V7VpKJ4c1+z Mes Dfp DxZ8Vp Qpno9iikFG64MigDFm BeskI6q15t BwbROYSfqNEmG
LwhYQ+SXnojueazkSJ45CeQRh6dn3GgD7kex2N3lK97qpq DcWOLqcsbe+ZyTGALn
WGzTZWjleO+yrdE6awD34kUYVnzD/9Wvd YqpH2pXBDqOIXu6lm4g Le5pKTRiFEc+
Tjg Vb34tJGEERkrvqktSEmRQz MgZQn Zk/5//7+csUIcSPmqd Un5oB6ng Vue Zkk7v
wtL6dc Cxr5is WgXQEO+o Ybt72Ns5RjLVWiXWv2ZNFd+iR4O6+et BxYNz+mg/2B5c
PO8NWyvv FlaBUu4I5GG1XntBGWncKQiZ49WCv LcYEb SfUEkWLj6zq JaDS/buT3jU
rWQ0WEI8G1HnTQp0cqmx9WpXDLx4n3yt Rj Hu He3ND9AYE28yhfFY5baIU3UCAwEA
AQKCAgAC4QrQDOTFx7c15DzszQY6yfeIBW+b Ry Gs Dgz UgkQJCuBCv Cp Trmsm9QXU
zSVCDguRN8ca+3vr LjcKF2w WynM6f3NcxSM81hmrPIq Lu Fiwuw3/HqrYFJZW8QdC
SqfWHc At Qo Dk UqY4CaTU51MXgIS8PU2xsw0EK5BIWa9F5e/ULTMyhD8nx9cJZbmZ
rs5b Hrl Ig Yadv RoxNJl Hq5Mba QhoLLtHEXx9EWt Au ModI8mPKnrgssJKWn6z7yB9
d Yjp XqfdvnyI72bCQkGOFaweyX0b XpVEyZQh Pf Zj+IuxNWIShADpf83N1POwvF2V
3Ugp0bgejBZA3o2pXP/S/oSG6ugh8dZHfa8vkw0x5N28393IzIMpzwE2Ens BidN1
ca7Nw Dpmp UyuULSpi3Yo ViUYY1i4Mwngv2XQdkbvo Gus Qwg Wo NrppmDKxlL5qEBf
lIPCZAgZSR79KHYw2VOzkm84hu0jDXMthpt9A2g Lk Rh Gn Ggb4n5Kzy CpY9iuFK2w
CO5FdjloXOjRLZb7G1JCeU6Qh0kjSE7seh9ltyo+VsWOLx4UwVOYGCMAF45yO0wF
/MJd Yo Ut1vC5G/DK8itTTjwb/x PlGDiC441TOReWVwF6n36+shb6szlI2EmqKBkp
2Sr5xQ5VNZkcG2W/BUF7+n8Rvisu17TyW0HmwDEBDfJQzgzgpQKCAQEA7RpBNVBH
Jx8gR7h Qdbyi4/6U5Ki YorkzuoK4KkjRWJfq Jvp9uGZS2v Dw OoIC8kCAXMwu3OCI
U0xk DvH7bb/qedn0IG7+72FUCKlxqk Mk4lv03zE9yUPcYNT+w573uh+rXQ/mcsFF
+a BtupRZi Dqqd4vuvj Tpjw5Q4tyk/lx Zfbe10S2NyxY4d Zsbm8gl0Syp Ls/rLYjZ
8Znt Rp ZozIWoenrF3AnvtR114WBDpBVwSJ9KNd8xB5Fufc9TqsZ/EKPjDVrn2Sq2
Lt/xKSopwx Py IhKG1zm Ae Yhv8Q+GYUOQYCf Bj2opDC3AOxANw2j9M8n YjCMDm PaP
5iDCUla35srp/wKCAQEA6NPj8auPGGFen2ZJoydpEPKgU3z Adv05VlKVIvbA9c+Y
oy7z Nhn Nw0PCkk YpB9jPGvpdn6KFh2ZTU/mgm Iys Kri LcLN4g Kho7JUCU3kvg1mv
z Jiz/5fR0xCCRNPLAANh6uJ+CXyssjb Uoe9Emy VxKX3l2z Kmy1zOKRc/Fb Akql07
ItDReryb64IjsfT4GtU4nBK7z CzI+yya1BjL/McnGBcpKIwp9HCwaTQK7yxa7ThY
Tsf TuxoyZM1/xZE0cKRJGVLtkao1Vf Oy0SDd Cp+Rwt Bv Vmt3Wt6v VcL6qG0LW5Fe
Uz0PN+Ceb MfhBCaqWXIXeuMUo+Rd Ln Gn113Tl6i6iwKCAQEAz+NzRUGMAXtDHF84
/OJWmD1BY3OH0TU9a8ztmPWby Gf6gA6la Kcf AqS6nTId TzbK1ZKZjES6gv65x Hjb
ERFyj0BQ0pc/o7fcrHOVG8ofbv Fdt MxB9l QvyB84+WBKqMDXyZMFZZyctBC75Rnp
no6Bp KvmupM+LZZJyX/YksV6GcaX/j5I0sY63rMO8/n7XnogJNFczOHu5e0mo/uB
C8ItRKadER8NM+o Oz3tOE3JQrvwr Xyz Amngj Pu An5daA1qA7lhwcq MbQUi08D/HO
CCNW7BT+c Xs Tc Hv2WpBYLLPGx Oh WyF42e10p7R9YUfud9miGG+kfYGDf LtGOUA+E
0z EbFQKCAQEA4lcz Dnqolpv5394RkiG6+zXTdLYfaM2NUw TfZOka9xx El8c Juztk
lAIoggjg1HcKB4EDSTA2vUVVlppjb Em9CZ70N7DRYcn Wjr/h TgLOlNO4mp6Mxdny
qkwvR/fZLf8bzrs2qc Rh IrM5DN/NA0Jn+10f+nMIQUTMSpg FxPDDBDe0SIlWTApV
Ta Lr TpIGLBf Ce7+ef8O98qgPMEeW7vsw XzQM2BVCqBZw+SUVyCOHl XukJZo PlKHI
Ac ThBNC/eQ3M3miG+YfNZ+y Mls9q82viyM/WnN3GXzm CnE37XYb8dp0gZK1EQR8F
BF1fu6hXDLNkbhu ZsiZMC92DvFPDYnku NwKCAQA6/2K8PLl OeK+0p/IGVsg Jpg Hn
Uh3BehVKHXeG/Buhn5bMXX3cB2hEHg2tz4pw3JxfZ1UflhyhKD43Xnpxu Mmt81Ka
Ja5MeXDg0kfnl XolVA4ezx2V2EohMEx UykkOIfQBDTa Ntjsg5PB4HLKFId3kJ6u/
JCXuy0EA07vl/k Nl+cDEBLJs VtvtxHLdpd JhO1POi3IIg OpddO+a/O/GDsdlAWog
hy Eb6r7+b Wurjw0YjHX+R5ZQ+0XtnzXU20d2NiP/oH2Iv QzXRUQ1U17Kzzn5PAhs
YC7r9lRV4Vjbh Ei3Zk2FBPrrzs2ie Xo5aHXCnz FywQ99nlrz0Ic8vV16WR1x
-----END RSA PRIVATE KEY-----
</textarea>

<h5>Debug form</h5>

<form name="v4payout Request">

 
 <p></p>
 <input type="button" class="doc-button" style="font-size: 100%; padding: 2px 6px 3px 6px;" value="Sign payout Request" onclick="sign_v4payout Request (document.v4payout Request)" />
 <p></p>
</form>

<sup>\* HEX encoded string is for debug purposes only. You shouldn't send this string to the server neither in HEX nor in Encoded HEX representation.</sup>

<sup>\* Binary RSA-SHA256 signature directly encoded in base64 should be sent to the server.</sup>

<ul class="nav nav-tabs" id="sale Request Tab">
 <li class="active">[CURL](#sale RequestCURL)</li>
 <li>[PHP](#sale RequestPHP)</li>
 <li>[Ruby](#sale Request Ruby)</li>
 <li>[Java](#sale Request Java)</li>
</ul>

 <button class="doc-button" onclick="copy To Clipboard Sale Request('php')">Copy to clipboard</button>
 <pre><code class="php" id="salerequestphpvalue"></code></pre>

 <button class="doc-button" onclick="copy To Clipboard Sale Request('ruby')">Copy to clipboard</button>
 <pre><code class="language-ruby" id="salerequestrubyvalue"></code></pre>

 <button class="doc-button" onclick="copy To Clipboard Sale Request('java')">Copy to clipboard</button>
 <pre><code class="language-java" id="salerequestjavavalue"></code></pre>

### /api/v4/payout-pay

#### Введение

Выплата инициируется через зарос HTTPS POST на указанный ниже [Ссылки](https://doc.payneteasy.ru/integration/api_v4_payout-check.html.md) с использованием указанных [параметров](https://doc.payneteasy.ru/integration/api_v4_payout-check.html.md) в зависимости от типа выплаты. Для аутентификации запроса используется [OAuth RSA-SHA256](https://doc.payneteasy.ru/integration/general_api_usage/request_authentication_methods/oauth.html.md)

#### API URL

> **Note:** Путь API URL не должен быть задан фиксированным значением, т.к. он может быть изменён позднее.

| Интеграционная среда | Производственная среда |
|------------------------------------------------------------------------------|---------------------------------------------------------------------------|
| https://sandbox.payneteasy.ru/paynet/api/v4/payout-pay/ENDPOINTID | https://gate.payneteasy.ru/paynet/api/v4/payout-pay/ENDPOINTID |
| https://sandbox.payneteasy.ru/paynet/api/v4/payout-pay/group/ENDPOINTGROUPID | https://gate.payneteasy.ru/paynet/api/v4/payout-pay/group/ENDPOINTGROUPID |

#### Параметры запроса

> **Note:** Запрос должен иметь content-type=application/x-www-form-urlencoded и [Заголовки авторизации](https://doc.payneteasy.ru/integration/general_api_usage/request_authentication_methods/oauth.html.md).

| Название параметра | Описание | Значение |
|----------------------|--------------------------------------------------------------|----------------------------------------|
| client_orderid | Идентификатор заказа, присвоенный Присоединяющейся Стороной. | `Необходимость`: Обязательно |
| orderid | Идентификатор заказа, присвоенный Payneteasy. | `Необходимость`: Обязательно |
| login | Логин Присоединяющейся Стороны в Платёжном Шлюзе. | `Необходимость`: Обязательно |

\* Спросите менеджера службы поддержки если условные параметры обязательны для интеграции

#### Параметры ответа

> **Note:** Ответ имеет заголовок Content-Type: text/html;charset=utf-8. Все поля имеют кодировку x-www-form-urlencoded, с символом (0xA) в конце значения каждого параметра.

| Параметры Ответа Выплаты | Описание |
|----------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| type | Тип ответа. Может принимать такие значения как: async-response, validation-error, error и т.д. Если тип ответа validation-error или error, параметры error-message и error-code будут содержать детали ошибки. |
| paynet-order-id | Идентификатор заказа, присвоенный Payneteasy. |
| merchant-order-id | Идентификатор заказа Присоединяющейся Стороны. |
| serial-number | Уникальный номер, присваиваемый сервером Payneteasy конкретному запросу от Присоединяющейся стороны. |
| error-message | Для транзакций в статусе error этот параметр будет содержать причину отклонения или сведения об ошибке. |
| error-code | Код ошибки для транзакций в статусе error. |

#### Пример запроса

```http
POST /paynet/api/v4/payout-pay/39915 HTTP/1.1
Host: sandbox.payneteasy.ru
User-Agent: curl/7.83.0
Accept: */*
Authorization: OAuth oauth_consumer_key="TestMerchant", oauth_nonce="b5E31Tw6SVjauE29uOf2jOLnuUSXmVdE", oauth_signature="WrW79JHNUVwDRhCGWQYgaN6xmJXpQxy8XSNyCOL6b2Wyf7V5BWGMe2TZa1bjC9ZeO0Q3FcQxeGGHv0%2F7hsMAsJNQEET321VNsbDwao2Ep%2Bp7eoYiGYrVveSrSW1diCrBf3AJYJZM0PTJ67Sl8XyeTVBHT4kpC5qBu3xDQ3aFfKnmRTmn9fiVsYsYu3DQrsHM1K9uAoltGt3Muz0kCDZ3MWNGrNqtdpWuar8HRQD3kckcPjuN9D6VrSuQm9eLx27G%2FvkiP%2BZ44i8ghIUp61NWSrJ4Ky69JiZ%2FoaVVmUTEaanc%2F%2B%2BQT6jBwWy%2Bb%2FTLUrxtSakeNfcjn1JVwRf4aCX2fhyG5ozH%2BjiXF6eRb83WVqBUAwykSq35pLU3Vmua3pKMKAJK1ZRDZdjGrT50KJg5tBniC4JFzdQqjQf%2FhFnDYodfIK3S2qZo%2FD3Bmlya46iEcK6SAQdNBBQue3E5Qi8FEHYrY1o7K8wDyzT1QzqqHF%2BQdmXcElSGu9ge0Y655%2BbGtXhnsUWnKEO0NGqErvAwzm7yUg0e5QWHVf505aE7pr5K4z%2Fzj7AvkuD7R1savqam%2BnnuSfq1E%2BnnnN7mTcC0g18Sr38vdTshcGq99YW3xWKc%2FpuooZYdYa5A6u46o%2BREZSTCD2XexcV49%2F9eVn3xdoTXYq4NISJSY8U7ThKnr0g%3D", oauth_signature_method="RSA-SHA256", oauth_timestamp="1677831012", oauth_version="1.0"
Content-Length: 51
Content-Type: application/x-www-form-urlencoded
Connection: close

client_orderid=3
&login=test-merchant
&orderid=900258
```

#### Пример успешного ответа

```http
HTTP/1.1 200
Server: server
Date: Fri, 03 Mar 2023 08:10:34 GMT
Content-Type: text/html;charset=utf-8
Connection: close
Vary: Accept-Encoding
X-XSS-Protection: 1
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000
Content-Language: en-US
Strict-Transport-Security: max-age=31536000
Content-Length: 137

type=async-response
&serial-number=00000000-0000-0000-0000-000002e2c322
&merchant-order-id=1
&paynet-order-id=900258
&end-point-id=39915
```

#### Пример неуспешного ответа

```http
HTTP/1.1 403 Forbidden
Server: server
Date: Thu, 25 Aug 2022 06:50:16 GMT
Content-Type: text/html
Content-Length: 735
Connection: close
X-XSS-Protection: 1
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000

<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  <title>403</title>

</head>

<body>
<p>Access is denied</p>
</body>
</html>
```

#### Open API Collection

Open this method in the OpenAPI Reference

<a class="openapi-reference-button" href="/openapi-doc/#POST/api/v4/payout-pay/{endpoint Id}" target="_blank" rel="noopener">View in OpenAPI <svg xmlns="http://www.w3.org/2000/svg" view Box="0 0 24 24" fill="none" stroke="current Color" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg></a>

#### Коллекция Postman

<div class="postman-run-button"
 data-postman-action="collection/fork"
 data-postman-var-1="23519287-8e44964b-17bf-4594-b42b-d026399abaab"
 data-postman-collection-url="entity Id=23519287-8e44964b-17bf-4594-b42b-d026399abaab&entity Type=collection&workspace Id=9d67e1d4-210e-44ce-b0ba-f1dfdab944c0"
 data-postman-param="env%5BPayment%20gateway%20ENV%5D=W3sia2V5IjoiVVJMIiwidm FsdWUi Oi IiLCJlbm FibGVk Ijp0cn VlLCJ0eXBl IjoiZGVmYXVsdCJ9XQ=="></div>
<script type="text/javascript">
 (function (p,o,s,t,m,a,n) {
 !p[s] && (p[s] = function () { (p[t] || (p[t] = [])).push (arguments); });
 !o.get Element By Id (s+t) && o.get Elements By Tag Name("head")[0].append Child((
 (n = o.create Element("script")),
 (n.id = s+t), (n.async = 1), (n.src = m), n
 ));
 }(window, document, "_pm", "Postman Run Object", "https://run.pstmn.io/button.js"));
 var env Name = "Payment gateway ENV";
 var env Data = {
 URL:'sandbox.payneteasy.ru' + "/" + 'paynet'
 };
 \_pm('env.replace', env Name, env Data);
</script>

#### Конструктор запросов

Вставьте приватный ключ PKCS#1 PEM для среды sandbox в поле ниже. Конструктор запросов поддерживает длину ключа до 4096.

<script type="text/javascript" src="../_static/js/d2cdebug/oauth-1.0a-rsa-sha256gbv4.js"></script>
<script type="text/javascript" src="../_static/js/d2cdebug/jsrsasign-latest-all-min.js"></script>
<script src="../_static/js/generate_card_number.js"></script>
<meta http-equiv="Cache-Control" content="no-cache">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="../_static/js/highlight/styles/default.css">
<script src="../_static/js/highlight/highlight.pack.js"></script>

<script type="text/javascript">
$(document).ready (function(){
 $("#order Request Tab a").click (function (e){
 	e.prevent Default();
 	$(this).tab('show');
 });
});
</script>

<script type="text/javascript">
 var RSAPrivate KeyPEM = "";
 var curl Order Request Text = "";
 var php Order Request Text = "";
 var ruby Order Request Text = "";
 var java Order Request Text = "";

 function generateRSAsign Order Status() {
 RSAPrivate KeyPEM = document.get Element By Id("prvkey_order").value;

 var oauthvfour = OAuthgb({
 consumer: {
 public: document.v4Transfer Order Status.elements['login'].value
 },
 signature_method: 'RSA-SHA256'
 });

 request Url = document.v4Transfer Order Status.elements['url'].value;

 var request_data = "";

 request_data = {
 url: request Url,
 method: 'POST',
 data: {
 'login': document.v4Transfer Order Status.elements['login'].value,
 'client_orderid': document.v4Transfer Order Status.elements['client_orderid'].value,
 'orderid': document.v4Transfer Order Status.elements['orderid'].value,
 }
 };

 //excluding empty parameters from output
 function remove Empty (obj) {
 Object.keys (obj).for Each((key) => (obj[key] == "") && delete obj[key]);
 };
 remove Empty (request_data.data);

 var oauthvfour_data = oauthvfour.authorize (request_data);
 var data_for_base_string = {
 "oauth_consumer_key": oauthvfour_data.oauth_consumer_key,
 "oauth_nonce": oauthvfour_data.oauth_nonce,
 "oauth_signature_method": oauthvfour_data.oauth_signature_method,
 "oauth_timestamp": oauthvfour_data.oauth_timestamp,
 "oauth_version": oauthvfour_data.oauth_version
 };

 var xhttp = new XMLHttp Request();
 xhttp.onreadystatechange = function() {
 if (xhttp.ready State == 4 && xhttp.status == 200) {
	 if (url == "../_static/examples/PHP/params_with_header_PHP.txt"){
 php Order Request Text = xhttp.response Text;}
		 else if (url == "../_static/examples/Ruby/params_with_header_Ruby.txt") {
		 ruby Order Request Text = xhttp.response Text;}
		 else{
		 java Order Request Text = xhttp.response Text;}
 }
 }
	 url = "../_static/examples/PHP/params_with_header_PHP.txt";
 xhttp.open("GET", url, false);
 xhttp.send();
	 url = "../_static/examples/Ruby/params_with_header_Ruby.txt";
 xhttp.open("GET", url, false);
 xhttp.send();
	 url = "../_static/examples/Java/params_java_v4.txt";
 xhttp.open("GET", url, false);
 xhttp.send();

 var params = "";

 for (var key in request_data) {
 if (key == 'data'){
 for (var key in request_data.data){
 params +=(" '"+ key + "' => '" + request_data.data[key] + "', \\n" );
 }
 }
 }

 php Order Request Text = php Order Request Text.replace("{$generated parameters with values code}", params);
		php Order Request Text = php Order Request Text.replace("{$sandbox}", request Url);
		php Order Request Text = php Order Request Text.replace("{$Authorization}", oauthvfour.to Header (oauthvfour_data). Authorization);

		ruby Order Request Text = ruby Order Request Text.replace("{$generated parameters with values code}", params);
		ruby Order Request Text = ruby Order Request Text.replace("{$sandbox}", request Url);
		ruby Order Request Text = ruby Order Request Text.replace("{$Authorization}", oauthvfour.to Header (oauthvfour_data). Authorization);

 show Text("statusrequestV4basestring", oauthvfour.get Base String (request_data, data_for_base_string));
 show Text("statusrequestV4parameters", oauthvfour.get Parameter String NoOAuth (request_data));
 show Text("statusrequestV4headers", oauthvfour.to Header (oauthvfour_data). Authorization);
 show Text("statusrequestV4hexsign", oauthvfour_data.hex_signature);
 show Text("statusrequestV4b64sign", oauthvfour_data.oauth_signature);
 var java Header = oauthvfour.to Header (oauthvfour_data). Authorization.split('"').join('\\\\"');
 java Header = '"' + java Header + '"';

 java Order Request Text = java Order Request Text.replace("{$targetURL}", request Url);
		java Order Request Text = java Order Request Text.replace("{$has Headers}", "true");
		java Order Request Text = java Order Request Text.replace("{$oauth Header}", java Header);
	 java Order Request Text = java Order Request Text.replace("{$url Parameters}", oauthvfour.get Parameter String NoOAuth (request_data));

 curl Order Request Text = 'curl -H \\'Authorization: '
 + oauthvfour.to Header (oauthvfour_data). Authorization
 + '\\' --data \\''
 + oauthvfour.get Parameter String NoOAuth (request_data)
 + '\\' \\'' + request_data.url + '\\'';

 show Text("statusrequestV4phpvalue", php Order Request Text);
 show Text("statusrequestV4rubyvalue", ruby Order Request Text);
 show Text("statusrequestV4javavalue", java Order Request Text);
 show Text("statusrequestV4curlvalue", curl Order Request Text);

 function show Text (element Id, text) {
 var child = document.create Text Node (text);
 var element = document.get Element By Id (element Id);
 element.innerHTML = "";
 if (element.has Child Nodes()) {
 element.replace Child (child, element.first Child);
 } else {
 element.append Child (child);
 }
 }

 $(document).ready (function() {
 $('pre code').each (function (i, block) {
 hljs.highlight Block (block);
 });
 });
 }

 function rand Inv (c) {
 document.get Element By Id (c).value = "inv" + Math.floor (Math.random() \* 10000000);
 }

 function copy To ClipboardstatusrequestV4 (text) {
 var text Area = document.create Element("textarea");

 // Place in top-left corner of screen regardless of scroll position.
 text Area.style.position = 'fixed';
 text Area.style.top = 0;
 text Area.style.left = 0;

 // Ensure it has a small width and height. Setting to 1px / 1em
 // doesn't work as this gives a negative w/h on some browsers.
 text Area.style.width = '2em';
 text Area.style.height = '2em';

 // We don't need padding, reducing the size if it does flash render.
 text Area.style.padding = 0;

 // Clean up any borders.
 text Area.style.border = 'none';
 text Area.style.outline = 'none';
 text Area.style.box Shadow = 'none';

 // Avoid flash of white box if rendered for any reason.
 text Area.style.background = 'transparent';

 if (text == 'curl') {
 text Area.value = curl Order Request Text;
 } else if (text == 'php') {
 text Area.value = php Order Request Text;
 } else if (text == 'ruby'){
 text Area.value = ruby Order Request Text;
 }else{
 text Area.value = java Order Request Text;
 }
 document.body.append Child (text Area);

 text Area.select();

 try {
 var successful = document.exec Command('copy');
 var msg = successful ? 'successful' : 'unsuccessful';
 console.log('Copying text command was ' + msg);
 } catch (err) {
 console.log('Oops, unable to copy');
 }

 document.body.remove Child (text Area);
 document.onreadystatechange = function() {
 if (document.ready State == "complete") {
 generateRSAsign Order Status();
 }
 };

 }

 function sign_v4Transfer Order Status (form) {
 generateRSAsign Order Status();
 return false;
 }

</script>

<textarea id="prvkey_order" style="font-family: monospace; min-height:19em;height:100%;" rows="10" cols="66">-----BEGIN RSA PRIVATE KEY-----
MIIJKQIBAAKCAgEA16QK2iwgYUb Mr2Gq SbaS0PQZKF2Dkst Sj0dakW+hASTz5Ams
R5s DnurfeR4m+Htaxiv69MMdvoDLu CmZE8KQzsEOZovZ9UYSh9CKK4/FzQSZ8ZDP
8cpKLN7/git WiM14iuC9Pi74TTLeg7Pu Gjeoc0j Us0WMf7sV6uzf Zwvq YgUVRljY
gscwDRiTSGJQum Qtan Cs/LMIkxou Th LztSSEm Hhh Ez2aWOomqR5hHO+HJ4I1AfET
V7VpKJ4c1+z Mes Dfp DxZ8Vp Qpno9iikFG64MigDFm BeskI6q15t BwbROYSfqNEmG
LwhYQ+SXnojueazkSJ45CeQRh6dn3GgD7kex2N3lK97qpq DcWOLqcsbe+ZyTGALn
WGzTZWjleO+yrdE6awD34kUYVnzD/9Wvd YqpH2pXBDqOIXu6lm4g Le5pKTRiFEc+
Tjg Vb34tJGEERkrvqktSEmRQz MgZQn Zk/5//7+csUIcSPmqd Un5oB6ng Vue Zkk7v
wtL6dc Cxr5is WgXQEO+o Ybt72Ns5RjLVWiXWv2ZNFd+iR4O6+et BxYNz+mg/2B5c
PO8NWyvv FlaBUu4I5GG1XntBGWncKQiZ49WCv LcYEb SfUEkWLj6zq JaDS/buT3jU
rWQ0WEI8G1HnTQp0cqmx9WpXDLx4n3yt Rj Hu He3ND9AYE28yhfFY5baIU3UCAwEA
AQKCAgAC4QrQDOTFx7c15DzszQY6yfeIBW+b Ry Gs Dgz UgkQJCuBCv Cp Trmsm9QXU
zSVCDguRN8ca+3vr LjcKF2w WynM6f3NcxSM81hmrPIq Lu Fiwuw3/HqrYFJZW8QdC
SqfWHc At Qo Dk UqY4CaTU51MXgIS8PU2xsw0EK5BIWa9F5e/ULTMyhD8nx9cJZbmZ
rs5b Hrl Ig Yadv RoxNJl Hq5Mba QhoLLtHEXx9EWt Au ModI8mPKnrgssJKWn6z7yB9
d Yjp XqfdvnyI72bCQkGOFaweyX0b XpVEyZQh Pf Zj+IuxNWIShADpf83N1POwvF2V
3Ugp0bgejBZA3o2pXP/S/oSG6ugh8dZHfa8vkw0x5N28393IzIMpzwE2Ens BidN1
ca7Nw Dpmp UyuULSpi3Yo ViUYY1i4Mwngv2XQdkbvo Gus Qwg Wo NrppmDKxlL5qEBf
lIPCZAgZSR79KHYw2VOzkm84hu0jDXMthpt9A2g Lk Rh Gn Ggb4n5Kzy CpY9iuFK2w
CO5FdjloXOjRLZb7G1JCeU6Qh0kjSE7seh9ltyo+VsWOLx4UwVOYGCMAF45yO0wF
/MJd Yo Ut1vC5G/DK8itTTjwb/x PlGDiC441TOReWVwF6n36+shb6szlI2EmqKBkp
2Sr5xQ5VNZkcG2W/BUF7+n8Rvisu17TyW0HmwDEBDfJQzgzgpQKCAQEA7RpBNVBH
Jx8gR7h Qdbyi4/6U5Ki YorkzuoK4KkjRWJfq Jvp9uGZS2v Dw OoIC8kCAXMwu3OCI
U0xk DvH7bb/qedn0IG7+72FUCKlxqk Mk4lv03zE9yUPcYNT+w573uh+rXQ/mcsFF
+a BtupRZi Dqqd4vuvj Tpjw5Q4tyk/lx Zfbe10S2NyxY4d Zsbm8gl0Syp Ls/rLYjZ
8Znt Rp ZozIWoenrF3AnvtR114WBDpBVwSJ9KNd8xB5Fufc9TqsZ/EKPjDVrn2Sq2
Lt/xKSopwx Py IhKG1zm Ae Yhv8Q+GYUOQYCf Bj2opDC3AOxANw2j9M8n YjCMDm PaP
5iDCUla35srp/wKCAQEA6NPj8auPGGFen2ZJoydpEPKgU3z Adv05VlKVIvbA9c+Y
oy7z Nhn Nw0PCkk YpB9jPGvpdn6KFh2ZTU/mgm Iys Kri LcLN4g Kho7JUCU3kvg1mv
z Jiz/5fR0xCCRNPLAANh6uJ+CXyssjb Uoe9Emy VxKX3l2z Kmy1zOKRc/Fb Akql07
ItDReryb64IjsfT4GtU4nBK7z CzI+yya1BjL/McnGBcpKIwp9HCwaTQK7yxa7ThY
Tsf TuxoyZM1/xZE0cKRJGVLtkao1Vf Oy0SDd Cp+Rwt Bv Vmt3Wt6v VcL6qG0LW5Fe
Uz0PN+Ceb MfhBCaqWXIXeuMUo+Rd Ln Gn113Tl6i6iwKCAQEAz+NzRUGMAXtDHF84
/OJWmD1BY3OH0TU9a8ztmPWby Gf6gA6la Kcf AqS6nTId TzbK1ZKZjES6gv65x Hjb
ERFyj0BQ0pc/o7fcrHOVG8ofbv Fdt MxB9l QvyB84+WBKqMDXyZMFZZyctBC75Rnp
no6Bp KvmupM+LZZJyX/YksV6GcaX/j5I0sY63rMO8/n7XnogJNFczOHu5e0mo/uB
C8ItRKadER8NM+o Oz3tOE3JQrvwr Xyz Amngj Pu An5daA1qA7lhwcq MbQUi08D/HO
CCNW7BT+c Xs Tc Hv2WpBYLLPGx Oh WyF42e10p7R9YUfud9miGG+kfYGDf LtGOUA+E
0z EbFQKCAQEA4lcz Dnqolpv5394RkiG6+zXTdLYfaM2NUw TfZOka9xx El8c Juztk
lAIoggjg1HcKB4EDSTA2vUVVlppjb Em9CZ70N7DRYcn Wjr/h TgLOlNO4mp6Mxdny
qkwvR/fZLf8bzrs2qc Rh IrM5DN/NA0Jn+10f+nMIQUTMSpg FxPDDBDe0SIlWTApV
Ta Lr TpIGLBf Ce7+ef8O98qgPMEeW7vsw XzQM2BVCqBZw+SUVyCOHl XukJZo PlKHI
Ac ThBNC/eQ3M3miG+YfNZ+y Mls9q82viyM/WnN3GXzm CnE37XYb8dp0gZK1EQR8F
BF1fu6hXDLNkbhu ZsiZMC92DvFPDYnku NwKCAQA6/2K8PLl OeK+0p/IGVsg Jpg Hn
Uh3BehVKHXeG/Buhn5bMXX3cB2hEHg2tz4pw3JxfZ1UflhyhKD43Xnpxu Mmt81Ka
Ja5MeXDg0kfnl XolVA4ezx2V2EohMEx UykkOIfQBDTa Ntjsg5PB4HLKFId3kJ6u/
JCXuy0EA07vl/k Nl+cDEBLJs VtvtxHLdpd JhO1POi3IIg OpddO+a/O/GDsdlAWog
hy Eb6r7+b Wurjw0YjHX+R5ZQ+0XtnzXU20d2NiP/oH2Iv QzXRUQ1U17Kzzn5PAhs
YC7r9lRV4Vjbh Ei3Zk2FBPrrzs2ie Xo5aHXCnz FywQ99nlrz0Ic8vV16WR1x
-----END RSA PRIVATE KEY-----
</textarea>

<h5>Order status form</h5>
<form name="v4Transfer Order Status">
 
 <p></p>
 <input type="button" class="doc-button" style="font-size: 100%; padding: 2px 6px 3px 6px;" value="Sign status request" onclick="sign_v4Transfer Order Status (document.v4Transfer Order Status)" />
 <p></p>
</form>

<sup>\* HEX encoded string is for debug purposes only. You shouldn't send this string to the server neither in HEX nor in Encoded HEX representation.</sup>

<sup>\* Binary RSA-SHA256 signature directly encoded in base64 should be sent to the server.</sup>

<ul class="nav nav-tabs" id="order Request Tab">
 <li class="active">[CURL](#order RequestCURL)</li>
 <li>[PHP](#order RequestPHP)</li>
 <li>[Ruby](#order Request Ruby)</li>
 <li>[Java](#order Request Java)</li>
</ul>

 <button class="doc-button" onclick="copy To ClipboardstatusrequestV4('php')">Copy to clipboard</button>
 <pre><code class="php" id="statusrequestV4phpvalue"></code></pre>

 <button class="doc-button" onclick="copy To ClipboardstatusrequestV4('ruby')">Copy to clipboard</button>
 <pre><code class="language-ruby" id="statusrequestV4rubyvalue"></code></pre>

 <button class="doc-button" onclick="copy To ClipboardstatusrequestV4('java')">Copy to clipboard</button>
 <pre><code class="language-java" id="statusrequestV4javavalue"></code></pre>

### /api/v4/status

#### Введение

Получение статуса транзакции осуществляется через запрос методом HTTPS POST на указанный ниже [URL](#status-request-v4-url) с использованием указанных [параметров](https://doc.payneteasy.ru/integration/api_v2_status.html.md). Для аутентификации запроса используется [RSA-SHA256](https://doc.payneteasy.ru/integration/general_api_usage/request_authentication_methods/oauth.html.md). См. [Статусы транзакций](https://doc.payneteasy.ru/integration/reference/statuses.html.md).

#### API URL

> **Note:** Путь API URL не должен быть задан фиксированным значением, т.к. он может быть изменён позднее.

| Интеграционная среда | Производственная среда |
|--------------------------------------------------------------------------|-----------------------------------------------------------------------|
| https://sandbox.payneteasy.ru/paynet/api/v4/status/ENDPOINTID | https://gate.payneteasy.ru/paynet/api/v4/status/ENDPOINTID |
| https://sandbox.payneteasy.ru/paynet/api/v4/status/group/ENDPOINTGROUPID | https://gate.payneteasy.ru/paynet/api/v4/status/group/ENDPOINTGROUPID |

#### Параметры запроса

> **Note:** Запрос должен иметь content-type=application/x-www-form-urlencoded и [Заголовки авторизации](https://doc.payneteasy.ru/integration/general_api_usage/request_authentication_methods/oauth.html.md).

| Название параметра | Описание | Необходимость |
|----------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------|
| login | Логин Присоединяющейся Стороны в Платёжном Шлюзе. | Обязательно |
| client_orderid | Уникальный идентификатор заказа, присвоенный Присоединяющейся Стороной. | Обязательно |
| orderid | Идентификатор заказа, присвоенный Payneteasy. | С условием |
| by-request-sn | Серийный номер, присвоенный Payneteasy конкретному API-запросу. Если параметр присутствует в запросе статуса, ответ на запрос будет возвращён только для той стадии транзакции, на которой она находилась в момент совершения запроса с таким серийным номером. Параметр может быть включён в запрос для получения такой стадии в специальных случаях. Для получения наиболее актуального статуса транзакции, не следует включать этот параметр в запрос. | Опционально |
 
В большинстве случаев наилучшим вариантом является включение обоих параметров client_orderid и orderid в запрос статуса. Статус заказа можно запросить только с client_orderid, если он уникален для Присоединившейся Стороны и orderid не получен. Если orderid не получен в ответе, но ответ содержит ошибку, см. полученное сообщение об ошибке, чтобы получить информацию о том, почему транзакция не была создана в системе.
 

#### Параметры ответа

API команда запроса статуса участвует во множестве сценариев использования API, поэтому некоторые из указанных параметров могут не встречаться в определенных сценариях. Ниже предоставлен полный список возможных параметров ответа.
 

> **Note:** Ответ имеет заголовок Content-Type: text/html;charset=utf-8. Все поля имеют кодировку x-www-form-urlencoded, с символом (0xA) в конце значения каждого параметра.

\* - эти параметры не возвращаются в ответе по умолчанию. Для их получения необходимо связаться со службой поддержки.
 

| Параметры ответа на запрос статуса | Описание |
|-------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| type | Тип ответа. Может быть status-response. |
| status | Подробности см. в [Список статусов](https://doc.payneteasy.ru/integration/reference/statuses.html.md). |
| amount | Фактическая сумма транзакции. Данное значение может быть изменено в ходе транзакции. |
| currency | Валюта, в которой взимается транзакция (трехбуквенный код валюты). Примеры допустимых значений параметров: USD для доллара США EUR для евро. |
| paynet-order-id | Идентификатор заказа, присвоенный заказу gate.payneteasy.ru. |
| merchant-order-id | Идентификатор заказа Присоединяющейся Стороны. |
| phone | Полный международный номер телефона Плательщика, включая код страны. |
| html | HTML-код формы авторизации 3DS, закодированный в формате MIME application/x-www-form-urlencoded. Присоединяющейся Сторона должен декодировать этот параметр перед показом формы Плательщику. Система gate.payneteasy.ru возвращает следующие параметры ответа, когда получает форму авторизации 3DS от Банка-эмитента. Он содержит HTML-код формы авторизации, который должен быть передан без каких-либо изменений в браузер клиента. Этот параметр существует и имеет значение только тогда, когда HTML перенаправления уже доступен. Для не-3DS этого никогда не происходит. Для 3DS HTML имеет значение через некоторое короткое время после начала обработки. |
| redirect-to | Для 3DS-авторизации Присоединившейся Сторона может перенаправить плательщика по URL , указанному в этом параметре, вместо отображения страницы, предоставленной в параметре html. Параметр redirect-to возвращается только в том случае, если возвращается параметр html\`Присоединившейся Сторона должен использовать HTTP-метод :ex:\`GET для перенаправления. Этот параметр необходимо использовать для работы с 3DS 2.0. |
| serial-number | Уникальный номер, присваиваемый сервером gate.payneteasy.ru конкретному запросу от присоединяющейся стороны. |
| last-four-digits | Последние четыре цифры номера банковской карты Плательщика. |
| dest-last-four-digits | Последние четыре цифры номера кредитной карты клиента. Относится только к транзакциям перевода. |
| bin | BIN банка или номер банковской карты плательщика. |
| card-type | Тип банковской карты Плательщика (VISA, MASTERCARD и т.д.). |
| gate-partial-reversal | Возможность проведения частичного возврата (enabled - возможно, disabled - невозможно). |
| gate-partial-capture | Возможность проведения частичного списания захолдированной суммы (enabled - возможно, disabled - невозможно). |
| transaction-type | Тип тпанзакции (продажа, возврат, списание, преавторизация). |
| processor-rrn | Регистрационный номер банка-получателя. |
| processor-tx-id | Идентификатор транзакции, присвоенный Эквайером. |
| receipt-id | Электронная ссылка на квитанцию: https://gate.payneteasy.ru/paynet/view-receipt/ENDPOINTID/receipt-id/. |
| name | Имя плательщика |
| card-ref-id | Ссылочный идентификатор, используемый в последующих повторяющихся платежах. Имеет значение только в том случае, если card-ref-id был создан для первоначальной транзакции. |
| cardholder-name | Имя владельца карты. |
| card-exp-month | Месяц окончания срока действия банковской карты. |
| card-exp-year | Год окончания срока действия банковской карты. |
| card-hash-id | Уникальный идентификатор карты для использования в программах лояльности или проверках на мошенничество. |
| card-country-alpha-three-code | Трехбуквенный код страны эмитента карты отправителя. Подробности см. в [Коды стран и штатов](https://doc.payneteasy.ru/integration/reference/country_codes.html.md). |
| destination-card-country-alpha-three-code | Трехбуквенный код страны эмитента карты получателя. Подробности см. в [Коды стран и штатов](https://doc.payneteasy.ru/integration/reference/country_codes.html.md). |
| dest-bin | Банковский BIN кредитной карты клиента. |
| dest-card-type | Тип кредитной карты клиента (VISA, MASTERCARD и т.д.). |
| dest-bank-name | Наименование банка по BIN карты клиента. |
| destination-hash-id | Уникальный идентификатор карты для использования в программах лояльности или проверках на мошенничество. Актуально только для транзакций переводов. |
| destination-card-hash-id | Уникальный идентификатор карты для использования в программах лояльности или проверках на мошенничество. |
| first-name | Имя плательщика. |
| last-name | Фамилия Плательщика. |
| email | Электронная почта плательщика. |
| Параметр country \* | Страна плательщика (двухбуквенный код страны). Список допустимых кодов стран см. в [Коды стран и штатов](https://doc.payneteasy.ru/integration/reference/country_codes.html.md). |
| Параметр state \* | Штат плательщика. Список допустимых кодов штатов см. в [Коды стран и штатов](https://doc.payneteasy.ru/integration/reference/country_codes.html.md). Обязательно для США, Канады и Австралии. |
| Параметр city \* | Город Плательщика. |
| Параметр zip_code \* | Почтовый индекс Плательщика. |
| Параметр address1 \* | Адрес Плательщика, строка 1. |
| purpose | Место назначения платежа. Это полезно для Присоединяющейся Стороны, которые позволяют своим плательщикам пополнять свои счета с помощью банковских карт (счета мобильных телефонов, игровые счета и т. д.). Примеры значений: +9999999999; mail@example.com и т. д. Данное значение может использоваться системой мониторинга мошенничества. |
| bank-name | Наименование банка по BIN карты плательщика. |
| terminal-id | Идентификатор терминала эквайера, который будет указан в чеке. |
| paynet-processing-date | Дата обработки транзакции эквайером. |
| approval-code | Код одобрения банка. |
| order-stage | Текущая стадия обработки транзакции. Подробности см. в [Стадии транзакции](https://doc.payneteasy.ru/integration/reference/order_stage.html.md). |
| total-reversal-amount | Сумма последнего обработанного возврата. Актуально только для транзакций возврата. |
| reversal-amount | Сумма последнего обработанного возврата. Актуально только для транзакций возврата. |
| auth-response-code | Код ответа, используемый в протоколе Iso8583. Возвращается только в определенных случаях. |
| acquirer-processing-date | Дата обработки транзакции эквайером. |
| processor-auth-credit-code | Код одобрения кредита. Возвращается только в определенных случаях. |
| processor-credit-rrn | Номер ссылки извлечения для кредитной транзакции. |
| processor-credit-arn | Ссылочный номер карты-эквайера для кредитной транзакции. |
| processor-debit-arn | Ссылочный номер карты-эквайера для дебитной транзакции. |
| loyalty-balance | Текущий баланс бонусов программы лояльности для текущей операции. если доступно. |
| loyalty-message | Сообщение от программы лояльности. если доступно. |
| loyalty-bonus | Бонусная стоимость программы лояльности для текущей операции если доступно. |
| loyalty-program | Название программы лояльности для текущей операции если доступно. |
| descriptor | Банковский идентификатор получателя платежа. |
| original-gate-descriptor | Дескриптор, который устанавливается на уровне шлюза в системе. |
| error-message | Если статус declined, error или filtered, этот параметр содержит причину отклонения. |
| error-code | Код ошибки для транзакций в статусе declined, error, filtered. |
| by-request-sn | Серийный номер, назначенный конкретному запросу gate.payneteasy.ru. Если это поле существует в запросе статуса, ответ статуса возвращается для этого конкретного запроса. |
| verified-3d-status | Подробную информацию см. [Список статусов 3D Secure](https://doc.payneteasy.ru/integration/reference/statuses.html.md). |
| verified-rsc-status | Возвращается, если была выполнена проверка случайной суммы. См. [Альтернативная аутентификация держателя карты](https://doc.payneteasy.ru/integration/reference/3ds_overview.html.md) |
| eci | Индикатор электронной коммерции (Visa). |
| ips-src-payment-product-code | Код карты, установленный международной финансовой службой (Visa/Mastercard). |
| ips-src-payment-product-name | Расшифрованный код для карты, установленный международной финансовой службой (Visa/Mastercard). |
| ips-src-payment-type-code | Код типа карты, установленный международной финансовой службой (Visa/Mastercard). |
| ips-src-payment-type-name | Расшифрованный код типа карты, установленный международной финансовой службой (Visa/Mastercard). |
| merchantdata | Если параметр merchant_data и его значение указаны в первоначальном запросе, они будут включены в ответ о статусе. |
| initial-amount | Сумма, установленная при инициировании транзакции, без каких-либо сборов или комиссий. Это значение не может измениться в ходе транзакции. |
| seller-commission | Общая комиссия за обработанную транзакцию. Это необязательный параметр. Пожалуйста, свяжитесь с вашим менеджером в Payneteasy, если вы хотите его получить. |
| acquirer-commission | Комиссия эквайера за обработанную транзакцию. Это необязательный параметр. Обратитесь к своему менеджеру в Payneteasy, если хотите его получить. |
| motivational-message | Опциональный параметр, содержаний сообщение с расширенной информацией по причине отклонения транзакции. |
| transaction-date | Дата присвоения окончательного статуса транзакции. |
| orig-amount | Содержит исходную сумму запроса, если она была преобразована на вспомогательном терминале в интеграции с параллельной формой. Актуально только для транзакций Payment Cashier. |
| orig-currency | Содержит исходную валюту запроса, если она была преобразована на вспомогательном терминале в интеграции с параллельной формой. Актуально только для транзакций Payment Cashier. |

#### Параметры ответа на запрос статуса Pa Req Form

| Название | Описание |
|------------------------|-------------------------------------------------------------------------------------|
| tds-pareq-form-pareq | Данные ACS 3DS Pa Req, полученные Присоединяющейся Стороной. |
| tds-pareq-form-acs-url | ACS URL для перенаправления Плательщика в рамках сценария аутентификации 3DS 1.0.2. |

#### Параметры ответа на запрос статуса CReq Form

| Название | Описание |
|-----------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| tds-creq-form-creq | Сообщение CReq инициирует взаимодействие держателя карты в полной проверке 3DS (Challenge) и используется для передачи аутентификационных данных. Формируется сервером 3DS Присоединяющейся Стороной через браузер держателя карты в адрес ACS URL. |
| tds-creq-form-acs-url | ACS URL для перенаправления Плательщика для полной проверки 3DS (Challenge). |

#### Параметры ответа на запрос статуса Method Url Frame

| Название | Описание |
|------------------------------------------|---------------------------------------------------------------------------------------------------------------------|
| tds-method-url-frame-3ds-server-trans-id | Универсальный уникальный идентификатор транзакции, присвоенный 3DS-сервером для идентификации отдельной транзакции. |
| tds-method-url-frame-3ds-method-url | URL 3DS Метода используется в форме iframe, передающейся от Присоединяющейся Стороны к Плательщику. |

Правила создания HTML формы.

Данные метода 3DS: threeDSMethod Data (threeDSMethod NotificationURL + threeDSServer TransID).
 

#### Пример запроса

```http
POST /paynet/api/v4/status/46750 HTTP/1.1
User-Agent: curl/7.88.1
Accept: */*
Authorization: OAuth oauth_consumer_key="Test_Merchant", oauth_nonce="BKOz6eHOs6sDJlLPAJhbDHAaXCy9xxNv", oauth_signature="eQXkV%2BJdiqJlyRqNaEzIKmYa3FZzUjdcMR6lXSfRn9tOYKUNPxI3UKU%2F%2FGsPpofXL%2B2RBjGh3Gqv%2BZBoKaVKOgNKwNNwpA4IOaskV71uuMbZCp0gPEbS%2BVaWLD8vzqpcgZ%2Bd5DRNMfimyXkWVWbsMUYj8N%2BSpXl4YnGIo0nXz9Q0Ppxetie3EG9NrN7CNu7NdovVjmstfYqpDRv9OhLo4tSQTD9C6bWvW2kmEvZsb2d1KANsGUW6rXyjkIoPxJ2XigIXBOUfwSWj9cV7SsZ%2FNk%2FVjNWgav2uw9J9I%2FiTqLLcKZ1pTWj1WOMwXhfoMCP10XOAOe72CQHX0DJL%2BFt01jmOXLvLdEkUZTFzsC6DGfHSDdcsjXquc9gxFKVr3d8e15by3566UI4pXKef%2Fe%2B3Ytvlrj7IUhIcNyA%2BVXp%2FwivxgwYu2xpQJMs6wlvw6Lz3N2wcFRqLs5ZEbdZ1%2F29pox8XW0ae8yZ2z2PClPzmJIoDcOr0GEtwyz5ByyeW0m33XA67UbPN6rwbdlVL2gwMqWwkn7KDYp7%2BifP%2B2BdbyXnw2LeJcuYDYAIDHa%2Bi0P09ZVToBpeLOx%2FobSF2y%2FsheVgo0O%2FRWtUEEXONvd0n7hEdnJ7mMYNivNitbfQ4SryQ2o8CdUDk9RgEaR7pn7ybTi4rQEhDqWF8sFMtaKhFn9o%3D", oauth_signature_method="RSA-SHA256", oauth_timestamp="1734327207", oauth_version="1.0"
Content-Length: 58
Content-Type: application/x-www-form-urlencoded
Connection: close

client_orderid=1&login=Test_Merchant&order_id=7364742
```

#### Пример успешного ответа

```http
HTTP/1.1 200
Server: server
Date: Mon, 16 Dec 2024 05:38:33 GMT
Content-Type: text/html;charset=utf-8
Connection: close
Vary: Accept-Encoding
X-XSS-Protection: 1
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000
Content-Language: en-US
Strict-Transport-Security: max-age=31536000
Content-Length: 1469

type=status-response
&serial-number=00000000-0000-0000-0000-000002f38234
&merchant-order-id=123456
&processor-tx-id=PNTEST-7364748
&paynet-order-id=7364748
&status=approved
&amount=10.42
&currency=USD
&descriptor=Test
&original-gate-descriptor=Test
&transaction-type=transfer
&receipt-id=2f885ae0-5220-3549-8eb5-622f4201f882
&name=John+Doe
&cardholder-name=John+Doe
&card-exp-month=12
&card-exp-year=2099
&processor-rrn=0435171505391
&approval-code=466875
&order-stage=transfer_approved
&last-four-digits=5721
&bin=421070
&card-type=VISA
&bank-name=DEMIRBANK+OJSC
&dest-bank-name=JPMORGAN+CHASE+BANK+N.A.
&dest-bin=423261
&dest-last-four-digits=1636
&dest-card-type=VISA
&auth-response-code=00
&paynet-processing-date=2024-12-16+08%3A37%3A25+MSK
&acquirer-processing-date=2024-12-16+08%3A37%3A25+MSK
&processor-auth-credit-code=311830
&card-hash-id=2511341
&destination-card-hash-id=2511340
&card-country-alpha-three-code=AZE
&destination-card-country-alpha-three-code=USA
&verified-3d-status=NOT_AUTHENTICATED
&processor-credit-rrn=0435147814453
&processor-credit-arn=899834666
&processor-debit-arn=668539305
&ips-src-payment-product-code=UNK
&ips-src-payment-product-name=Unknown
&ips-src-payment-type-code=Credit
&ips-src-payment-type-name=VISA+Credit
&ips-dst-payment-product-code=UNK
&ips-dst-payment-product-name=Unknown
&ips-dst-payment-type-code=Prepaid
&ips-dst-payment-type-name=VISA+Prepaid
&initial-amount=10.42
&transaction-date=2024-12-16+08%3A37%3A34+MSK
```

#### Пример неуспешного ответа

```http
HTTP/1.1 200
Server: server
Date: Mon, 16 Dec 2024 05:33:57 GMT
Content-Type: text/html;charset=utf-8
Connection: close
Vary: Accept-Encoding
X-XSS-Protection: 1
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000
Content-Language: en-US
Strict-Transport-Security: max-age=31536000
Content-Length: 164

type=status-response
&serial-number=00000000-0000-0000-0000-000002f38231
&merchant-order-id=1
&status=error
&error-message=AMBIGUOUS_CLIENT_ORDER_ID
&error-code=124
```

#### Open API Collection

Open this method in the OpenAPI Reference

<a class="openapi-reference-button" href="/openapi-doc/#POST/api/v4/status/{endpoint Id}" target="_blank" rel="noopener">View in OpenAPI <svg xmlns="http://www.w3.org/2000/svg" view Box="0 0 24 24" fill="none" stroke="current Color" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg></a>

#### Коллекция Postman

<div class="postman-run-button"
data-postman-action="collection/fork"
data-postman-var-1="23519287-ea926107-d311-4ae5-9fc0-d99378de8f1a"
data-postman-collection-url="entity Id=23519287-ea926107-d311-4ae5-9fc0-d99378de8f1a&entity Type=collection&workspace Id=7be78bd7-9f10-4be9-a60e-bd36ff1b6783"
data-postman-param="env%5BPayment%20gateway%20ENV%5D=W3sia2V5IjoiVVJMIiwidm FsdWUi Oi IiLCJlbm FibGVk Ijp0cn VlLCJ0eXBl IjoiZGVmYXVsdCJ9XQ=="></div>
<script type="text/javascript">
 (function (p,o,s,t,m,a,n) {
 !p[s] && (p[s] = function () { (p[t] || (p[t] = [])).push (arguments); });
 !o.get Element By Id (s+t) && o.get Elements By Tag Name("head")[0].append Child((
 (n = o.create Element("script")),
 (n.id = s+t), (n.async = 1), (n.src = m), n
 ));
 }(window, document, "_pm", "Postman Run Object", "https://run.pstmn.io/button.js"));
 var env Name = "Payment gateway ENV";
	 var env Data = {
 URL:'sandbox.payneteasy.ru' + "/" + 'paynet'
 };
 \_pm('env.replace', env Name, env Data);
</script>

#### Конструктор запросов

Введите приватный ключ, содержащийся в PKCS#1. См. [RSA-SHA256](https://doc.payneteasy.ru/integration/general_api_usage/request_authentication_methods/oauth.html.md).

<script type="text/javascript" src="../_static/js/d2cdebug/oauth-1.0a-rsa-sha256gbv4.js"></script>
<script type="text/javascript" src="../_static/js/d2cdebug/jsrsasign-latest-all-min.js"></script>
<script src="../_static/js/generate_card_number.js"></script>
<meta http-equiv="Cache-Control" content="no-cache">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="../_static/js/highlight/styles/default.css">
<script src="../_static/js/highlight/highlight.pack.js"></script>

<script type="text/javascript">
$(document).ready (function(){
 $("#order Request Tab a").click (function (e){
 	e.prevent Default();
 	$(this).tab('show');
 });
});
</script>

<script type="text/javascript">
 var RSAPrivate KeyPEM = "";
 var curl Order Request Text = "";
 var php Order Request Text = "";
 var ruby Order Request Text = "";
 var java Order Request Text = "";

 function generateRSAsign Order Status() {
 RSAPrivate KeyPEM = document.get Element By Id("prvkey_order").value;

 var oauthvfour = OAuthgb({
 consumer: {
 public: document.v4Transfer Order Status.elements['login'].value
 },
 signature_method: 'RSA-SHA256'
 });

 request Url = document.v4Transfer Order Status.elements['url'].value;

 var request_data = "";

 request_data = {
 url: request Url,
 method: 'POST',
 data: {
 'login': document.v4Transfer Order Status.elements['login'].value,
 'client_orderid': document.v4Transfer Order Status.elements['client_orderid'].value,
 'order_id': document.v4Transfer Order Status.elements['order_id'].value,
 'by-request-sn': document.v4Transfer Order Status.elements['by-request-sn'].value,
 }
 };

 //excluding empty parameters from output
 function remove Empty (obj) {
 Object.keys (obj).for Each((key) => (obj[key] == "") && delete obj[key]);
 };
 remove Empty (request_data.data);

 var oauthvfour_data = oauthvfour.authorize (request_data);
 var data_for_base_string = {
 "oauth_consumer_key": oauthvfour_data.oauth_consumer_key,
 "oauth_nonce": oauthvfour_data.oauth_nonce,
 "oauth_signature_method": oauthvfour_data.oauth_signature_method,
 "oauth_timestamp": oauthvfour_data.oauth_timestamp,
 "oauth_version": oauthvfour_data.oauth_version
 };

 var xhttp = new XMLHttp Request();
 xhttp.onreadystatechange = function() {
 if (xhttp.ready State == 4 && xhttp.status == 200) {
	 if (url == "../_static/examples/PHP/params_with_header_PHP.txt"){
 php Order Request Text = xhttp.response Text;}
		 else if (url == "../_static/examples/Ruby/params_with_header_Ruby.txt") {
		 ruby Order Request Text = xhttp.response Text;}
		 else{
		 java Order Request Text = xhttp.response Text;}
 }
 }
	 url = "../_static/examples/PHP/params_with_header_PHP.txt";
 xhttp.open("GET", url, false);
 xhttp.send();
	 url = "../_static/examples/Ruby/params_with_header_Ruby.txt";
 xhttp.open("GET", url, false);
 xhttp.send();
	 url = "../_static/examples/Java/params_java_v4.txt";
 xhttp.open("GET", url, false);
 xhttp.send();

 var params = "";

 for (var key in request_data) {
 if (key == 'data'){
 for (var key in request_data.data){
 params +=(" '"+ key + "' => '" + request_data.data[key] + "', \\n" );
 }
 }
 }

 php Order Request Text = php Order Request Text.replace("{$generated parameters with values code}", params);
		php Order Request Text = php Order Request Text.replace("{$sandbox}", request Url);
		php Order Request Text = php Order Request Text.replace("{$Authorization}", oauthvfour.to Header (oauthvfour_data). Authorization);

		ruby Order Request Text = ruby Order Request Text.replace("{$generated parameters with values code}", params);
		ruby Order Request Text = ruby Order Request Text.replace("{$sandbox}", request Url);
		ruby Order Request Text = ruby Order Request Text.replace("{$Authorization}", oauthvfour.to Header (oauthvfour_data). Authorization);

 show Text("statusrequestV4basestring", oauthvfour.get Base String (request_data, data_for_base_string));
 show Text("statusrequestV4parameters", oauthvfour.get Parameter String NoOAuth (request_data));
 show Text("statusrequestV4headers", oauthvfour.to Header (oauthvfour_data). Authorization);
 show Text("statusrequestV4hexsign", oauthvfour_data.hex_signature);
 show Text("statusrequestV4b64sign", oauthvfour_data.oauth_signature);
 var java Header = oauthvfour.to Header (oauthvfour_data). Authorization.split('"').join('\\\\"');
 java Header = '"' + java Header + '"';

 java Order Request Text = java Order Request Text.replace("{$targetURL}", request Url);
		java Order Request Text = java Order Request Text.replace("{$has Headers}", "true");
		java Order Request Text = java Order Request Text.replace("{$oauth Header}", java Header);
	 java Order Request Text = java Order Request Text.replace("{$url Parameters}", oauthvfour.get Parameter String NoOAuth (request_data));

 curl Order Request Text = 'curl -H \\'Authorization: '
 + oauthvfour.to Header (oauthvfour_data). Authorization
 + '\\' --data \\''
 + oauthvfour.get Parameter String NoOAuth (request_data)
 + '\\' \\'' + request_data.url + '\\'';

 show Text("statusrequestV4phpvalue", php Order Request Text);
 show Text("statusrequestV4rubyvalue", ruby Order Request Text);
 show Text("statusrequestV4javavalue", java Order Request Text);
 show Text("statusrequestV4curlvalue", curl Order Request Text);

 function show Text (element Id, text) {
 var child = document.create Text Node (text);
 var element = document.get Element By Id (element Id);
 element.innerHTML = "";
 if (element.has Child Nodes()) {
 element.replace Child (child, element.first Child);
 } else {
 element.append Child (child);
 }
 }

 $(document).ready (function() {
 $('pre code').each (function (i, block) {
 hljs.highlight Block (block);
 });
 });
 }

 function rand Inv (c) {
 document.get Element By Id (c).value = "inv" + Math.floor (Math.random() \* 10000000);
 }

 function copy To ClipboardstatusrequestV4 (text) {
 var text Area = document.create Element("textarea");

 // Place in top-left corner of screen regardless of scroll position.
 text Area.style.position = 'fixed';
 text Area.style.top = 0;
 text Area.style.left = 0;

 // Ensure it has a small width and height. Setting to 1px / 1em
 // doesn't work as this gives a negative w/h on some browsers.
 text Area.style.width = '2em';
 text Area.style.height = '2em';

 // We don't need padding, reducing the size if it does flash render.
 text Area.style.padding = 0;

 // Clean up any borders.
 text Area.style.border = 'none';
 text Area.style.outline = 'none';
 text Area.style.box Shadow = 'none';

 // Avoid flash of white box if rendered for any reason.
 text Area.style.background = 'transparent';

 if (text == 'curl') {
 text Area.value = curl Order Request Text;
 } else if (text == 'php') {
 text Area.value = php Order Request Text;
 } else if (text == 'ruby'){
 text Area.value = ruby Order Request Text;
 }else{
 text Area.value = java Order Request Text;
 }
 document.body.append Child (text Area);

 text Area.select();

 try {
 var successful = document.exec Command('copy');
 var msg = successful ? 'successful' : 'unsuccessful';
 console.log('Copying text command was ' + msg);
 } catch (err) {
 console.log('Oops, unable to copy');
 }

 document.body.remove Child (text Area);
 document.onreadystatechange = function() {
 if (document.ready State == "complete") {
 generateRSAsign Order Status();
 }
 };

 }

 function sign_v4Transfer Order Status (form) {
 generateRSAsign Order Status();
 return false;
 }

</script>

<textarea id="prvkey_order" style="font-family: monospace; min-height:19em;height:100%;" rows="10" cols="66">-----BEGIN RSA PRIVATE KEY-----
MIIJKQIBAAKCAgEA16QK2iwgYUb Mr2Gq SbaS0PQZKF2Dkst Sj0dakW+hASTz5Ams
R5s DnurfeR4m+Htaxiv69MMdvoDLu CmZE8KQzsEOZovZ9UYSh9CKK4/FzQSZ8ZDP
8cpKLN7/git WiM14iuC9Pi74TTLeg7Pu Gjeoc0j Us0WMf7sV6uzf Zwvq YgUVRljY
gscwDRiTSGJQum Qtan Cs/LMIkxou Th LztSSEm Hhh Ez2aWOomqR5hHO+HJ4I1AfET
V7VpKJ4c1+z Mes Dfp DxZ8Vp Qpno9iikFG64MigDFm BeskI6q15t BwbROYSfqNEmG
LwhYQ+SXnojueazkSJ45CeQRh6dn3GgD7kex2N3lK97qpq DcWOLqcsbe+ZyTGALn
WGzTZWjleO+yrdE6awD34kUYVnzD/9Wvd YqpH2pXBDqOIXu6lm4g Le5pKTRiFEc+
Tjg Vb34tJGEERkrvqktSEmRQz MgZQn Zk/5//7+csUIcSPmqd Un5oB6ng Vue Zkk7v
wtL6dc Cxr5is WgXQEO+o Ybt72Ns5RjLVWiXWv2ZNFd+iR4O6+et BxYNz+mg/2B5c
PO8NWyvv FlaBUu4I5GG1XntBGWncKQiZ49WCv LcYEb SfUEkWLj6zq JaDS/buT3jU
rWQ0WEI8G1HnTQp0cqmx9WpXDLx4n3yt Rj Hu He3ND9AYE28yhfFY5baIU3UCAwEA
AQKCAgAC4QrQDOTFx7c15DzszQY6yfeIBW+b Ry Gs Dgz UgkQJCuBCv Cp Trmsm9QXU
zSVCDguRN8ca+3vr LjcKF2w WynM6f3NcxSM81hmrPIq Lu Fiwuw3/HqrYFJZW8QdC
SqfWHc At Qo Dk UqY4CaTU51MXgIS8PU2xsw0EK5BIWa9F5e/ULTMyhD8nx9cJZbmZ
rs5b Hrl Ig Yadv RoxNJl Hq5Mba QhoLLtHEXx9EWt Au ModI8mPKnrgssJKWn6z7yB9
d Yjp XqfdvnyI72bCQkGOFaweyX0b XpVEyZQh Pf Zj+IuxNWIShADpf83N1POwvF2V
3Ugp0bgejBZA3o2pXP/S/oSG6ugh8dZHfa8vkw0x5N28393IzIMpzwE2Ens BidN1
ca7Nw Dpmp UyuULSpi3Yo ViUYY1i4Mwngv2XQdkbvo Gus Qwg Wo NrppmDKxlL5qEBf
lIPCZAgZSR79KHYw2VOzkm84hu0jDXMthpt9A2g Lk Rh Gn Ggb4n5Kzy CpY9iuFK2w
CO5FdjloXOjRLZb7G1JCeU6Qh0kjSE7seh9ltyo+VsWOLx4UwVOYGCMAF45yO0wF
/MJd Yo Ut1vC5G/DK8itTTjwb/x PlGDiC441TOReWVwF6n36+shb6szlI2EmqKBkp
2Sr5xQ5VNZkcG2W/BUF7+n8Rvisu17TyW0HmwDEBDfJQzgzgpQKCAQEA7RpBNVBH
Jx8gR7h Qdbyi4/6U5Ki YorkzuoK4KkjRWJfq Jvp9uGZS2v Dw OoIC8kCAXMwu3OCI
U0xk DvH7bb/qedn0IG7+72FUCKlxqk Mk4lv03zE9yUPcYNT+w573uh+rXQ/mcsFF
+a BtupRZi Dqqd4vuvj Tpjw5Q4tyk/lx Zfbe10S2NyxY4d Zsbm8gl0Syp Ls/rLYjZ
8Znt Rp ZozIWoenrF3AnvtR114WBDpBVwSJ9KNd8xB5Fufc9TqsZ/EKPjDVrn2Sq2
Lt/xKSopwx Py IhKG1zm Ae Yhv8Q+GYUOQYCf Bj2opDC3AOxANw2j9M8n YjCMDm PaP
5iDCUla35srp/wKCAQEA6NPj8auPGGFen2ZJoydpEPKgU3z Adv05VlKVIvbA9c+Y
oy7z Nhn Nw0PCkk YpB9jPGvpdn6KFh2ZTU/mgm Iys Kri LcLN4g Kho7JUCU3kvg1mv
z Jiz/5fR0xCCRNPLAANh6uJ+CXyssjb Uoe9Emy VxKX3l2z Kmy1zOKRc/Fb Akql07
ItDReryb64IjsfT4GtU4nBK7z CzI+yya1BjL/McnGBcpKIwp9HCwaTQK7yxa7ThY
Tsf TuxoyZM1/xZE0cKRJGVLtkao1Vf Oy0SDd Cp+Rwt Bv Vmt3Wt6v VcL6qG0LW5Fe
Uz0PN+Ceb MfhBCaqWXIXeuMUo+Rd Ln Gn113Tl6i6iwKCAQEAz+NzRUGMAXtDHF84
/OJWmD1BY3OH0TU9a8ztmPWby Gf6gA6la Kcf AqS6nTId TzbK1ZKZjES6gv65x Hjb
ERFyj0BQ0pc/o7fcrHOVG8ofbv Fdt MxB9l QvyB84+WBKqMDXyZMFZZyctBC75Rnp
no6Bp KvmupM+LZZJyX/YksV6GcaX/j5I0sY63rMO8/n7XnogJNFczOHu5e0mo/uB
C8ItRKadER8NM+o Oz3tOE3JQrvwr Xyz Amngj Pu An5daA1qA7lhwcq MbQUi08D/HO
CCNW7BT+c Xs Tc Hv2WpBYLLPGx Oh WyF42e10p7R9YUfud9miGG+kfYGDf LtGOUA+E
0z EbFQKCAQEA4lcz Dnqolpv5394RkiG6+zXTdLYfaM2NUw TfZOka9xx El8c Juztk
lAIoggjg1HcKB4EDSTA2vUVVlppjb Em9CZ70N7DRYcn Wjr/h TgLOlNO4mp6Mxdny
qkwvR/fZLf8bzrs2qc Rh IrM5DN/NA0Jn+10f+nMIQUTMSpg FxPDDBDe0SIlWTApV
Ta Lr TpIGLBf Ce7+ef8O98qgPMEeW7vsw XzQM2BVCqBZw+SUVyCOHl XukJZo PlKHI
Ac ThBNC/eQ3M3miG+YfNZ+y Mls9q82viyM/WnN3GXzm CnE37XYb8dp0gZK1EQR8F
BF1fu6hXDLNkbhu ZsiZMC92DvFPDYnku NwKCAQA6/2K8PLl OeK+0p/IGVsg Jpg Hn
Uh3BehVKHXeG/Buhn5bMXX3cB2hEHg2tz4pw3JxfZ1UflhyhKD43Xnpxu Mmt81Ka
Ja5MeXDg0kfnl XolVA4ezx2V2EohMEx UykkOIfQBDTa Ntjsg5PB4HLKFId3kJ6u/
JCXuy0EA07vl/k Nl+cDEBLJs VtvtxHLdpd JhO1POi3IIg OpddO+a/O/GDsdlAWog
hy Eb6r7+b Wurjw0YjHX+R5ZQ+0XtnzXU20d2NiP/oH2Iv QzXRUQ1U17Kzzn5PAhs
YC7r9lRV4Vjbh Ei3Zk2FBPrrzs2ie Xo5aHXCnz FywQ99nlrz0Ic8vV16WR1x
-----END RSA PRIVATE KEY-----
</textarea>

<h5>Order status form</h5>
<form name="v4Transfer Order Status">
 
 <p></p>
 <input type="button" class="doc-button" style="font-size: 100%; padding: 2px 6px 3px 6px;" value="Sign status request" onclick="sign_v4Transfer Order Status (document.v4Transfer Order Status)" />
 <p></p>
</form>

<sup>\* HEX encoded string is for debug purposes only. You shouldn't send this string to the server neither in HEX nor in Encoded HEX representation.</sup>

<sup>\* Binary RSA-SHA256 signature directly encoded in base64 should be sent to the server.</sup>

<ul class="nav nav-tabs" id="order Request Tab">
 <li class="active">[CURL](#order RequestCURL)</li>
 <li>[PHP](#order RequestPHP)</li>
 <li>[Ruby](#order Request Ruby)</li>
 <li>[Java](#order Request Java)</li>
</ul>

 <button class="doc-button" onclick="copy To ClipboardstatusrequestV4('php')">Copy to clipboard</button>
 <pre><code class="php" id="statusrequestV4phpvalue"></code></pre>

 <button class="doc-button" onclick="copy To ClipboardstatusrequestV4('ruby')">Copy to clipboard</button>
 <pre><code class="language-ruby" id="statusrequestV4rubyvalue"></code></pre>

 <button class="doc-button" onclick="copy To ClipboardstatusrequestV4('java')">Copy to clipboard</button>
 <pre><code class="language-java" id="statusrequestV4javavalue"></code></pre>

### /api/v4/withdrawal-sbp

#### Введение

Чтобы выполнить выплату, отправьте запрос HTTPS POST, используя указанные ниже [URL-адреса](#payout-apis-sbp) и [параметры](#payout-parameters-sbp). Для аутентификации используйте [OAuth RSA-SHA256](https://doc.payneteasy.ru/integration/general_api_usage/request_authentication_methods/oauth.html.md).

#### API URL

> **Note:** Путь API URL не должен быть задан фиксированным значением, т.к. он может быть изменён позднее.

| Интеграционная среда | Производственная среда |
|-----------------------------------------------------------------------|--------------------------------------------------------------------|
| https://sandbox.payneteasy.ru/paynet/api/v4/withdrawal-sbp/ENDPOINTID | https://gate.payneteasy.ru/paynet/api/v4/withdrawal-sbp/ENDPOINTID |

#### Параметры запроса

> **Note:** Запрос должен иметь content-type=application/x-www-form-urlencoded и [Заголовки авторизации](https://doc.payneteasy.ru/integration/general_api_usage/request_authentication_methods/oauth.html.md).

| Название параметра | Описание | Значение |
|-----------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------|
| client_orderid | Идентификатор заказа, присвоенный Присоединяющейся Стороной. | `Необходимость`: Обязательно `Тип`: String `Длина`: 128 |
| amount | Сумма к оплате. Сумма должна быть указана в максимальных единицах с “.” разделителем. Например, 100.5 в RUB означает 100 российских рублей и 50 копеек. | `Необходимость`: Обязательно `Тип`: Numeric `Длина`: 10 |
| currency | Валюта, в которой проводится операция (трёхбуквенные алфавитные коды валют). Примеры значений: USD для доллара США, EUR для европейского евро, RUB для российского рубля. | `Необходимость`: Обязательно `Тип`: String `Длина`: 3 |
| receiver_phone | Номер телефона Получателя, также можно отправить как phone. | `Необходимость`: Обязательно `Тип`: Numeric `Длина`: 128 |
| merchant_data | Любая дополнительная информация об этой транзакции, которая может быть полезна во внешних системах Присоединяющейся стороны, например VIP customer, TV promo campaign lead. Будет возвращена в ответе Status и Callback Присоединяющейся стороны. Для SBP этот параметр используется для передачи кода банка Получателя. За подробностями обратитесь в Payneteasy. | `Необходимость`: Обязательно `Тип`: String `Длина`: 64k |
| bank_id | Любая дополнительная информация для этой транзакции, которая может быть полезна во внешних системах Присоединяющейся стороны, например VIP customer, TV promo campaign lead. Возвращается в ответе Status и Callback Присоединяющейся стороны. Для SBP этот параметр используется для передачи кода банка получателя. Также может быть отправлен как merchant_data. Для получения подробностей обратитесь в Payneteasy. | `Необходимость`: Обязательно `Тип`: String `Длина`: 64k |
| ipaddress | IP-адрес получателя (IPv4 или IPv6) | `Необходимость`: Условно `Тип`: String `Длина`: 7-45 |
| purpose | Назначение вывода средств. | `Необходимость`: Условно `Тип`: String `Длина`: 128 |
| receiver_first_name | Имя Получателя, так же можно отправить как first_name. | `Необходимость`: Условно `Тип`: String `Длина`: 128 |
| receiver_last_name | Фамилия Получателя, так же можно отправить как last_name. | `Необходимость`: Условно `Тип`: String `Длина`: 128 |
| receiver_country_code | Код страны Получателя, также можно отправить как country. | `Необходимость`: Условно `Тип`: String `Длина`: 3 |
| receiver_state | Штат Получателя, обязательный параметр для стран, которые делятся на штаты (США, Канада, Австралия), также можно отправить как state. | `Необходимость`: Условно `Тип`: String `Длина`: 4 |
| receiver_city | Город Получателя, также можно отправить как city. | `Необходимость`: Условно `Тип`: String `Длина`: 128 |
| receiver_zip_code | Почтовый индекс Получателя, также можно отправить как zip_code. | `Необходимость`: Условно `Тип`: Numeric `Длина`: 32 |
| receiver_address1 | Адрес Получателя, также можно отправить как address1. | `Необходимость`: Условно `Тип`: String `Длина`: 256 |
| receiver_email | Адрес электронной почты Получателя, также можно отправить как email. | `Необходимость`: Условно `Тип`: String `Длина`: 128 |
| order_desc | Описание заказа. | `Необходимость`: Опционально `Тип`: String `Длина`: 64 |
| server_callback_url | URL-адрес server_callback_url, по которому будет отправлен обратный вызов с результатом транзакции. Присоединяющаяся сторона может использовать обратные вызовы для индивидуальной обработки завершения транзакции (например, для сбора данных о платежах в информационной системе Присоединяющейся стороны). Список параметров, включенных в обратный вызов, см. в разделе [Обратного вызова Присоединяющейся стороны](https://doc.payneteasy.ru/integration/merchant_callback_parameters.html.md). Данный параметр может быть передан вместо notify_url. При использовании server_callback_url платежный шлюз отправляет callback-уведомление только при получении финального статуса исходной транзакции. При использовании notify_url платежный шлюз отправляет уведомление при получении финального статуса и продолжает отправлять уведомления о всех последующих изменениях (возвраты, chargeback и др.). | `Необходимость`: Опционально `Тип`: String `Длина`: 128 |
| notify_url | URL-адрес notify_url, по которому будет отправлен обратный вызов с результатом транзакции. Присоединяющаяся сторона может использовать обратные вызовы для индивидуальной обработки завершения транзакции (например, для сбора данных о платежах в информационной системе Присоединяющейся стороны). Список параметров, включенных в обратный вызов, см. в разделе [Обратного вызова Присоединяющейся стороны](https://doc.payneteasy.ru/integration/merchant_callback_parameters.html.md). Данный параметр может быть передан вместо server_callback_url. При использовании notify_url платежный шлюз отправляет уведомление при получении финального статуса и продолжает отправлять уведомления о всех последующих изменениях (возвраты, chargeback и др.). При использовании server_callback_url платежный шлюз отправляет callback-уведомление только при получении финального статуса исходной транзакции. | `Необходимость`: Опционально `Тип`: String `Длина`: 128 |

\* Спросите менеджера службы поддержки если условные параметры обязательны для интеграции

#### Параметры ответа

> **Note:** Ответ имеет заголовок Content-Type: text/html;charset=utf-8. Все поля имеют кодировку x-www-form-urlencoded, с символом (0xA) в конце значения каждого параметра.

| Параметры запроса вывода | Описание |
|----------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| type | Тип ответа. Может принимать такие значения как: async-response, validation-error, error и т.д. Если тип ответа validation-error или error, параметры error-message и error-code будут содержать детали ошибки. |
| paynet-order-id | Идентификатор заказа, присвоенный Payneteasy. |
| merchant-order-id | Идентификатор заказа Присоединяющейся Стороны. |
| serial-number | Уникальный номер, присваиваемый сервером Payneteasy конкретному запросу от Присоединяющейся стороны. |
| error-message | Для транзакций в статусе error этот параметр будет содержать причину отклонения или сведения об ошибке. |
| error-code | Код ошибки для транзакций в статусе error. |

#### Пример запроса

```http
POST /paynet/api/v4/withdrawal-sbp/39915 HTTP/1.1
Host: sandbox.payneteasy.ru
User-Agent: curl/7.83.0
Accept: */*
Authorization: OAuth oauth_consumer_key="TestMerchant", oauth_nonce="b5E31Tw6SVjauE29uOf2jOLnuUSXmVdE", oauth_signature="WrW79JHNUVwDRhCGWQYgaN6xmJXpQxy8XSNyCOL6b2Wyf7V5BWGMe2TZa1bjC9ZeO0Q3FcQxeGGHv0%2F7hsMAsJNQEET321VNsbDwao2Ep%2Bp7eoYiGYrVveSrSW1diCrBf3AJYJZM0PTJ67Sl8XyeTVBHT4kpC5qBu3xDQ3aFfKnmRTmn9fiVsYsYu3DQrsHM1K9uAoltGt3Muz0kCDZ3MWNGrNqtdpWuar8HRQD3kckcPjuN9D6VrSuQm9eLx27G%2FvkiP%2BZ44i8ghIUp61NWSrJ4Ky69JiZ%2FoaVVmUTEaanc%2F%2B%2BQT6jBwWy%2Bb%2FTLUrxtSakeNfcjn1JVwRf4aCX2fhyG5ozH%2BjiXF6eRb83WVqBUAwykSq35pLU3Vmua3pKMKAJK1ZRDZdjGrT50KJg5tBniC4JFzdQqjQf%2FhFnDYodfIK3S2qZo%2FD3Bmlya46iEcK6SAQdNBBQue3E5Qi8FEHYrY1o7K8wDyzT1QzqqHF%2BQdmXcElSGu9ge0Y655%2BbGtXhnsUWnKEO0NGqErvAwzm7yUg0e5QWHVf505aE7pr5K4z%2Fzj7AvkuD7R1savqam%2BnnuSfq1E%2BnnnN7mTcC0g18Sr38vdTshcGq99YW3xWKc%2FpuooZYdYa5A6u46o%2BREZSTCD2XexcV49%2F9eVn3xdoTXYq4NISJSY8U7ThKnr0g%3D", oauth_signature_method="RSA-SHA256", oauth_timestamp="1677831012", oauth_version="1.0"
Content-Length: 150
Content-Type: application/x-www-form-urlencoded
Connection: close

amount: 100.00
&client_orderid=123456
&currency=RUB
&merchant_data=100000000111
&order_desc=Test Order Описание
&phone=89031234567
&ipaddress=127.0.0.1
&server_callback_url=https://httpstat.us/200
```

#### Пример успешного ответа

```http
HTTP/1.1 200
Server: server
Date: Fri, 03 Mar 2023 08:10:34 GMT
Content-Type: text/html;charset=utf-8
Connection: close
Vary: Accept-Encoding
X-XSS-Protection: 1
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000
Content-Language: en-US
Strict-Transport-Security: max-age=31536000
Content-Length: 137

type=async-response
&serial-number=00000000-0000-0000-0000-000002e2c322
&merchant-order-id=1
&paynet-order-id=6982864
&end-point-id=39915
```

#### Пример неуспешного ответа

```http
HTTP/1.1 403 Forbidden
Server: server
Date: Thu, 25 Aug 2022 06:50:16 GMT
Content-Type: text/html
Content-Length: 735
Connection: close
X-XSS-Protection: 1
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000

<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  <title>403</title>

</head>

<body>
<p>Access is denied</p>
</body>
</html>
```

#### Коллекция Postman

<div class="postman-run-button"
data-postman-action="collection/fork"
data-postman-var-1="23519287-d6ee6ff8-a2c3-42b2-b3ba-0f838c32aeb0"
data-postman-collection-url="entity Id=23519287-d6ee6ff8-a2c3-42b2-b3ba-0f838c32aeb0&entity Type=collection&workspace Id=7be78bd7-9f10-4be9-a60e-bd36ff1b6783"
data-postman-param="env%5BPayment%20gateway%20ENV%5D=W3sia2V5IjoiVVJMIiwidm FsdWUi Oi IiLCJlbm FibGVk Ijp0cn VlLCJ0eXBl IjoiZGVmYXVsdCJ9XQ=="></div>
<script type="text/javascript">
 (function (p,o,s,t,m,a,n) {
 !p[s] && (p[s] = function () { (p[t] || (p[t] = [])).push (arguments); });
 !o.get Element By Id (s+t) && o.get Elements By Tag Name("head")[0].append Child((
 (n = o.create Element("script")),
 (n.id = s+t), (n.async = 1), (n.src = m), n
 ));
 }(window, document, "_pm", "Postman Run Object", "https://run.pstmn.io/button.js"));
 var env Name = "Payment gateway ENV";
	 var env Data = {
 URL:'sandbox.payneteasy.ru' + "/" + 'paynet'
 };
 \_pm('env.replace', env Name, env Data);
</script>

#### Конструктор запросов

Вставьте приватный ключ PKCS#1 PEM для среды sandbox в поле ниже. Конструктор запросов поддерживает длину ключа до 4096.

<link rel="stylesheet" href="../_static/pygments.css" type="text/css">
<script type="text/javascript" src="../_static/js/d2cdebug/oauth-1.0a-rsa-sha256.js"></script>
<script type="text/javascript" src="../_static/js/d2cdebug/jsrsasign-latest-all-min.js"></script>
<script src="../_static/js/generate_card_number.js"></script>
<meta http-equiv="Cache-Control" content="no-cache">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="../_static/js/highlight/styles/default.css">
<script src="../_static/js/highlight/highlight.pack.js"></script>

<script type="text/javascript">
$(document).ready (function(){
 $("#withdrawal Request Tab a").click (function (e){
 	e.prevent Default();
 	$(this).tab('show');
 });
});
</script>

<script type="text/javascript">
 var RSAPrivate KeyPEM = "";
 var curlwithdrawal Request Text = "";
 var phpwithdrawal Request Text = "";
 var rubywithdrawal Request Text = "";
 var javawithdrawal Request Text = "";

 function generateRSAsignwithdrawal() {
 RSAPrivate KeyPEM = document.get Element By Id("prvkey").value;

 var oauth = OAuth({
 consumer: {
 public: document.v4withdrawal Request.elements['login'].value
 },
 signature_method: 'RSA-SHA256'
 });

 var request Url = v4withdrawal Request.url.value;

 var req_data = "";

 req_data = {
 url: request Url,
 method: 'POST',
 data: get Params (v4withdrawal Request.parameters.value)
 };

 //excluding empty parameters from output
 function remove Empty (obj) {
 Object.keys (obj).for Each((key) => (obj[key] == "") && delete obj[key]);
 };
 remove Empty (req_data.data);

 var oauth_data = oauth.authorize (req_data);
 var data_for_base_string = {
 "oauth_consumer_key": oauth_data.oauth_consumer_key,
 "oauth_nonce": oauth_data.oauth_nonce,
 "oauth_signature_method": oauth_data.oauth_signature_method,
 "oauth_timestamp": oauth_data.oauth_timestamp,
 "oauth_version": oauth_data.oauth_version
 };

 var xhttp = new XMLHttp Request();
 xhttp.onreadystatechange = function() {
 if (xhttp.ready State == 4 && xhttp.status == 200) {
	 if (url == "../_static/examples/PHP/params_with_header_PHP.txt"){
 phpwithdrawal Request Text = xhttp.response Text;}
		 else if (url == "../_static/examples/Ruby/params_with_header_Ruby.txt") {
		 rubywithdrawal Request Text = xhttp.response Text;}
		 else{
		 javawithdrawal Request Text = xhttp.response Text;}
 }
 }
	 url = "../_static/examples/PHP/params_with_header_PHP.txt";
 xhttp.open("GET", url, false);
 xhttp.send();
	 url = "../_static/examples/Ruby/params_with_header_Ruby.txt";
 xhttp.open("GET", url, false);
 xhttp.send();
	 url = "../_static/examples/Java/params_java_v4.txt";
 xhttp.open("GET", url, false);
 xhttp.send();

 var params = "";

 for (var key in req_data) {
 if (key == 'data'){
 for (var key in req_data.data){
 params +=(" '"+ key + "' => '" + req_data.data[key] + "', \\n" );
 }
 }
 }

 phpwithdrawal Request Text = phpwithdrawal Request Text.replace("{$generated parameters with values code}", params);
		phpwithdrawal Request Text = phpwithdrawal Request Text.replace("{$sandbox}", request Url);
		phpwithdrawal Request Text = phpwithdrawal Request Text.replace("{$Authorization}", oauth.to Header (oauth_data). Authorization);

		rubywithdrawal Request Text = rubywithdrawal Request Text.replace("{$generated parameters with values code}", params);
		rubywithdrawal Request Text = rubywithdrawal Request Text.replace("{$sandbox}", request Url);
		rubywithdrawal Request Text = rubywithdrawal Request Text.replace("{$Authorization}", oauth.to Header (oauth_data). Authorization);

 show Text("withdrawalrequestbasestring", oauth.get Base String (req_data, data_for_base_string));
 show Text("withdrawalrequestparameters", oauth.get Parameter String NoOAuth (req_data));
 show Text("withdrawalrequestheaders", oauth.to Header (oauth_data). Authorization);
 show Text("withdrawalrequesthexsign", oauth_data.hex_signature);
 show Text("withdrawalrequestb64sign", oauth_data.oauth_signature);
 var java Header = oauth.to Header (oauth_data). Authorization.split('"').join('\\\\"');
 java Header = '"' + java Header + '"';

 javawithdrawal Request Text = javawithdrawal Request Text.replace("{$targetURL}", request Url);
		javawithdrawal Request Text = javawithdrawal Request Text.replace("{$has Headers}", "true");
		javawithdrawal Request Text = javawithdrawal Request Text.replace("{$oauth Header}", java Header);
	 javawithdrawal Request Text = javawithdrawal Request Text.replace("{$url Parameters}", oauth.get Parameter String NoOAuth (req_data));

 curlwithdrawal Request Text = 'curl -H \\'Authorization: '
 + oauth.to Header (oauth_data). Authorization
 + '\\' --data \\''
 + oauth.get Parameter String NoOAuth (req_data)
 + '\\' \\'' + req_data.url + '\\'';

 show Text("withdrawalrequestphpvalue", phpwithdrawal Request Text);
 show Text("withdrawalrequestrubyvalue", rubywithdrawal Request Text);
 show Text("withdrawalrequestjavavalue", javawithdrawal Request Text);
 show Text("withdrawalrequestcurlvalue", curlwithdrawal Request Text);

 function show Text (element Id, text) {
 var child = document.create Text Node (text);
 var element = document.get Element By Id (element Id);
 element.innerHTML = "";
 if (element.has Child Nodes()) {
 element.replace Child (child, element.first Child);
 } else {
 element.append Child (child);
 }
 }

 $(document).ready (function() {
 $('pre code').each (function (i, block) {
 hljs.highlight Block (block);
 });
 });
 }

 function rand Inv (c) {
 document.get Element By Id (c).value = "inv" + Math.floor (Math.random() \* 10000000);
 }

 function get Params (str) {
 var map = {};

 str.split('&').for Each (el => {
 var [key, value] = el.split('=');
 map[key] = value;
 });

 return map;
 }

 function copy To Clipboard Withdrawal Request (text) {
 var text Area = document.create Element("textarea");

 // Place in top-left corner of screen regardless of scroll position.
 text Area.style.position = 'fixed';
 text Area.style.top = 0;
 text Area.style.left = 0;

 // Ensure it has a small width and height. Setting to 1px / 1em
 // doesn't work as this gives a negative w/h on some browsers.
 text Area.style.width = '2em';
 text Area.style.height = '2em';

 // We don't need padding, reducing the size if it does flash render.
 text Area.style.padding = 0;

 // Clean up any borders.
 text Area.style.border = 'none';
 text Area.style.outline = 'none';
 text Area.style.box Shadow = 'none';

 // Avoid flash of white box if rendered for any reason.
 text Area.style.background = 'transparent';

 if (text == 'curl') {
 text Area.value = curlwithdrawal Request Text;
 } else if (text == 'php') {
 text Area.value = phpwithdrawal Request Text;
 } else if (text == 'ruby'){
 text Area.value = rubywithdrawal Request Text;
 }else{
 text Area.value = javawithdrawal Request Text;
 }
 document.body.append Child (text Area);

 text Area.select();

 try {
 var successful = document.exec Command('copy');
 var msg = successful ? 'successful' : 'unsuccessful';
 console.log('Copying text command was ' + msg);
 } catch (err) {
 console.log('Oops, unable to copy');
 }

 document.body.remove Child (text Area);
 document.onreadystatechange = function() {
 if (document.ready State == "complete") {
 generateRSAsignwithdrawal();
 }
 };

 }

 function sign_v4withdrawal Request (form) {
 generateRSAsignwithdrawal();
 return false;
 }

</script>

<textarea id="prvkey" style="font-family: monospace; min-height:19em;height:100%;" rows="10" cols="66">-----BEGIN RSA PRIVATE KEY-----
MIIJKQIBAAKCAgEA16QK2iwgYUb Mr2Gq SbaS0PQZKF2Dkst Sj0dakW+hASTz5Ams
R5s DnurfeR4m+Htaxiv69MMdvoDLu CmZE8KQzsEOZovZ9UYSh9CKK4/FzQSZ8ZDP
8cpKLN7/git WiM14iuC9Pi74TTLeg7Pu Gjeoc0j Us0WMf7sV6uzf Zwvq YgUVRljY
gscwDRiTSGJQum Qtan Cs/LMIkxou Th LztSSEm Hhh Ez2aWOomqR5hHO+HJ4I1AfET
V7VpKJ4c1+z Mes Dfp DxZ8Vp Qpno9iikFG64MigDFm BeskI6q15t BwbROYSfqNEmG
LwhYQ+SXnojueazkSJ45CeQRh6dn3GgD7kex2N3lK97qpq DcWOLqcsbe+ZyTGALn
WGzTZWjleO+yrdE6awD34kUYVnzD/9Wvd YqpH2pXBDqOIXu6lm4g Le5pKTRiFEc+
Tjg Vb34tJGEERkrvqktSEmRQz MgZQn Zk/5//7+csUIcSPmqd Un5oB6ng Vue Zkk7v
wtL6dc Cxr5is WgXQEO+o Ybt72Ns5RjLVWiXWv2ZNFd+iR4O6+et BxYNz+mg/2B5c
PO8NWyvv FlaBUu4I5GG1XntBGWncKQiZ49WCv LcYEb SfUEkWLj6zq JaDS/buT3jU
rWQ0WEI8G1HnTQp0cqmx9WpXDLx4n3yt Rj Hu He3ND9AYE28yhfFY5baIU3UCAwEA
AQKCAgAC4QrQDOTFx7c15DzszQY6yfeIBW+b Ry Gs Dgz UgkQJCuBCv Cp Trmsm9QXU
zSVCDguRN8ca+3vr LjcKF2w WynM6f3NcxSM81hmrPIq Lu Fiwuw3/HqrYFJZW8QdC
SqfWHc At Qo Dk UqY4CaTU51MXgIS8PU2xsw0EK5BIWa9F5e/ULTMyhD8nx9cJZbmZ
rs5b Hrl Ig Yadv RoxNJl Hq5Mba QhoLLtHEXx9EWt Au ModI8mPKnrgssJKWn6z7yB9
d Yjp XqfdvnyI72bCQkGOFaweyX0b XpVEyZQh Pf Zj+IuxNWIShADpf83N1POwvF2V
3Ugp0bgejBZA3o2pXP/S/oSG6ugh8dZHfa8vkw0x5N28393IzIMpzwE2Ens BidN1
ca7Nw Dpmp UyuULSpi3Yo ViUYY1i4Mwngv2XQdkbvo Gus Qwg Wo NrppmDKxlL5qEBf
lIPCZAgZSR79KHYw2VOzkm84hu0jDXMthpt9A2g Lk Rh Gn Ggb4n5Kzy CpY9iuFK2w
CO5FdjloXOjRLZb7G1JCeU6Qh0kjSE7seh9ltyo+VsWOLx4UwVOYGCMAF45yO0wF
/MJd Yo Ut1vC5G/DK8itTTjwb/x PlGDiC441TOReWVwF6n36+shb6szlI2EmqKBkp
2Sr5xQ5VNZkcG2W/BUF7+n8Rvisu17TyW0HmwDEBDfJQzgzgpQKCAQEA7RpBNVBH
Jx8gR7h Qdbyi4/6U5Ki YorkzuoK4KkjRWJfq Jvp9uGZS2v Dw OoIC8kCAXMwu3OCI
U0xk DvH7bb/qedn0IG7+72FUCKlxqk Mk4lv03zE9yUPcYNT+w573uh+rXQ/mcsFF
+a BtupRZi Dqqd4vuvj Tpjw5Q4tyk/lx Zfbe10S2NyxY4d Zsbm8gl0Syp Ls/rLYjZ
8Znt Rp ZozIWoenrF3AnvtR114WBDpBVwSJ9KNd8xB5Fufc9TqsZ/EKPjDVrn2Sq2
Lt/xKSopwx Py IhKG1zm Ae Yhv8Q+GYUOQYCf Bj2opDC3AOxANw2j9M8n YjCMDm PaP
5iDCUla35srp/wKCAQEA6NPj8auPGGFen2ZJoydpEPKgU3z Adv05VlKVIvbA9c+Y
oy7z Nhn Nw0PCkk YpB9jPGvpdn6KFh2ZTU/mgm Iys Kri LcLN4g Kho7JUCU3kvg1mv
z Jiz/5fR0xCCRNPLAANh6uJ+CXyssjb Uoe9Emy VxKX3l2z Kmy1zOKRc/Fb Akql07
ItDReryb64IjsfT4GtU4nBK7z CzI+yya1BjL/McnGBcpKIwp9HCwaTQK7yxa7ThY
Tsf TuxoyZM1/xZE0cKRJGVLtkao1Vf Oy0SDd Cp+Rwt Bv Vmt3Wt6v VcL6qG0LW5Fe
Uz0PN+Ceb MfhBCaqWXIXeuMUo+Rd Ln Gn113Tl6i6iwKCAQEAz+NzRUGMAXtDHF84
/OJWmD1BY3OH0TU9a8ztmPWby Gf6gA6la Kcf AqS6nTId TzbK1ZKZjES6gv65x Hjb
ERFyj0BQ0pc/o7fcrHOVG8ofbv Fdt MxB9l QvyB84+WBKqMDXyZMFZZyctBC75Rnp
no6Bp KvmupM+LZZJyX/YksV6GcaX/j5I0sY63rMO8/n7XnogJNFczOHu5e0mo/uB
C8ItRKadER8NM+o Oz3tOE3JQrvwr Xyz Amngj Pu An5daA1qA7lhwcq MbQUi08D/HO
CCNW7BT+c Xs Tc Hv2WpBYLLPGx Oh WyF42e10p7R9YUfud9miGG+kfYGDf LtGOUA+E
0z EbFQKCAQEA4lcz Dnqolpv5394RkiG6+zXTdLYfaM2NUw TfZOka9xx El8c Juztk
lAIoggjg1HcKB4EDSTA2vUVVlppjb Em9CZ70N7DRYcn Wjr/h TgLOlNO4mp6Mxdny
qkwvR/fZLf8bzrs2qc Rh IrM5DN/NA0Jn+10f+nMIQUTMSpg FxPDDBDe0SIlWTApV
Ta Lr TpIGLBf Ce7+ef8O98qgPMEeW7vsw XzQM2BVCqBZw+SUVyCOHl XukJZo PlKHI
Ac ThBNC/eQ3M3miG+YfNZ+y Mls9q82viyM/WnN3GXzm CnE37XYb8dp0gZK1EQR8F
BF1fu6hXDLNkbhu ZsiZMC92DvFPDYnku NwKCAQA6/2K8PLl OeK+0p/IGVsg Jpg Hn
Uh3BehVKHXeG/Buhn5bMXX3cB2hEHg2tz4pw3JxfZ1UflhyhKD43Xnpxu Mmt81Ka
Ja5MeXDg0kfnl XolVA4ezx2V2EohMEx UykkOIfQBDTa Ntjsg5PB4HLKFId3kJ6u/
JCXuy0EA07vl/k Nl+cDEBLJs VtvtxHLdpd JhO1POi3IIg OpddO+a/O/GDsdlAWog
hy Eb6r7+b Wurjw0YjHX+R5ZQ+0XtnzXU20d2NiP/oH2Iv QzXRUQ1U17Kzzn5PAhs
YC7r9lRV4Vjbh Ei3Zk2FBPrrzs2ie Xo5aHXCnz FywQ99nlrz0Ic8vV16WR1x
-----END RSA PRIVATE KEY-----
</textarea>

<h5>Debug form</h5>

<form name="v4withdrawal Request">

 
 <p></p>
 <input type="button" class="doc-button" style="font-size: 100%; padding: 2px 6px 3px 6px;" value="Sign withdrawal Request" onclick="sign_v4withdrawal Request (document.v4withdrawal Request)" />
 <p></p>
</form>

<sup>\* HEX encoded string is for debug purposes only. You shouldn't send this string to the server neither in HEX nor in Encoded HEX representation.</sup>

<sup>\* Binary RSA-SHA256 signature directly encoded in base64 should be sent to the server.</sup>

<ul class="nav nav-tabs" id="withdrawal Request Tab">
 <li class="active">[CURL](#withdrawal RequestCURL)</li>
 <li>[PHP](#withdrawal RequestPHP)</li>
 <li>[Ruby](#withdrawal Request Ruby)</li>
 <li>[Java](#withdrawal Request Java)</li>
</ul>

 <button class="doc-button" onclick="copy To Clipboard Withdrawal Request('php')">Copy to clipboard</button>
 <pre><code class="php" id="withdrawalrequestphpvalue"></code></pre>

 <button class="doc-button" onclick="copy To Clipboard Withdrawal Request('ruby')">Copy to clipboard</button>
 <pre><code class="language-ruby" id="withdrawalrequestrubyvalue"></code></pre>

 <button class="doc-button" onclick="copy To Clipboard Withdrawal Request('java')">Copy to clipboard</button>
 <pre><code class="language-java" id="withdrawalrequestjavavalue"></code></pre>

### Уведомление о сопоставлении карты Verification

#### Введение

Уведомление о сопоставлении карты проверки инициируется запросом HTTPS POST с использованием [URL-адресов](#api-url-verification-card-mapping-notification) и [параметров](#api-parameters-verification-card-mapping-notification).
 
Уведомление о сопоставлении карт позволяет сопоставлять учётные данные Consumer (телефон, e-mail, адрес выставления счёта, имя в Twitter и т. д.) с данными карты. Сопоставления можно использовать в транзакциях Transfer или Sale вместо номеров карт и иной информации о держателе карты. Payneteasy отправляет запрос уведомления о сопоставлении карты Verification на сервер/прокси Присоединяющейся стороны с созданной на своей стороне ссылкой на карту — {server Card Id}.
 
Сервер Присоединяющейся стороны сопоставляет {server Card Id} с созданным на своей стороне {client Card Id}. Затем {client Card Id} может быть сопоставлен в приложении или на сервере Присоединяющейся стороны с любыми данными Consumer из исходного запроса Perform validation. Это позволяет приложению Присоединяющейся стороны обрабатывать транзакции Sale или Transfer по электронному адресу Consumer, номеру телефона и т. д.
 
{unique Reference Card Id} остаётся неизменным, если клиент выполняет другую проверку с тем же номером карты, но, например, с другой датой истечения срока действия. Присоединяющаяся сторона может использовать его для программ лояльности или контроля мошенничества.
 

#### API URL

> **Note:** Это пример URL на сервере Присоединяющейся Стороны.

| Сервер Присоединяющейся Стороны |
|-------------------------------------------------------------------|
| https://proxy.connectingpartyserver.com/verification/notification |

#### Параметры запроса

| Название параметра | Описание | Значение |
|---------------------------------|-----------------------------------------------------|-------------------------------------------------------|
| consumer | | `Тип`: **Object** |
| consumer.device | | `Тип`: **Object** |
| consumer.device.serial Number | Серийный номер устройства потребителя. | `Тип`: String `Длина`: 1-50 |
| reference | | `Тип`: **Object** |
| reference.server Card Id | Идентификатор ссылки на карту (на стороне сервера). | `Тип`: String `Length`: 1-64 |
| reference.unique Reference Card Id | Идентификатор карты (на стороне сервера). | `Тип`: Integer |
| session | | `Тип`: **Object** |
| session.access Token | Ключ токена доступа потребителя. | `Тип`: String `Длина`: 32-128 |
| session.token | Токен сеанса транзакции верификации. | `Тип`: String `Длина`: 16-36 |
| source Card | | `Тип`: **Object** |
| source Card.bin | BIN исходной карты. | `Тип`: Integer |

#### Параметры успешного ответа

| Название параметра | Описание | Значение |
|------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------|
| invoice Id | Идентификатор транзакции верификации. | `Тип`: String |
| session | | `Тип`: **Object** |
| session.check Signature | Контрольная сумма, сгенерированная по hmac-sha1 (см. [Вычисление подписи](https://doc.payneteasy.ru/integration/api_development_tools.html.md)) из конкатенации session.nonce, endpoint Id и invoice Id. | `Тип`: String |
| session.nonce | Уникальная случайная строка, сгенерированная сервером Присоединяющейся стороны. | `Тип`: String |
| session.token | Токен сеанса транзакции верификации. | `Тип`: String |

#### Параметры неуспешного ответа

| Название параметра | Описание | Значение |
|----------------------|-----------------------------------------------------------------------------------------------------------|-----------------------------|
| error | | `Тип`: **Object** |
| error.cause | Причина ошибки. Возможные значения: `FILTERED`, `INVALID_REQUEST`, `SERVER_FAILED`, `SERVER_UNAVAILABLE`. | `Тип`: Enum |
| error.code | Уникальный код ошибки. | `Тип`: String |
| error.message | Описание ошибки. | `Тип`: String |
| invoice Id | Идентификатор транзакции верификации. | `Тип`: String |

#### Пример запроса

```json
{
  "consumer": {
    "device": {
      "serialNumber": "string"
    }
  },
  "reference": {
    "serverCardId": "string",
    "uniqueReferenceCardId": "integer"
  },
  "sourceCard": {
    "bin": "integer"
  },
  "session": {
    "accessToken": "string",
    "token": "string"
  }
}
```

#### Пример успешного ответа

```json
{
  "invoiceId": "string",
  "session": {
    "checkSignature": "string",
    "nonce": "string",
    "token": "string"
  }
}
```

#### Пример неуспешного ответа

```json
{
  "error": {
    "cause": "enum",
    "code": "string",
    "message": "string"
  },
  "invoiceId": "string"
}
```

### Verification статус

#### Введение

Проверка статуса инициируется запросом HTTPS POST с использованием [URL-адресов](#api-url-verification-status) и [параметров](#api-parameters-verification-status).
 
 
Verification статус запрос is made by Присоединяющаяся сторона’s app to Payneteasy to get the статус of verification транзакция. Payneteasy
 
Рекомендуется отправлять запрос Verification статус в течение 2-3 минут с интервалом 3-5 секунд между запросами.
 
Присоединяющаяся сторона’s server should rely on the callback for final статус.
 

#### API URL

> **Note:** Путь API URL не должен быть задан фиксированным значением, т.к. он может быть изменён позднее.

| Интеграционная среда | Производственная среда |
|-------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------|
| https://sandbox.payneteasy.ru/paynet/dapi/v1/verification/{endpoint Id}/{invoice Id}/status | https://gate.payneteasy.ru/paynet/dapi/v1/verification/{endpoint Id}/{invoice Id}/status |

#### Параметры запроса

| Название параметра | Описание | Значение |
|----------------------|-----------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------|
| session | | `Необходимость`: Обязательно `Тип`: **Object** |
| session.access Token | The access token key received in Необязательное потребителя authentication. | `Необходимость`: Обязательно `Тип`: String `Длина`: 32-128 |
| session.token | Токен сеанса транзакции верификации. | `Необходимость`: Обязательно `Тип`: String `Длина`: 16-36 |

#### Параметры успешного ответа

| Название параметра | Описание | Значение |
|----------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------|
| invoice Id | Идентификатор транзакции верификации. | `Тип`: String |
| session | | `Тип`: **Object** |
| session.token | Токен сеанса транзакции верификации. | `Тип`: String |
| state | Возможные значения: `PROCESSING`, `REDIRECT_REQUEST`, `APPROVED`, `DECLINED`. | `Тип`: Enum |
| bank Order Id | Обязательное if state is `APPROVED` or `DECLINED`. | `Необходимость`: Условно `Тип`: String `Длина`: 128 |
| redirect Url | Обязательное if state is `REDIRECT_REQUEST`. | `Необходимость`: Условно `Тип`: String `Длина`: 128 |
| error Code | Код причины отклонения; может присутствовать, если состояние — `DECLINED`. | `Необходимость`: Опционально `Тип`: Integer `Длина`: 128 |
| error Message | Сообщение о причине отклонения; может присутствовать, если состояние — `DECLINED`. | `Необходимость`: Опционально `Тип`: String `Длина`: 128 |
| secure3DAuth Status | Возможные значения: `AUTHENTICATED`, `NOT_AUTHENTICATED`, `UNSUPPORTED`. `UNSUPPORTED` означает, что карта не поддерживает 3-D Secure или процесс аутентификации 3DS завершился с неизвестным статусом. | `Необходимость`: Опционально `Тип`: Enum |
| random Sum Auth Status | Возможные значения: `AUTHENTICATED`, `NOT_AUTHENTICATED`. | `Необходимость`: Опционально `Тип`: Enum |

#### Параметры неуспешного ответа

| Название параметра | Описание | Значение |
|----------------------|------------------------------------------------------------------------------------------------------------------------------|-----------------------------|
| error | | `Тип`: **Object** |
| error.cause | Причина ошибки. Возможные значения: `FILTERED`, `INVALID_REQUEST`, `INTERNAL_ERROR`, `PROCESSING_FAILED`, `ORDER_NOT_FOUND`. | `Тип`: Enum |
| error.code | Уникальный код ошибки. | `Тип`: String |
| error.message | Описание ошибки. | `Тип`: String |
| invoice Id | Идентификатор транзакции верификации. | `Тип`: String |

#### Пример запроса

```json
{
  "session": {
    "accessToken": "string",
    "token": "string"
  }
}
```

#### Пример успешного ответа

```json
{
  "bankOrderId": "string",
  "invoiceId": "string",
  "redirectUrl": "string",
  "session": {
    "token": "string"
  },
  "state": "enum"
}
```

#### Пример неуспешного ответа

```json
{
  "error": {
    "cause": "enum",
    "code": "string",
    "message": "string"
  },
  "invoiceId": "string"
}
```

#### Конструктор запросов

<meta http-equiv="Cache-Control" content="no-cache">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="../../_static/js/highlight/styles/default.css">
<script src="../../_static/js/highlight/highlight.pack.js"></script>

<script type="text/javascript">
$(document).ready (function(){ 
 $("#verif Status Tab a").click (function (e){
 	e.prevent Default();
 	$(this).tab('show');
 });
});
</script>

<script type="text/javascript"> 
 var curl Text ="";
 var curl Windows Text ="";
 var url = "";
	
 function json Verif Status (form) {
	
 var all To Json = {
					session: 	 {
								 access Token: form.access Token.value
								 , token: form.token.value }};

	json Data = JSON.stringify (all To Json, null, 0);
	
 if (document.verif Status.stage.value == "gate") 
 {url = 'https://gate.payneteasy.ru/paynet/dapi/v1/verification/' + form.endpoint Id.value + '/' + form.invoice Id.value + '/status';}
 else {url = 'https://sandbox.payneteasy.ru/paynet/dapi/v1/verification/' + form.endpoint Id.value + '/' + form.invoice Id.value + '/status';}
	
	curl Text = 'curl -v -H "Content-Type: application/json" -POST --data \\'' + json Data + '\\' ' + url;
	
	show Text("curlvalue Verif Status", curl Text);

	curl Windows Text = 'curl -v -H "Content-Type: application/json" -POST --data \\"' + json Data.replace(/"/g, '\\\\"') + '\\" ' + url;
	
	show Text("curlwindowsvalue Verif Status", curl Windows Text);

	$(document).ready (function() {
	$('pre code').each (function (i, block) {
	 hljs.highlight Block (block);
	 });
	});
 }
	
 function show Text (element Id, text) {
 var child = document.create Text Node (text);
 var element = document.get Element By Id (element Id);
 element.innerHTML ="";
 if (element.has Child Nodes()) {
 element.replace Child (child, element.first Child);
 } else {
 element.append Child (child);
 }
 }
	
 function show Form (f, elements) {
 var newdiv = document.create Element('div');
 newdiv.innerHTML = elements;
 f.append Child (newdiv);
 }

 function copy To Clipboard Verif Status (text) {
 var text Area = document.create Element("textarea");

 // Place in top-left corner of screen regardless of scroll position.
 text Area.style.position = 'fixed';
 text Area.style.top = 0;
 text Area.style.left = 0;

 // Ensure it has a small width and height. Setting to 1px / 1em
 // doesn't work as this gives a negative w/h on some browsers.
 text Area.style.width = '2em';
 text Area.style.height = '2em';

 // We don't need padding, reducing the size if it does flash render.
 text Area.style.padding = 0;

 // Clean up any borders.
 text Area.style.border = 'none';
 text Area.style.outline = 'none';
 text Area.style.box Shadow = 'none';

 // Avoid flash of white box if rendered for any reason.
 text Area.style.background = 'transparent';

 if (text === 'curl'){
	 text Area.value = curl Text;
 } else {
 text Area.value = curl Windows Text;
 }
 document.body.append Child (text Area);

 text Area.select();

 try {
 var successful = document.exec Command('copy');
 var msg = successful ? 'successful' : 'unsuccessful';
 console.log('Copying text command was ' + msg);
 } catch (err) {
 console.log('Oops, unable to copy');
 }

 document.body.remove Child (text Area);

 }
</script>

<form name="verif Status">

 
 <p></p>
 <input type="button" class="doc-button" style="font-size: 100%; padding: 2px 6px 3px 6px;" value="Get JSON" on Click="json Verif Status (document.verif Status)"/>
 <p></p>
</form>
	<ul class="nav nav-tabs" id="verif Status Tab">
 <li class="active">[Curl for Unix](#verif Status Curl)</li>
 <li>[Curl for Windows](#verif Status Windows)</li>
 </ul>

			<pre style="word-break:break-all;">
			<code class="bash" id="curlwindowsvalue Verif Status"></code>
			</pre>
			<button class="doc-button" onclick="copy To Clipboard Verif Status('Windows')">Copy to clipboard</button>

### Асинхронные ответы

```plantuml
@startuml
participant cp as "Connecting Party"
participant paynet as "Payneteasy"
==Request Initiation==
cp -> paynet: API Request
activate cp
activate paynet
paynet --> cp: Order ID
deactivate cp
deactivate paynet
==Order Status Request==
cp -> paynet: api/v2/status
activate cp
activate paynet
paynet --> cp: Response\nstatus, order-stage
deactivate cp
deactivate paynet
==Receive Merchant Callback==
paynet -> cp: callback with final status
activate cp
activate paynet
cp --> paynet: HTTP 200
deactivate cp
deactivate paynet
@enduml
```

Если иное явно не указано в соответствующей команде API, все ответы Payneteasy являются асинхронными, независимо от отправленного запроса или callback.

### Банковский перевод со счётом

#### Введение

Этот сценарий использования описывает, как Присоединяющаяся сторона может выставлять счета для Swift или аналогичных систем банковских переводов в Платёжном Шлюзе и отображать их плательщикам. Статусы входящих банковских переводов могут обновляться автоматически или вручную.
 
 
Значение терминов см. в [Глоссарии](https://doc.payneteasy.ru/integration/reference/glossary.html.md).
 

#### Bank Wire Transfer Flow

```plantuml
  skinparam roundcorner 20
  skinparam sequenceArrowThickness 2
  skinparam ParticipantPadding 30
  actor Плательщик as Customer
  participant "Веб-сайт \nПрисоединяющейся Стороны" as Merchant
  participant "Платёжный Шлюз" as g
  autonumber
  Customer -> Merchant: Инициализация
  activate Merchant
  == Запрос на проведение оплаты ==
  Merchant -> g: api/v2/auth-cash
  activate g
  g --> Merchant: orderId
  g --> g: Генерация инвойса
  == Получение обратного вызова \nПрисоединяющейся Стороны ==
  Merchant <- g: Обратный вызов с финальным статусом
  g <-- Merchant: HTTP 200
  deactivate g
  == Запрос статуса ==
  Merchant -> g: api/v2/status
  activate g
  g --> Merchant: Ответ со статусом, order-stage, \nreceipt-id=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
  deactivate g
  == Получение инвойса в форматах \nXML, PDF или обоих сразу ==
  group XML
  g <-- Merchant: view-invoice-xml/ENDPOINTID/receipt-id
  activate g
  g --> Merchant: XML
  deactivate g
  end
  group PDF
  g <-- Merchant: view-invoice/ENDPOINTID/receipt-id
  activate g
  g --> Merchant: PDF
  deactivate g
  end
  Merchant -> Customer: Показ результата
  deactivate Merchant
```

(2) Для реализации запроса банковского перевода см. [/api/v2/auth-cash/](https://doc.payneteasy.ru/integration/API_commands/api_v2_auth-cash.html.md).
 
(5,6) Для реализации запроса статуса заказа см. [/api/v2/status/](https://doc.payneteasy.ru/integration/API_commands/api_v2_status.html.md). Статус следует запрашивать несколько раз с интервалом 3–5 секунд, пока в ответе не будет получен окончательный статус. receipt-id будет получен в ответе статуса.
 
(7) Для реализации обратного вызова с обработкой окончательного статуса см. [Присоединяющаяся сторона](https://doc.payneteasy.ru/integration/API_commands/merchant_callback_parameters.html.md).
 
(9) Для реализации запроса view-invoice-xml см. [/view-invoice-xml/](https://doc.payneteasy.ru/integration/API_commands/view-invoice-xml.html.md). receipt-id будет использоваться для получения счёта в формате XML.
 
(11) Для реализации запроса просмотра счёта см. [/view-invoice/](https://doc.payneteasy.ru/integration/API_commands/view-invoice.html.md). receipt-id будет использоваться для получения счёта в формате PDF.
 

#### Simple Bank Transfer Flow Statuses

| Stage название | Описание |
|-------------------|----------------------------------------------------------------------------------------------------------------------------|
| AUTH_APPROVED | Счёт был выставлен Плательщику. |
| CANCEL_APPROVED | Плательщик не завершил перевод. Этот этап необязателен и может использоваться для лучшего контроля транзакции в бэк-офисе. |
| CAPTURE_APPROVED | Funds were transferred to the Присоединяющаяся сторона account (settled). |
| VOID_APPROVED | Средства были возвращены Плательщиком (отозваны). |
| REVERSAL_APPROVED | Funds were returned to the Payer by Присоединяющаяся сторона. |

#### Extended Bank Transfer Flow Statuses

| Stage название | Описание |
|---------------------|------------------------------------------------------------------------------------------------------------------------------------|
| AUTH_STARTING | Транзакция was initiated. |
| AUTH_INVOICED | Счёт был выставлен плательщику. Его можно скачать в бэк-офисе, отправить плательщику по электронной почте или запросить через API. |
| AUTH_SENT | Плательщик сообщил Присоединяющейся стороне, что счёт оплачен. Этот этап может быть пропущен. |
| CANCEL_APPROVED | Плательщик не завершил перевод. Этот этап необязателен и может использоваться для лучшего контроля транзакции в бэк-офисе. |
| AUTH_APPROVED | Перевод был получен банком. |
| CAPTURE_APPROVED | Funds were transferred to the Присоединяющаяся сторона account (settled). |
| VOID_APPROVED | Средства были возвращены Плательщиком (отозваны). |
| REVERSAL_APPROVED | Funds were returned to the Payer by Присоединяющаяся сторона. |
| CHARGEBACK_APPROVED | Средства были возвращены плательщиком. |

### Bitrix24

The Bitrix24 (1C-Bitrix) plugin is a payment module that adds Payneteasy as a payment system handler inside a Bitrix online store. It is distributed as a PHP module folder that is uploaded to the site via FTP and then activated through the Bitrix Marketplace, after which it can be selected as a payment handler for a store’s payment systems.

Documentation for this plugin is intentionally brief, since it mostly points to the plugin’s source repository and the (Russian- and English-language) installation notes published alongside it.

#### Source code

The plugin source is published on Git Hub: [php-plugin-bitrix](https://github.com/payneteasy/php-plugin-bitrix). The repository contains the plugin module itself, in a folder named `payneteasypayments.ecom`, together with a plain-text installation guide.

An accompanying documentation repository is also available: [bitrix-doc](https://github.com/annihilatoratm/bitrix-doc), which links to an [English-language installation guide](https://github.com/annihilatoratm/bitrix-doc/blob/main/documentation/doc-eng.md).

### Кнопка Купить сейчас

#### Введение

Интеграция Кнопка Купить сейчас актуальна для Присоединяющейся Стороны с ограниченным портфелем продаваемых продуктов. Это самый простой способ интеграции с Payneteasy. Такой способ интеграции не требует значительных технических усилий. Интеграция Кнопка Купить сейчас также позволяет Присоединяющейся Стороне снять с себя ответственность за хранение, обработку или передачу карточных данных Плательщика или иной конфиденциальной платёжной информации. Эти данные вводятся Плательщиком на размещённой Payneteasy форме данных клиента и платёжной форме в среде, сертифицированной по стандарту PCI DSS.
 
 
Значение терминов см. в [Глоссарии](https://doc.payneteasy.ru/integration/reference/glossary.html.md).
 
 
1. Плательщик нажимает на Кнопка Купить сейчас, перенаправляется на форму данных клиента, предоставленную Платёжным Шлюзом, и отправляет данные клиента;

`Форма Кнопка Купить сейчас`
1. Затем Плательщик перенаправляется на платёжную форму и отправляет платёжные данные (данные держателя карты).

`Платёжная Форма`
1. Контекстные данные собираются Payneteasy для обработки транзакции, Плательщик остаётся на форме ожидания до завершения транзакции;

`Форма Ожидания`
1. Браузер Плательщика перенаправляется на сайт Присоединяющейся Стороны на страницу с результатом.

#### Параметры, необходимые для интеграции Кнопка Купить сейчас

Присоединяющаяся Сторона предоставляет в поддержку Платёжного Шлюза следующую информацию для каждого продукта (товара): Сумма, Описание, URL финального перенаправления, Назначение (цель платежа) и Платёжный инструмент (метод оплаты).
 
Платёжный Шлюз предоставляет Присоединяющейся Стороне URL-адреса Кнопка Купить сейчас для каждого продукта (товара). URL-адреса имеют следующий формат:
 

| Интеграционная среда | Производственная среда |
|-------------------------------------------------------------------|----------------------------------------------------------------|
| https://sandbox.payneteasy.ru/paynet/api/v2/pay/ENDPOINTID/ITEMID | https://gate.payneteasy.ru/paynet/api/v2/pay/ENDPOINTID/ITEMID |

#### Сценарий формы Кнопка Купить сейчас

```plantuml
  skinparam roundcorner 20
  skinparam sequenceArrowThickness 2
  skinparam ParticipantPadding 30
  actor Плательщик as Customer
  participant "Веб-сайт \nПрисоединяющейся Стороны" as Merchant
  participant "Платёжный Шлюз" as g
  autonumber
  Customer -> Merchant: Инициализация
  activate Customer
  activate Merchant
  Customer <-- Merchant: Показ кнопки Buy Now
  deactivate Merchant
  Customer -> g: Перенаправление на форму с кнопкой Buy Now
  activate g
  g --> Customer: Возврат формы с информацией Клиента
  deactivate g
  g <- Customer: Форма подтверждения информации Клиента
  activate g
  g --> Customer: Возврат платёжной формы
  deactivate g
  Customer -> g: Подтверждени плтёжной формы
  deactivate Customer
  activate g
  g --> g: Обработка платежа
  == Финальное перенаправление Клиента ==
  g -> Customer: redirect_url веб-сайта \nПрисоединяющейся Стороны
  activate Customer
  Customer -> Merchant: POST redirect_url\nstatus, orderid
  deactivate Customer
  activate Merchant
  group Получение финального статуса
  == Получение обратного вызова \nПрисоединяющейся Стороны ==
  Merchant <- g: Обратный вызов со статусом
  g <-- Merchant: HTTP 200
  deactivate g
  == Запрос статуса ==
  Merchant -> g: api/v2/status
  activate g
  g --> Merchant: Ответ \nstatus, order-stage
  deactivate g
  end
  Merchant -> Customer: Показ результата
  deactivate Merchant
```

(2) Разместите HTML-элемент Кнопка Купить сейчас на странице оформления заказа, доступной Плательщику.
 
(9) Для имплементации финального перенаправления Плательщика см. [Финальное Перенаправление](https://doc.payneteasy.ru/integration/API_commands/final_redirect.html.md).
 
(11,12) Для имплементации запроса статуса заказа см. [/api/v2/status/](https://doc.payneteasy.ru/integration/API_commands/api_v2_status.html.md). Присоединяющаяся Сторона может запросить статус заказа после получения transaction ID в обратном вызове Присоединяющейся Стороны или в финальном перенаправлении.
 
(13) Для имплементации обратного вызова с обработкой финального статуса см. [Обратный вызов Присоединяющейся Стороны](https://doc.payneteasy.ru/integration/API_commands/merchant_callback_parameters.html.md).

### Общие утилиты

### Коды стран и штатов

#### Коды стран

* Коды стран в формате Alpha-2 используются в параметре country.
* Коды в формате Alpha-3 содержатся в ответе на запрос статуса и обратном вызове в параметрах card-country-alpha-three-code и destination-card-country-alpha-three-code.
* Коды ISO используются в конфигурации Платёжного Шлюза.

| Страна | Код Alpha-2 | Код Alpha-3 | Код ISO |
|----------------------------------------------|---------------|---------------|-----------|
| Åland Islands | AX | ALA | 248 |
| Afghanistan | AF | AFG | 004 |
| Albania | AL | ALB | 008 |
| Algeria | DZ | DZA | 012 |
| American Samoa | AS | ASM | 016 |
| Andorra | AD | AND | 020 |
| Angola | AO | AGO | 024 |
| Anguilla | AI | AIA | 660 |
| Antarctica | AQ | ATA | 010 |
| Antigua and Barbuda | AG | ATG | 028 |
| Argentina | AR | ARG | 032 |
| Armenia | AM | ARM | 051 |
| Aruba | AW | ABW | 533 |
| Australia | AU | AUS | 036 |
| Austria | AT | AUT | 040 |
| Azerbaijan | AZ | AZE | 031 |
| Bahamas | BS | BHS | 044 |
| Bahrain | BH | BHR | 048 |
| Bangladesh | BD | BGD | 050 |
| Barbados | BB | BRB | 052 |
| Belarus | BY | BLR | 112 |
| Belgium | BE | BEL | 056 |
| Belize | BZ | BLZ | 084 |
| Benin | BJ | BEN | 204 |
| Bermuda | BM | BMU | 060 |
| Bhutan | BT | BTN | 064 |
| Bolivia, Plurinational State of | BO | BOL | 068 |
| Bosnia and Herzegovina | BA | BIH | 070 |
| Botswana | BW | BWA | 072 |
| Bouvet Island | BV | BVT | 074 |
| Brazil | BR | BRA | 076 |
| British Indian Ocean Territory | IO | IOT | 086 |
| Brunei Darussalam | BN | BRN | 096 |
| Bulgaria | BG | BGR | 100 |
| Burkina Faso | BF | BFA | 854 |
| Burundi | BI | BDI | 108 |
| Cambodia | KH | KHM | 116 |
| Cameroon | CM | CMR | 120 |
| Canada | CA | CAN | 124 |
| Cabo Verde | CV | CPV | 132 |
| Cayman Islands | KY | CYM | 136 |
| Central African Republic | CF | CAF | 140 |
| Chad | TD | TCD | 148 |
| Chile | CL | CHL | 152 |
| China | CN | CHN | 156 |
| Christmas Island | CX | CXR | 162 |
| Cocos (Keeling) Islands | CC | CCK | 166 |
| Colombia | CO | COL | 170 |
| Comoros | KM | COM | 174 |
| Congo | CG | COG | 178 |
| Congo, the Democratic Republic of the | CD | COD | 180 |
| Cook Islands | CK | COK | 184 |
| Costa Rica | CR | CRI | 188 |
| Cote d’Ivoire | CI | CIV | 384 |
| Croatia | HR | HRV | 191 |
| Cuba | CU | CUB | 192 |
| Cyprus | CY | CYP | 196 |
| Czechia | CZ | CZE | 203 |
| Denmark | DK | DNK | 208 |
| Djibouti | DJ | DJI | 262 |
| Dominica | DM | DMA | 212 |
| Dominican Republic | DO | DOM | 214 |
| Ecuador | EC | ECU | 218 |
| Egypt | EG | EGY | 818 |
| El Salvador | SV | SLV | 222 |
| Equatorial Guinea | GQ | GNQ | 226 |
| Eritrea | ER | ERI | 232 |
| Estonia | EE | EST | 233 |
| Ethiopia | ET | ETH | 231 |
| Falkland Islands (Malvinas) | FK | FLK | 238 |
| Faroe Islands | FO | FRO | 234 |
| Fiji | FJ | FJI | 242 |
| Finland | FI | FIN | 246 |
| France | FR | FRA | 250 |
| French Guiana | GF | GUF | 254 |
| French Polynesia | PF | PYF | 258 |
| French Southern Territories | TF | ATF | 260 |
| Gabon | GA | GAB | 266 |
| Gambia | GM | GMB | 270 |
| Georgia | GE | GEO | 268 |
| Germany | DE | DEU | 276 |
| Ghana | GH | GHA | 288 |
| Gibraltar | GI | GIB | 292 |
| Greece | GR | GRC | 300 |
| Greenland | GL | GRL | 304 |
| Grenada | GD | GRD | 308 |
| Guadeloupe | GP | GLP | 312 |
| Guam | GU | GUM | 316 |
| Guatemala | GT | GTM | 320 |
| Guernsey | GG | GGY | 831 |
| Guinea | GN | GIN | 324 |
| Guinea-Bissau | GW | GNB | 624 |
| Guyana | GY | GUY | 328 |
| Haiti | HT | HTI | 332 |
| Heard Island and Mc Donald Islands | HM | HMD | 334 |
| Holy See (Vatican City State) | VA | VAT | 336 |
| Honduras | HN | HND | 340 |
| Hong Kong | HK | HKG | 344 |
| Hungary | HU | HUN | 348 |
| Iceland | IS | ISL | 352 |
| India | IN | IND | 356 |
| Indonesia | ID | IDN | 360 |
| Iran, Islamic Republic of | IR | IRN | 364 |
| Iraq | IQ | IRQ | 368 |
| Ireland | IE | IRL | 372 |
| Isle of Man | IM | IMN | 833 |
| Israel | IL | ISR | 376 |
| Italy | IT | ITA | 380 |
| Jamaica | JM | JAM | 388 |
| Japan | JP | JPN | 392 |
| Jersey | JE | JEY | 832 |
| Jordan | JO | JOR | 400 |
| Kazakhstan | KZ | KAZ | 398 |
| Kenya | KE | KEN | 404 |
| Kosovo | XK | XKX | 983 |
| Kiribati | KI | KIR | 296 |
| Korea, Democratic People’s Republic of | KP | PRK | 408 |
| Korea, Republic of | KR | KOR | 410 |
| Kuwait | KW | KWT | 414 |
| Kyrgyzstan | KG | KGZ | 417 |
| Lao People’s Democratic Republic | LA | LAO | 418 |
| Latvia | LV | LVA | 428 |
| Lebanon | LB | LBN | 422 |
| Lesotho | LS | LSO | 426 |
| Liberia | LR | LBR | 430 |
| Libya | LY | LBY | 434 |
| Liechtenstein | LI | LIE | 438 |
| Lithuania | LT | LTU | 440 |
| Luxembourg | LU | LUX | 442 |
| Macao | MO | MAC | 446 |
| North Macedonia | MK | MKD | 807 |
| Madagascar | MG | MDG | 450 |
| Malawi | MW | MWI | 454 |
| Malaysia | MY | MYS | 458 |
| Maldives | MV | MDV | 462 |
| Mali | ML | MLI | 466 |
| Malta | MT | MLT | 470 |
| Marshall Islands | MH | MHL | 584 |
| Martinique | MQ | MTQ | 474 |
| Mauritania | MR | MRT | 478 |
| Mauritius | MU | MUS | 480 |
| Mayotte | YT | MYT | 175 |
| Mexico | MX | MEX | 484 |
| Micronesia, Federated States of | FM | FSM | 583 |
| Moldova, Republic of | MD | MDA | 498 |
| Monaco | MC | MCO | 492 |
| Mongolia | MN | MNG | 496 |
| Montenegro | ME | MNE | 499 |
| Montserrat | MS | MSR | 500 |
| Morocco | MA | MAR | 504 |
| Mozambique | MZ | MOZ | 508 |
| Myanmar | MM | MMR | 104 |
| Namibia | NA | NAM | 516 |
| Nauru | NR | NRU | 520 |
| Nepal | NP | NPL | 524 |
| Netherlands | NL | NLD | 528 |
| New Caledonia | NC | NCL | 540 |
| New Zealand | NZ | NZL | 554 |
| Nicaragua | NI | NIC | 558 |
| Niger | NE | NER | 562 |
| Nigeria | NG | NGA | 566 |
| Niue | NU | NIU | 570 |
| Norfolk Island | NF | NFK | 574 |
| Northern Mariana Islands | MP | MNP | 580 |
| Norway | NO | NOR | 578 |
| Oman | OM | OMN | 512 |
| Pakistan | PK | PAK | 586 |
| Palau | PW | PLW | 585 |
| Palestine, State of | PS | PSE | 275 |
| Panama | PA | PAN | 591 |
| Papua New Guinea | PG | PNG | 598 |
| Paraguay | PY | PRY | 600 |
| Peru | PE | PER | 604 |
| Philippines | PH | PHL | 608 |
| Pitcairn | PN | PCN | 612 |
| Poland | PL | POL | 616 |
| Portugal | PT | PRT | 620 |
| Puerto Rico | PR | PRI | 630 |
| Qatar | QA | QAT | 634 |
| Reunion | RE | REU | 638 |
| Romania | RO | ROU | 642 |
| Russian Federation | RU | RUS | 643 |
| Rwanda | RW | RWA | 646 |
| Saint Barthelemy | BL | BLM | 652 |
| Saint Helena, Ascension and Tristan da Cunha | SH | SHN | 654 |
| Saint Kitts and Nevis | KN | KNA | 659 |
| Saint Lucia | LC | LCA | 662 |
| Saint Martin (French part) | MF | MAF | 663 |
| Saint Pierre and Miquelon | PM | SPM | 666 |
| Saint Vincent and the Grenadines | VC | VCT | 670 |
| Samoa | WS | WSM | 882 |
| San Marino | SM | SMR | 674 |
| Sao Tome and Principe | ST | STP | 678 |
| Saudi Arabia | SA | SAU | 682 |
| Senegal | SN | SEN | 686 |
| Serbia | RS | SRB | 688 |
| Seychelles | SC | SYC | 690 |
| Sierra Leone | SL | SLE | 694 |
| Singapore | SG | SGP | 702 |
| Slovakia | SK | SVK | 703 |
| Slovenia | SI | SVN | 705 |
| Solomon Islands | SB | SLB | 090 |
| Somalia | SO | SOM | 706 |
| South Africa | ZA | ZAF | 710 |
| South Georgia and the South Sandwich Islands | GS | SGS | 239 |
| Spain | ES | ESP | 724 |
| Sri Lanka | LK | LKA | 144 |
| Sudan | SD | SDN | 729 |
| Suriname | SR | SUR | 740 |
| Svalbard and Jan Mayen | SJ | SJM | 744 |
| Eswatini | SZ | SWZ | 748 |
| Sweden | SE | SWE | 752 |
| Switzerland | CH | CHE | 756 |
| Syrian Arab Republic | SY | SYR | 760 |
| Taiwan, Province of China | TW | TWN | 158 |
| Tajikistan | TJ | TJK | 762 |
| Tanzania, United Republic of | TZ | TZA | 834 |
| Thailand | TH | THA | 764 |
| Timor-Leste | TL | TLS | 626 |
| Togo | TG | TGO | 768 |
| Tokelau | TK | TKL | 772 |
| Tonga | TO | TON | 776 |
| Trinidad and Tobago | TT | TTO | 780 |
| Tunisia | TN | TUN | 788 |
| Türkiye | TR | TUR | 792 |
| Turkmenistan | TM | TKM | 795 |
| Turks and Caicos Islands | TC | TCA | 796 |
| Tuvalu | TV | TUV | 798 |
| Uganda | UG | UGA | 800 |
| Ukraine | UA | UKR | 804 |
| United Arab Emirates | AE | ARE | 784 |
| United Kingdom | GB | GBR | 826 |
| United States | US | USA | 840 |
| United States Minor Outlying Islands | UM | UMI | 581 |
| Uruguay | UY | URY | 858 |
| Uzbekistan | UZ | UZB | 860 |
| Vanuatu | VU | VUT | 548 |
| Venezuela, Bolivarian Republic of | VE | VEN | 862 |
| Viet Nam | VN | VNM | 704 |
| Virgin Islands, British | VG | VGB | 092 |
| Virgin Islands, U.S. | VI | VIR | 850 |
| Wallis and Futuna | WF | WLF | 876 |
| Western Sahara | EH | ESH | 732 |
| Yemen | YE | YEM | 887 |
| Zambia | ZM | ZMB | 894 |
| Zimbabwe | ZW | ZWE | 716 |
| Sint Maarten (Dutch part) | SX | SXM | 534 |
| Curaçao | CW | CUW | 531 |
| Bonaire, Sint Eustatius and Saba | BQ | BES | 535 |
| South Sudan | SS | SSD | 728 |

#### Обязательные коды штатов

Передача кода штата в параметре state обязательна для США, Канады и Австралии.

| Страна | Код штата | Название |
|----------|-------------|------------------------------|
| AU | ACT | Australian Capital Territory |
| AU | NSW | New South Wales |
| AU | NT | Northern Territory |
| AU | QLD | Queensland |
| AU | SA | South Australia |
| AU | TAS | Tasmania |
| AU | VIC | Victoria |
| AU | WA | Western Australia |
| CA | AB | Alberta |
| CA | BC | British Columbia |
| CA | MB | Manitoba |
| CA | NB | New Brunswick |
| CA | NL | Newfoundland and Labrador |
| CA | NT | Northwest Territories |
| CA | NS | Nova Scotia |
| CA | NU | Nunavut |
| CA | ON | Ontario |
| CA | PE | Prince Edward Island |
| CA | QC | Quebec |
| CA | SK | Saskatchewan |
| CA | YT | Yukon |
| US | AL | Alabama |
| US | AK | Alaska |
| US | AS | American Samoa |
| US | AZ | Arizona |
| US | AR | Arkansas |
| US | CA | California |
| US | CO | Colorado |
| US | CT | Connecticut |
| US | DE | Delaware |
| US | DC | District of Columbia |
| US | FL | Florida |
| US | GA | Georgia |
| US | GU | Guam |
| US | HI | Hawaii |
| US | ID | Idaho |
| US | IL | Illinois |
| US | IN | Indiana |
| US | IA | Iowa |
| US | KS | Kansas |
| US | KY | Kentucky |
| US | LA | Louisiana |
| US | ME | Maine |
| US | MD | Maryland |
| US | MA | Massachusetts |
| US | MI | Michigan |
| US | MN | Minnesota |
| US | MS | Mississippi |
| US | MO | Missouri |
| US | MT | Montana |
| US | NE | Nebraska |
| US | NV | Nevada |
| US | NH | New Hampshire |
| US | NJ | New Jersey |
| US | NM | New Mexico |
| US | NY | New York |
| US | NC | North Carolina |
| US | ND | North Dakota |
| US | OH | Ohio |
| US | OK | Oklahoma |
| US | OR | Oregon |
| US | PA | Pennsylvania |
| US | PR | Puerto Rico |
| US | RI | Rhode Island |
| US | SC | South Carolina |
| US | SD | South Dakota |
| US | TN | Tennessee |
| US | TX | Texas |
| US | UT | Utah |
| US | VT | Vermont |
| US | VI | Virgin Islands |
| US | VA | Virginia |
| US | WA | Washington |
| US | WV | West Virginia |
| US | WI | Wisconsin |
| US | WY | Wyoming |

#### Прочие коды штатов

Ниже представлен список штатов, передача которых возможна в параметре state. В зависимости от используемого процессингового решения, передача этих штатов также может быть обязательна.

| Страна | ISO 3166-2 Сode | Название |
|----------|-------------------|-----------------------------------------------------------------------------|
| AF | BDS | Badakhshan |
| AF | BDG | Badghis |
| AF | BGL | Baghlan |
| AF | BAL | Balkh |
| AF | BAM | Bamian |
| AF | FRA | Farah |
| AF | FYB | Faryab |
| AF | GHA | Ghazni |
| AF | GHO | Ghowr |
| AF | HEL | Helmand |
| AF | HER | Herat |
| AF | JOW | Jowzjan |
| AF | KAB | Kabul |
| AF | KAN | Kandahar |
| AF | KAP | Kapisa |
| AF | KHO | Khost |
| AF | KNR | Konar |
| AF | KDZ | Kondoz |
| AF | LAG | Laghman |
| AF | NAN | Nangrahar |
| AF | NIM | Nimruz |
| AF | NUR | Nurestan |
| AF | PIA | Paktia |
| AF | PKA | Paktika |
| AF | PAR | Parwan |
| AF | SAM | Samangan |
| AF | SAR | Sar-e Pol |
| AF | TAK | Takhar |
| AF | WAR | Wardak |
| AF | DAY | Dāykundī |
| AF | LOG | Lōgar |
| AF | PAN | Panjshayr |
| AF | URU | Uruzgān |
| AF | ZAB | Zābul |
| AL | 01 | Berat |
| AL | 09 | Diber |
| AL | 02 | Durres |
| AL | 03 | Elbasan |
| AL | 04 | Fier |
| AL | 05 | Gjirokaster |
| AL | 06 | Korce |
| AL | 07 | Kukes |
| AL | 08 | Lezhe |
| AL | 10 | Shkoder |
| AL | 11 | Tirane |
| AL | 12 | Vlore |
| DZ | 01 | Adrar |
| DZ | 44 | Ain Defla |
| DZ | 46 | Ain Temouchent |
| DZ | 16 | Alger |
| DZ | 23 | Annaba |
| DZ | 05 | Batna |
| DZ | 08 | Bechar |
| DZ | 06 | Bejaia |
| DZ | 07 | Biskra |
| DZ | 09 | Blida |
| DZ | 34 | Bordj Bou Arreridj |
| DZ | 10 | Bouira |
| DZ | 35 | Boumerdes |
| DZ | 02 | Chlef |
| DZ | 25 | Constantine |
| DZ | 17 | Djelfa |
| DZ | 32 | El Bayadh |
| DZ | 39 | El Oued |
| DZ | 36 | El Tarf |
| DZ | 47 | Ghardaia |
| DZ | 24 | Guelma |
| DZ | 33 | Illizi |
| DZ | 18 | Jijel |
| DZ | 40 | Khenchela |
| DZ | 03 | Laghouat |
| DZ | 28 | M’Sila |
| DZ | 26 | Medea |
| DZ | 43 | Mila |
| DZ | 27 | Mostaganem |
| DZ | 45 | Naama |
| DZ | 31 | Oran |
| DZ | 30 | Ouargla |
| DZ | 48 | Relizane |
| DZ | 20 | Saida |
| DZ | 19 | Setif |
| DZ | 22 | Sidi Bel Abbes |
| DZ | 21 | Skikda |
| DZ | 41 | Souk Ahras |
| DZ | 12 | Tebessa |
| DZ | 14 | Tiaret |
| DZ | 37 | Tindouf |
| DZ | 42 | Tipaza |
| DZ | 38 | Tissemsilt |
| DZ | 15 | Tizi Ouzou |
| DZ | 13 | Tlemcen |
| DZ | 04 | Oum el Bouaghi |
| DZ | 11 | Tamanrasset |
| DZ | 29 | Mascara |
| AD | 07 | Andorra la Vella |
| AD | 02 | Canillo |
| AD | 03 | Encamp |
| AD | 08 | Escaldes-Engordany |
| AD | 04 | La Massana |
| AD | 05 | Ordino |
| AD | 06 | Sant Julia de Loria |
| AO | BGO | Bengo |
| AO | BGU | Benguela |
| AO | BIE | Bie |
| AO | CAB | Cabinda |
| AO | CCU | Cuando-Cubango |
| AO | CNO | Cuanza Norte |
| AO | CUS | Cuanza Sul |
| AO | CNN | Cunene |
| AO | HUA | Huambo |
| AO | HUI | Huila |
| AO | LUA | Luanda |
| AO | LNO | Lunda Norte |
| AO | LSU | Lunda Sul |
| AO | MAL | Malange |
| AO | MOX | Moxico |
| AO | NAM | Namibe |
| AO | UIG | Uige |
| AO | ZAI | Zaire |
| AG | 10 | Barbuda |
| AG | 11 | Redonda |
| AG | 03 | Saint George |
| AG | 04 | Saint John |
| AG | 05 | Saint Mary |
| AG | 06 | Saint Paul |
| AG | 07 | Saint Peter |
| AG | 08 | Saint Philip |
| AR | B | Buenos Aires |
| AR | K | Catamarca |
| AR | H | Chaco |
| AR | U | Chubut |
| AR | X | Cordoba |
| AR | W | Corrientes |
| AR | E | Entre Rios |
| AR | P | Formosa |
| AR | Y | Jujuy |
| AR | L | La Pampa |
| AR | F | La Rioja |
| AR | M | Mendoza |
| AR | N | Misiones |
| AR | Q | Neuquen |
| AR | R | Rio Negro |
| AR | A | Salta |
| AR | J | San Juan |
| AR | D | San Luis |
| AR | Z | Santa Cruz |
| AR | S | Santa Fe |
| AR | G | Santiago del Estero |
| AR | V | Tierra del Fuego |
| AR | T | Tucuman |
| AR | C | Ciudad Autónoma de Buenos Aires |
| AM | AR | Ararat |
| AM | AV | Armavir |
| AM | KT | Kotayk’ |
| AM | SU | Syunik’ |
| AM | AG | Aragac̣otn |
| AM | ER | Erevan |
| AM | GR | Geġark’unik’ |
| AM | LO | Loṙi |
| AM | SH | Širak |
| AM | TV | Tavuš |
| AM | VD | Vayoć Jor |
| AT | 1 | Burgenland |
| AT | 3 | Niederösterreich |
| AT | 5 | Salzburg |
| AT | 6 | Steiermark |
| AT | 7 | Tirol |
| AT | 8 | Vorarlberg |
| AT | 9 | Wien |
| AT | 2 | Kärnten |
| AT | 4 | Oberösterreich |
| AZ | ABS | Abseron |
| AZ | AGC | Agcab Adi |
| AZ | AGM | Agdam |
| AZ | AGS | Agdas |
| AZ | AGA | Agstafa |
| AZ | AGU | Agsu |
| AZ | AST | Astara |
| AZ | BAR | BArdA |
| AZ | BAB | Bab Ak |
| AZ | BA | Baki |
| AZ | BAL | Balak An |
| AZ | BEY | Beylaqan |
| AZ | BIL | Bilasuvar |
| AZ | CAB | Cabrayil |
| AZ | CAL | Calilabab |
| AZ | CUL | Culfa |
| AZ | DAS | Daskasan |
| AZ | FUZ | Fuzuli |
| AZ | GAD | Gadabay |
| AZ | GA | Ganca |
| AZ | GOR | Goranboy |
| AZ | GOY | Goycay |
| AZ | HAC | Haciqabul |
| AZ | IMI | Imisli |
| AZ | ISM | Ismayilli |
| AZ | KAL | Kalbacar |
| AZ | KUR | Kurdamir |
| AZ | LAC | Lacin |
| AZ | LA | Lankaran |
| AZ | LER | Lerik |
| AZ | MAS | Masalli |
| AZ | MI | Mingacevir |
| AZ | NA | Naftalan |
| AZ | NX | Naxcivan |
| AZ | NEF | Neftcala |
| AZ | OGU | Oguz |
| AZ | ORD | Ordubad |
| AZ | QAB | Qabala |
| AZ | QAX | Qax |
| AZ | QAZ | Qazax |
| AZ | QOB | Qobustan |
| AZ | QBA | Quba |
| AZ | QBI | Qubadli |
| AZ | QUS | Qusar |
| AZ | SAT | Saatli |
| AZ | SAB | Sabirabad |
| AZ | SAD | Sadarak |
| AZ | SAH | Sahbuz |
| AZ | SA | Saki |
| AZ | SAL | Salyan |
| AZ | SMI | Samaxi |
| AZ | SKR | Samkir |
| AZ | SMX | Samux |
| AZ | SAR | Sarur |
| AZ | SIY | Siyazan |
| AZ | SM | Sumqayit |
| AZ | SUS | Susa |
| AZ | TAR | Tartar |
| AZ | TOV | Tovuz |
| AZ | UCA | Ucar |
| AZ | XAC | Xacmaz |
| AZ | XA | Xankandi |
| AZ | XIZ | Xizi |
| AZ | XCI | Xocali |
| AZ | XVD | Xocavand |
| AZ | YAR | Yardimli |
| AZ | YE | Yevlax |
| AZ | ZAN | Zangilan |
| AZ | ZAQ | Zaqatala |
| AZ | ZAR | Zardab |
| AZ | GYG | Göygöl |
| AZ | KAN | Kǝngǝrli |
| AZ | SBN | Şabran |
| AZ | SR | Şirvan |
| BS | AK | Acklins |
| BS | BY | Berry Islands |
| BS | BI | Bimini |
| BS | BP | Black Point |
| BS | CI | Cat Island |
| BS | CO | Central Abaco |
| BS | CS | Central Andros |
| BS | CE | Central Eleuthera |
| BS | FP | City of Freeport |
| BS | EG | East Grand Bahama |
| BS | EX | Exuma |
| BS | GC | Grand Cay |
| BS | HI | Harbour Island |
| BS | HT | Hope Town |
| BS | IN | Inagua |
| BS | LI | Long Island |
| BS | MC | Mangrove Cay |
| BS | MG | Mayaguana |
| BS | MI | Moore’s Island |
| BS | NO | North Abaco |
| BS | NS | North Andros |
| BS | NE | North Eleuthera |
| BS | RI | Ragged Island |
| BS | RC | Rum Cay |
| BS | SS | San Salvador |
| BS | SO | South Abaco |
| BS | SA | South Andros |
| BS | SE | South Eleuthera |
| BS | SW | Spanish Wells |
| BS | WG | West Grand Bahama |
| BS | CK | Crooked Island and Long Cay |
| BS | NP | New Providence |
| BH | 13 | Al ‘Āşimah |
| BH | 14 | Al Janūbīyah |
| BH | 15 | Al Muḩarraq |
| BH | 17 | Ash Shamālīyah |
| BD | C | Dhaka |
| BD | D | Khulna |
| BD | E | Rajshahi |
| BD | G | Sylhet |
| BD | 01 | Bandarban |
| BD | 02 | Barguna |
| BD | 03 | Bogura |
| BD | 04 | Brahmanbaria |
| BD | 05 | Bagerhat |
| BD | 06 | Barishal |
| BD | 07 | Bhola |
| BD | 08 | Cumilla |
| BD | 09 | Chandpur |
| BD | 10 | Chattogram |
| BD | 11 | Cox’s Bazar |
| BD | 12 | Chuadanga |
| BD | 14 | Dinajpur |
| BD | 15 | Faridpur |
| BD | 16 | Feni |
| BD | 17 | Gopalganj |
| BD | 18 | Gazipur |
| BD | 19 | Gaibandha |
| BD | 20 | Habiganj |
| BD | 21 | Jamalpur |
| BD | 22 | Jashore |
| BD | 23 | Jhenaidah |
| BD | 24 | Joypurhat |
| BD | 25 | Jhalakathi |
| BD | 26 | Kishoreganj |
| BD | 28 | Kurigram |
| BD | 29 | Khagrachhari |
| BD | 30 | Kushtia |
| BD | 31 | Lakshmipur |
| BD | 32 | Lalmonirhat |
| BD | 33 | Manikganj |
| BD | 34 | Mymensingh |
| BD | 35 | Munshiganj |
| BD | 36 | Madaripur |
| BD | 37 | Magura |
| BD | 38 | Moulvibazar |
| BD | 39 | Meherpur |
| BD | 40 | Narayanganj |
| BD | 41 | Netrakona |
| BD | 42 | Narsingdi |
| BD | 43 | Narail |
| BD | 44 | Natore |
| BD | 45 | Chapai Nawabganj |
| BD | 46 | Nilphamari |
| BD | 47 | Noakhali |
| BD | 48 | Naogaon |
| BD | 49 | Pabna |
| BD | 50 | Pirojpur |
| BD | 51 | Patuakhali |
| BD | 52 | Panchagarh |
| BD | 53 | Rajbari |
| BD | 55 | Rangpur |
| BD | 56 | Rangamati |
| BD | 57 | Sherpur |
| BD | 58 | Satkhira |
| BD | 59 | Sirajganj |
| BD | 61 | Sunamganj |
| BD | 62 | Shariatpur |
| BD | 63 | Tangail |
| BD | 64 | Thakurgaon |
| BD | A | Barishal |
| BD | B | Chattogram |
| BD | F | Rangpur |
| BD | H | Mymensingh |
| BB | 01 | Christ Church |
| BB | 02 | Saint Andrew |
| BB | 03 | Saint George |
| BB | 04 | Saint James |
| BB | 05 | Saint John |
| BB | 06 | Saint Joseph |
| BB | 07 | Saint Lucy |
| BB | 08 | Saint Michael |
| BB | 09 | Saint Peter |
| BB | 10 | Saint Philip |
| BB | 11 | Saint Thomas |
| BY | BR | Brestskaya (Brest) |
| BY | HO | Homyel’skaya (Homyel’) |
| BY | HM | Horad Minsk |
| BY | HR | Hrodzyenskaya (Hrodna) |
| BY | MA | Mahilyowskaya (Mahilyow) |
| BY | MI | Minskaya |
| BY | VI | Vitsyebskaya (Vitsyebsk) |
| BE | VAN | Antwerpen |
| BE | WBR | Brabant Wallon |
| BE | WHT | Hainaut |
| BE | WLG | Liege |
| BE | VLI | Limburg |
| BE | WLX | Luxembourg |
| BE | WNA | Namur |
| BE | VOV | Oost-Vlaanderen |
| BE | VBR | Vlaams Brabant |
| BE | VWV | West-Vlaanderen |
| BE | BRU | “Bruxelles-Capitale, Région de” |
| BE | VLG | Vlaams Gewest |
| BE | WAL | “wallonne, Région” |
| BZ | BZ | Belize |
| BZ | CY | Cayo |
| BZ | CZL | Corozal |
| BZ | OW | Orange Walk |
| BZ | SC | Stann Creek |
| BZ | TOL | Toledo |
| BJ | AL | Alibori |
| BJ | AK | Atakora |
| BJ | AQ | Atlantique |
| BJ | BO | Borgou |
| BJ | CO | Collines |
| BJ | DO | Donga |
| BJ | KO | Kouffo |
| BJ | LI | Littoral |
| BJ | MO | Mono |
| BJ | OU | Oueme |
| BJ | PL | Plateau |
| BJ | ZO | Zou |
| BT | 33 | Bumthang |
| BT | 22 | Dagana |
| BT | GA | Gasa |
| BT | 13 | Haa |
| BT | 11 | Paro |
| BT | 23 | Punakha |
| BT | 45 | Samdrup Jongkhar |
| BT | 14 | Samtse |
| BT | 31 | Sarpang |
| BT | 15 | Thimphu |
| BT | 41 | Trashigang |
| BT | 32 | Trongsa |
| BT | 21 | Tsirang |
| BT | 24 | Wangdue Phodrang |
| BT | 34 | Zhemgang |
| BT | 12 | Chhukha |
| BT | 42 | Monggar |
| BT | 43 | Pema Gatshel |
| BT | 44 | Lhuentse |
| BT | TY | Trashi Yangtse |
| BO | H | Chuquisaca |
| BO | C | Cochabamba |
| BO | L | La Paz |
| BO | O | Oruro |
| BO | N | Pando |
| BO | P | Potosi |
| BO | S | Santa Cruz |
| BO | T | Tarija |
| BO | B | El Beni |
| BA | BIH | Federacija Bosne i Hercegovine |
| BA | BRC | Brčko distrikt |
| BA | SRP | Republika Srpska |
| BW | CE | Central |
| BW | GH | Ghanzi |
| BW | KG | Kgalagadi |
| BW | KL | Kgatleng |
| BW | KW | Kweneng |
| BW | NE | North East |
| BW | NW | North West |
| BW | SE | South East |
| BW | SO | Southern |
| BW | CH | Chobe |
| BW | FR | Francistown |
| BW | GA | Gaborone |
| BW | JW | Jwaneng |
| BW | LO | Lobatse |
| BW | SP | Selibe Phikwe |
| BW | ST | Sowa Town |
| BR | AC | Acre |
| BR | AL | Alagoas |
| BR | AP | Amapa |
| BR | AM | Amazonas |
| BR | BA | Bahia |
| BR | CE | Ceara |
| BR | DF | Distrito Federal |
| BR | ES | Espirito Santo |
| BR | GO | Goias |
| BR | MA | Maranhao |
| BR | MT | Mato Grosso |
| BR | MS | Mato Grosso do Sul |
| BR | MG | Minas Gerais |
| BR | PA | Para |
| BR | PB | Paraiba |
| BR | PR | Parana |
| BR | PE | Pernambuco |
| BR | PI | Piaui |
| BR | RN | Rio Grande do Norte |
| BR | RS | Rio Grande do Sul |
| BR | RJ | Rio de Janeiro |
| BR | RO | Rondonia |
| BR | RR | Roraima |
| BR | SC | Santa Catarina |
| BR | SP | Sao Paulo |
| BR | SE | Sergipe |
| BR | TO | Tocantins |
| BN | BE | Belait |
| BN | TE | Temburong |
| BN | TU | Tutong |
| BN | BM | Brunei-Muara |
| BG | 01 | Blagoevgrad |
| BG | 02 | Burgas |
| BG | 08 | Dobrich |
| BG | 07 | Gabrovo |
| BG | 26 | Haskovo |
| BG | 09 | Kardjali |
| BG | 10 | Kyustendil |
| BG | 11 | Lovech |
| BG | 12 | Montana |
| BG | 13 | Pazardjik |
| BG | 14 | Pernik |
| BG | 15 | Pleven |
| BG | 16 | Plovdiv |
| BG | 17 | Razgrad |
| BG | 27 | Shumen |
| BG | 19 | Silistra |
| BG | 20 | Sliven |
| BG | 21 | Smolyan |
| BG | 23 | Sofia |
| BG | 22 | Sofia - town |
| BG | 24 | Stara Zagora |
| BG | 25 | Targovishte |
| BG | 03 | Varna |
| BG | 04 | Veliko Tarnovo |
| BG | 05 | Vidin |
| BG | 06 | Vratza |
| BG | 28 | Yambol |
| BG | 18 | Ruse |
| BF | BAL | Bale |
| BF | BAM | Bam |
| BF | BAN | Banwa |
| BF | BAZ | Bazega |
| BF | BGR | Bougouriba |
| BF | BLG | Boulgou |
| BF | BLK | Boulkiemde |
| BF | COM | Comoe |
| BF | GAN | Ganzourgou |
| BF | GNA | Gnagna |
| BF | GOU | Gourma |
| BF | HOU | Houet |
| BF | IOB | Ioba |
| BF | KAD | Kadiogo |
| BF | KEN | Kenedougou |
| BF | KMD | Komondjari |
| BF | KOP | Kompienga |
| BF | KOS | Kossi |
| BF | KOP | Koulpelogo |
| BF | KOT | Kouritenga |
| BF | KOW | Kourweogo |
| BF | LER | Leraba |
| BF | LOR | Loroum |
| BF | MOU | Mouhoun |
| BF | NAO | Nahouri |
| BF | NAM | Namentenga |
| BF | NAY | Nayala |
| BF | NOU | Noumbiel |
| BF | OUB | Oubritenga |
| BF | OUD | Oudalan |
| BF | PAS | Passore |
| BF | PON | Poni |
| BF | SNG | Sanguie |
| BF | SMT | Sanmatenga |
| BF | SEN | Seno |
| BF | SIS | Sissili |
| BF | SOM | Soum |
| BF | SOR | Sourou |
| BF | TAP | Tapoa |
| BF | TUI | Tuy |
| BF | YAG | Yagha |
| BF | YAT | Yatenga |
| BF | ZIR | Ziro |
| BF | ZON | Zondoma |
| BF | ZOU | Zoundweogo |
| BF | 01 | Boucle du Mouhoun |
| BF | 02 | Cascades |
| BF | 03 | Centre |
| BF | 04 | Centre-Est |
| BF | 05 | Centre-Nord |
| BF | 06 | Centre-Ouest |
| BF | 07 | Centre-Sud |
| BF | 08 | Est |
| BF | 09 | Hauts-Bassins |
| BF | 10 | Nord |
| BF | 11 | Plateau-Central |
| BF | 12 | Sahel |
| BF | 13 | Sud-Ouest |
| BI | BB | Bubanza |
| BI | BR | Bururi |
| BI | CA | Cankuzo |
| BI | CI | Cibitoke |
| BI | GI | Gitega |
| BI | KR | Karuzi |
| BI | KY | Kayanza |
| BI | KI | Kirundo |
| BI | MA | Makamba |
| BI | MU | Muramvya |
| BI | MY | Muyinga |
| BI | MW | Mwaro |
| BI | NG | Ngozi |
| BI | RT | Rutana |
| BI | RY | Ruyigi |
| BI | BL | Bujumbura Rural |
| BI | BM | Bujumbura Mairie |
| BI | RM | Rumonge |
| KH | 1 | Banteay Meanchey |
| KH | 3 | Kampong Cham |
| KH | 4 | Kampong Chhnang |
| KH | 7 | Kampot |
| KH | 8 | Kandal |
| KH | 9 | Kaoh Kong |
| KH | 23 | Keb |
| KH | 24 | Pailin |
| KH | 12 | Phnom Penh |
| KH | 13 | Preah Vihear |
| KH | 14 | Prey Veng |
| KH | 20 | Svay Rieng |
| KH | 10 | Krâchéh |
| KH | 11 | Môndól Kiri |
| KH | 15 | Poŭthĭsăt |
| KH | 16 | Rôtânôkiri |
| KH | 17 | Siĕmréab |
| KH | 18 | Preah Sihanouk |
| KH | 19 | Stueng Traeng |
| KH | 2 | Bătdâmbâng |
| KH | 21 | Takêv |
| KH | 22 | Ŏtdâr Méan Choăy |
| KH | 25 | Tbong Khmum |
| KH | 5 | Kâmpóng Spœ |
| KH | 6 | Kâmpóng Thum |
| CM | CE | Centre |
| CM | LT | Littoral |
| CM | AD | Adamaoua |
| CM | EN | Far North |
| CM | ES | Est |
| CM | NO | North |
| CM | NW | North-West |
| CM | OU | West |
| CM | SU | Sud |
| CM | SW | Sud-Ouest |
| CV | BV | Boa Vista |
| CV | BR | Brava |
| CV | MA | Maio |
| CV | MO | Mosteiros |
| CV | PA | Paul |
| CV | PN | Porto Novo |
| CV | PR | Praia |
| CV | RG | Ribeira Grande |
| CV | SL | Sal |
| CV | CA | Santa Catarina |
| CV | CR | Santa Cruz |
| CV | SD | Sao Domingos |
| CV | SF | Sao Filipe |
| CV | SV | Sao Vicente |
| CV | TA | Tarrafal |
| CV | B | Ilhas de Barlavento |
| CV | CF | Santa Catarina do Fogo |
| CV | RB | Ribeira Brava |
| CV | RS | Ribeira Grande de Santiago |
| CV | S | Ilhas de Sotavento |
| CV | SM | São Miguel |
| CV | SO | São Lourenço dos Órgãos |
| CV | SS | São Salvador do Mundo |
| CV | TS | Tarrafal de São Nicolau |
| CF | BB | Bamingui-Bangoran |
| CF | BGF | Bangui |
| CF | BK | Basse-Kotto |
| CF | HM | Haut-Mbomou |
| CF | HK | Haute-Kotto |
| CF | LB | Lobaye |
| CF | MB | Mbomou |
| CF | NM | Nana-Mambere |
| CF | UK | Ouaka |
| CF | AC | Ouham |
| CF | OP | Ouham-Pende |
| CF | VK | Vakaga |
| CF | HS | Tö-Sangä / Mbaere-Kadeï |
| CF | KB | Gribingui |
| CF | KG | Kémo-Gribingui |
| CF | MP | Ombella-Mpoko |
| CF | SE | Sangha |
| TD | BA | Batha |
| TD | CB | Chari-Baguirmi |
| TD | GR | Guera |
| TD | KA | Kanem |
| TD | LC | Lac |
| TD | LC | Logone Occidental |
| TD | LR | Logone Oriental |
| TD | MC | Moyen-Chari |
| TD | OD | Ouaddai |
| TD | SA | Salamat |
| TD | TA | Tandjile |
| TD | BG | Bahr el Ghazal |
| TD | BO | Būrkū |
| TD | EE | Inīdī ash Sharqī |
| TD | EO | Inīdī al Gharbī |
| TD | HL | Ḩajjar Lamīs |
| TD | LO | Lūghūn al Gharbī |
| TD | MA | Māndūl |
| TD | ME | Māyū Kībbī ash Sharqī |
| TD | MO | Māyū Kībbī al Gharbī |
| TD | ND | Ville de Ndjamena |
| TD | SI | Sīlā |
| TD | TI | Tibesti |
| TD | WF | Wādī Fīrā’ |
| CL | AI | Aisen del General Carlos Ibanez |
| CL | AN | Antofagasta |
| CL | AR | Araucania |
| CL | AT | Atacama |
| CL | BI | Bio-Bio |
| CL | CO | Coquimbo |
| CL | LI | Libertador General Bernardo O’Hi |
| CL | LL | Los Lagos |
| CL | MA | Magallanes y de la Antartica Chi |
| CL | ML | Maule |
| CL | RM | Region Metropolitana |
| CL | TA | Tarapaca |
| CL | VS | Valparaiso |
| CL | AP | Arica y Parinacota |
| CL | LR | Los Ríos |
| CL | NB | Ñuble |
| CN | GX | Guangxi |
| CN | GZ | Guizhou |
| CN | HA | Hainan |
| CN | HB | Hebei |
| CN | HL | Heilongjiang |
| CN | HE | Henan |
| CN | HK | Hong Kong |
| CN | HN | Hunan |
| CN | JX | Jiangxi |
| CN | JL | Jilin |
| CN | SH | Shaanxi |
| CN | SX | Shanxi |
| CN | AH | Anhui Sheng |
| CN | BJ | Beijing Shi |
| CN | CQ | Chongqing Shi |
| CN | FJ | Fujian Sheng |
| CN | GD | Guangdong Sheng |
| CN | GS | Gansu Sheng |
| CN | HI | Hainan Sheng |
| CN | JS | Jiangsu Sheng |
| CN | LN | Liaoning Sheng |
| CN | MO | Macau SAR (see also separate country code entry under MO) |
| CN | NM | Nei Mongol Zizhiqu |
| CN | NX | Ningxia Huizi Zizhiqu |
| CN | QH | Qinghai Sheng |
| CN | SC | Sichuan Sheng |
| CN | SD | Shandong Sheng |
| CN | SN | Shaanxi Sheng |
| CN | TJ | Tianjin Shi |
| CN | TW | Taiwan Sheng (see also separate country code entry under TW) |
| CN | XJ | Xinjiang Uygur Zizhiqu |
| CN | XZ | Xizang Zizhiqu |
| CN | YN | Yunnan Sheng |
| CN | ZJ | Zhejiang Sheng |
| CO | AMA | Amazonas |
| CO | ANT | Antioquia |
| CO | ARA | Arauca |
| CO | ATL | Atlantico |
| CO | BOL | Bolivar |
| CO | BOY | Boyaca |
| CO | CAL | Caldas |
| CO | CAQ | Caqueta |
| CO | CAS | Casanare |
| CO | CAU | Cauca |
| CO | CES | Cesar |
| CO | CHO | Choco |
| CO | COR | Cordoba |
| CO | CUN | Cundinamarca |
| CO | GUA | Guainia |
| CO | GUV | Guaviare |
| CO | HUI | Huila |
| CO | MAG | Magdalena |
| CO | MET | Meta |
| CO | NAR | Narino |
| CO | NSA | Norte de Santander |
| CO | PUT | Putumayo |
| CO | QUI | Quindio |
| CO | RIS | Risaralda |
| CO | SAP | San Andres y Providencia |
| CO | SAN | Santander |
| CO | SUC | Sucre |
| CO | TOL | Tolima |
| CO | VAC | Valle del Cauca |
| CO | VAU | Vaupes |
| CO | VID | Vichada |
| CO | DC | Distrito Capital de Bogotá |
| CO | LAG | La Guajira |
| KM | A | Anjouan |
| KM | G | Grande Comore |
| KM | M | Moheli |
| CG | 11 | Bouenza |
| CG | BZV | Brazzaville |
| CG | 8 | Cuvette |
| CG | 15 | Cuvette-Ouest |
| CG | 5 | Kouilou |
| CG | 2 | Lekoumou |
| CG | 7 | Likouala |
| CG | 9 | Niari |
| CG | 14 | Plateaux |
| CG | 12 | Pool |
| CG | 13 | Sangha |
| CG | 16 | Pointe-Noire |
| CD | BC | Bas-Congo |
| CD | EQ | Equateur |
| CD | KE | Kasai-Oriental |
| CD | KN | Kinshasa |
| CD | MA | Maniema |
| CD | NK | Nord-Kivu |
| CD | SK | Sud-Kivu |
| CD | BU | Bas-Uélé |
| CD | HK | Haut-Katanga |
| CD | HL | Haut-Lomami |
| CD | HU | Haut-Uélé |
| CD | IT | Ituri |
| CD | KC | Kasaï Central |
| CD | KG | Kwango |
| CD | KL | Kwilu |
| CD | KS | Kasaï |
| CD | LO | Lomami |
| CD | LU | Lualaba |
| CD | MN | Mai-Ndombe |
| CD | MO | Mongala |
| CD | NU | Nord-Ubangi |
| CD | SA | Sankuru |
| CD | SU | Sud-Ubangi |
| CD | TA | Tanganyika |
| CD | TO | Tshopo |
| CD | TU | Tshuapa |
| CR | A | Alajuela |
| CR | C | Cartago |
| CR | G | Guanacaste |
| CR | H | Heredia |
| CR | L | Limon |
| CR | P | Puntarenas |
| CR | SJ | San Jose |
| CI | AB | Abidjan |
| CI | YM | Yamoussoukro |
| CI | BS | Bas-Sassandra |
| CI | CM | Comoé |
| CI | DN | Denguélé |
| CI | GD | Gôh-Djiboua |
| CI | LC | Lacs |
| CI | LG | Lagunes |
| CI | MG | Montagnes |
| CI | SM | Sassandra-Marahoué |
| CI | SV | Savanes |
| CI | VB | Vallée du Bandama |
| CI | WR | Woroba |
| CI | ZZ | Zanzan |
| HR | 01 | Zagrebačka županija |
| HR | 02 | Krapinsko-zagorska županija |
| HR | 03 | Sisačko-moslavačka županija |
| HR | 04 | Karlovačka županija |
| HR | 05 | Varaždinska županija |
| HR | 06 | Koprivničko-križevačka županija |
| HR | 07 | Bjelovarsko-bilogorska županija |
| HR | 08 | Primorsko-goranska županija |
| HR | 09 | Ličko-senjska županija |
| HR | 10 | Virovitičko-podravska županija |
| HR | 11 | Požeško-slavonska županija |
| HR | 12 | Brodsko-posavska županija |
| HR | 13 | Zadarska županija |
| HR | 14 | Osječko-baranjska županija |
| HR | 15 | Šibensko-kninska županija |
| HR | 16 | Vukovarsko-srijemska županija |
| HR | 17 | Splitsko-dalmatinska županija |
| HR | 18 | Istarska županija |
| HR | 19 | Dubrovačko-neretvanska županija |
| HR | 20 | Međimurska županija |
| HR | 21 | Grad Zagreb |
| CU | 09 | Camaguey |
| CU | 08 | Ciego de Avila |
| CU | 06 | Cienfuegos |
| CU | 12 | Granma |
| CU | 14 | Guantanamo |
| CU | 11 | Holguin |
| CU | 99 | Isla de la Juventud |
| CU | 03 | La Habana |
| CU | 10 | Las Tunas |
| CU | 04 | Matanzas |
| CU | 01 | Pinar del Rio |
| CU | 07 | Sancti Spiritus |
| CU | 13 | Santiago de Cuba |
| CU | 05 | Villa Clara |
| CU | 15 | Artemisa |
| CU | 16 | Mayabeque |
| CY | 01 | Lefkosia |
| CY | 02 | Leymasun |
| CY | 03 | Larnaka |
| CY | 04 | Mağusa |
| CY | 05 | Pafos |
| CY | 06 | Keryneia |
| CZ | 10 | “Praha, Hlavní město” |
| CZ | 20 | Středočeský kraj |
| CZ | 201 | Benešov |
| CZ | 202 | Beroun |
| CZ | 203 | Kladno |
| CZ | 204 | Kolín |
| CZ | 205 | Kutná Hora |
| CZ | 206 | Mělník |
| CZ | 207 | Mladá Boleslav |
| CZ | 208 | Nymburk |
| CZ | 209 | Praha-východ |
| CZ | 20A | Praha-západ |
| CZ | 20B | Příbram |
| CZ | 20C | Rakovník |
| CZ | 31 | Jihočeský kraj |
| CZ | 311 | České Budějovice |
| CZ | 312 | Český Krumlov |
| CZ | 313 | Jindřichův Hradec |
| CZ | 314 | Písek |
| CZ | 315 | Prachatice |
| CZ | 316 | Strakonice |
| CZ | 317 | Tábor |
| CZ | 32 | Plzeňský kraj |
| CZ | 321 | Domažlice |
| CZ | 322 | Klatovy |
| CZ | 323 | Plzeň-město |
| CZ | 324 | Plzeň-jih |
| CZ | 325 | Plzeň-sever |
| CZ | 326 | Rokycany |
| CZ | 327 | Tachov |
| CZ | 41 | Karlovarský kraj |
| CZ | 411 | Cheb |
| CZ | 412 | Karlovy Vary |
| CZ | 413 | Sokolov |
| CZ | 42 | Ústecký kraj |
| CZ | 421 | Děčín |
| CZ | 422 | Chomutov |
| CZ | 423 | Litoměřice |
| CZ | 424 | Louny |
| CZ | 425 | Most |
| CZ | 426 | Teplice |
| CZ | 427 | Ústí nad Labem |
| CZ | 51 | Liberecký kraj |
| CZ | 511 | Česká Lípa |
| CZ | 512 | Jablonec nad Nisou |
| CZ | 513 | Liberec |
| CZ | 514 | Semily |
| CZ | 52 | Královéhradecký kraj |
| CZ | 521 | Hradec Králové |
| CZ | 522 | Jičín |
| CZ | 523 | Náchod |
| CZ | 524 | Rychnov nad Kněžnou |
| CZ | 525 | Trutnov |
| CZ | 53 | Pardubický kraj |
| CZ | 531 | Chrudim |
| CZ | 532 | Pardubice |
| CZ | 533 | Svitavy |
| CZ | 534 | Ústí nad Orlicí |
| CZ | 63 | Kraj Vysočina |
| CZ | 631 | Havlíčkův Brod |
| CZ | 632 | Jihlava |
| CZ | 633 | Pelhřimov |
| CZ | 634 | Třebíč |
| CZ | 635 | Žďár nad Sázavou |
| CZ | 64 | Jihomoravský kraj |
| CZ | 641 | Blansko |
| CZ | 642 | Brno-město |
| CZ | 643 | Brno-venkov |
| CZ | 644 | Břeclav |
| CZ | 645 | Hodonín |
| CZ | 646 | Vyškov |
| CZ | 647 | Znojmo |
| CZ | 71 | Olomoucký kraj |
| CZ | 711 | Jeseník |
| CZ | 712 | Olomouc |
| CZ | 713 | Prostějov |
| CZ | 714 | Přerov |
| CZ | 715 | Šumperk |
| CZ | 72 | Zlínský kraj |
| CZ | 721 | Kroměříž |
| CZ | 722 | Uherské Hradiště |
| CZ | 723 | Vsetín |
| CZ | 724 | Zlín |
| CZ | 80 | Moravskoslezský kraj |
| CZ | 801 | Bruntál |
| CZ | 802 | Frýdek-Místek |
| CZ | 803 | Karviná |
| CZ | 804 | Nový Jičín |
| CZ | 805 | Opava |
| CZ | 806 | Ostrava-město |
| DK | 81 | Nordjylland |
| DK | 82 | Midtjylland |
| DK | 83 | Syddanmark |
| DK | 84 | Hovedstaden |
| DK | 85 | Sjælland |
| DJ | DI | Dikhil |
| DJ | DJ | Djibouti |
| DJ | OB | Obock |
| DJ | AR | ‘Artā |
| DJ | AS | ‘Alī Şabīḩ |
| DJ | TA | Tājūrah |
| DM | 02 | Saint Andrew |
| DM | 03 | Saint David |
| DM | 04 | Saint George |
| DM | 05 | Saint John |
| DM | 06 | Saint Joseph |
| DM | 07 | Saint Luke |
| DM | 08 | Saint Mark |
| DM | 09 | Saint Patrick |
| DM | 10 | Saint Paul |
| DM | 11 | Saint Peter |
| DO | 02 | Azua |
| DO | 03 | Baoruco |
| DO | 04 | Barahona |
| DO | 05 | Dajabon |
| DO | 06 | Duarte |
| DO | 07 | Elias Pina |
| DO | 09 | Espaillat |
| DO | 30 | Hato Mayor |
| DO | 10 | Independencia |
| DO | 11 | La Altagracia |
| DO | 12 | La Romana |
| DO | 13 | La Vega |
| DO | 14 | Maria Trinidad Sanchez |
| DO | 28 | Monsenor Nouel |
| DO | 15 | Monte Cristi |
| DO | 29 | Monte Plata |
| DO | 16 | Pedernales |
| DO | 18 | Puerto Plata |
| DO | 20 | Samana |
| DO | 21 | San Cristobal |
| DO | 31 | San Jose de Ocoa |
| DO | 22 | San Juan |
| DO | 23 | San Pedro de Macoris |
| DO | 24 | Sanchez Ramirez |
| DO | 25 | Santiago |
| DO | 26 | Santiago Rodriguez |
| DO | 32 | Santo Domingo |
| DO | 27 | Valverde |
| DO | 01 | Distrito Nacional (Santo Domingo) |
| DO | 08 | El Seibo |
| DO | 17 | Peravia |
| DO | 19 | Hermanas Mirabal |
| DO | 33 | Cibao Nordeste |
| DO | 34 | Cibao Noroeste |
| DO | 35 | Cibao Norte |
| DO | 36 | Cibao Sur |
| DO | 37 | El Valle |
| DO | 38 | Enriquillo |
| DO | 39 | Higuamo |
| DO | 40 | Ozama |
| DO | 41 | Valdesia |
| DO | 42 | Yuma |
| EC | A | Azuay |
| EC | B | Bolivar |
| EC | C | Carchi |
| EC | H | Chimborazo |
| EC | X | Cotopaxi |
| EC | O | El Oro |
| EC | E | Esmeraldas |
| EC | W | Galápagos |
| EC | G | Guayas |
| EC | I | Imbabura |
| EC | L | Loja |
| EC | R | Los Rios |
| EC | M | Manabí |
| EC | S | Morona Santiago |
| EC | N | Napo |
| EC | D | Orellana |
| EC | Y | Pastaza |
| EC | P | Pichincha |
| EC | U | Sucumbíos |
| EC | T | Tungurahua |
| EC | Z | Zamora Chinchipe |
| EC | F | Cañar |
| EC | SD | Santo Domingo de los Tsáchilas |
| EC | SE | Santa Elena |
| EG | DK | Ad Daqahliyah |
| EG | BA | Al Bahr al Ahmar |
| EG | BH | Al Buhayrah |
| EG | FYM | Al Fayyum |
| EG | GH | Al Gharbiyah |
| EG | ALX | Al Iskandariyah |
| EG | IS | Al Isma’iliyah |
| EG | GZ | Al Jizah |
| EG | MNF | Al Minufiyah |
| EG | MN | Al Minya |
| EG | C | Al Qahirah |
| EG | KB | Al Qalyubiyah |
| EG | WAD | Al Wadi al Jadid |
| EG | SUZ | As Suways |
| EG | SHR | Ash Sharqiyah |
| EG | ASN | Aswan |
| EG | AST | Asyut |
| EG | BNS | Bani Suwayf |
| EG | DT | Dumyat |
| EG | JS | Janub Sina’ |
| EG | KFS | Kafr ash Shaykh |
| EG | MT | Matruh |
| EG | KN | Qina |
| EG | SIN | Shamal Sina’ |
| EG | SHG | Suhaj |
| EG | LX | Al Uqşur |
| EG | PTS | Būr Sa‘īd |
| SV | AH | Ahuachapan |
| SV | CA | Cabanas |
| SV | CH | Chalatenango |
| SV | CU | Cuscatlan |
| SV | LI | La Libertad |
| SV | PA | La Paz |
| SV | UN | La Union |
| SV | MO | Morazan |
| SV | SM | San Miguel |
| SV | SS | San Salvador |
| SV | SV | San Vicente |
| SV | SA | Santa Ana |
| SV | SO | Sonsonate |
| SV | US | Usulutan |
| GQ | AN | Provincia Annobon |
| GQ | BN | Provincia Bioko Norte |
| GQ | BS | Provincia Bioko Sur |
| GQ | CS | Provincia Centro Sur |
| GQ | KN | Provincia Kie-Ntem |
| GQ | LI | Provincia Litoral |
| GQ | WN | Provincia Wele-Nzas |
| GQ | C | Région Continentale |
| GQ | DJ | Djibloho |
| GQ | I | Región Insular |
| ER | MA | Central (Maekel) |
| ER | SK | Northern Red Sea (Semien-Keih-Bahri) |
| ER | DK | Southern Red Sea (Debub-Keih-Bahri) |
| ER | AN | ‘Anseba |
| ER | DU | Debub |
| ER | GB | Qāsh-Barkah |
| EE | 130 | Alutaguse |
| EE | 141 | Anija |
| EE | 142 | Antsla |
| EE | 171 | Elva |
| EE | 184 | Haapsalu |
| EE | 191 | Haljala |
| EE | 198 | Harku |
| EE | 205 | Hiiumaa |
| EE | 214 | Häädemeeste |
| EE | 245 | Jõelähtme |
| EE | 247 | Jõgeva |
| EE | 251 | Jõhvi |
| EE | 255 | Järva |
| EE | 272 | Kadrina |
| EE | 283 | Kambja |
| EE | 284 | Kanepi |
| EE | 291 | Kastre |
| EE | 293 | Kehtna |
| EE | 296 | Keila |
| EE | 303 | Kihnu |
| EE | 305 | Kiili |
| EE | 317 | Kohila |
| EE | 321 | Kohtla-Järve |
| EE | 338 | Kose |
| EE | 353 | Kuusalu |
| EE | 37 | Harjumaa |
| EE | 39 | Hiiumaa |
| EE | 424 | Loksa |
| EE | 430 | Lääneranna |
| EE | 431 | Lääne-Harju |
| EE | 432 | Luunja |
| EE | 441 | Lääne-Nigula |
| EE | 442 | Lüganuse |
| EE | 446 | Maardu |
| EE | 45 | Ida-Virumaa |
| EE | 478 | Muhu |
| EE | 480 | Mulgi |
| EE | 486 | Mustvee |
| EE | 50 | Jõgevamaa |
| EE | 503 | Märjamaa |
| EE | 511 | Narva |
| EE | 514 | Narva-Jõesuu |
| EE | 52 | Järvamaa |
| EE | 528 | Nõo |
| EE | 557 | Otepää |
| EE | 56 | Läänemaa |
| EE | 567 | Paide |
| EE | 586 | Peipsiääre |
| EE | 60 | Lääne-Virumaa |
| EE | 615 | Põhja-Sakala |
| EE | 618 | Põltsamaa |
| EE | 622 | Põlva |
| EE | 624 | Pärnu |
| EE | 638 | Põhja-Pärnumaa |
| EE | 64 | Põlvamaa |
| EE | 651 | Raasiku |
| EE | 653 | Rae |
| EE | 661 | Rakvere |
| EE | 663 | Rakvere |
| EE | 668 | Rapla |
| EE | 68 | Pärnumaa |
| EE | 689 | Ruhnu |
| EE | 698 | Rõuge |
| EE | 708 | Räpina |
| EE | 71 | Raplamaa |
| EE | 712 | Saarde |
| EE | 714 | Saaremaa |
| EE | 719 | Saku |
| EE | 726 | Saue |
| EE | 732 | Setomaa |
| EE | 735 | Sillamäe |
| EE | 74 | Saaremaa |
| EE | 784 | Tallinn |
| EE | 79 | Tartumaa |
| EE | 792 | Tapa |
| EE | 793 | Tartu |
| EE | 796 | Tartu |
| EE | 803 | Toila |
| EE | 809 | Tori |
| EE | 81 | Valgamaa |
| EE | 824 | Tõrva |
| EE | 834 | Türi |
| EE | 84 | Viljandimaa |
| EE | 855 | Valga |
| EE | 87 | Võrumaa |
| EE | 890 | Viimsi |
| EE | 897 | Viljandi |
| EE | 899 | Viljandi |
| EE | 901 | Vinni |
| EE | 903 | Viru-Nigula |
| EE | 907 | Vormsi |
| EE | 917 | Võru |
| EE | 919 | Võru |
| EE | 928 | Väike-Maarja |
| ET | AA | Addis Ababa |
| ET | AF | Afar |
| ET | DD | Dire Dawa |
| ET | OR | Oromia |
| ET | SO | Somali |
| ET | SN | Southern Nations - Nationalities and Peoples Region |
| ET | TI | Tigray |
| ET | AM | Āmara |
| ET | BE | Bīnshangul Gumuz |
| ET | GA | Gambela Peoples |
| ET | HA | Hārerī Hizb |
| FJ | C | Central Division |
| FJ | E | Eastern Division |
| FJ | N | Northern Division |
| FJ | R | Rotuma |
| FJ | W | Western Division |
| FJ | 01 | Ba |
| FJ | 02 | Bua |
| FJ | 03 | Cakaudrove |
| FJ | 04 | Kadavu |
| FJ | 05 | Lau |
| FJ | 06 | Lomaiviti |
| FJ | 07 | Macuata |
| FJ | 08 | Nadroga and Navosa |
| FJ | 09 | Naitasiri |
| FJ | 10 | Namosi |
| FJ | 11 | Ra |
| FJ | 12 | Rewa |
| FJ | 13 | Serua |
| FJ | 14 | Tailevu |
| FI | 01 | Landskapet Åland |
| FI | 02 | Södra Karelen |
| FI | 03 | Södra Österbotten |
| FI | 04 | Södra Savolax |
| FI | 05 | Kajanaland |
| FI | 06 | Kanta-Häme |
| FI | 07 | Mellersta Österbotten |
| FI | 08 | Mellersta Finland |
| FI | 09 | Kymmenedalen |
| FI | 10 | Lappland |
| FI | 11 | Pirkanmaa |
| FI | 12 | Pohjanmaa |
| FI | 13 | Pohjois-Karjala |
| FI | 14 | Pohjois-Pohjanmaa |
| FI | 15 | Pohjois-Savo |
| FI | 16 | Päijät-Häme |
| FI | 17 | Satakunta |
| FI | 18 | Uusimaa |
| FI | 19 | Varsinais-Suomi |
| FR | 20R | Corse |
| FR | 01 | Ain |
| FR | 02 | Aisne |
| FR | 03 | Allier |
| FR | 04 | Alpes-de-Haute-Provence |
| FR | 05 | Hautes-Alpes |
| FR | 06 | Alpes-Maritimes |
| FR | 07 | Ardèche |
| FR | 08 | Ardennes |
| FR | 09 | Ariège |
| FR | 10 | Aube |
| FR | 11 | Aude |
| FR | 12 | Aveyron |
| FR | 13 | Bouches-du-Rhône |
| FR | 14 | Calvados |
| FR | 15 | Cantal |
| FR | 16 | Charente |
| FR | 17 | Charente-Maritime |
| FR | 18 | Cher |
| FR | 19 | Corrèze |
| FR | 21 | Côte-d’Or |
| FR | 22 | Côtes-d’Armor |
| FR | 23 | Creuse |
| FR | 24 | Dordogne |
| FR | 25 | Doubs |
| FR | 26 | Drôme |
| FR | 27 | Eure |
| FR | 28 | Eure-et-Loir |
| FR | 29 | Finistère |
| FR | 2A | Corse-du-Sud |
| FR | 2B | Haute-Corse |
| FR | 30 | Gard |
| FR | 31 | Haute-Garonne |
| FR | 32 | Gers |
| FR | 33 | Gironde |
| FR | 34 | Hérault |
| FR | 35 | Ille-et-Vilaine |
| FR | 36 | Indre |
| FR | 37 | Indre-et-Loire |
| FR | 38 | Isère |
| FR | 39 | Jura |
| FR | 40 | Landes |
| FR | 41 | Loir-et-Cher |
| FR | 42 | Loire |
| FR | 43 | Haute-Loire |
| FR | 44 | Loire-Atlantique |
| FR | 45 | Loiret |
| FR | 46 | Lot |
| FR | 47 | Lot-et-Garonne |
| FR | 48 | Lozère |
| FR | 49 | Maine-et-Loire |
| FR | 50 | Manche |
| FR | 51 | Marne |
| FR | 52 | Haute-Marne |
| FR | 53 | Mayenne |
| FR | 54 | Meurthe-et-Moselle |
| FR | 55 | Meuse |
| FR | 56 | Morbihan |
| FR | 57 | Moselle |
| FR | 58 | Nièvre |
| FR | 59 | Nord |
| FR | 60 | Oise |
| FR | 61 | Orne |
| FR | 62 | Pas-de-Calais |
| FR | 63 | Puy-de-Dôme |
| FR | 64 | Pyrénées-Atlantiques |
| FR | 65 | Hautes-Pyrénées |
| FR | 66 | Pyrénées-Orientales |
| FR | 67 | Bas-Rhin |
| FR | 68 | Haut-Rhin |
| FR | 69 | Rhône |
| FR | 70 | Haute-Saône |
| FR | 71 | Saône-et-Loire |
| FR | 72 | Sarthe |
| FR | 73 | Savoie |
| FR | 74 | Haute-Savoie |
| FR | 75 | Paris |
| FR | 76 | Seine-Maritime |
| FR | 77 | Seine-et-Marne |
| FR | 78 | Yvelines |
| FR | 79 | Deux-Sèvres |
| FR | 80 | Somme |
| FR | 81 | Tarn |
| FR | 82 | Tarn-et-Garonne |
| FR | 83 | Var |
| FR | 84 | Vaucluse |
| FR | 85 | Vendée |
| FR | 86 | Vienne |
| FR | 87 | Haute-Vienne |
| FR | 88 | Vosges |
| FR | 89 | Yonne |
| FR | 90 | Territoire de Belfort |
| FR | 91 | Essonne |
| FR | 92 | Hauts-de-Seine |
| FR | 93 | Seine-Saint-Denis |
| FR | 94 | Val-de-Marne |
| FR | 95 | Val-d’Oise |
| FR | 971 | Guadeloupe |
| FR | 972 | Martinique |
| FR | 973 | Guyane (française) |
| FR | 974 | La Réunion |
| FR | 976 | Mayotte |
| FR | ARA | Auvergne-Rhône-Alpes |
| FR | BFC | Bourgogne-Franche-Comté |
| FR | BL | Saint-Barthélemy (see also separate country code entry under BL) |
| FR | BRE | Bretagne |
| FR | CP | Clipperton |
| FR | CVL | Centre-Val de Loire |
| FR | GES | Grand-Est |
| FR | GF | Guyane (française) (see also separate country code entry under GF) |
| FR | GP | Guadeloupe (see also separate country code entry under GP) |
| FR | HDF | Hauts-de-France |
| FR | IDF | Île-de-France |
| FR | MF | Saint-Martin (see also separate country code entry under MF) |
| FR | MQ | Martinique (see also separate country code entry under MQ) |
| FR | NAQ | Nouvelle-Aquitaine |
| FR | NC | Nouvelle-Calédonie (see also separate country code entry under NC) |
| FR | NOR | Normandie |
| FR | OCC | Occitanie |
| FR | PAC | Provence-Alpes-Côte-d’Azur |
| FR | PDL | Pays-de-la-Loire |
| FR | PF | Polynésie française (see also separate country code entry under PF) |
| FR | PM | Saint-Pierre-et-Miquelon (see also separate country code entry under PM) |
| FR | RE | La Réunion (see also separate country code entry under RE) |
| FR | TF | Terres australes françaises (see also separate country code entry under TF) |
| FR | WF | Wallis-et-Futuna (see also separate country code entry under WF) |
| FR | YT | Mayotte (see also separate country code entry under YT) |
| GA | 1 | Estuaire |
| GA | 2 | Haut-Ogooue |
| GA | 3 | Moyen-Ogooue |
| GA | 4 | Ngounie |
| GA | 5 | Nyanga |
| GA | 6 | Ogooue-Ivindo |
| GA | 7 | Ogooue-Lolo |
| GA | 8 | Ogooue-Maritime |
| GA | 9 | Woleu-Ntem |
| GM | B | Banjul |
| GM | M | Central River |
| GM | L | Lower River |
| GM | N | North Bank |
| GM | U | Upper River |
| GM | W | Western |
| GE | AB | Abkhazia |
| GE | AJ | Ajaria |
| GE | GU | Guria |
| GE | IM | Imereti |
| GE | KA | Kakheti |
| GE | KK | Kvemo Kartli |
| GE | MM | Mtskheta-Mtianeti |
| GE | RL | Racha Lechkhumi and Kvemo Svanet |
| GE | SZ | Samegrelo-Zemo Svaneti |
| GE | SJ | Samtskhe-Javakheti |
| GE | SK | Shida Kartli |
| GE | TB | Tbilisi |
| DE | BY | Bayern |
| DE | BE | Berlin |
| DE | BB | Brandenburg |
| DE | HB | Bremen |
| DE | HH | Hamburg |
| DE | HE | Hessen |
| DE | MV | Mecklenburg-Vorpommern |
| DE | NI | Niedersachsen |
| DE | NW | Nordrhein-Westfalen |
| DE | RP | Rheinland-Pfalz |
| DE | RP | Rhineland-Palatinate |
| DE | SL | Saarland |
| DE | SN | Sachsen |
| DE | ST | Sachsen-Anhalt |
| DE | SH | Schleswig-Holstein |
| DE | TH | Thüringen |
| DE | BW | Baden-Württemberg |
| GH | UE | Upper East Region |
| GH | UW | Upper West Region |
| GH | AA | Greater Accra |
| GH | AF | Ahafo |
| GH | AH | Ashanti |
| GH | BE | Bono East |
| GH | BO | Bono |
| GH | CP | Central |
| GH | EP | Eastern |
| GH | NE | North East |
| GH | NP | Northern |
| GH | OT | Oti |
| GH | SV | Savannah |
| GH | TV | Volta |
| GH | WN | Western North |
| GH | WP | Western |
| GR | 69 | Ágion Óros |
| GR | A | Anatolikí Makedonía kai Thráki |
| GR | B | Kentrikí Makedonía |
| GR | C | Dytikí Makedonía |
| GR | D | Ípeiros |
| GR | E | Thessalía |
| GR | F | Ionía Nísia |
| GR | G | Dytikí Elláda |
| GR | H | Stereá Elláda |
| GR | I | Attikí |
| GR | J | Pelopónnisos |
| GR | K | Vóreio Aigaío |
| GR | L | Nótio Aigaío |
| GR | M | Kríti |
| GL | AV | Avannaata Kommunia |
| GL | KU | Kommune Kujalleq |
| GL | QE | Qeqqata Kommunia |
| GL | QT | Kommune Qeqertalik |
| GL | SM | Kommuneqarfik Sermersooq |
| GD | 01 | Saint Andrew |
| GD | 02 | Saint David |
| GD | 03 | Saint George |
| GD | 04 | Saint John |
| GD | 05 | Saint Mark |
| GD | 06 | Saint Patrick |
| GD | 10 | Southern Grenadine Islands |
| GT | AV | Alta Verapaz |
| GT | BV | Baja Verapaz |
| GT | CM | Chimaltenango |
| GT | CQ | Chiquimula |
| GT | PE | El Peten |
| GT | PR | El Progreso |
| GT | QC | El Quiche |
| GT | ES | Escuintla |
| GT | GU | Guatemala |
| GT | HU | Huehuetenango |
| GT | IZ | Izabal |
| GT | JA | Jalapa |
| GT | JU | Jutiapa |
| GT | QZ | Quetzaltenango |
| GT | RE | Retalhuleu |
| GT | SA | Sacatepequez |
| GT | SM | San Marcos |
| GT | SR | Santa Rosa |
| GT | SO | Solola |
| GT | SU | Suchitepequez |
| GT | TO | Totonicapan |
| GT | ZA | Zacapa |
| GN | BE | Beyla |
| GN | BF | Boffa |
| GN | B | Boke |
| GN | C | Conakry |
| GN | CO | Coyah |
| GN | DB | Dabola |
| GN | DL | Dalaba |
| GN | DI | Dinguiraye |
| GN | DU | Dubreka |
| GN | F | Faranah |
| GN | FO | Forecariah |
| GN | FR | Fria |
| GN | GA | Gaoual |
| GN | K | Kankan |
| GN | KE | Kerouane |
| GN | D | Kindia |
| GN | KS | Kissidougou |
| GN | KB | Koubia |
| GN | KN | Koundara |
| GN | KO | Kouroussa |
| GN | L | Labe |
| GN | LE | Lelouma |
| GN | LO | Lola |
| GN | MC | Macenta |
| GN | ML | Mali |
| GN | M | Mamou |
| GN | MD | Mandiana |
| GN | N | Nzerekore |
| GN | PI | Pita |
| GN | SI | Siguiri |
| GN | TE | Telimele |
| GN | TO | Tougue |
| GN | YO | Yomou |
| GN | GU | Guékédou |
| GW | BS | Bissau Region |
| GW | BL | Bolama Region |
| GW | CA | Cacheu Region |
| GW | GA | Gabu Region |
| GW | OI | Oio Region |
| GW | QU | Quinara Region |
| GW | TO | Tombali Region |
| GW | BA | Bafatá |
| GW | BM | Biombo |
| GW | L | Leste |
| GW | N | Norte |
| GW | S | Sul |
| GY | BA | Barima-Waini |
| GY | CU | Cuyuni-Mazaruni |
| GY | DE | Demerara-Mahaica |
| GY | EB | East Berbice-Corentyne |
| GY | ES | Essequibo Islands-West Demerara |
| GY | MA | Mahaica-Berbice |
| GY | PM | Pomeroon-Supenaam |
| GY | PT | Potaro-Siparuni |
| GY | UD | Upper Demerara-Berbice |
| GY | UT | Upper Takutu-Upper Essequibo |
| HT | AR | Artibonite |
| HT | CE | Centre |
| HT | GA | Grand’Anse |
| HT | ND | Nord |
| HT | NE | Nord-Est |
| HT | NO | Nord-Ouest |
| HT | OU | Ouest |
| HT | SD | Sud |
| HT | SE | Sud-Est |
| HT | NI | Nippes |
| HN | AT | Atlantida |
| HN | CH | Choluteca |
| HN | CL | Colon |
| HN | CM | Comayagua |
| HN | CP | Copan |
| HN | CR | Cortes |
| HN | EP | El Paraiso |
| HN | FM | Francisco Morazan |
| HN | GD | Gracias a Dios |
| HN | IN | Intibuca |
| HN | IB | Islas de la Bahia (Bay Islands) |
| HN | LP | La Paz |
| HN | LE | Lempira |
| HN | OC | Ocotepeque |
| HN | OL | Olancho |
| HN | SB | Santa Barbara |
| HN | VA | Valle |
| HN | YO | Yoro |
| HU | BK | Bacs-Kiskun |
| HU | BA | Baranya |
| HU | BE | Bekes |
| HU | BC | Bekescsaba |
| HU | BZ | Borsod-Abauj-Zemplen |
| HU | BU | Budapest |
| HU | CS | Csongrad |
| HU | DE | Debrecen |
| HU | DU | Dunaujvaros |
| HU | EG | Eger |
| HU | FE | Fejer |
| HU | GY | Gyor |
| HU | GS | Gyor-Moson-Sopron |
| HU | HB | Hajdu-Bihar |
| HU | HE | Heves |
| HU | HV | Hodmezovasarhely |
| HU | JN | Jasz-Nagykun-Szolnok |
| HU | KV | Kaposvar |
| HU | KM | Kecskemet |
| HU | KE | Komarom-Esztergom |
| HU | MI | Miskolc |
| HU | NK | Nagykanizsa |
| HU | NO | Nograd |
| HU | NY | Nyiregyhaza |
| HU | PE | Pecs |
| HU | PE | Pest |
| HU | SO | Somogy |
| HU | SN | Sopron |
| HU | SZ | Szabolcs-Szatmar-Bereg |
| HU | SZ | Szeged |
| HU | SF | Szekesfehervar |
| HU | SK | Szolnok |
| HU | SH | Szombathely |
| HU | TB | Tatabanya |
| HU | TO | Tolna |
| HU | VA | Vas |
| HU | VE | Veszprem |
| HU | ZA | Zala |
| HU | ZE | Zalaegerszeg |
| HU | ER | Érd |
| HU | ST | Salgótarján |
| IS | 7 | Austurland |
| IS | 3 | Vesturland |
| IS | 1 | Höfuðborgarsvæði |
| IS | 2 | Suðurnes |
| IS | 4 | Vestfirðir |
| IS | 5 | Norðurland vestra |
| IS | 6 | Norðurland eystra |
| IS | 8 | Suðurland |
| IS | AKH | Akrahreppur |
| IS | AKN | Akraneskaupstaður |
| IS | AKU | Akureyrarbær |
| IS | ARN | Árneshreppur |
| IS | ASA | Ásahreppur |
| IS | BFJ | Borgarfjarðarhreppur |
| IS | BLA | Bláskógabyggð |
| IS | BLO | Blönduósbær |
| IS | BOG | Borgarbyggð |
| IS | BOL | Bolungarvíkurkaupstaður |
| IS | DAB | Dalabyggð |
| IS | DAV | Dalvíkurbyggð |
| IS | DJU | Djúpavogshreppur |
| IS | EOM | Eyja- og Miklaholtshreppur |
| IS | EYF | Eyjafjarðarsveit |
| IS | FJD | Fjarðabyggð |
| IS | FJL | Fjallabyggð |
| IS | FLA | Flóahreppur |
| IS | FLD | Fljótsdalshérað |
| IS | FLR | Fljótsdalshreppur |
| IS | GAR | Garðabær |
| IS | GOG | Grímsnes- og Grafningshreppur |
| IS | GRN | Grindavíkurbær |
| IS | GRU | Grundarfjarðarbær |
| IS | GRY | Grýtubakkahreppur |
| IS | HAF | Hafnarfjarðarkaupstaður |
| IS | HEL | Helgafellssveit |
| IS | HRG | Hörgársveit |
| IS | HRU | Hrunamannahreppur |
| IS | HUT | Húnavatnshreppur |
| IS | HUV | Húnaþing vestra |
| IS | HVA | Hvalfjarðarsveit |
| IS | HVE | Hveragerðisbær |
| IS | ISA | Ísafjarðarbær |
| IS | KAL | Kaldrananeshreppur |
| IS | KJO | Kjósarhreppur |
| IS | KOP | Kópavogsbær |
| IS | LAN | Langanesbyggð |
| IS | MOS | Mosfellsbær |
| IS | MYR | Mýrdalshreppur |
| IS | NOR | Norðurþing |
| IS | RGE | Rangárþing eystra |
| IS | RGY | Rangárþing ytra |
| IS | RHH | Reykhólahreppur |
| IS | RKN | Reykjanesbær |
| IS | RKV | Reykjavíkurborg |
| IS | SBH | Svalbarðshreppur |
| IS | SBT | Svalbarðsstrandarhreppur |
| IS | SDN | Suðurnesjabær |
| IS | SDV | Súðavíkurhreppur |
| IS | SEL | Seltjarnarnesbær |
| IS | SEY | Seyðisfjarðarkaupstaður |
| IS | SFA | Sveitarfélagið Árborg |
| IS | SHF | Sveitarfélagið Hornafjörður |
| IS | SKF | Skaftárhreppur |
| IS | SKG | Skagabyggð |
| IS | SKO | Skorradalshreppur |
| IS | SKU | Skútustaðahreppur |
| IS | SNF | Snæfellsbær |
| IS | SOG | Skeiða- og Gnúpverjahreppur |
| IS | SOL | Sveitarfélagið Ölfus |
| IS | SSF | Sveitarfélagið Skagafjörður |
| IS | SSS | Sveitarfélagið Skagaströnd |
| IS | STR | Strandabyggð |
| IS | STY | Stykkishólmsbær |
| IS | SVG | Sveitarfélagið Vogar |
| IS | TAL | Tálknafjarðarhreppur |
| IS | THG | Þingeyjarsveit |
| IS | TJO | Tjörneshreppur |
| IS | VEM | Vestmannaeyjabær |
| IS | VER | Vesturbyggð |
| IS | VOP | Vopnafjarðarhreppur |
| IN | AN | Andaman and Nicobar Islands |
| IN | AP | Andhra Pradesh |
| IN | AR | Arunāchal Pradesh |
| IN | AS | Assam |
| IN | CH | Chandīgarh |
| IN | CT | Chhattīsgarh |
| IN | DH | Dādra and Nagar Haveli and Damān and Diu |
| IN | GA | Goa |
| IN | HP | Himāchal Pradesh |
| IN | HR | Haryāna |
| IN | JH | Jhārkhand |
| IN | JK | Jammu and Kashmīr |
| IN | KL | Kerala |
| IN | LA | Ladākh |
| IN | LD | Lakshadweep |
| IN | MH | Mahārāshtra |
| IN | ML | Meghālaya |
| IN | MN | Manipur |
| IN | MP | Madhya Pradesh |
| IN | MZ | Mizoram |
| IN | NL | Nāgāland |
| IN | OR | Odisha |
| IN | PB | Punjab |
| IN | PY | Puducherry |
| IN | RJ | Rājasthān |
| IN | TG | Telangāna |
| IN | TN | Tamil Nādu |
| IN | UP | Uttar Pradesh |
| IN | UT | Uttarākhand |
| IN | WB | West Bengal |
| ID | AC | Aceh |
| ID | BA | Bali |
| ID | BT | Banten |
| ID | BE | Bengkulu |
| ID | GO | Gorontalo |
| ID | JK | Jakarta Raya |
| ID | JA | Jambi |
| ID | JB | Jawa Barat |
| ID | JT | Jawa Tengah |
| ID | JI | Jawa Timur |
| ID | KB | Kalimantan Barat |
| ID | KS | Kalimantan Selatan |
| ID | KT | Kalimantan Tengah |
| ID | KI | Kalimantan Timur |
| ID | BB | Kepulauan Bangka Belitung |
| ID | LA | Lampung |
| ID | ML | Maluku |
| ID | MU | Maluku Utara |
| ID | NB | Nusa Tenggara Barat |
| ID | NT | Nusa Tenggara Timur |
| ID | PP | Papua |
| ID | RI | Riau |
| ID | SN | Sulawesi Selatan |
| ID | ST | Sulawesi Tengah |
| ID | SG | Sulawesi Tenggara |
| ID | SA | Sulawesi Utara |
| ID | SB | Sumatera Barat |
| ID | SS | Sumatera Selatan |
| ID | SU | Sumatera Utara |
| ID | YO | Yogyakarta |
| ID | JW | Jawa |
| ID | KA | Kalimantan |
| ID | KR | Kepulauan Riau |
| ID | KU | Kalimantan Utara |
| ID | NU | Nusa Tenggara |
| ID | PB | Papua Barat |
| ID | SL | Sulawesi |
| ID | SM | Sumatera |
| ID | SR | Sulawesi Barat |
| IR | 24 | Ardabil |
| IR | 18 | Bushehr |
| IR | 10 | Esfahan |
| IR | 07 | Fars |
| IR | 01 | Gilan |
| IR | 27 | Golestan |
| IR | 13 | Hamadan |
| IR | 22 | Hormozgan |
| IR | 16 | Ilam |
| IR | 08 | Kerman |
| IR | 05 | Kermanshah |
| IR | 06 | Khuzestan |
| IR | 15 | Lorestan |
| IR | 00 | Markazi |
| IR | 02 | Mazandaran |
| IR | 26 | Qazvin |
| IR | 25 | Qom |
| IR | 20 | Semnan |
| IR | 23 | Tehran |
| IR | 21 | Yazd |
| IR | 19 | Zanjan |
| IR | 03 | Āz̄ārbāyjān-e Shārqī |
| IR | 04 | Āz̄ārbāyjān-e Ghārbī |
| IR | 09 | Khorāsān-e Raẕavī |
| IR | 11 | Sīstān va Balūchestān |
| IR | 12 | Kordestān |
| IR | 14 | Chahār Maḩāl va Bakhtīārī |
| IR | 17 | Kohgīlūyeh va Bowyer Aḩmad |
| IR | 28 | Khorāsān-e Shomālī |
| IR | 29 | Khorāsān-e Jonūbī |
| IR | 30 | Alborz |
| IQ | AN | Al Anbar |
| IQ | BA | Al Basrah |
| IQ | MU | Al Muthanna |
| IQ | QA | Al Qadisyah |
| IQ | NA | An Najaf |
| IQ | AR | Arbil |
| IQ | SU | As Sulaymaniyah |
| IQ | BB | Babil |
| IQ | BG | Baghdad |
| IQ | DA | Dahuk |
| IQ | DQ | Dhi Qar |
| IQ | DI | Diyala |
| IQ | MA | Maysan |
| IQ | NI | Ninawa |
| IQ | SD | Salah ad Din |
| IQ | WA | Wasit |
| IQ | KA | Karbalā’ |
| IQ | KI | Kirkūk |
| IE | CW | Carlow |
| IE | CN | Cavan |
| IE | CE | Clare |
| IE | CO | Cork |
| IE | DL | Donegal |
| IE | D | Dublin |
| IE | G | Galway |
| IE | KE | Kerry |
| IE | KE | Kildare |
| IE | KK | Kilkenny |
| IE | LS | Laois |
| IE | LM | Leitrim |
| IE | LK | Limerick |
| IE | LD | Longford |
| IE | LH | Louth |
| IE | MO | Mayo |
| IE | MH | Meath |
| IE | MO | Monaghan |
| IE | OY | Offaly |
| IE | RN | Roscommon |
| IE | SO | Sligo |
| IE | TA | Tipperary |
| IE | WD | Waterford |
| IE | WH | Westmeath |
| IE | WX | Wexford |
| IE | WW | Wicklow |
| IE | C | Connaught |
| IE | L | Leinster |
| IE | M | Munster |
| IE | U | Ulster |
| IL | HA | Haifa |
| IL | JM | Jehuda Mountains |
| IL | TA | Tel Aviv (Gosh Dan) |
| IL | D | Ha Darom |
| IL | M | Ha Merkaz |
| IL | Z | Ha Tsafon |
| IT | AG | Agrigento |
| IT | AL | Alessandria |
| IT | AN | Ancona |
| IT | AR | Arezzo |
| IT | AP | Ascoli Piceno |
| IT | AT | Asti |
| IT | AV | Avellino |
| IT | BA | Bari |
| IT | BL | Belluno |
| IT | BN | Benevento |
| IT | BG | Bergamo |
| IT | BI | Biella |
| IT | BO | Bologna |
| IT | BZ | Bolzano |
| IT | BS | Brescia |
| IT | BR | Brindisi |
| IT | CA | Cagliari |
| IT | CL | Caltanissetta |
| IT | CB | Campobasso |
| IT | CE | Caserta |
| IT | CT | Catania |
| IT | CZ | Catanzaro |
| IT | CH | Chieti |
| IT | CO | Como |
| IT | CS | Cosenza |
| IT | CR | Cremona |
| IT | KR | Crotone |
| IT | CN | Cuneo |
| IT | EN | Enna |
| IT | FE | Ferrara |
| IT | FI | Firenze |
| IT | FG | Foggia |
| IT | FC | Forli-Cesena |
| IT | FR | Frosinone |
| IT | GE | Genova |
| IT | GO | Gorizia |
| IT | GR | Grosseto |
| IT | IM | Imperia |
| IT | IS | Isernia |
| IT | AQ | L’Aquila |
| IT | SP | La Spezia |
| IT | LT | Latina |
| IT | LE | Lecce |
| IT | LC | Lecco |
| IT | LI | Livorno |
| IT | LO | Lodi |
| IT | LU | Lucca |
| IT | MC | Macerata |
| IT | MN | Mantova |
| IT | MS | Massa-Carrara |
| IT | MT | Matera |
| IT | ME | Messina |
| IT | MI | Milano |
| IT | MO | Modena |
| IT | NA | Napoli |
| IT | NO | Novara |
| IT | NU | Nuoro |
| IT | OR | Oristano |
| IT | PD | Padova |
| IT | PA | Palermo |
| IT | PR | Parma |
| IT | PV | Pavia |
| IT | PG | Perugia |
| IT | PU | Pesaro e Urbino |
| IT | PE | Pescara |
| IT | PC | Piacenza |
| IT | PI | Pisa |
| IT | PT | Pistoia |
| IT | PN | Pordenone |
| IT | PZ | Potenza |
| IT | PO | Prato |
| IT | RG | Ragusa |
| IT | RA | Ravenna |
| IT | RC | Reggio Calabria |
| IT | RE | Reggio Emilia |
| IT | RI | Rieti |
| IT | RN | Rimini |
| IT | RM | Roma |
| IT | RO | Rovigo |
| IT | SA | Salerno |
| IT | SS | Sassari |
| IT | SV | Savona |
| IT | SI | Siena |
| IT | SR | Siracusa |
| IT | SO | Sondrio |
| IT | TA | Taranto |
| IT | TE | Teramo |
| IT | TR | Terni |
| IT | TO | Torino |
| IT | TP | Trapani |
| IT | TN | Trento |
| IT | TV | Treviso |
| IT | TS | Trieste |
| IT | UD | Udine |
| IT | VA | Varese |
| IT | VE | Venezia |
| IT | VB | Verbano-Cusio-Ossola |
| IT | VC | Vercelli |
| IT | VR | Verona |
| IT | VV | Vibo Valentia |
| IT | VI | Vicenza |
| IT | VT | Viterbo |
| IT | 21 | Piemonte |
| IT | 23 | Valle d’Aosta |
| IT | 25 | Lombardia |
| IT | 32 | Trentino-Südtirol |
| IT | 34 | Veneto |
| IT | 36 | Friuli Venezia Giulia |
| IT | 42 | Liguria |
| IT | 45 | Emilia-Romagna |
| IT | 52 | Toscana |
| IT | 55 | Umbria |
| IT | 57 | Marche |
| IT | 62 | Lazio |
| IT | 65 | Abruzzo |
| IT | 67 | Molise |
| IT | 72 | Campania |
| IT | 75 | Puglia |
| IT | 77 | Basilicata |
| IT | 78 | Calabria |
| IT | 82 | Sicilia |
| IT | 88 | Sardegna |
| IT | BT | Barletta-Andria-Trani |
| IT | FM | Fermo |
| IT | MB | Monza e Brianza |
| IT | SU | Sud Sardegna |
| JM | 01 | Kingston |
| JM | 02 | Saint Andrew |
| JM | 03 | Saint Thomas |
| JM | 04 | Portland |
| JM | 05 | Saint Mary |
| JM | 06 | Saint Ann |
| JM | 07 | Trelawny |
| JM | 08 | Saint James |
| JM | 09 | Hanover |
| JM | 10 | Westmoreland |
| JM | 11 | Saint Elizabeth |
| JM | 12 | Manchester |
| JM | 13 | Clarendon |
| JM | 14 | Saint Catherine |
| JP | 23 | Aichi |
| JP | 05 | Akita |
| JP | 02 | Aomori |
| JP | 12 | Chiba |
| JP | 38 | Ehime |
| JP | 18 | Fukui |
| JP | 40 | Fukuoka |
| JP | 07 | Fukushima |
| JP | 21 | Gifu |
| JP | 34 | Hiroshima |
| JP | 01 | Hokkaido |
| JP | 28 | Hyogo |
| JP | 08 | Ibaraki |
| JP | 17 | Ishikawa |
| JP | 03 | Iwate |
| JP | 37 | Kagawa |
| JP | 46 | Kagoshima |
| JP | 14 | Kanagawa |
| JP | 39 | Kochi |
| JP | 43 | Kumamoto |
| JP | 26 | Kyoto |
| JP | 24 | Mie |
| JP | 04 | Miyagi |
| JP | 45 | Miyazaki |
| JP | 20 | Nagano |
| JP | 42 | Nagasaki |
| JP | 29 | Nara |
| JP | 15 | Niigata |
| JP | 44 | Oita |
| JP | 33 | Okayama |
| JP | 47 | Okinawa |
| JP | 27 | Osaka |
| JP | 41 | Saga |
| JP | 11 | Saitama |
| JP | 25 | Shiga |
| JP | 32 | Shimane |
| JP | 22 | Shizuoka |
| JP | 09 | Tochigi |
| JP | 36 | Tokushima |
| JP | 13 | Tokyo |
| JP | 31 | Tottori |
| JP | 16 | Toyama |
| JP | 30 | Wakayama |
| JP | 06 | Yamagata |
| JP | 35 | Yamaguchi |
| JP | 19 | Yamanashi |
| JP | 10 | Gunma |
| JO | AM | ‘Amman |
| JO | AJ | Ajlun |
| JO | KA | Al Karak |
| JO | MA | Al Mafraq |
| JO | AT | At Tafilah |
| JO | AZ | Az Zarqa’ |
| JO | IR | Irbid |
| JO | JA | Jarash |
| JO | MA | Ma’an |
| JO | MD | Madaba |
| JO | AQ | Al ‘Aqabah |
| JO | BA | Al Balqā’ |
| JO | MN | Ma‘ān |
| KZ | ALA | Almaty |
| KZ | AKM | Aqmola oblysy |
| KZ | AKT | Aqtöbe oblysy |
| KZ | ALM | Almaty oblysy |
| KZ | AST | Nur-Sultan |
| KZ | ATY | Atyrauskaya oblast’ |
| KZ | KAR | Qaraghandy oblysy |
| KZ | KUS | Qostanay oblysy |
| KZ | KZY | Qyzylorda oblysy |
| KZ | MAN | Mangystauskaja oblast’ |
| KZ | PAV | Pavlodarskaya oblast’ |
| KZ | SEV | Soltüstik Qazaqstan oblysy |
| KZ | SHY | Šimkent |
| KZ | VOS | Vostočno-Kazahstanskaja oblast’ |
| KZ | YUZ | Türkistan oblysy |
| KZ | ZAP | Zapadno-Kazakhstanskaya oblast’ |
| KZ | ZHA | Zhambylskaya oblast’ |
| KE | 01 | Baringo |
| KE | 02 | Bomet |
| KE | 03 | Bungoma |
| KE | 04 | Busia |
| KE | 05 | Elgeyo/Marakwet |
| KE | 06 | Embu |
| KE | 07 | Garissa |
| KE | 08 | Homa Bay |
| KE | 09 | Isiolo |
| KE | 10 | Kajiado |
| KE | 11 | Kakamega |
| KE | 12 | Kericho |
| KE | 13 | Kiambu |
| KE | 14 | Kilifi |
| KE | 15 | Kirinyaga |
| KE | 16 | Kisii |
| KE | 17 | Kisumu |
| KE | 18 | Kitui |
| KE | 19 | Kwale |
| KE | 20 | Laikipia |
| KE | 21 | Lamu |
| KE | 22 | Machakos |
| KE | 23 | Makueni |
| KE | 24 | Mandera |
| KE | 25 | Marsabit |
| KE | 26 | Meru |
| KE | 27 | Migori |
| KE | 28 | Mombasa |
| KE | 29 | Murang’a |
| KE | 30 | Nairobi City |
| KE | 31 | Nakuru |
| KE | 32 | Nandi |
| KE | 33 | Narok |
| KE | 34 | Nyamira |
| KE | 35 | Nyandarua |
| KE | 36 | Nyeri |
| KE | 37 | Samburu |
| KE | 38 | Siaya |
| KE | 39 | Taita/Taveta |
| KE | 40 | Tana River |
| KE | 41 | Tharaka-Nithi |
| KE | 42 | Trans Nzoia |
| KE | 43 | Turkana |
| KE | 44 | Uasin Gishu |
| KE | 45 | Vihiga |
| KE | 46 | Wajir |
| KE | 47 | West Pokot |
| KI | G | Gilbert Islands |
| KI | L | Line Islands |
| KI | P | Phoenix Islands |
| KP | 04 | Chagang-do |
| KP | 09 | Hamgyong-bukto |
| KP | 08 | Hamgyong-namdo |
| KP | 06 | Hwanghae-bukto |
| KP | 05 | Hwanghae-namdo |
| KP | 07 | Kangwon-do |
| KP | 03 | P’yongan-bukto |
| KP | 02 | P’yongan-namdo |
| KP | 01 | Phyeongyang |
| KP | 10 | Ryangkangto |
| KP | 13 | Rasǒn |
| KP | 14 | Namp’o |
| KR | 11 | Seoul-teukbyeolsi |
| KR | 26 | Busan-gwangyeoksi |
| KR | 27 | Daegu-gwangyeoksi |
| KR | 28 | Incheon-gwangyeoksi |
| KR | 29 | Gwangju-gwangyeoksi |
| KR | 30 | Daejeon-gwangyeoksi |
| KR | 31 | Ulsan-gwangyeoksi |
| KR | 41 | Gyeonggi-do |
| KR | 42 | Gangwon-do |
| KR | 43 | Chungcheongbuk-do |
| KR | 44 | Chungcheongnam-do |
| KR | 45 | Jeollabuk-do |
| KR | 46 | Jeollanam-do |
| KR | 47 | Gyeongsangbuk-do |
| KR | 48 | Gyeongsangnam-do |
| KR | 49 | Jeju-teukbyeoljachido |
| KR | 50 | Sejong |
| KW | AH | Al Ahmadi |
| KW | FA | Al Farwaniyah |
| KW | HA | Hawalli |
| KW | JA | Al Jahrā’ |
| KW | KU | Al ‘Āşimah |
| KW | MU | Mubārak al Kabīr |
| KG | B | Batken |
| KG | GB | Bishkek |
| KG | C | Chu |
| KG | J | Jalal-Abad |
| KG | N | Naryn |
| KG | O | Osh |
| KG | T | Talas |
| KG | Y | Ysyk-Kol |
| KG | GO | Osh Shaary |
| LA | AT | Attapu |
| LA | BK | Bokeo |
| LA | BL | Bolikhamxai |
| LA | CH | Champasak |
| LA | HO | Houaphan |
| LA | KH | Khammouan |
| LA | LM | Louang Namtha |
| LA | LP | Louangphabang |
| LA | OU | Oudomxai |
| LA | PH | Phongsali |
| LA | SL | Salavan |
| LA | SV | Savannakhet |
| LA | VT | Vientiane |
| LA | XA | Xaignabouli |
| LA | XS | Xaisomboun |
| LA | XE | Xekong |
| LA | XI | Xiangkhoang |
| LV | DGV | Daugavpils |
| LV | JEL | Jelgava |
| LV | JUR | Jurmala |
| LV | LPX | Liepaja |
| LV | REZ | Rezekne |
| LV | RIX | Riga |
| LV | VEN | Ventspils |
| LV | 001 | Aglonas novads |
| LV | 002 | Aizkraukles novads |
| LV | 003 | Aizputes novads |
| LV | 004 | Aknīstes novads |
| LV | 005 | Alojas novads |
| LV | 006 | Alsungas novads |
| LV | 007 | Alūksnes novads |
| LV | 008 | Amatas novads |
| LV | 009 | Apes novads |
| LV | 010 | Auces novads |
| LV | 011 | Ādažu novads |
| LV | 012 | Babītes novads |
| LV | 013 | Baldones novads |
| LV | 014 | Baltinavas novads |
| LV | 015 | Balvu novads |
| LV | 016 | Bauskas novads |
| LV | 017 | Beverīnas novads |
| LV | 018 | Brocēnu novads |
| LV | 019 | Burtnieku novads |
| LV | 020 | Carnikavas novads |
| LV | 021 | Cesvaines novads |
| LV | 022 | Cēsu novads |
| LV | 023 | Ciblas novads |
| LV | 024 | Dagdas novads |
| LV | 025 | Daugavpils novads |
| LV | 026 | Dobeles novads |
| LV | 027 | Dundagas novads |
| LV | 028 | Durbes novads |
| LV | 029 | Engures novads |
| LV | 030 | Ērgļu novads |
| LV | 031 | Garkalnes novads |
| LV | 032 | Grobiņas novads |
| LV | 033 | Gulbenes novads |
| LV | 034 | Iecavas novads |
| LV | 035 | Ikšķiles novads |
| LV | 036 | Ilūkstes novads |
| LV | 037 | Inčukalna novads |
| LV | 038 | Jaunjelgavas novads |
| LV | 039 | Jaunpiebalgas novads |
| LV | 040 | Jaunpils novads |
| LV | 041 | Jelgavas novads |
| LV | 042 | Jēkabpils novads |
| LV | 043 | Kandavas novads |
| LV | 044 | Kārsavas novads |
| LV | 045 | Kocēnu novads |
| LV | 046 | Kokneses novads |
| LV | 047 | Krāslavas novads |
| LV | 048 | Krimuldas novads |
| LV | 049 | Krustpils novads |
| LV | 050 | Kuldīgas novads |
| LV | 051 | Ķeguma novads |
| LV | 052 | Ķekavas novads |
| LV | 053 | Lielvārdes novads |
| LV | 054 | Limbažu novads |
| LV | 055 | Līgatnes novads |
| LV | 056 | Līvānu novads |
| LV | 057 | Lubānas novads |
| LV | 058 | Ludzas novads |
| LV | 059 | Madonas novads |
| LV | 060 | Mazsalacas novads |
| LV | 061 | Mālpils novads |
| LV | 062 | Mārupes novads |
| LV | 063 | Mērsraga novads |
| LV | 064 | Naukšēnu novads |
| LV | 065 | Neretas novads |
| LV | 066 | Nīcas novads |
| LV | 067 | Ogres novads |
| LV | 068 | Olaines novads |
| LV | 069 | Ozolnieku novads |
| LV | 070 | Pārgaujas novads |
| LV | 071 | Pāvilostas novads |
| LV | 072 | Pļaviņu novads |
| LV | 073 | Preiļu novads |
| LV | 074 | Priekules novads |
| LV | 075 | Priekuļu novads |
| LV | 076 | Raunas novads |
| LV | 077 | Rēzeknes novads |
| LV | 078 | Riebiņu novads |
| LV | 079 | Rojas novads |
| LV | 080 | Ropažu novads |
| LV | 081 | Rucavas novads |
| LV | 082 | Rugāju novads |
| LV | 083 | Rundāles novads |
| LV | 084 | Rūjienas novads |
| LV | 085 | Salas novads |
| LV | 086 | Salacgrīvas novads |
| LV | 087 | Salaspils novads |
| LV | 088 | Saldus novads |
| LV | 089 | Saulkrastu novads |
| LV | 090 | Sējas novads |
| LV | 091 | Siguldas novads |
| LV | 092 | Skrīveru novads |
| LV | 093 | Skrundas novads |
| LV | 094 | Smiltenes novads |
| LV | 095 | Stopiņu novads |
| LV | 096 | Strenču novads |
| LV | 097 | Talsu novads |
| LV | 098 | Tērvetes novads |
| LV | 099 | Tukuma novads |
| LV | 100 | Vaiņodes novads |
| LV | 101 | Valkas novads |
| LV | 102 | Varakļānu novads |
| LV | 103 | Vārkavas novads |
| LV | 104 | Vecpiebalgas novads |
| LV | 105 | Vecumnieku novads |
| LV | 106 | Ventspils novads |
| LV | 107 | Viesītes novads |
| LV | 108 | Viļakas novads |
| LV | 109 | Viļānu novads |
| LV | 110 | Zilupes novads |
| LV | JKB | Jēkabpils |
| LV | VMR | Valmiera |
| LB | AK | Aakkâr |
| LB | BI | Al Biqā‘ |
| LB | JA | Al Janūb |
| LB | NA | An Nabaţīyah |
| LB | AS | Ash Shimāl |
| LB | BH | Baalbek-Hermel |
| LB | BA | Beyrouth |
| LB | BI | Béqaa |
| LB | BH | B‘alabak-Al Hirmil |
| LB | JL | Jabal Lubnān |
| LB | AS | Liban-Nord |
| LB | JA | Liban-Sud |
| LB | JL | Mont-Liban |
| LB | NA | Nabatîyé |
| LS | D | Berea |
| LS | C | Leribe |
| LS | E | Mafeteng |
| LS | A | Maseru |
| LS | F | Mohale’s Hoek |
| LS | J | Mokhotlong |
| LS | H | Qacha’s Nek |
| LS | G | Quthing |
| LS | K | Thaba-Tseka |
| LS | B | Botha-Bothe |
| LR | BM | Bomi |
| LR | BG | Bong |
| LR | GB | Grand Bassa |
| LR | CM | Grand Cape Mount |
| LR | GG | Grand Gedeh |
| LR | GK | Grand Kru |
| LR | LO | Lofa |
| LR | MG | Margibi |
| LR | MY | Maryland |
| LR | MO | Montserrado |
| LR | NI | Nimba |
| LR | RI | River Cess |
| LR | SI | Sinoe |
| LR | GP | Gbarpolu |
| LR | RG | River Gee |
| LY | JA | Al Jabal al Akhdar |
| LY | JU | Al Jufrah |
| LY | KF | Al Kufrah |
| LY | NQ | An Nuqat al Khams |
| LY | ZA | Az Zawiyah |
| LY | BA | Banghazi |
| LY | DR | Darnah |
| LY | MI | Misratah |
| LY | MQ | Murzuq |
| LY | SB | Sabha |
| LY | SR | Surt |
| LY | BU | Al Buţnān |
| LY | GT | Ghāt |
| LY | JG | Al Jabal al Gharbī |
| LY | JI | Al Jafārah |
| LY | MB | Al Marqab |
| LY | MJ | Al Marj |
| LY | NL | Nālūt |
| LY | TB | Ţarābulus |
| LY | WA | Al Wāḩāt |
| LY | WD | Wādī al Ḩayāt |
| LY | WS | Wādī ash Shāţi’ |
| LI | 01 | Balzers |
| LI | 02 | Eschen |
| LI | 03 | Gamprin |
| LI | 04 | Mauren |
| LI | 05 | Planken |
| LI | 06 | Ruggell |
| LI | 07 | Schaan |
| LI | 08 | Schellenberg |
| LI | 09 | Triesen |
| LI | 10 | Triesenberg |
| LI | 11 | Vaduz |
| LT | AL | Alytus |
| LT | 16 | Kaunas |
| LT | KL | Klaipeda |
| LT | 25 | Marijampole |
| LT | 33 | Panevezys |
| LT | 44 | Siauliai |
| LT | TA | Taurage |
| LT | TE | Telsiai |
| LT | UT | Utena |
| LT | 58 | Vilnius |
| LT | 01 | Akmenė |
| LT | 02 | Alytaus miestas |
| LT | 04 | Anykščiai |
| LT | 05 | Birštono |
| LT | 06 | Biržai |
| LT | 07 | Druskininkai |
| LT | 08 | Elektrėnai |
| LT | 09 | Ignalina |
| LT | 10 | Jonava |
| LT | 11 | Joniškis |
| LT | 12 | Jurbarkas |
| LT | 13 | Kaišiadorys |
| LT | 14 | Kalvarijos |
| LT | 15 | Kauno miestas |
| LT | 17 | Kazlų Rūdos |
| LT | 18 | Kėdainiai |
| LT | 19 | Kelmė |
| LT | 20 | Klaipėdos miestas |
| LT | 22 | Kretinga |
| LT | 23 | Kupiškis |
| LT | 24 | Lazdijai |
| LT | 26 | Mažeikiai |
| LT | 27 | Molėtai |
| LT | 28 | Neringa |
| LT | 29 | Pagėgiai |
| LT | 30 | Pakruojis |
| LT | 31 | Palangos miestas |
| LT | 32 | Panevėžio miestas |
| LT | 34 | Pasvalys |
| LT | 35 | Plungė |
| LT | 36 | Prienai |
| LT | 37 | Radviliškis |
| LT | 38 | Raseiniai |
| LT | 39 | Rietavo |
| LT | 40 | Rokiškis |
| LT | 41 | Šakiai |
| LT | 42 | Šalčininkai |
| LT | 43 | Šiaulių miestas |
| LT | 45 | Šilalė |
| LT | 46 | Šilutė |
| LT | 47 | Širvintos |
| LT | 48 | Skuodas |
| LT | 49 | Švenčionys |
| LT | 52 | Trakai |
| LT | 53 | Ukmergė |
| LT | 55 | Varėna |
| LT | 56 | Vilkaviškis |
| LT | 57 | Vilniaus miestas |
| LT | 59 | Visaginas |
| LT | 60 | Zarasai |
| LT | KU | Kauno apskritis |
| LT | MR | Marijampolės apskritis |
| LT | PN | Panevėžio apskritis |
| LT | SA | Šiaulių apskritis |
| LT | VL | Vilniaus apskritis |
| LU | CA | Capellen |
| LU | CL | Clervaux |
| LU | DI | Diekirch |
| LU | EC | Echternach |
| LU | ES | Esch-sur-Alzette |
| LU | GR | Grevenmacher |
| LU | LU | Luxembourg |
| LU | ME | Mersch |
| LU | RD | Redange |
| LU | RM | Remich |
| LU | VD | Vianden |
| LU | WI | Wiltz |
| MK | 101 | Veles |
| MK | 102 | Gradsko |
| MK | 103 | Demir Kapija |
| MK | 104 | Kavadarci |
| MK | 105 | Lozovo |
| MK | 106 | Negotino |
| MK | 107 | Rosoman |
| MK | 108 | Sveti Nikole |
| MK | 109 | Čaška |
| MK | 201 | Berovo |
| MK | 202 | Vinica |
| MK | 203 | Delčevo |
| MK | 204 | Zrnovci |
| MK | 205 | Karbinci |
| MK | 206 | Kočani |
| MK | 207 | Makedonska Kamenica |
| MK | 208 | Pehčevo |
| MK | 209 | Probištip |
| MK | 210 | Češinovo-Obleševo |
| MK | 211 | Štip |
| MK | 301 | Vevčani |
| MK | 303 | Debar |
| MK | 304 | Debrca |
| MK | 307 | Kičevo |
| MK | 308 | Makedonski Brod |
| MK | 310 | Ohrid |
| MK | 311 | Plasnica |
| MK | 312 | Struga |
| MK | 313 | Centar Župa |
| MK | 401 | Bogdanci |
| MK | 402 | Bosilovo |
| MK | 403 | Valandovo |
| MK | 404 | Vasilevo |
| MK | 405 | Gevgelija |
| MK | 406 | Dojran |
| MK | 407 | Konče |
| MK | 408 | Novo Selo |
| MK | 409 | Radoviš |
| MK | 410 | Strumica |
| MK | 501 | Bitola |
| MK | 502 | Demir Hisar |
| MK | 503 | Dolneni |
| MK | 504 | Krivogaštani |
| MK | 505 | Kruševo |
| MK | 506 | Mogila |
| MK | 507 | Novaci |
| MK | 508 | Prilep |
| MK | 509 | Resen |
| MK | 601 | Bogovinje |
| MK | 602 | Brvenica |
| MK | 603 | Vrapčište |
| MK | 604 | Gostivar |
| MK | 605 | Želino |
| MK | 606 | Jegunovce |
| MK | 607 | Mavrovo i Rostuše |
| MK | 608 | Tearce |
| MK | 609 | Tetovo |
| MK | 701 | Kratovo |
| MK | 702 | Kriva Palanka |
| MK | 703 | Kumanovo |
| MK | 704 | Lipkovo |
| MK | 705 | Rankovce |
| MK | 706 | Staro Nagoričane |
| MK | 801 | Aerodrom † |
| MK | 802 | Aračinovo |
| MK | 803 | Butel † |
| MK | 804 | Gazi Baba † |
| MK | 805 | Gjorče Petrov † |
| MK | 806 | Zelenikovo |
| MK | 807 | Ilinden |
| MK | 808 | Karpoš † |
| MK | 809 | Kisela Voda † |
| MK | 810 | Petrovec |
| MK | 811 | Saraj † |
| MK | 812 | Sopište |
| MK | 813 | Studeničani |
| MK | 814 | Centar † |
| MK | 815 | Čair † |
| MK | 816 | Čučer-Sandevo |
| MK | 817 | Šuto Orizari † |
| MG | T | Antananarivo |
| MG | D | Antsiranana |
| MG | F | Fianarantsoa |
| MG | M | Mahajanga |
| MG | A | Toamasina |
| MG | U | Toliara |
| MW | BA | Balaka |
| MW | BL | Blantyre |
| MW | CK | Chikwawa |
| MW | CR | Chiradzulu |
| MW | CT | Chitipa |
| MW | DE | Dedza |
| MW | DO | Dowa |
| MW | KR | Karonga |
| MW | KS | Kasungu |
| MW | LK | Likoma |
| MW | LI | Lilongwe |
| MW | MH | Machinga |
| MW | MG | Mangochi |
| MW | MC | Mchinji |
| MW | MU | Mulanje |
| MW | MW | Mwanza |
| MW | MZ | Mzimba |
| MW | NB | Nkhata Bay |
| MW | NK | Nkhotakota |
| MW | NS | Nsanje |
| MW | NU | Ntcheu |
| MW | NI | Ntchisi |
| MW | PH | Phalombe |
| MW | RU | Rumphi |
| MW | SA | Salima |
| MW | TH | Thyolo |
| MW | ZO | Zomba |
| MW | C | Chapakati |
| MW | N | Northern Region |
| MW | NE | Neno |
| MW | S | Southern Region |
| MY | 01 | Johor |
| MY | 02 | Kedah |
| MY | 03 | Kelantan |
| MY | 04 | Melaka |
| MY | 05 | Negeri Sembilan |
| MY | 06 | Pahang |
| MY | 08 | Perak |
| MY | 09 | Perlis |
| MY | 07 | Pulau Pinang |
| MY | 12 | Sabah |
| MY | 13 | Sarawak |
| MY | 10 | Selangor |
| MY | 11 | Terengganu |
| MY | 14 | Wilayah Persekutuan Kuala Lumpur |
| MY | 15 | Wilayah Persekutuan Labuan |
| MY | 16 | Wilayah Persekutuan Putrajaya |
| MV | 01 | Addu |
| MV | 03 | Faadhippolhu |
| MV | 08 | Kolhumadulu |
| MV | 26 | Male Atoll |
| MV | 12 | Mulaku Atoll |
| MV | 00 | South Ari Atoll |
| MV | 02 | North Ari Atoll |
| MV | 04 | Felidhu Atoll |
| MV | 05 | Hahdhunmathi |
| MV | 07 | Thiladhunmathee Uthuruburi |
| MV | 13 | North Maalhosmadulu |
| MV | 14 | North Nilandhe Atoll |
| MV | 17 | South Nilandhe Atoll |
| MV | 20 | South Maalhosmadulu |
| MV | 23 | Thiladhunmathee Dhekunuburi |
| MV | 24 | North Miladhunmadulu |
| MV | 25 | South Miladhunmadulu |
| MV | 27 | North Huvadhu Atoll |
| MV | 28 | South Huvadhu Atoll |
| MV | 29 | Fuvammulah |
| MV | MLE | Male |
| ML | 7 | Gao |
| ML | 1 | Kayes |
| ML | 8 | Kidal |
| ML | 2 | Koulikoro |
| ML | 5 | Mopti |
| ML | 4 | Segou |
| ML | 3 | Sikasso |
| ML | 6 | Tombouctou |
| ML | 10 | Taoudénit |
| ML | 9 | Ménaka |
| ML | BKO | Bamako |
| MT | 01 | Attard |
| MT | 02 | Balzan |
| MT | 03 | Birgu |
| MT | 04 | Birkirkara |
| MT | 05 | Birzebbuga |
| MT | 06 | Bormla |
| MT | 07 | Dingli |
| MT | 08 | Fgura |
| MT | 09 | Floriana |
| MT | 10 | Fontana |
| MT | 11 | Gudja |
| MT | 12 | Gzira |
| MT | 19 | Iklin |
| MT | 20 | Isla |
| MT | 21 | Kalkara |
| MT | 22 | Kercem |
| MT | 23 | Kirkop |
| MT | 24 | Lija |
| MT | 25 | Luqa |
| MT | 26 | Marsa |
| MT | 27 | Marsaskala |
| MT | 28 | Marsaxlokk |
| MT | 29 | Mdina |
| MT | 31 | Mgarr |
| MT | 32 | Mosta |
| MT | 33 | Mqabba |
| MT | 34 | Msida |
| MT | 35 | Mtarfa |
| MT | 36 | Munxar |
| MT | 37 | Nadur |
| MT | 38 | Naxxar |
| MT | 39 | Paola |
| MT | 40 | Pembroke |
| MT | 41 | Pieta |
| MT | 42 | Qala |
| MT | 43 | Qormi |
| MT | 44 | Qrendi |
| MT | 47 | Safi |
| MT | 48 | San Giljan |
| MT | 49 | San Gwann |
| MT | 50 | San Lawrenz |
| MT | 52 | Sannat |
| MT | 53 | Santa Lucija |
| MT | 54 | Santa Venera |
| MT | 55 | Siggiewi |
| MT | 56 | Sliema |
| MT | 57 | Swieqi |
| MT | 59 | Tarxien |
| MT | 60 | Valletta |
| MT | 62 | Xewkija |
| MT | 64 | Zabbar |
| MT | 67 | Zejtun |
| MT | 68 | Zurrieq |
| MT | 13 | Għajnsielem |
| MT | 14 | Għarb |
| MT | 15 | Għargħur |
| MT | 16 | Għasri |
| MT | 17 | Għaxaq |
| MT | 18 | Ħamrun |
| MT | 30 | Mellieħa |
| MT | 45 | Rabat Għawdex |
| MT | 46 | Rabat Malta |
| MT | 51 | San Pawl il-Baħar |
| MT | 58 | Ta’ Xbiex |
| MT | 61 | Xagħra |
| MT | 63 | Xgħajra |
| MT | 65 | Żebbuġ Għawdex |
| MT | 66 | Żebbuġ Malta |
| MH | ALL | Ailinglaplap |
| MH | ALK | Ailuk |
| MH | ARN | Arno |
| MH | AUR | Aur |
| MH | EBO | Ebon |
| MH | JAB | Jabat |
| MH | JAL | Jaluit |
| MH | KIL | Kili |
| MH | KWA | Kwajalein |
| MH | LAE | Lae |
| MH | LIB | Lib |
| MH | LIK | Likiep |
| MH | MAJ | Majuro |
| MH | MAL | Maloelap |
| MH | MEJ | Mejit |
| MH | MIL | Mili |
| MH | NMK | Namorik |
| MH | NMU | Namu |
| MH | RON | Rongelap |
| MH | UJA | Ujae |
| MH | WTH | Wotho |
| MH | WTJ | Wotje |
| MH | ENI | Enewetak & Ujelang |
| MH | L | Ralik chain |
| MH | T | Ratak chain |
| MH | UTI | Utrōk |
| MR | 07 | Adrar |
| MR | 03 | Assaba |
| MR | 05 | Brakna |
| MR | 08 | Dakhlet Nouadhibou |
| MR | 04 | Gorgol |
| MR | 10 | Guidimaka |
| MR | 01 | Hodh Ech Chargui |
| MR | 02 | Hodh El Gharbi |
| MR | 12 | Inchiri |
| MR | 09 | Tagant |
| MR | 11 | Tiris Zemmour |
| MR | 06 | Trarza |
| MR | 13 | Nuwākshūţ al Gharbīyah |
| MR | 14 | Nuwākshūţ ash Shamālīyah |
| MR | 15 | Nuwākshūţ al Janūbīyah |
| MU | AG | Agalega Islands |
| MU | BL | Black River |
| MU | CC | Cargados Carajos Shoals (Saint Brandon Islands) |
| MU | FL | Flacq |
| MU | GP | Grand Port |
| MU | MO | Moka |
| MU | PA | Pamplemousses |
| MU | PW | Plaines Wilhems |
| MU | PL | Port Louis |
| MU | RR | Riviere du Rempart |
| MU | RO | Rodrigues |
| MU | SA | Savanne |
| MX | AGU | Aguascalientes |
| MX | BCS | Baja California Sur |
| MX | CAM | Campeche |
| MX | CHP | Chiapas |
| MX | CHH | Chihuahua |
| MX | COA | Coahuila de Zaragoza |
| MX | COL | Colima |
| MX | DUR | Durango |
| MX | GUA | Guanajuato |
| MX | GRO | Guerrero |
| MX | HID | Hidalgo |
| MX | JAL | Jalisco |
| MX | MEX | Mexico |
| MX | MIC | Michoacan de Ocampo |
| MX | MOR | Morelos |
| MX | NAY | Nayarit |
| MX | NLE | Nuevo Leon |
| MX | OAX | Oaxaca |
| MX | PUE | Puebla |
| MX | ROO | Quintana Roo |
| MX | SLP | San Luis Potosi |
| MX | SIN | Sinaloa |
| MX | SON | Sonora |
| MX | TAB | Tabasco |
| MX | TAM | Tamaulipas |
| MX | TLA | Tlaxcala |
| MX | YUC | Yucatan |
| MX | ZAC | Zacatecas |
| MX | BCN | Baja California |
| MX | CMX | Ciudad de México |
| MX | QUE | Querétaro |
| MX | VER | Veracruz de Ignacio de la Llave |
| FM | TRK | Chuuk |
| FM | KSA | Kosrae |
| FM | PNI | Pohnpei |
| FM | YAP | Yap |
| MD | BA | Balti |
| MD | CA | Cahul |
| MD | CU | Chisinau |
| MD | ED | Edinet |
| MD | GA | Gagauzia |
| MD | OR | Orhei |
| MD | SO | Soroca |
| MD | SN | Stînga Nistrului |
| MD | UN | Ungheni |
| MD | AN | Anenii Noi |
| MD | BD | Bender [Tighina] |
| MD | BR | Briceni |
| MD | BS | Basarabeasca |
| MD | CL | Călărași |
| MD | CM | Cimișlia |
| MD | CR | Criuleni |
| MD | CS | Căușeni |
| MD | CT | Cantemir |
| MD | DO | Dondușeni |
| MD | DR | Drochia |
| MD | DU | Dubăsari |
| MD | FA | Fălești |
| MD | FL | Florești |
| MD | GL | Glodeni |
| MD | HI | Hîncești |
| MD | IA | Ialoveni |
| MD | LE | Leova |
| MD | NI | Nisporeni |
| MD | OC | Ocnița |
| MD | RE | Rezina |
| MD | RI | Rîșcani |
| MD | SD | Șoldănești |
| MD | SI | Sîngerei |
| MD | ST | Strășeni |
| MD | SV | Ștefan Vodă |
| MD | TA | Taraclia |
| MD | TE | Telenești |
| MC | FO | Fontvieille |
| MC | CO | La Condamine |
| MC | MO | Monaco-Ville |
| MC | MC | Monte-Carlo |
| MC | CL | La Colle |
| MC | GA | La Gare |
| MC | JE | Jardin Exotique |
| MC | LA | Larvotto |
| MC | MA | Malbousquet |
| MC | MG | Moneghetti |
| MC | MU | Moulins |
| MC | PH | Port-Hercule |
| MC | SD | Sainte-Dévote |
| MC | SO | La Source |
| MC | SP | Spélugues |
| MC | SR | Saint-Roman |
| MC | VR | Vallon de la Rousse |
| MN | 073 | Arhangay |
| MN | 071 | Bayan-Olgiy |
| MN | 069 | Bayanhongor |
| MN | 067 | Bulgan |
| MN | 037 | Darhan uul |
| MN | 061 | Dornod |
| MN | 057 | Dzavhan |
| MN | 065 | Govi-Altay |
| MN | 064 | Govi-Sumber |
| MN | 039 | Hentiy |
| MN | 043 | Hovd |
| MN | 041 | Hovsgol |
| MN | 053 | Omnogovi |
| MN | 035 | Orhon |
| MN | 055 | Ovorhangay |
| MN | 049 | Selenge |
| MN | 051 | Suhbaatar |
| MN | 047 | Tov |
| MN | 1 | Ulanbaatar |
| MN | 046 | Uvs |
| MN | 059 | Dundgovĭ |
| MN | 063 | Dornogovĭ |
| ME | 01 | Andrijevica |
| ME | 02 | Bar |
| ME | 03 | Berane |
| ME | 04 | Bijelo Polje |
| ME | 05 | Budva |
| ME | 06 | Cetinje |
| ME | 07 | Danilovgrad |
| ME | 08 | Herceg-Novi |
| ME | 09 | Kolašin |
| ME | 10 | Kotor |
| ME | 11 | Mojkovac |
| ME | 12 | Nikšić |
| ME | 13 | Plav |
| ME | 14 | Pljevlja |
| ME | 15 | Plužine |
| ME | 16 | Podgorica |
| ME | 17 | Rožaje |
| ME | 18 | Šavnik |
| ME | 19 | Tivat |
| ME | 20 | Ulcinj |
| ME | 21 | Žabljak |
| ME | 22 | Gusinje |
| ME | 23 | Petnjica |
| ME | 24 | Tuzi |
| MA | AGD | Agadir |
| MA | HOC | Al Hoceima |
| MA | AZI | Azilal |
| MA | BEM | Beni Mellal |
| MA | BOM | Boulemane |
| MA | CAS | Casablanca |
| MA | JDI | El Jadida |
| MA | KES | El Kelaa des Sraghna |
| MA | ESM | Es Smara |
| MA | ESI | Essaouira |
| MA | FES | Fes |
| MA | FIG | Figuig |
| MA | GUE | Guelmim |
| MA | IFR | Ifrane |
| MA | KEN | Kenitra |
| MA | KHE | Khemisset |
| MA | KHN | Khenifra |
| MA | KHO | Khouribga |
| MA | LAR | Larache |
| MA | MAR | Marrakech |
| MA | MEK | Meknes |
| MA | NAD | Nador |
| MA | OUA | Ouarzazate |
| MA | OUJ | Oujda |
| MA | SAF | Safi |
| MA | SET | Settat |
| MA | SIK | Sidi Kacem |
| MA | TAO | Taounate |
| MA | TAR | Taroudannt |
| MA | TAT | Tata |
| MA | TAZ | Taza |
| MA | TET | Tetouan |
| MA | TIZ | Tiznit |
| MA | 01 | Tanger-Tétouan-Al Hoceïma |
| MA | 02 | L’Oriental |
| MA | 03 | Fès-Meknès |
| MA | 04 | Rabat-Salé-Kénitra |
| MA | 05 | Béni Mellal-Khénifra |
| MA | 06 | Casablanca-Settat |
| MA | 07 | Marrakech-Safi |
| MA | 08 | Drâa-Tafilalet |
| MA | 09 | Souss-Massa |
| MA | 10 | Guelmim-Oued Noun (EH-partial) |
| MA | 11 | Laâyoune-Sakia El Hamra (EH-partial) |
| MA | 12 | Dakhla-Oued Ed-Dahab (EH) |
| MA | AOU | Aousserd (EH) |
| MA | ASZ | Assa-Zag (EH-partial) |
| MA | BER | Berkane |
| MA | BES | Benslimane |
| MA | BOD | Boujdour (EH) |
| MA | BRR | Berrechid |
| MA | CHE | Chefchaouen |
| MA | CHI | Chichaoua |
| MA | CHT | Chtouka-Ait Baha |
| MA | DRI | Driouch |
| MA | ERR | Errachidia |
| MA | FAH | Fahs-Anjra |
| MA | FQH | Fquih Ben Salah |
| MA | GUF | Guercif |
| MA | HAJ | El Hajeb |
| MA | HAO | Al Haouz |
| MA | INE | Inezgane-Ait Melloul |
| MA | JRA | Jerada |
| MA | LAA | Laâyoune (EH) |
| MA | MDF | M’diq-Fnideq |
| MA | MED | Médiouna |
| MA | MID | Midelt |
| MA | MOH | Mohammadia |
| MA | MOU | Moulay Yacoub |
| MA | NOU | Nouaceur |
| MA | OUD | Oued Ed-Dahab (EH) |
| MA | OUZ | Ouezzane |
| MA | RAB | Rabat |
| MA | REH | Rehamna |
| MA | SAL | Salé |
| MA | SEF | Sefrou |
| MA | SIB | Sidi Bennour |
| MA | SIF | Sidi Ifni |
| MA | SIL | Sidi Slimane |
| MA | SKH | Skhirate-Témara |
| MA | TAF | Tarfaya (EH-partial) |
| MA | TAI | Taourirt |
| MA | TIN | Tinghir |
| MA | TNG | Tanger-Assilah |
| MA | TNT | Tan-Tan (EH-partial) |
| MA | YUS | Youssoufia |
| MA | ZAG | Zagora |
| MZ | P | Cabo Delgado |
| MZ | G | Gaza |
| MZ | I | Inhambane |
| MZ | B | Manica |
| MZ | MPM | Maputo |
| MZ | N | Nampula |
| MZ | A | Niassa |
| MZ | S | Sofala |
| MZ | T | Tete |
| MZ | Q | Zambezia |
| MM | 07 | Ayeyarwady |
| MM | 02 | Bago |
| MM | 03 | Magway |
| MM | 04 | Mandalay |
| MM | 01 | Sagaing |
| MM | 05 | Tanintharyi |
| MM | 06 | Yangon |
| MM | 11 | Kachin |
| MM | 12 | Kayah |
| MM | 13 | Kayin |
| MM | 14 | Chin |
| MM | 15 | Mon |
| MM | 16 | Rakhine |
| MM | 17 | Shan |
| MM | 18 | Nay Pyi Taw |
| NA | CA | Caprivi |
| NA | ER | Erongo |
| NA | HA | Hardap |
| NA | KH | Khomas |
| NA | KU | Kunene |
| NA | OW | Ohangwena |
| NA | OH | Omaheke |
| NA | OS | Omusati |
| NA | ON | Oshana |
| NA | OT | Oshikoto |
| NA | OD | Otjozondjupa |
| NA | KA | //Karas |
| NA | KE | Kavango East |
| NA | KW | Kavango West |
| NR | 01 | Aiwo |
| NR | 02 | Anabar |
| NR | 03 | Anetan |
| NR | 04 | Anibare |
| NR | 06 | Boe |
| NR | 07 | Buada |
| NR | 08 | Denigomodu |
| NR | 09 | Ewa |
| NR | 10 | Ijuw |
| NR | 11 | Meneng |
| NR | 12 | Nibok |
| NR | 13 | Uaboe |
| NR | 14 | Yaren |
| NR | 05 | Baitsi |
| NP | BA | Bagmati |
| NP | BH | Bheri |
| NP | DH | Dhawalagiri |
| NP | GA | Gandaki |
| NP | JA | Janakpur |
| NP | KA | Karnali |
| NP | KO | Kosi |
| NP | LU | Lumbini |
| NP | MA | Mahakali |
| NP | ME | Mechi |
| NP | NA | Narayani |
| NP | RA | Rapti |
| NP | SA | Sagarmatha |
| NP | SE | Seti |
| NP | 1 | Madhyamanchal |
| NP | 2 | Mid Western |
| NP | 3 | Western |
| NP | 4 | Purwanchal |
| NP | 5 | Sudur Pashchimanchal |
| NP | P1 | Province 1 |
| NP | P2 | Province 2 |
| NP | P5 | Province 5 |
| NP | P7 | Sudūr Pashchim |
| NL | DR | Drenthe |
| NL | FL | Flevoland |
| NL | FR | Friesland |
| NL | GE | Gelderland |
| NL | GR | Groningen |
| NL | LI | Limburg |
| NL | NB | Noord Brabant |
| NL | NH | Noord Holland |
| NL | OV | Overijssel |
| NL | UT | Utrecht |
| NL | ZE | Zeeland |
| NL | ZH | Zuid Holland |
| NL | AW | Aruba (see also separate country code entry under AW) |
| NL | BQ1 | Bonaire (see also separate country code entry under BQ) |
| NL | BQ2 | Saba (see also separate country code entry under BQ) |
| NL | BQ3 | Sint Eustatius (see also separate country code entry under BQ) |
| NL | CW | Curaçao (see also separate country code entry under CW) |
| NL | SX | Sint Maarten (see also separate country code entry under SX) |
| NZ | AUK | Auckland |
| NZ | BOP | Bay of Plenty |
| NZ | CAN | Canterbury |
| NZ | GIS | Gisborne |
| NZ | HKB | Hawke’s Bay |
| NZ | MWT | Manawatu-Wanganui |
| NZ | MBH | Marlborough |
| NZ | NSN | Nelson |
| NZ | NTL | Northland |
| NZ | OTA | Otago |
| NZ | STL | Southland |
| NZ | TKI | Taranaki |
| NZ | WKO | Waikato |
| NZ | WGN | Wellington |
| NZ | WTC | West Coast |
| NZ | CIT | Wharekauri |
| NZ | TAS | Tasman |
| NI | AN | Atlantico Norte |
| NI | AS | Atlantico Sur |
| NI | BO | Boaco |
| NI | CA | Carazo |
| NI | CI | Chinandega |
| NI | CO | Chontales |
| NI | ES | Esteli |
| NI | GR | Granada |
| NI | JI | Jinotega |
| NI | LE | Leon |
| NI | MD | Madriz |
| NI | MN | Managua |
| NI | MS | Masaya |
| NI | MT | Matagalpa |
| NI | NS | Nuevo Segovia |
| NI | SJ | Rio San Juan |
| NI | RI | Rivas |
| NE | 1 | Agadez |
| NE | 2 | Diffa |
| NE | 3 | Dosso |
| NE | 4 | Maradi |
| NE | 8 | Niamey |
| NE | 5 | Tahoua |
| NE | 6 | Tillaberi |
| NE | 7 | Zinder |
| NG | AB | Abia |
| NG | FC | Abuja Federal Capital Territory |
| NG | AD | Adamawa |
| NG | AK | Akwa Ibom |
| NG | AN | Anambra |
| NG | BA | Bauchi |
| NG | BY | Bayelsa |
| NG | BE | Benue |
| NG | BO | Borno |
| NG | CR | Cross River |
| NG | DE | Delta |
| NG | EB | Ebonyi |
| NG | ED | Edo |
| NG | EK | Ekiti |
| NG | EN | Enugu |
| NG | GO | Gombe |
| NG | IM | Imo |
| NG | JI | Jigawa |
| NG | KD | Kaduna |
| NG | KN | Kano |
| NG | KT | Katsina |
| NG | KE | Kebbi |
| NG | KO | Kogi |
| NG | KW | Kwara |
| NG | LA | Lagos |
| NG | NA | Nassarawa |
| NG | NI | Niger |
| NG | OG | Ogun |
| NG | ON | Ondo |
| NG | OS | Osun |
| NG | OY | Oyo |
| NG | PL | Plateau |
| NG | RI | Rivers |
| NG | SO | Sokoto |
| NG | TA | Taraba |
| NG | YO | Yobe |
| NG | ZA | Zamfara |
| NO | 18 | Nordland |
| NO | 03 | Oslo |
| NO | 11 | Rogaland |
| NO | 15 | Møre og Romsdal |
| NO | 21 | Svalbard (Arctic Region) (see also separate country code entry under SJ) |
| NO | 22 | Jan Mayen (Arctic Region) (see also separate country code entry under SJ) |
| NO | 30 | Viken |
| NO | 34 | Innlandet |
| NO | 38 | Vestfold og Telemark |
| NO | 42 | Agder |
| NO | 46 | Vestland |
| NO | 50 | Trøndelag |
| NO | 54 | Tromssan ja Finmarkun |
| OM | DA | Ad Dakhiliyah |
| OM | WU | Al Wusta |
| OM | ZA | Az Zahirah |
| OM | MA | Masqat |
| OM | MU | Musandam |
| OM | ZU | Zufar |
| OM | BJ | Janūb al Bāţinah |
| OM | BS | Shamāl al Bāţinah |
| OM | BU | Al Buraymī |
| OM | SJ | Janūb ash Sharqīyah |
| OM | SS | Shamāl ash Sharqīyah |
| PK | BA | Balochistan |
| PK | PB | Punjab |
| PK | SD | Sindh |
| PK | GB | Gilgit-Baltistan |
| PK | IS | Islamabad |
| PK | JK | Āzād Jammūñ o Kashmīr |
| PK | KP | Khyber Pakhtunkhwa |
| PW | 002 | Aimeliik |
| PW | 004 | Airai |
| PW | 010 | Angaur |
| PW | 050 | Hatohobei |
| PW | 100 | Kayangel |
| PW | 150 | Koror |
| PW | 212 | Melekeok |
| PW | 214 | Ngaraard |
| PW | 218 | Ngarchelong |
| PW | 222 | Ngardmau |
| PW | 224 | Ngatpang |
| PW | 226 | Ngchesar |
| PW | 227 | Ngeremlengui |
| PW | 228 | Ngiwal |
| PW | 350 | Peleliu |
| PW | 370 | Sonsorol |
| PS | BTH | Bethlehem |
| PS | DEB | Deir El Balah |
| PS | GZA | Ghazzah |
| PS | HBN | Hebron |
| PS | JEM | Jerusalem |
| PS | JEN | Jenin |
| PS | JRH | Jericho and Al Aghwar |
| PS | KYS | Khān Yūnis |
| PS | NBS | Nāblus |
| PS | NGZ | Shamāl Ghazzah |
| PS | QQA | Qalqīlyah |
| PS | RBH | Ramallah |
| PS | RFH | Rafaḩ |
| PS | SLT | Salfīt |
| PS | TBS | Ţūbās |
| PS | TKM | Ţūlkarm |
| PA | 1 | Bocas del Toro |
| PA | 4 | Chiriqui |
| PA | 2 | Cocle |
| PA | 3 | Colon |
| PA | 5 | Darien |
| PA | 6 | Herrera |
| PA | 7 | Los Santos |
| PA | 8 | Panama |
| PA | 9 | Veraguas |
| PA | 10 | Panamá Oeste |
| PA | EM | Emberá |
| PA | KY | Guna Yala |
| PA | NB | Ngöbe-Buglé |
| PG | NSB | Bougainville |
| PG | CPM | Central |
| PG | CPK | Chimbu |
| PG | EBR | East New Britain |
| PG | ESW | East Sepik |
| PG | EHG | Eastern Highlands |
| PG | EPW | Enga |
| PG | GPK | Gulf |
| PG | MPM | Madang |
| PG | MRL | Manus |
| PG | MBA | Milne Bay |
| PG | MPL | Morobe |
| PG | NIK | New Ireland |
| PG | NPP | Northern |
| PG | SHM | Southern Highlands |
| PG | WBK | West New Britain |
| PG | WPD | Western |
| PG | WHM | Western Highlands |
| PG | HLA | Hela |
| PG | JWK | Jiwaka |
| PG | NCD | National Capital District (Port Moresby) |
| PG | SAN | West Sepik |
| PY | 16 | Alto Paraguay |
| PY | 10 | Alto Parana |
| PY | 13 | Amambay |
| PY | ASU | Asuncion |
| PY | 19 | Boqueron |
| PY | 5 | Caaguazu |
| PY | 6 | Caazapa |
| PY | 14 | Canindeyu |
| PY | 11 | Central |
| PY | 1 | Concepcion |
| PY | 3 | Cordillera |
| PY | 4 | Guaira |
| PY | 7 | Itapua |
| PY | 8 | Misiones |
| PY | 12 | Neembucu |
| PY | 9 | Paraguari |
| PY | 15 | Presidente Hayes |
| PY | 2 | San Pedro |
| PE | AMA | Amazonas |
| PE | ANC | Ancash |
| PE | APU | Apurimac |
| PE | ARE | Arequipa |
| PE | AYA | Ayacucho |
| PE | CAJ | Cajamarca |
| PE | CUS | Cusco |
| PE | HUV | Huancavelica |
| PE | HUC | Huanuco |
| PE | ICA | Ica |
| PE | JUN | Junin |
| PE | LAL | La Libertad |
| PE | LAM | Lambayeque |
| PE | LIM | Lima |
| PE | LOR | Loreto |
| PE | MDD | Madre de Dios |
| PE | MOQ | Moquegua |
| PE | PAS | Pasco |
| PE | PIU | Piura |
| PE | PUN | Puno |
| PE | SAM | San Martin |
| PE | TAC | Tacna |
| PE | TUM | Tumbes |
| PE | UCA | Ucayali |
| PE | CAL | Qallaw |
| PE | LMA | Municipalidad Metropolitana de Lima |
| PH | ABR | Abra |
| PH | AGN | Agusan del Norte |
| PH | AGS | Agusan del Sur |
| PH | AKL | Aklan |
| PH | ALB | Albay |
| PH | ANT | Antique |
| PH | APA | Apayao |
| PH | AUR | Aurora |
| PH | BAS | Basilan |
| PH | BAN | Bataan |
| PH | BTN | Batanes |
| PH | BTG | Batangas |
| PH | BEN | Benguet |
| PH | BIL | Biliran |
| PH | BOH | Bohol |
| PH | BUK | Bukidnon |
| PH | BUL | Bulacan |
| PH | CAG | Cagayan |
| PH | CAN | Camarines Norte |
| PH | CAS | Camarines Sur |
| PH | CAM | Camiguin |
| PH | CAP | Capiz |
| PH | CAT | Catanduanes |
| PH | CAV | Cavite |
| PH | CEB | Cebu |
| PH | DAO | Davao Oriental |
| PH | DAV | Davao del Norte |
| PH | DAS | Davao del Sur |
| PH | EAS | Eastern Samar |
| PH | GUI | Guimaras |
| PH | IFU | Ifugao |
| PH | ILN | Ilocos Norte |
| PH | ILS | Ilocos Sur |
| PH | ILI | Iloilo |
| PH | ISA | Isabela |
| PH | KAL | Kalinga |
| PH | LUN | La Union |
| PH | LAG | Laguna |
| PH | LAN | Lanao del Norte |
| PH | LAS | Lanao del Sur |
| PH | LEY | Leyte |
| PH | MAG | Maguindanao |
| PH | MAD | Marinduque |
| PH | MAS | Masbate |
| PH | MDC | Mindoro Occidental |
| PH | MDR | Mindoro Oriental |
| PH | MSC | Misamis Occidental |
| PH | MSR | Misamis Oriental |
| PH | NEC | Negros Occidental |
| PH | NER | Negros Oriental |
| PH | NSA | Northern Samar |
| PH | NUE | Nueva Ecija |
| PH | NUV | Nueva Vizcaya |
| PH | PLW | Palawan |
| PH | PAM | Pampanga |
| PH | PAN | Pangasinan |
| PH | QUE | Quezon |
| PH | QUI | Quirino |
| PH | RIZ | Rizal |
| PH | ROM | Romblon |
| PH | WSA | Samar |
| PH | SAR | Sarangani |
| PH | SIG | Siquijor |
| PH | SOR | Sorsogon |
| PH | SCO | South Cotabato |
| PH | SLE | Southern Leyte |
| PH | SUK | Sultan Kudarat |
| PH | SLU | Sulu |
| PH | SUN | Surigao del Norte |
| PH | SUR | Surigao del Sur |
| PH | TAR | Tarlac |
| PH | TAW | Tawi-Tawi |
| PH | ZMB | Zambales |
| PH | ZSI | Zamboanga Sibugay |
| PH | ZAN | Zamboanga del Norte |
| PH | ZAS | Zamboanga del Sur |
| PH | 00 | Pambansang Punong Rehiyon |
| PH | 01 | Rehiyon ng Iloko |
| PH | 02 | Rehiyon ng Lambak ng Kagayan |
| PH | 03 | Rehiyon ng Gitnang Luson |
| PH | 05 | Rehiyon ng Bikol |
| PH | 06 | Western Visayas (Region VI) |
| PH | 07 | Rehiyon ng Gitnang Bisaya |
| PH | 08 | Rehiyon ng Silangang Bisaya |
| PH | 09 | Zamboanga Peninsula (Region IX) |
| PH | 10 | Rehiyon ng Hilagang Mindanaw |
| PH | 11 | Rehiyon ng Dabaw |
| PH | 12 | Soccsksargen (Region XII) |
| PH | 13 | Rehiyon ng Karaga |
| PH | 14 | Nagsasariling Rehiyon ng Muslim sa Mindanaw |
| PH | 15 | Rehiyon ng Administratibo ng Kordilyera |
| PH | 40 | Rehiyon ng Calabarzon |
| PH | 41 | Rehiyon ng Mimaropa |
| PH | COM | Davao de Oro |
| PH | DIN | Pulo ng Dinagat |
| PH | DVO | Kanlurang Dabaw |
| PH | MOU | Mountain Province |
| PH | NCO | Kotabato |
| PL | 02 | Dolnoslaskie |
| PL | 04 | Kujawsko-Pomorskie |
| PL | 06 | Lubelskie |
| PL | 08 | Lubuskie |
| PL | 14 | Mazowieckie |
| PL | 16 | Opolskie |
| PL | 18 | Podkarpackie |
| PL | 20 | Podlaskie |
| PL | 22 | Pomorskie |
| PL | 24 | Slaskie |
| PL | 26 | Swietokrzyskie |
| PL | 28 | Warminsko-Mazurskie |
| PL | 30 | Wielkopolskie |
| PL | 32 | Zachodniopomorskie |
| PL | 10 | Łódzkie |
| PL | 12 | Małopolskie |
| PT | 07 | Évora |
| PT | 01 | Aveiro |
| PT | 02 | Beja |
| PT | 03 | Braga |
| PT | 04 | Bragança |
| PT | 05 | Castelo Branco |
| PT | 06 | Coimbra |
| PT | 08 | Faro |
| PT | 09 | Guarda |
| PT | 10 | Leiria |
| PT | 11 | Lisboa |
| PT | 12 | Portalegre |
| PT | 13 | Porto |
| PT | 14 | Santarém |
| PT | 15 | Setúbal |
| PT | 16 | Viana do Castelo |
| PT | 17 | Vila Real |
| PT | 18 | Viseu |
| PT | 20 | Região Autónoma dos Açores |
| PT | 30 | Região Autónoma da Madeira |
| QA | DA | Ad Dawhah |
| QA | WA | Al Wakrah |
| QA | RA | Ar Rayyan |
| QA | MS | Madinat ash Shamal |
| QA | US | Umm Salal |
| QA | KH | Al Khawr wa adh Dhakhīrah |
| QA | SH | Ash Shīḩānīyah |
| QA | ZA | Az̧ Z̧a‘āyin |
| RO | AB | Alba |
| RO | AR | Arad |
| RO | AG | Arges |
| RO | BC | Bacau |
| RO | BH | Bihor |
| RO | BN | Bistrita-Nasaud |
| RO | BT | Botosani |
| RO | BR | Braila |
| RO | BV | Brasov |
| RO | B | Bucuresti |
| RO | BZ | Buzau |
| RO | CL | Calarasi |
| RO | CS | Caras-Severin |
| RO | CJ | Cluj |
| RO | CT | Constanta |
| RO | CV | Covasna |
| RO | DB | Dimbovita |
| RO | DJ | Dolj |
| RO | GL | Galati |
| RO | GR | Giurgiu |
| RO | GJ | Gorj |
| RO | HR | Harghita |
| RO | HD | Hunedoara |
| RO | IL | Ialomita |
| RO | IS | Iasi |
| RO | IF | Ilfov |
| RO | MM | Maramures |
| RO | MH | Mehedinti |
| RO | MS | Mures |
| RO | NT | Neamt |
| RO | OT | Olt |
| RO | PH | Prahova |
| RO | SJ | Salaj |
| RO | SM | Satu-Mare |
| RO | SB | Sibiu |
| RO | SV | Suceava |
| RO | TR | Teleorman |
| RO | TM | Timis |
| RO | TL | Tulcea |
| RO | VL | Valcea |
| RO | VS | Vaslui |
| RO | VN | Vrancea |
| RU | BA | Barnaul |
| RU | KL | Kaluga |
| RU | KO | Kostroma |
| RU | KR | Krasnodar |
| RU | KK | Kursk |
| RU | MO | Moscow |
| RU | SA | Samara |
| RU | TA | Tambov |
| RU | TY | Tyumen |
| RU | AD | “Adygeya, Respublika” |
| RU | AL | “Altay, Respublika” |
| RU | ALT | Altayskiy kray |
| RU | AMU | Amurskaya oblast’ |
| RU | ARK | Arkhangel’skaya oblast’ |
| RU | AST | Astrakhanskaya oblast’ |
| RU | BEL | Belgorodskaya oblast’ |
| RU | BRY | Bryanskaya oblast’ |
| RU | BU | “Buryatiya, Respublika” |
| RU | CE | Chechenskaya Respublika |
| RU | CHE | Chelyabinskaya oblast’ |
| RU | CHU | Čukotskij avtonomnyj okrug |
| RU | CU | Čuvašskaja Respublika |
| RU | DA | “Dagestan, Respublika” |
| RU | IN | “Ingushetiya, Respublika” |
| RU | IRK | Irkutskaya oblast’ |
| RU | IVA | Ivanovskaya oblast’ |
| RU | KAM | Kamchatskiy kray |
| RU | KB | Kabardino-Balkarskaya Respublika |
| RU | KC | Karachayevo-Cherkesskaya Respublika |
| RU | KDA | Krasnodarskiy kray |
| RU | KEM | Kemerovskaya oblast’ |
| RU | KGD | Kaliningradskaya oblast’ |
| RU | KGN | Kurganskaya oblast’ |
| RU | KHA | Khabarovskiy kray |
| RU | KHM | Khanty-Mansiyskiy avtonomnyy okrug |
| RU | KIR | Kirovskaya oblast’ |
| RU | KLU | Kalužskaja oblast’ |
| RU | KOS | Kostromskaya oblast’ |
| RU | KRS | Kurskaya oblast’ |
| RU | KYA | Krasnoyarskiy kray |
| RU | LEN | Leningradskaya oblast’ |
| RU | LIP | Lipetskaya oblast’ |
| RU | MAG | Magadanskaya oblast’ |
| RU | ME | “Mariy El, Respublika” |
| RU | MOS | Moskovskaya oblast’ |
| RU | MOW | Moskva |
| RU | MUR | Murmanskaya oblast’ |
| RU | NEN | Nenetskiy avtonomnyy okrug |
| RU | NGR | Novgorodskaya oblast’ |
| RU | NIZ | Nizhegorodskaya oblast’ |
| RU | NVS | Novosibirskaya oblast’ |
| RU | OMS | Omskaya oblast’ |
| RU | ORE | Orenburgskaya oblast’ |
| RU | ORL | Orlovskaya oblast’ |
| RU | PER | Permskiy kray |
| RU | PNZ | Penzenskaya oblast’ |
| RU | PRI | Primorskiy kray |
| RU | PSK | Pskovskaya oblast’ |
| RU | ROS | Rostovskaya oblast’ |
| RU | RYA | Ryazanskaya oblast’ |
| RU | SAK | Sakhalinskaya oblast’ |
| RU | SAM | Samarskaya oblast’ |
| RU | SAR | Saratovskaya oblast’ |
| RU | SE | “Severnaya Osetiya, Respublika” |
| RU | SMO | Smolenskaya oblast’ |
| RU | SPE | Sankt-Peterburg |
| RU | STA | Stavropol’skiy kray |
| RU | SVE | Sverdlovskaya oblast’ |
| RU | TAM | Tambovskaya oblast’ |
| RU | TOM | Tomskaya oblast’ |
| RU | TUL | Tul’skaya oblast’ |
| RU | TVE | Tverskaya oblast’ |
| RU | TYU | Tyumenskaya oblast’ |
| RU | UD | Udmurtskaya Respublika |
| RU | ULY | Ul’yanovskaya oblast’ |
| RU | VGG | Volgogradskaya oblast’ |
| RU | VLA | Vladimirskaya oblast’ |
| RU | VLG | Vologodskaya oblast’ |
| RU | VOR | Voronežskaja oblast’ |
| RU | YAN | Yamalo-Nenetskiy avtonomnyy okrug |
| RU | YAR | Yaroslavskaya oblast’ |
| RU | YEV | Yevreyskaya avtonomnaya oblast’ |
| RU | ZAB | Zabaykal’skiy kray |
| RW | 01 | Ville de Kigali |
| RW | 02 | Iburasirazuba |
| RW | 03 | Northern |
| RW | 04 | Western |
| RW | 05 | Sud |
| SH | AC | Ascension |
| SH | HL | Saint Helena |
| SH | TA | Tristan da Cunha |
| KN | 01 | Christ Church Nichola Town |
| KN | 02 | Saint Anne Sandy Point |
| KN | 03 | Saint George Basseterre |
| KN | 04 | Saint George Gingerland |
| KN | 05 | Saint James Windward |
| KN | 07 | Saint John Figtree |
| KN | 08 | Saint Mary Cayon |
| KN | 10 | Saint Paul Charlestown |
| KN | 11 | Saint Peter Basseterre |
| KN | 12 | Saint Thomas Lowland |
| KN | 13 | Saint Thomas Middle Island |
| KN | 15 | Trinity Palmetto Point |
| KN | 06 | Saint John Capisterre |
| KN | 09 | Saint Paul Capisterre |
| KN | K | Saint Kitts |
| KN | N | Nevis |
| LC | 02 | Castries |
| LC | 03 | Choiseul |
| LC | 05 | Dennery |
| LC | 07 | Laborie |
| LC | 08 | Micoud |
| LC | 10 | Soufriere |
| LC | 01 | Anse la Raye |
| LC | 06 | Gros Islet |
| LC | 11 | Vieux Fort |
| LC | 12 | Canaries |
| VC | 01 | Charlotte |
| VC | 06 | Grenadines |
| VC | 02 | Saint Andrew |
| VC | 03 | Saint David |
| VC | 04 | Saint George |
| VC | 05 | Saint Patrick |
| WS | AA | A’ana |
| WS | AL | Aiga-i-le-Tai |
| WS | AT | Atua |
| WS | FA | Fa’asaleleaga |
| WS | GE | Gaga’emauga |
| WS | GI | Gagaifomauga |
| WS | PA | Palauli |
| WS | SA | Satupa’itea |
| WS | TU | Tuamasaga |
| WS | VF | Va’a-o-Fonoti |
| WS | VS | Vaisigano |
| SM | 01 | Acquaviva |
| SM | 06 | Borgo Maggiore |
| SM | 02 | Chiesanuova |
| SM | 07 | Citta di San Marino |
| SM | 03 | Domagnano |
| SM | 04 | Faetano |
| SM | 05 | Fiorentino |
| SM | 08 | Montegiardino |
| SM | 09 | Serravalle |
| ST | P | Principe |
| ST | 01 | Água Grande |
| ST | 02 | Cantagalo |
| ST | 03 | Caué |
| ST | 04 | Lembá |
| ST | 05 | Lobata |
| ST | 06 | Mé-Zóchi |
| SA | 14 | ‘Asir |
| SA | 11 | Al Bahah |
| SA | 08 | Al Hudud ash Shamaliyah |
| SA | 12 | Al Jawf |
| SA | 05 | Al Qasim |
| SA | 01 | Ar Riyad |
| SA | 06 | Ha’il |
| SA | 10 | Najran |
| SA | 07 | Tabuk |
| SA | 02 | Makkah al Mukarramah |
| SA | 03 | Al Madīnah al Munawwarah |
| SA | 04 | Ash Sharqīyah |
| SA | 09 | Jāzān |
| SN | DK | Dakar |
| SN | DB | Diourbel |
| SN | FK | Fatick |
| SN | KA | Kaolack |
| SN | KD | Kolda |
| SN | LG | Louga |
| SN | MT | Matam |
| SN | SL | Saint-Louis |
| SN | TC | Tambacounda |
| SN | TH | Thies |
| SN | ZG | Ziguinchor |
| SN | KE | Kédougou |
| SN | SE | Sédhiou |
| RS | 00 | Beograd |
| RS | 01 | Severnobački okrug |
| RS | 02 | Srednjebanatski okrug |
| RS | 03 | Severnobanatski okrug |
| RS | 04 | Južnobanatski okrug |
| RS | 05 | Zapadnobački okrug |
| RS | 06 | Južnobački okrug |
| RS | 07 | Sremski okrug |
| RS | 08 | Mačvanski okrug |
| RS | 09 | Kolubarski okrug |
| RS | 10 | Podunavski okrug |
| RS | 11 | Braničevski okrug |
| RS | 12 | Šumadijski okrug |
| RS | 13 | Pomoravski okrug |
| RS | 14 | Borski okrug |
| RS | 15 | Zaječarski okrug |
| RS | 16 | Zlatiborski okrug |
| RS | 17 | Moravički okrug |
| RS | 18 | Raški okrug |
| RS | 19 | Rasinski okrug |
| RS | 20 | Nišavski okrug |
| RS | 21 | Toplički okrug |
| RS | 22 | Pirotski okrug |
| RS | 23 | Jablanički okrug |
| RS | 24 | Pčinjski okrug |
| RS | 25 | Kosovski okrug |
| RS | 26 | Pećki okrug |
| RS | 27 | Prizrenski okrug |
| RS | 28 | Kosovsko-Mitrovački okrug |
| RS | 29 | Kosovsko-Pomoravski okrug |
| RS | KM | Kosovo-Metohija |
| RS | VO | Vojvodina |
| SC | 02 | Anse Boileau |
| SC | 03 | Anse Etoile |
| SC | 05 | Anse Royale |
| SC | 01 | Anse aux Pins |
| SC | 06 | Baie Lazare |
| SC | 07 | Baie Sainte Anne |
| SC | 08 | Beau Vallon |
| SC | 09 | Bel Air |
| SC | 10 | Bel Ombre |
| SC | 11 | Cascade |
| SC | 12 | Glacis |
| SC | 15 | La Digue |
| SC | 16 | La Riviere Anglaise |
| SC | 17 | Mont Buxton |
| SC | 18 | Mont Fleuri |
| SC | 19 | Plaisance |
| SC | 20 | Pointe La Rue |
| SC | 21 | Port Glaud |
| SC | 22 | Saint Louis |
| SC | 23 | Takamaka |
| SC | 04 | O Kap |
| SC | 13 | Grand’Anse Mahé |
| SC | 14 | Grand’Anse Praslin |
| SC | 24 | Les Mamelles |
| SC | 25 | Ros Kaiman |
| SC | 26 | Ile Perseverance I |
| SC | 27 | Ile Perseverance II |
| SL | E | Eastern |
| SL | N | Northern |
| SL | S | Southern |
| SL | W | Western |
| SL | NW | North Western |
| SG | 01 | Central Singapore |
| SG | 02 | North East |
| SG | 03 | North West |
| SG | 04 | South East |
| SG | 05 | South West |
| SK | NI | Nitriansky |
| SK | TC | Trenčiansky |
| SK | ZI | Žilinský |
| SK | BC | Banskobystrický kraj |
| SK | BL | Bratislavský kraj |
| SK | KI | Košický kraj |
| SK | PV | Prešovský kraj |
| SK | TA | Trnavský kraj |
| SI | 001 | Ajdovščina |
| SI | 002 | Beltinci |
| SI | 003 | Bled |
| SI | 004 | Bohinj |
| SI | 005 | Borovnica |
| SI | 006 | Bovec |
| SI | 007 | Brda |
| SI | 008 | Brezovica |
| SI | 009 | Brežice |
| SI | 010 | Tišina |
| SI | 011 | Celje |
| SI | 012 | Cerklje na Gorenjskem |
| SI | 013 | Cerknica |
| SI | 014 | Cerkno |
| SI | 015 | Črenšovci |
| SI | 016 | Črna na Koroškem |
| SI | 017 | Črnomelj |
| SI | 018 | Destrnik |
| SI | 019 | Divača |
| SI | 020 | Dobrepolje |
| SI | 021 | Dobrova-Polhov Gradec |
| SI | 022 | Dol pri Ljubljani |
| SI | 023 | Domžale |
| SI | 024 | Dornava |
| SI | 025 | Dravograd |
| SI | 026 | Duplek |
| SI | 027 | Gorenja vas-Poljane |
| SI | 028 | Gorišnica |
| SI | 029 | Gornja Radgona |
| SI | 030 | Gornji Grad |
| SI | 031 | Gornji Petrovci |
| SI | 032 | Grosuplje |
| SI | 033 | Šalovci |
| SI | 034 | Hrastnik |
| SI | 035 | Hrpelje-Kozina |
| SI | 036 | Idrija |
| SI | 037 | Ig |
| SI | 038 | Ilirska Bistrica |
| SI | 039 | Ivančna Gorica |
| SI | 040 | Izola |
| SI | 041 | Jesenice |
| SI | 042 | Juršinci |
| SI | 043 | Kamnik |
| SI | 044 | Kanal |
| SI | 045 | Kidričevo |
| SI | 046 | Kobarid |
| SI | 047 | Kobilje |
| SI | 048 | Kočevje |
| SI | 049 | Komen |
| SI | 050 | Koper |
| SI | 051 | Kozje |
| SI | 052 | Kranj |
| SI | 053 | Kranjska Gora |
| SI | 054 | Krško |
| SI | 055 | Kungota |
| SI | 056 | Kuzma |
| SI | 057 | Laško |
| SI | 058 | Lenart |
| SI | 059 | Lendava |
| SI | 060 | Litija |
| SI | 061 | Ljubljana |
| SI | 062 | Ljubno |
| SI | 063 | Ljutomer |
| SI | 064 | Logatec |
| SI | 065 | Loška dolina |
| SI | 066 | Loški Potok |
| SI | 067 | Luče |
| SI | 068 | Lukovica |
| SI | 069 | Majšperk |
| SI | 070 | Maribor |
| SI | 071 | Medvode |
| SI | 072 | Mengeš |
| SI | 073 | Metlika |
| SI | 074 | Mežica |
| SI | 075 | Miren-Kostanjevica |
| SI | 076 | Mislinja |
| SI | 077 | Moravče |
| SI | 078 | Moravske Toplice |
| SI | 079 | Mozirje |
| SI | 080 | Murska Sobota |
| SI | 081 | Muta |
| SI | 082 | Naklo |
| SI | 083 | Nazarje |
| SI | 084 | Nova Gorica |
| SI | 085 | Novo Mesto |
| SI | 086 | Odranci |
| SI | 087 | Ormož |
| SI | 088 | Osilnica |
| SI | 089 | Pesnica |
| SI | 090 | Piran |
| SI | 091 | Pivka |
| SI | 092 | Podčetrtek |
| SI | 093 | Podvelka |
| SI | 094 | Postojna |
| SI | 095 | Preddvor |
| SI | 096 | Ptuj |
| SI | 097 | Puconci |
| SI | 098 | Rače-Fram |
| SI | 099 | Radeče |
| SI | 100 | Radenci |
| SI | 101 | Radlje ob Dravi |
| SI | 102 | Radovljica |
| SI | 103 | Ravne na Koroškem |
| SI | 104 | Ribnica |
| SI | 105 | Rogašovci |
| SI | 106 | Rogaška Slatina |
| SI | 107 | Rogatec |
| SI | 108 | Ruše |
| SI | 109 | Semič |
| SI | 110 | Sevnica |
| SI | 111 | Sežana |
| SI | 112 | Slovenj Gradec |
| SI | 113 | Slovenska Bistrica |
| SI | 114 | Slovenske Konjice |
| SI | 115 | Starše |
| SI | 116 | Sveti Jurij ob Ščavnici |
| SI | 117 | Šenčur |
| SI | 118 | Šentilj |
| SI | 119 | Šentjernej |
| SI | 120 | Šentjur |
| SI | 121 | Škocjan |
| SI | 122 | Škofja Loka |
| SI | 123 | Škofljica |
| SI | 124 | Šmarje pri Jelšah |
| SI | 125 | Šmartno ob Paki |
| SI | 126 | Šoštanj |
| SI | 127 | Štore |
| SI | 128 | Tolmin |
| SI | 129 | Trbovlje |
| SI | 130 | Trebnje |
| SI | 131 | Tržič |
| SI | 132 | Turnišče |
| SI | 133 | Velenje |
| SI | 134 | Velike Lašče |
| SI | 135 | Videm |
| SI | 136 | Vipava |
| SI | 137 | Vitanje |
| SI | 138 | Vodice |
| SI | 139 | Vojnik |
| SI | 140 | Vrhnika |
| SI | 141 | Vuzenica |
| SI | 142 | Zagorje ob Savi |
| SI | 143 | Zavrč |
| SI | 144 | Zreče |
| SI | 146 | Železniki |
| SI | 147 | Žiri |
| SI | 148 | Benedikt |
| SI | 149 | Bistrica ob Sotli |
| SI | 150 | Bloke |
| SI | 151 | Braslovče |
| SI | 152 | Cankova |
| SI | 153 | Cerkvenjak |
| SI | 154 | Dobje |
| SI | 155 | Dobrna |
| SI | 156 | Dobrovnik |
| SI | 157 | Dolenjske Toplice |
| SI | 158 | Grad |
| SI | 159 | Hajdina |
| SI | 160 | Hoče-Slivnica |
| SI | 161 | Hodoš |
| SI | 162 | Horjul |
| SI | 163 | Jezersko |
| SI | 164 | Komenda |
| SI | 165 | Kostel |
| SI | 166 | Križevci |
| SI | 167 | Lovrenc na Pohorju |
| SI | 168 | Markovci |
| SI | 169 | Miklavž na Dravskem polju |
| SI | 170 | Mirna Peč |
| SI | 171 | Oplotnica |
| SI | 172 | Podlehnik |
| SI | 173 | Polzela |
| SI | 174 | Prebold |
| SI | 175 | Prevalje |
| SI | 176 | Razkrižje |
| SI | 177 | Ribnica na Pohorju |
| SI | 178 | Selnica ob Dravi |
| SI | 179 | Sodražica |
| SI | 180 | Solčava |
| SI | 181 | Sveta Ana |
| SI | 182 | Sveti Andraž v Slovenskih goricah |
| SI | 183 | Šempeter-Vrtojba |
| SI | 184 | Tabor |
| SI | 185 | Trnovska Vas |
| SI | 186 | Trzin |
| SI | 187 | Velika Polana |
| SI | 188 | Veržej |
| SI | 189 | Vransko |
| SI | 190 | Žalec |
| SI | 191 | Žetale |
| SI | 192 | Žirovnica |
| SI | 193 | Žužemberk |
| SI | 194 | Šmartno pri Litiji |
| SI | 195 | Apače |
| SI | 196 | Cirkulane |
| SI | 197 | Kosanjevica na Krki |
| SI | 198 | Makole |
| SI | 199 | Mokronog-Trebelno |
| SI | 200 | Poljčane |
| SI | 201 | Renče-Vogrsko |
| SI | 202 | Središče ob Dravi |
| SI | 203 | Straža |
| SI | 204 | Sveta Trojica v Slovenskih goricah |
| SI | 205 | Sveti Tomaž |
| SI | 206 | Šmarješke Toplice |
| SI | 207 | Gorje |
| SI | 208 | Log-Dragomer |
| SI | 209 | Rečica ob Savinji |
| SI | 210 | Sveti Jurij v Slovenskih goricah |
| SI | 211 | Šentrupert |
| SI | 212 | Mirna |
| SI | 213 | Ankaran |
| SB | CE | Central |
| SB | CH | Choiseul |
| SB | GU | Guadalcanal |
| SB | IS | Isabel |
| SB | MK | Makira |
| SB | ML | Malaita |
| SB | RB | Rennell and Bellona |
| SB | TE | Temotu |
| SB | WE | Western |
| SB | CT | Capital Territory (Honiara) |
| SO | AW | Awdal |
| SO | BK | Bakool |
| SO | BN | Banaadir |
| SO | BR | Bari |
| SO | BY | Bay |
| SO | GA | Galguduud |
| SO | GE | Gedo |
| SO | HI | Hiiraan |
| SO | JD | Jubbada Dhexe |
| SO | JH | Jubbada Hoose |
| SO | MU | Mudug |
| SO | NU | Nugaal |
| SO | SA | Sanaag |
| SO | SD | Shabeellaha Dhexe |
| SO | SH | Shabeellaha Hoose |
| SO | SO | Sool |
| SO | TO | Togdheer |
| SO | WO | Woqooyi Galbeed |
| ZA | EC | Eastern Cape |
| ZA | FS | Free State |
| ZA | GP | Gauteng |
| ZA | KZN | Kwa Zulu-Natal |
| ZA | LP | Limpopo |
| ZA | MP | Mpumalanga |
| ZA | NW | North West |
| ZA | NC | Northern Cape |
| ZA | WC | Western Cape |
| ES | AL | Álava |
| ES | AV | Ávila |
| ES | AB | Albacete |
| ES | A | Alicante |
| ES | AL | Almeria |
| ES | AS | Asturias |
| ES | BA | Badajoz |
| ES | IB | Baleares |
| ES | BA | Barcelona |
| ES | BU | Burgos |
| ES | CC | Cáceres |
| ES | CA | Cádiz |
| ES | CO | Córdoba |
| ES | CB | Cantabria |
| ES | CL | Castellón |
| ES | CE | Ceuta |
| ES | CR | Ciudad Real |
| ES | CU | Cuenca |
| ES | GI | Girona |
| ES | GR | Granada |
| ES | GU | Guadalajara |
| ES | H | Huelva |
| ES | HU | Huesca |
| ES | J | Jaén |
| ES | CA | La Coruña |
| ES | RI | La Rioja |
| ES | GC | Las Palmas |
| ES | LE | Leon |
| ES | MD | Madrid |
| ES | MA | Malaga |
| ES | ML | Melilla |
| ES | MU | Murcia |
| ES | NA | Navarra |
| ES | P | Palencia |
| ES | PO | Pontevedra |
| ES | SA | Salamanca |
| ES | TF | Santa Cruz de Tenerife |
| ES | SG | Segovia |
| ES | SE | Sevilla |
| ES | SO | Soria |
| ES | TE | Teruel |
| ES | TO | Toledo |
| ES | VC | Valencia |
| ES | VA | Valladolid |
| ES | ZA | Zamora |
| ES | Z | Zaragoza |
| ES | AN | Andalucía |
| ES | AR | Aragón |
| ES | B | Barcelona [Barcelona] |
| ES | BI | Bizkaia |
| ES | C | A Coruña [La Coruña] |
| ES | CM | Castilla-La Mancha |
| ES | CN | Canarias |
| ES | EX | Extremadura |
| ES | GA | Galicia [Galicia] |
| ES | L | Lleida [Lérida] |
| ES | LU | Lugo [Lugo] |
| ES | MC | “Murcia, Región de” |
| ES | NC | “Navarra, Comunidad Foral de” |
| ES | OR | Ourense [Orense] |
| ES | PV | País Vasco |
| ES | SS | Gipuzkoa |
| ES | T | Tarragona [Tarragona] |
| LK | 1 | Western Province |
| LK | 11 | Kŏl̮umpu |
| LK | 12 | Kampahā |
| LK | 13 | Kaḷuttuṟai |
| LK | 2 | Mattiya mākāṇam |
| LK | 21 | Mahanuvara |
| LK | 22 | Māttaḷai |
| LK | 23 | Nuwara Eliya |
| LK | 3 | Tĕṉ mākāṇam |
| LK | 31 | Kāli |
| LK | 32 | Māttaṛai |
| LK | 33 | Hambantota |
| LK | 4 | Vaṭakku mākāṇam |
| LK | 41 | Yāpanaya |
| LK | 42 | Kilinochchi |
| LK | 43 | Mannārama |
| LK | 44 | Vavuniyāva |
| LK | 45 | Mullaittivu |
| LK | 5 | Næ̆gĕnahira paḷāta |
| LK | 51 | Maṭṭakkaḷappu |
| LK | 52 | Ampāṟai |
| LK | 53 | Trincomalee |
| LK | 6 | Vayamba paḷāta |
| LK | 61 | Kuruṇægala |
| LK | 62 | Puttalama |
| LK | 7 | Vaṭamattiya mākāṇam |
| LK | 71 | Anurātapuram |
| LK | 72 | Polonnaruwa |
| LK | 8 | Uva Province |
| LK | 81 | Patuḷai |
| LK | 82 | Mŏṉarākalai |
| LK | 9 | Sabaragamuwa Province |
| LK | 91 | Ratnapura |
| LK | 92 | Kægalla |
| SD | RS | Al Bahr al Ahmar |
| SD | GZ | Al Jazirah |
| SD | KH | Al Khartum |
| SD | GD | Al Qadarif |
| SD | NW | An Nil al Abyad |
| SD | NB | An Nil al Azraq |
| SD | NO | Ash Shamaliyah |
| SD | DW | Gharb Darfur |
| SD | GK | Gharb Kurdufan |
| SD | DS | Janub Darfur |
| SD | KS | Janub Kurdufan |
| SD | KA | Kassala |
| SD | NR | Nahr an Nil |
| SD | DN | Shamal Darfur |
| SD | KN | Shamal Kurdufan |
| SD | SI | Sinnar |
| SD | DC | Wasaţ Dārfūr |
| SD | DE | Sharq Dārfūr |
| SR | BR | Brokopondo |
| SR | CM | Commewijne |
| SR | CR | Coronie |
| SR | MA | Marowijne |
| SR | NI | Nickerie |
| SR | PR | Para |
| SR | PM | Paramaribo |
| SR | SA | Saramacca |
| SR | SI | Sipaliwini |
| SR | WA | Wanica |
| SZ | HH | Hhohho |
| SZ | LU | Lubombo |
| SZ | MA | Manzini |
| SZ | SH | Shiselweni |
| SE | T | Örebro |
| SE | E | Östergötland |
| SE | K | Blekinge |
| SE | W | Dalama |
| SE | X | Gävleborg |
| SE | I | Gotland |
| SE | N | Halland |
| SE | Z | Jämtland |
| SE | F | Jönköping |
| SE | H | Kalmar |
| SE | G | Kronoberg |
| SE | BD | Norrbotten |
| SE | D | Södermanland |
| SE | M | Skåne |
| SE | AB | Stockholm |
| SE | C | Uppsala |
| SE | S | Värmland |
| SE | AC | Västerbotten |
| SE | Y | Västernorrland |
| SE | U | Västmanland |
| SE | O | Västra Götaland |
| CH | AG | Aargau |
| CH | AR | Appenzell Ausserrhoden |
| CH | AI | Appenzell Innerrhoden |
| CH | BL | Basel-Landschaft |
| CH | BS | Basel-Stadt |
| CH | BE | Bern |
| CH | FR | Fribourg |
| CH | GE | Genève |
| CH | GL | Glarus |
| CH | GR | Graubünden |
| CH | JU | Jura |
| CH | LU | Luzern |
| CH | NE | Neuchâtel |
| CH | NW | Nidwald |
| CH | OW | Obwald |
| CH | SH | Schaffhausen |
| CH | SZ | Schwyz |
| CH | SO | Solothurn |
| CH | SG | St. Gallen |
| CH | TG | Thurgau |
| CH | TI | Ticino |
| CH | UR | Uri |
| CH | VS | Valais |
| CH | VD | Vaud |
| CH | ZH | Zürich |
| CH | ZG | Zug |
| SY | HA | Al Hasakah |
| SY | LA | Al Ladhiqiyah |
| SY | QU | Al Qunaytirah |
| SY | RA | Ar Raqqah |
| SY | SU | As Suwayda |
| SY | DY | Dayr az Zawr |
| SY | DI | Dimashq |
| SY | HL | Halab |
| SY | HM | Hamah |
| SY | HI | Hims |
| SY | ID | Idlib |
| SY | RD | Rif Dimashq |
| SY | TA | Tartus |
| SY | DR | Dar’ā |
| TW | CHA | Changhua |
| TW | CYI | Chiayi |
| TW | CYQ | Chiayi |
| TW | HSQ | Hsinchu |
| TW | HSZ | Hsinchu |
| TW | HUA | Hualien |
| TW | ILA | Yilan |
| TW | KEE | Keelung |
| TW | KHH | Kaohsiung |
| TW | KIN | Kinmen |
| TW | LIE | Lienchiang |
| TW | MIA | Miaoli |
| TW | NAN | Nantou |
| TW | NWT | New Taipei |
| TW | PEN | Penghu |
| TW | PIF | Pingtung |
| TW | TAO | Taoyuan |
| TW | TNN | Tainan |
| TW | TPE | Taipei |
| TW | TTT | Taitung |
| TW | TXG | Taichung |
| TW | YUN | Yunlin |
| TJ | GB | Gorno-Badakhstan |
| TJ | KT | Khatlon |
| TJ | SU | Sughd |
| TJ | DU | Dushanbe |
| TJ | RA | nohiyahoi tobei jumhurí |
| TZ | 01 | Arusha |
| TZ | 02 | Dar es Salaam |
| TZ | 03 | Dodoma |
| TZ | 04 | Iringa |
| TZ | 05 | Kagera |
| TZ | 08 | Kigoma |
| TZ | 09 | Kilimanjaro |
| TZ | 12 | Lindi |
| TZ | 26 | Manyara |
| TZ | 13 | Mara |
| TZ | 14 | Mbeya |
| TZ | 16 | Morogoro |
| TZ | 17 | Mtwara |
| TZ | 18 | Mwanza |
| TZ | 06 | Pemba North |
| TZ | 10 | Pemba South |
| TZ | 19 | Pwani |
| TZ | 20 | Rukwa |
| TZ | 21 | Ruvuma |
| TZ | 22 | Shinyanga |
| TZ | 23 | Singida |
| TZ | 24 | Tabora |
| TZ | 25 | Tanga |
| TZ | 07 | Zanzibar North |
| TZ | 11 | Zanzibar South |
| TZ | 15 | Zanzibar West |
| TZ | 27 | Geita |
| TZ | 28 | Katavi |
| TZ | 29 | Njombe |
| TZ | 30 | Simiyu |
| TZ | 31 | Songwe |
| TH | 37 | Amnat Charoen |
| TH | 15 | Ang Thong |
| TH | 14 | Ayutthaya |
| TH | 10 | Bangkok |
| TH | 31 | Buriram |
| TH | 24 | Chachoengsao |
| TH | 18 | Chai Nat |
| TH | 36 | Chaiyaphum |
| TH | 22 | Chanthaburi |
| TH | 50 | Chiang Mai |
| TH | 57 | Chiang Rai |
| TH | 20 | Chon Buri |
| TH | 86 | Chumphon |
| TH | 46 | Kalasin |
| TH | 62 | Kamphaeng Phet |
| TH | 71 | Kanchanaburi |
| TH | 40 | Khon Kaen |
| TH | 81 | Krabi |
| TH | 52 | Lampang |
| TH | 51 | Lamphun |
| TH | 42 | Loei |
| TH | 16 | Lop Buri |
| TH | 58 | Mae Hong Son |
| TH | 44 | Maha Sarakham |
| TH | 49 | Mukdahan |
| TH | 26 | Nakhon Nayok |
| TH | 73 | Nakhon Pathom |
| TH | 48 | Nakhon Phanom |
| TH | 30 | Nakhon Ratchasima |
| TH | 60 | Nakhon Sawan |
| TH | 80 | Nakhon Si Thammarat |
| TH | 55 | Nan |
| TH | 96 | Narathiwat |
| TH | 39 | Nong Bua Lamphu |
| TH | 43 | Nong Khai |
| TH | 12 | Nonthaburi |
| TH | 13 | Pathum Thani |
| TH | 94 | Pattani |
| TH | 82 | Phangnga |
| TH | 93 | Phatthalung |
| TH | 56 | Phayao |
| TH | 67 | Phetchabun |
| TH | 76 | Phetchaburi |
| TH | 66 | Phichit |
| TH | 65 | Phitsanulok |
| TH | 54 | Phrae |
| TH | 83 | Phuket |
| TH | 25 | Prachin Buri |
| TH | 77 | Prachuap Khiri Khan |
| TH | 85 | Ranong |
| TH | 70 | Ratchaburi |
| TH | 21 | Rayong |
| TH | 45 | Roi Et |
| TH | 27 | Sa Kaeo |
| TH | 47 | Sakon Nakhon |
| TH | 11 | Samut Prakan |
| TH | 74 | Samut Sakhon |
| TH | 75 | Samut Songkhram |
| TH | 19 | Sara Buri |
| TH | 91 | Satun |
| TH | 17 | Sing Buri |
| TH | 33 | Sisaket |
| TH | 90 | Songkhla |
| TH | 64 | Sukhothai |
| TH | 72 | Suphan Buri |
| TH | 84 | Surat Thani |
| TH | 32 | Surin |
| TH | 63 | Tak |
| TH | 92 | Trang |
| TH | 23 | Trat |
| TH | 34 | Ubon Ratchathani |
| TH | 41 | Udon Thani |
| TH | 61 | Uthai Thani |
| TH | 53 | Uttaradit |
| TH | 95 | Yala |
| TH | 35 | Yasothon |
| TH | 38 | Bueng Kan |
| TH | S | Phatthaya |
| TL | AL | Aileu |
| TL | AN | Ainaro |
| TL | BA | Baucau |
| TL | BO | Bobonaro |
| TL | CO | Cova Lima |
| TL | DI | Dili |
| TL | ER | Ermera |
| TL | LA | Lautem |
| TL | LI | Liquica |
| TL | MT | Manatuto |
| TL | MF | Manufahi |
| TL | OE | Oecussi |
| TL | VI | Viqueque |
| TG | C | Centrale |
| TG | K | Kara |
| TG | M | Maritime |
| TG | P | Plateaux |
| TG | S | Savanes |
| TO | 02 | Ha’apai |
| TO | 04 | Tongatapu |
| TO | 05 | Vava’u |
| TO | 01 | ‘Eua |
| TO | 03 | Niuas |
| TT | ARI | Arima |
| TT | CHA | Chaguanas |
| TT | DMN | Diego Martin |
| TT | PTF | Point Fortin |
| TT | POS | Port of Spain |
| TT | PRT | Princes Town |
| TT | SFO | San Fernando |
| TT | SGE | Sangre Grande |
| TT | SIP | Siparia |
| TT | TOB | Tobago |
| TT | CTT | Couva-Tabaquite-Talparo |
| TT | MRC | Mayaro-Rio Claro |
| TT | PED | Penal-Debe |
| TT | SJL | San Juan-Laventille |
| TT | TUP | Tunapuna-Piarco |
| TN | 31 | Beja |
| TN | 13 | Ben Arous |
| TN | 23 | Bizerte |
| TN | 81 | Gabes |
| TN | 71 | Gafsa |
| TN | 32 | Jendouba |
| TN | 41 | Kairouan |
| TN | 42 | Kasserine |
| TN | 73 | Kebili |
| TN | 53 | Mahdia |
| TN | 82 | Medenine |
| TN | 52 | Monastir |
| TN | 21 | Nabeul |
| TN | 61 | Sfax |
| TN | 34 | Siliana |
| TN | 51 | Sousse |
| TN | 83 | Tataouine |
| TN | 72 | Tozeur |
| TN | 11 | Tunis |
| TN | 22 | Zaghouan |
| TN | 12 | L’Ariana |
| TN | 14 | La Manouba |
| TN | 33 | Le Kef |
| TN | 43 | Sidi Bouzid |
| TR | 01 | Adana |
| TR | 02 | Adiyaman |
| TR | 03 | Afyonkarahisar |
| TR | 04 | Agri |
| TR | 68 | Aksaray |
| TR | 05 | Amasya |
| TR | 06 | Ankara |
| TR | 07 | Antalya |
| TR | 75 | Ardahan |
| TR | 08 | Artvin |
| TR | 09 | Aydin |
| TR | 10 | Balikesir |
| TR | 74 | Bartin |
| TR | 72 | Batman |
| TR | 69 | Bayburt |
| TR | 11 | Bilecik |
| TR | 12 | Bingol |
| TR | 13 | Bitlis |
| TR | 14 | Bolu |
| TR | 15 | Burdur |
| TR | 16 | Bursa |
| TR | 17 | Canakkale |
| TR | 18 | Cankiri |
| TR | 19 | Corum |
| TR | 20 | Denizli |
| TR | 21 | Diyarbakir |
| TR | 81 | Duzce |
| TR | 22 | Edirne |
| TR | 23 | Elazig |
| TR | 24 | Erzincan |
| TR | 25 | Erzurum |
| TR | 26 | Eskisehir |
| TR | 27 | Gaziantep |
| TR | 28 | Giresun |
| TR | 29 | Gumushane |
| TR | 30 | Hakkari |
| TR | 31 | Hatay |
| TR | 76 | Igdir |
| TR | 32 | Isparta |
| TR | 34 | Istanbul |
| TR | 35 | Izmir |
| TR | 46 | Kahramanmaras |
| TR | 78 | Karabuk |
| TR | 70 | Karaman |
| TR | 36 | Kars |
| TR | 37 | Kastamonu |
| TR | 38 | Kayseri |
| TR | 79 | Kilis |
| TR | 71 | Kirikkale |
| TR | 39 | Kirklareli |
| TR | 40 | Kirsehir |
| TR | 41 | Kocaeli |
| TR | 42 | Konya |
| TR | 43 | Kutahya |
| TR | 44 | Malatya |
| TR | 45 | Manisa |
| TR | 47 | Mardin |
| TR | 33 | Mersin |
| TR | 48 | Mugla |
| TR | 49 | Mus |
| TR | 50 | Nevsehir |
| TR | 51 | Nigde |
| TR | 52 | Ordu |
| TR | 80 | Osmaniye |
| TR | 53 | Rize |
| TR | 54 | Sakarya |
| TR | 55 | Samsun |
| TR | 63 | Sanliurfa |
| TR | 56 | Siirt |
| TR | 57 | Sinop |
| TR | 73 | Sirnak |
| TR | 58 | Sivas |
| TR | 59 | Tekirdag |
| TR | 60 | Tokat |
| TR | 61 | Trabzon |
| TR | 62 | Tunceli |
| TR | 64 | Usak |
| TR | 65 | Van |
| TR | 77 | Yalova |
| TR | 66 | Yozgat |
| TR | 67 | Zonguldak |
| TM | A | Ahal Welayaty |
| TM | B | Balkan Welayaty |
| TM | D | Dashhowuz Welayaty |
| TM | L | Lebap Welayaty |
| TM | M | Mary Welayaty |
| TM | S | Aşgabat |
| TV | FUN | Funafuti |
| TV | NMG | Nanumanga |
| TV | NMA | Nanumea |
| TV | NIT | Niutao |
| TV | NUI | Nui |
| TV | NKF | Nukufetau |
| TV | NKL | Nukulaelae |
| TV | VAI | Vaitupu |
| UG | 301 | Adjumani |
| UG | 302 | Apac |
| UG | 303 | Arua |
| UG | 201 | Bugiri |
| UG | 401 | Bundibugyo |
| UG | 402 | Bushenyi |
| UG | 202 | Busia |
| UG | 304 | Gulu |
| UG | 403 | Hoima |
| UG | 203 | Iganga |
| UG | 204 | Jinja |
| UG | 404 | Kabale |
| UG | 405 | Kabarole |
| UG | 213 | Kaberamaido |
| UG | 101 | Kalangala |
| UG | 102 | Kampala |
| UG | 205 | Kamuli |
| UG | 413 | Kamwenge |
| UG | 414 | Kanungu |
| UG | 206 | Kapchorwa |
| UG | 406 | Kasese |
| UG | 207 | Katakwi |
| UG | 112 | Kayunga |
| UG | 407 | Kibaale |
| UG | 103 | Kiboga |
| UG | 408 | Kisoro |
| UG | 305 | Kitgum |
| UG | 306 | Kotido |
| UG | 208 | Kumi |
| UG | 415 | Kyenjojo |
| UG | 307 | Lira |
| UG | 104 | Luwero |
| UG | 105 | Masaka |
| UG | 409 | Masindi |
| UG | 214 | Mayuge |
| UG | 209 | Mbale |
| UG | 410 | Mbarara |
| UG | 308 | Moroto |
| UG | 309 | Moyo |
| UG | 106 | Mpigi |
| UG | 107 | Mubende |
| UG | 108 | Mukono |
| UG | 311 | Nakapiripirit |
| UG | 109 | Nakasongola |
| UG | 310 | Nebbi |
| UG | 411 | Ntungamo |
| UG | 312 | Pader |
| UG | 210 | Pallisa |
| UG | 110 | Rakai |
| UG | 412 | Rukungiri |
| UG | 111 | Sembabule |
| UG | 215 | Sironko |
| UG | 211 | Soroti |
| UG | 212 | Tororo |
| UG | 113 | Wakiso |
| UG | 313 | Yumbe |
| UG | 114 | Lyantonde |
| UG | 115 | Mityana |
| UG | 116 | Nakaseke |
| UG | 117 | Buikwe |
| UG | 118 | Bukomansibi |
| UG | 119 | Butambala |
| UG | 120 | Buvuma |
| UG | 121 | Gomba |
| UG | 122 | Kalungu |
| UG | 123 | Kyankwanzi |
| UG | 124 | Lwengo |
| UG | 125 | Kyotera |
| UG | 126 | Kasanda |
| UG | 216 | Amuria |
| UG | 217 | Budaka |
| UG | 218 | Bududa |
| UG | 219 | Bukedea |
| UG | 220 | Bukwo |
| UG | 221 | Butaleja |
| UG | 222 | Kaliro |
| UG | 223 | Manafwa |
| UG | 224 | Namutumba |
| UG | 225 | Bulambuli |
| UG | 226 | Buyende |
| UG | 227 | Kibuku |
| UG | 228 | Kween |
| UG | 229 | Luuka |
| UG | 230 | Namayingo |
| UG | 231 | Ngora |
| UG | 232 | Serere |
| UG | 233 | Butebo |
| UG | 234 | Namisindwa |
| UG | 235 | Bugweri |
| UG | 236 | Kapelebyong |
| UG | 237 | Kalaki |
| UG | 314 | Abim |
| UG | 315 | Amolatar |
| UG | 316 | Amuru |
| UG | 317 | Dokolo |
| UG | 318 | Kaabong |
| UG | 319 | Koboko |
| UG | 320 | Maracha |
| UG | 321 | Oyam |
| UG | 322 | Agago |
| UG | 323 | Alebtong |
| UG | 324 | Amudat |
| UG | 325 | Kole |
| UG | 326 | Lamwo |
| UG | 327 | Napak |
| UG | 328 | Nwoya |
| UG | 329 | Otuke |
| UG | 330 | Zombo |
| UG | 331 | Omoro |
| UG | 332 | Pakwach |
| UG | 333 | Kwania |
| UG | 334 | Nabilatuk |
| UG | 335 | Karenga |
| UG | 336 | Madi-Okollo |
| UG | 337 | Obongi |
| UG | 416 | Buliisa |
| UG | 417 | Ibanda |
| UG | 418 | Isingiro |
| UG | 419 | Kiruhura |
| UG | 420 | Buhweju |
| UG | 421 | Kiryandongo |
| UG | 422 | Kyegegwa |
| UG | 423 | Mitooma |
| UG | 424 | Ntoroko |
| UG | 425 | Rubirizi |
| UG | 426 | Sheema |
| UG | 427 | Kagadi |
| UG | 428 | Kakumiro |
| UG | 429 | Rubanda |
| UG | 430 | Bunyangabu |
| UG | 431 | Rukiga |
| UG | 432 | Kikuube |
| UG | 433 | Kazo |
| UG | 434 | Kitagwenda |
| UG | 435 | Rwampara |
| UG | C | Central |
| UG | E | Eastern |
| UG | N | Northern |
| UG | W | Western |
| UA | 40 | Sevastopol |
| UA | 05 | Vinnytska oblast |
| UA | 07 | Volynska oblast |
| UA | 09 | Luhanska oblast |
| UA | 12 | Dnipropetrovska oblast |
| UA | 14 | Donetska oblast |
| UA | 18 | Zhytomyrska oblast |
| UA | 21 | Zakarpatska oblast |
| UA | 23 | Zaporizka oblast |
| UA | 26 | Ivano-Frankivska oblast |
| UA | 30 | Kyiv |
| UA | 32 | Kyivska oblast |
| UA | 35 | Kirovohradska oblast |
| UA | 43 | Avtonomna Respublika Krym |
| UA | 46 | Lvivska oblast |
| UA | 48 | Mykolaivska oblast |
| UA | 51 | Odeska oblast |
| UA | 53 | Poltavska oblast |
| UA | 56 | Rivnenska oblast |
| UA | 59 | Sumska oblast |
| UA | 61 | Ternopilska oblast |
| UA | 63 | Kharkivska oblast |
| UA | 65 | Khersonska oblast |
| UA | 68 | Khmelnytska oblast |
| UA | 71 | Cherkaska oblast |
| UA | 74 | Chernihivska oblast |
| UA | 77 | Chernivetska oblast |
| AE | AJ | ‘Ajman |
| AE | AZ | Abu Zaby |
| AE | FU | Al Fujayrah |
| AE | SH | Ash Shariqah |
| AE | DU | Dubayy |
| AE | RK | R’as al Khaymah |
| AE | UQ | Umm al Qaywayn |
| GB | ABE | Aberdeen City |
| GB | ABD | Aberdeenshire |
| GB | ANS | Angus |
| GB | AGB | Argyll and Bute |
| GB | BDG | Barking and Dagenham |
| GB | BNE | Barnet |
| GB | BNS | Barnsley |
| GB | BAS | Bath and North East Somerset |
| GB | BDF | Bedfordshire |
| GB | BFS | Belfast |
| GB | BEX | Bexley |
| GB | BIR | Birmingham |
| GB | BBD | Blackburn with Darwen |
| GB | BPL | Blackpool |
| GB | BGW | Blaenau Gwent |
| GB | BOL | Bolton |
| GB | BRC | Bracknell Forest |
| GB | BRD | Bradford |
| GB | BEN | Brent |
| GB | BGE | Bridgend [Pen-y-bont ar Ogwr GB-POG] |
| GB | BNH | Brighton and Hove |
| GB | BST | “Bristol, City of” |
| GB | BRY | Bromley |
| GB | BKM | Buckinghamshire |
| GB | BUR | Bury |
| GB | CAY | Caerphilly [Caerffili GB-CAF] |
| GB | CLD | Calderdale |
| GB | CAM | Cambridgeshire |
| GB | CMD | Camden |
| GB | CRF | Cardiff [Caerdydd GB-CRD] |
| GB | CMN | Carmarthenshire [Sir Gaerfyrddin GB-GFY] |
| GB | CBF | Central Bedfordshire |
| GB | CGN | Ceredigion [Sir Ceredigion] |
| GB | CHE | Cheshire East |
| GB | CHW | Cheshire West and Chester |
| GB | CLK | Clackmannanshire |
| GB | CWY | Conwy |
| GB | CON | Cornwall |
| GB | COV | Coventry |
| GB | CRY | Croydon |
| GB | CMA | Cumbria |
| GB | DAL | Darlington |
| GB | DEN | Denbighshire [Sir Ddinbych GB-DDB] |
| GB | DBY | Derbyshire |
| GB | DER | Derby |
| GB | DEV | Devon |
| GB | DNC | Doncaster |
| GB | DOR | Dorset |
| GB | DUD | Dudley |
| GB | DGY | Dumfries and Galloway |
| GB | DND | Dundee City |
| GB | DUR | Durham |
| GB | EAL | Ealing |
| GB | EAY | East Ayrshire |
| GB | EDU | East Dunbartonshire |
| GB | ELN | East Lothian |
| GB | ERW | East Renfrewshire |
| GB | ERY | East Riding of Yorkshire |
| GB | ESX | East Sussex |
| GB | EDH | “Edinburgh, City of” |
| GB | ELS | Eilean Siar |
| GB | ENF | Enfield |
| GB | ESS | Essex |
| GB | FAL | Falkirk |
| GB | FIF | Fife |
| GB | FLN | Flintshire [Sir y Fflint GB-FFL] |
| GB | GAT | Gateshead |
| GB | GLG | Glasgow City |
| GB | GLS | Gloucestershire |
| GB | GRE | Greenwich |
| GB | GWN | Gwynedd |
| GB | HCK | Hackney |
| GB | HAL | Halton |
| GB | HMF | Hammersmith and Fulham |
| GB | HAM | Hampshire |
| GB | HRY | Haringey |
| GB | HRW | Harrow |
| GB | HPL | Hartlepool |
| GB | HAV | Havering |
| GB | HEF | “Herefordshire, County of” |
| GB | HRT | Hertfordshire |
| GB | HLD | Highland |
| GB | HIL | Hillingdon |
| GB | HNS | Hounslow |
| GB | IVC | Inverclyde |
| GB | AGY | Isle of Anglesey [Sir Ynys Môn GB-YNM] |
| GB | IOW | Isle of Wight |
| GB | ISL | Islington |
| GB | KEC | Kensington and Chelsea |
| GB | KEN | Kent |
| GB | KHL | “Kingston upon Hull, City of” |
| GB | KTT | Kingston upon Thames |
| GB | KIR | Kirklees |
| GB | KWL | Knowsley |
| GB | LBH | Lambeth |
| GB | LAN | Lancashire |
| GB | LDS | Leeds |
| GB | LEC | Leicestershire |
| GB | LCE | Leicester |
| GB | LEW | Lewisham |
| GB | LIN | Lincolnshire |
| GB | LIV | Liverpool |
| GB | LND | “London, City of” |
| GB | LUT | Luton |
| GB | MAN | Manchester |
| GB | MDW | Medway |
| GB | MTY | Merthyr Tydfil [Merthyr Tudful GB-MTU] |
| GB | MRT | Merton |
| GB | MDB | Middlesbrough |
| GB | MLN | Midlothian |
| GB | MIK | Milton Keynes |
| GB | MON | Monmouthshire [Sir Fynwy GB-FYN] |
| GB | MRY | Moray |
| GB | NTL | Neath Port Talbot [Castell-nedd Port Talbot GB-CTL] |
| GB | NET | Newcastle upon Tyne |
| GB | NWM | Newham |
| GB | NWP | Newport [Casnewydd GB-CNW] |
| GB | NFK | Norfolk |
| GB | NAY | North Ayrshire |
| GB | NEL | North East Lincolnshire |
| GB | NLK | North Lanarkshire |
| GB | NLN | North Lincolnshire |
| GB | NSM | North Somerset |
| GB | NTY | North Tyneside |
| GB | NYK | North Yorkshire |
| GB | NTH | Northamptonshire |
| GB | NBL | Northumberland |
| GB | NTT | Nottinghamshire |
| GB | NGM | Nottingham |
| GB | OLD | Oldham |
| GB | ORK | Orkney Islands |
| GB | OXF | Oxfordshire |
| GB | PEM | Pembrokeshire [Sir Benfro GB-BNF] |
| GB | PKN | Perth and Kinross |
| GB | PTE | Peterborough |
| GB | PLY | Plymouth |
| GB | POR | Portsmouth |
| GB | POW | Powys |
| GB | RDG | Reading |
| GB | RDB | Redbridge |
| GB | RCC | Redcar and Cleveland |
| GB | RFW | Renfrewshire |
| GB | RCT | “Rhondda, Cynon, Taff [Rhondda, Cynon,Taf]” |
| GB | RIC | Richmond upon Thames |
| GB | RCH | Rochdale |
| GB | ROT | Rotherham |
| GB | RUT | Rutland |
| GB | SLF | Salford |
| GB | SAW | Sandwell |
| GB | SCB | “Scottish Borders, The” |
| GB | SFT | Sefton |
| GB | SHF | Sheffield |
| GB | ZET | Shetland Islands |
| GB | SHR | Shropshire |
| GB | SLG | Slough |
| GB | SOL | Solihull |
| GB | SOM | Somerset |
| GB | SAY | South Ayrshire |
| GB | SGC | South Gloucestershire |
| GB | SLK | South Lanarkshire |
| GB | STY | South Tyneside |
| GB | STH | Southampton |
| GB | SOS | Southend-on-Sea |
| GB | SWK | Southwark |
| GB | SHN | St. Helens |
| GB | STS | Staffordshire |
| GB | STG | Stirling |
| GB | SKP | Stockport |
| GB | STT | Stockton-on-Tees |
| GB | STE | Stoke-on-Trent |
| GB | SFK | Suffolk |
| GB | SND | Sunderland |
| GB | SRY | Surrey |
| GB | STN | Sutton |
| GB | SWA | Swansea [Abertawe GB-ATA] |
| GB | SWD | Swindon |
| GB | TAM | Tameside |
| GB | TFW | Telford and Wrekin |
| GB | THR | Thurrock |
| GB | TOB | Torbay |
| GB | TOF | Torfaen [Tor-faen] |
| GB | TWH | Tower Hamlets |
| GB | TRF | Trafford |
| GB | VGL | “Vale of Glamorgan, The [Bro Morgannwg GB-BMG]” |
| GB | WKF | Wakefield |
| GB | WLL | Walsall |
| GB | WFT | Waltham Forest |
| GB | WND | Wandsworth |
| GB | WRT | Warrington |
| GB | WAR | Warwickshire |
| GB | WBK | West Berkshire |
| GB | WDU | West Dunbartonshire |
| GB | WLN | West Lothian |
| GB | WSX | West Sussex |
| GB | WSM | Westminster |
| GB | WGN | Wigan |
| GB | WIL | Wiltshire |
| GB | WNM | Windsor and Maidenhead |
| GB | WRL | Wirral |
| GB | WOK | Wokingham |
| GB | WLV | Wolverhampton |
| GB | WOR | Worcestershire |
| GB | WRX | Wrexham [Wrecsam GB-WRC] |
| GB | YOR | York |
| GB | ABC | “Armagh City, Banbridge and Craigavon” |
| GB | AND | Ards and North Down |
| GB | ANN | Antrim and Newtownabbey |
| GB | BCP | “Bournemouth, Christchurch and Poole” |
| GB | CCG | Causeway Coast and Glens |
| GB | DRS | Derry and Strabane |
| GB | FMO | Fermanagh and Omagh |
| GB | IOS | Isles of Scilly |
| GB | LBC | Lisburn and Castlereagh |
| GB | MEA | Mid and East Antrim |
| GB | MUL | Mid-Ulster |
| GB | NMD | “Newry, Mourne and Down” |
| UM | 81 | Baker Island |
| UM | 84 | Howland Island |
| UM | 86 | Jarvis Island |
| UM | 67 | Johnston Atoll |
| UM | 89 | Kingman Reef |
| UM | 76 | Navassa Island |
| UM | 95 | Palmyra Atoll |
| UM | 79 | Wake Island |
| UM | 71 | Midway Islands |
| UY | AR | Artigas |
| UY | CA | Canelones |
| UY | CL | Cerro Largo |
| UY | CO | Colonia |
| UY | DU | Durazno |
| UY | FS | Flores |
| UY | FD | Florida |
| UY | LA | Lavalleja |
| UY | MA | Maldonado |
| UY | MO | Montevideo |
| UY | PA | Paysandu |
| UY | RN | Rio Negro |
| UY | RV | Rivera |
| UY | RO | Rocha |
| UY | SA | Salto |
| UY | SJ | San Jose |
| UY | SO | Soriano |
| UY | TA | Tacuarembo |
| UY | TT | Treinta y Tres |
| UZ | AN | Andijon |
| UZ | BU | Buxoro |
| UZ | FA | Farg’ona |
| UZ | JI | Jizzax |
| UZ | NG | Namangan |
| UZ | NW | Navoiy |
| UZ | QA | Qashqadaryo |
| UZ | QR | Qoraqalpog’iston Republikasi |
| UZ | SA | Samarqand |
| UZ | SI | Sirdaryo |
| UZ | SU | Surxondaryo |
| UZ | TK | Toshkent City |
| UZ | TO | Toshkent Region |
| UZ | XO | Xorazm |
| VU | MAP | Malampa |
| VU | PAM | Penama |
| VU | SAM | Sanma |
| VU | SEE | Shefa |
| VU | TAE | Tafea |
| VU | TOB | Torba |
| VE | Z | Amazonas |
| VE | B | Anzoategui |
| VE | C | Apure |
| VE | D | Aragua |
| VE | E | Barinas |
| VE | F | Bolivar |
| VE | G | Carabobo |
| VE | H | Cojedes |
| VE | Y | Delta Amacuro |
| VE | W | Dependencias Federales |
| VE | I | Falcon |
| VE | J | Guarico |
| VE | K | Lara |
| VE | L | Merida |
| VE | M | Miranda |
| VE | N | Monagas |
| VE | O | Nueva Esparta |
| VE | P | Portuguesa |
| VE | R | Sucre |
| VE | S | Tachira |
| VE | T | Trujillo |
| VE | U | Yaracuy |
| VE | V | Zulia |
| VE | A | Distrito Capital |
| VE | X | La Guaira |
| VN | 44 | An Giang |
| VN | 54 | Bac Giang |
| VN | 53 | Bac Kan |
| VN | 55 | Bac Lieu |
| VN | 56 | Bac Ninh |
| VN | 50 | Ben Tre |
| VN | 57 | Binh Duong |
| VN | 58 | Binh Phuoc |
| VN | 40 | Binh Thuan |
| VN | 59 | Ca Mau |
| VN | CT | Can Tho |
| VN | 04 | Cao Bang |
| VN | DN | Da Nang |
| VN | 30 | Gia Lai |
| VN | 03 | Ha Giang |
| VN | 63 | Ha Nam |
| VN | HN | Ha Noi |
| VN | 23 | Ha Tinh |
| VN | 61 | Hai Duong |
| VN | HP | Hai Phong |
| VN | 73 | Hau Giang |
| VN | 14 | Hoa Binh |
| VN | 66 | Hung Yen |
| VN | 01 | Lai Châu |
| VN | 02 | Lào Cai |
| VN | 05 | Sơn La |
| VN | 06 | Yên Bái |
| VN | 07 | Tuyên Quang |
| VN | 09 | Lạng Sơn |
| VN | 13 | Quảng Ninh |
| VN | 18 | Ninh Bình |
| VN | 20 | Thái Bình |
| VN | 21 | Thanh Hóa |
| VN | 22 | Nghệ An |
| VN | 24 | Quảng Bình |
| VN | 25 | Quảng Trị |
| VN | 26 | Thừa Thiên-Huế |
| VN | 27 | Quảng Nam |
| VN | 28 | Kon Tum |
| VN | 29 | Quảng Ngãi |
| VN | 31 | Bình Định |
| VN | 32 | Phú Yên |
| VN | 33 | Đắk Lắk |
| VN | 34 | Khánh Hòa |
| VN | 35 | Lâm Đồng |
| VN | 36 | Ninh Thuận |
| VN | 37 | Tây Ninh |
| VN | 39 | Đồng Nai |
| VN | 41 | Long An |
| VN | 43 | Bà Rịa - Vũng Tàu |
| VN | 45 | Đồng Tháp |
| VN | 46 | Tiền Giang |
| VN | 47 | Kiến Giang |
| VN | 49 | Vĩnh Long |
| VN | 51 | Trà Vinh |
| VN | 52 | Sóc Trăng |
| VN | 67 | Nam Định |
| VN | 68 | Phú Thọ |
| VN | 69 | Thái Nguyên |
| VN | 70 | Vĩnh Phúc |
| VN | 71 | Điện Biên |
| VN | 72 | Đắk Nông |
| VN | SG | Hồ Chí Minh |
| WF | AL | Alo |
| WF | SG | Sigave |
| WF | UV | Uvea |
| YE | AB | Abyan |
| YE | DA | Ad Dali |
| YE | AD | Adan |
| YE | BA | Al Bayda |
| YE | HU | Al Hudaydah |
| YE | JA | Al Jawf |
| YE | MR | Al Mahrah |
| YE | MW | Al Mahwit |
| YE | AM | Amran |
| YE | DH | Dhamar |
| YE | HD | Hadramawt |
| YE | HJ | Hajjah |
| YE | IB | Ibb |
| YE | LA | Lahij |
| YE | MA | Ma’rib |
| YE | SD | Sa’dah |
| YE | SN | San’a |
| YE | SH | Shabwah |
| YE | TA | Ta’izz |
| YE | RA | Raymah |
| YE | SA | Amānat al ‘Āşimah [city] |
| YE | SU | Arkhabīl Suquţrá |
| ZM | 02 | Central |
| ZM | 08 | Copperbelt |
| ZM | 03 | Eastern |
| ZM | 04 | Luapula |
| ZM | 09 | Lusaka |
| ZM | 06 | North-Western |
| ZM | 05 | Northern |
| ZM | 07 | Southern |
| ZM | 01 | Western |
| ZM | 10 | Muchinga |
| ZW | BU | Bulawayo |
| ZW | HA | Harare |
| ZW | MA | Manicaland |
| ZW | MC | Mashonaland Central |
| ZW | ME | Mashonaland East |
| ZW | MW | Mashonaland West |
| ZW | MV | Masvingo |
| ZW | MN | Matabeleland North |
| ZW | MS | Matabeleland South |
| ZW | MI | Midlands |
| BQ | BO | Boneiru |
| BQ | SA | Saba |
| BQ | SE | Sint Eustatius |
| SS | BN | Northern Bahr el Ghazal |
| SS | BW | Western Bahr el Ghazal |
| SS | EC | Central Equatoria |
| SS | EE | Eastern Equatoria |
| SS | EW | Western Equatoria |
| SS | JG | Jonglei |
| SS | LK | Lakes |
| SS | NU | Upper Nile |
| SS | UY | Unity |
| SS | WR | Warrap |

### CS-Cart

The CS-Cart plugin integrates Payneteasy payment processing with the [CS-Cart](https://www.cs-cart.com/) e-commerce platform. It ships as a standard CS-Cart addon (module id `payneteasy`, display name “Paynet Easy Payment”) that registers a new payment processor in the store’s admin panel, so shop administrators can accept card payments through Payneteasy without writing custom code.

A live example of the checkout flow produced by this plugin can be seen on the [CS-Cart demo shop](https://cscart.codetime.net/).

#### Source code

The plugin source is published on Git Hub at [payneteasy/php-plugin-cscart](https://github.com/payneteasy/php-plugin-cscart). The repository contains the addon files under `app/addons/payneteasy` (install/uninstall logic, the payment processor registration, and language files) together with the corresponding `design` templates for the CS-Cart storefront and admin area.

### Коды валют

| Код валюты | Описание |
|--------------|-----------------------------------------|
| AED | United Arab Emirates dirham |
| ALL | Albanian lek |
| AMD | Armenian dram |
| ARS | Argentine peso |
| AUD | Australian dollar |
| AZN | Azerbaijani manat |
| BAM | Bosnia and Herzegovina convertible mark |
| BDT | Bangladeshi taka |
| BGN | Bulgarian lev (obsolete) |
| BHD | Bahraini dinar |
| BIF | Burundian franc |
| BOB | Bolivian boliviano |
| BRL | Brazilian real |
| BWP | Ботсванская пула |
| BYN | Белорусский рубль |
| CAD | Канадский доллар |
| CDF | Конголезский франк |
| CHF | Швейцарский франк |
| CLP | Чилийское песо |
| CNY | Китайский юань |
| COP | Колумбийское песо |
| CRC | Костариканский колон |
| CVE | Эскудо Кабо-Верде |
| CZK | Чешская крона |
| DKK | Датская крона |
| DJF | Джибутийский франк |
| DLS | Программа лояльности DLS |
| DOP | Доминиканское песо |
| DZD | Алжирский динар |
| EGP | Египетский фунт |
| ERN | Эритрейская накфа |
| ETB | Эфиопский быр |
| EUR | Евро |
| FIM | Финская марка (устаревшая) |
| GBP | Фунт стерлингов |
| GEL | Грузинский лари |
| GHS | Ганский седи |
| GMD | Гамбийский даласи |
| GNF | Гвинейский франк |
| GTQ | Гватемальский кетсаль |
| HKD | Гонконгский доллар |
| HNL | Гондурасская лемпира |
| HRK | Хорватская куна (obsolete) |
| HUF | Венгерский форинт |
| IDR | Индонезийская рупия |
| ILS | Новый израильский шекель |
| INR | Индийская рупия |
| IRR | Иранский риал |
| ISK | Исландская крона |
| JOD | Иорданский динар |
| JPY | Японская иена |
| KES | Кенийский шиллинг |
| KGS | Киргизский сом |
| KHR | Камбоджийский риель |
| KMF | Коморский франк |
| Won | Южнокорейская вона |
| KWD | Кувейтский динар |
| KZT | Казахстанский тенге |
| LAK | Лаосский кип |
| LKR | Шри-Ланкийская рупия |
| LSL | Лоти Лесото |
| MAD | Марокканский дирхам |
| MDL | Молдавский лей |
| MGA | Малагасийский ариари |
| MKD | Македонский денар |
| MMK | Мьянманский кьят |
| MNT | Монгольский тугрик |
| MRU | Мавританская угия |
| MUR | Маврикийская рупия |
| MWK | Малавийская квача |
| MXN | Мексиканское песо |
| MYR | Малайзийский ринггит |
| MZN | Мозамбикский метикал |
| NAD | Намибийский доллар |
| NGN | Нигерийская найра |
| NIO | Никарагуанская кордоба |
| NOK | Норвежская крона |
| NZD | Новозеландский доллар |
| OMR | Оманский риал |
| PAB | Панамское бальбоа |
| PEN | Перуанский соль |
| PHP | Филиппинское песо |
| PKR | Пакистанская рупия |
| PLN | Польский злотый |
| PYG | Парагвайский гуарани |
| QAR | Катарский риал |
| RON | Romanian leu |
| RSD | Сербский динар |
| RUB | Российский рубль |
| RWF | Руандийский франк |
| SAR | Саудовский риял |
| SCR | Сейшельская рупия |
| SEK | Шведская крона |
| SGD | Сингапурский доллар |
| SHP | Фунт Святой Елены |
| SLE | Сьерра-леонский леоне |
| SRD | Суринамский доллар |
| STN | Добра Сан-Томе и Принсипи |
| SZL | Лилангени Эсватини |
| THB | Thai baht |
| TJS | Таджикский сомони |
| TMT | Туркменский манат |
| TND | Тунисский динар |
| TRY | Турецкая лира |
| TWD | Тайваньский доллар |
| TZS | Танзанийский шиллинг |
| UAH | Украинская гривна |
| UGX | Угандийский шиллинг |
| USD | Доллар США |
| UYU | Уругвайское песо |
| UZS | Узбекский сум |
| VES | Венесуэльский суверенный боливар |
| VND | Вьетнамский донг |
| WMZ | Web Money WMZ (USD) |
| XAF | Франк КФА BEAC (Центральная Африка) |
| XOF | Франк КФА BCEAO (Западная Африка) |
| ZAR | Южноафриканский рэнд |
| ZMW | Замбийская квача |
| BTC | Биткоин |
| μBTC | Микробиткоин |
| USDT | Tether (стейблкоин) |
| UNS | Не указана (XXX) |

### Миграция данных

Чувствительная информация, такая как данные держателя карты, должна быть зашифрована для миграции в соответствии с требованиями PCI. Шифрование выполняется с помощью PGP-ключа Payneteasy.

После [импорта](https://www.gnupg.org/gph/en/manual.html#AEN84) PGP-ключа Payneteasy выполните следующую команду для шифрования файлов перед отправкой. Будет создан файл file_name.gpg:

```text
gpg --encrypt --recipient 3C7266AE file_name
```

Публичный PGP-ключ Payneteasy

Key ID: 91D14F90
 
Тип ключа: RSA
 
Размер ключа: 4096 бит
 
Fingerprint: C519 7432 AF07 595A C081 3B83 3501 1DD3 CBC2 E0AB
 
Идентификатор пользователя: ключ импорта Payneteasy (PCI) <[security@Payneteasy.ru](mailto:security@Payneteasy.ru)>
 
```http
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v2.0.22 (GNU/Linux)

mQINBGLNircBEADNI7fzBBc2NyhhzKGb1gI94ASwNqA37dxPaC8bW1hxThaZV0Aj
jPc1EbMT9UdSjJgHZafvAqYo0EUfJqCS1BFnhjTrHiWWBr1dKQ35dMkUB4UWmius
vungosQeFgAy70eY4MS+2r05DYaBylHHhc/0TZ+v0UOaQp8ch2Uu2C6N7wYT97nV
DC0373StsON36m6k1pXLYuTSzXX9ZgZlLYvK1gyItvBqziT7AsSHeGFFjCFygcCL
i3qrmT2S4JBDXQTDaSCWG36aGTerMvkGlwixnpj6nw1E6GJsApQNY7qahn2rY3UK
40Fk7BniHLbFmR4AK5RvDWNTgu3jDdc1z9dS/6n3beM9HExly3TjpmlZDa1CxhtH
W3o69m/3BbzLOjgW6XQX1QoCjuv1ejw6Hm1b5dphyab2xXfEXS40jghuTKTMK7TN
gAsOn8siD4zTedcWdo4rUUX/WATtyRAyFBDLzORFxj4iRezGda1XfTOIgRqPc/3U
ggQhOT6BQuevdtuHjdSNY36TEJHOPi28xMOPMMpMVA5nPBHX/L+I6Z8Z9/pGDZPa
mQwlg5XebtL2t3AakGQ8goobImavQrNgDPQU+hf3maNAkBzKirqLVcAKjqG/KX7v
AMNUzzXCRqc/yGEobJuSa0wTpf2pJhHqExrAgbn3FEBiu42kY/wE20jyLQARAQAB
tDRQYXluZXRlYXN5IEltcG9ydCBLZXkgKFBDSSkgPHNlY3VyaXR5QHBheW5ldGVh
c3kucnU+iQI/BBMBAgApBQJizYq3AhsDBQkDwmcABwsJCAcDAgEGFQgCCQoLBBYC
AwECHgECF4AACgkQNQEd08vC4KubdA/9G0okz/MOp6Nz7DE2u7Hz0OVoP5OMHQ+U
TdXINlYG0PWJGricF5ohw5jYp/iwgumAb9lXJBc0/h3LZBemW/H0/HCID+wFJT6p
kSoQ2ZGKL37MRdJ6kf9H+VMjGJYS0VOJoj1xWiwUhBjmjeWCAGx88Ovej9IzZsaO
F9hCgsB/PiTm95wdqpwEfh0Cy+C5r03PoWOsa8v4bpMwl3PaNxifaD+uorJX4kOF
EvGIOkrm3o1C6gkZJR2f6RLnazDFlW0KmXUOik1MEosKYCprY2Bk3wBZ0GskyLlY
jcKppVdzfeX66vYUlczR57mlk3GSZzCQHl5fBFoX+yUY+IiowRVqjmneFP6rv9MY
Csvcl/2vdJ8Ou4pyRmRcxJiYhoNSxowWTenbhj40KHUfw7YH3/VLY2UI/LBedEMF
Dx0CqtHSNVogeb5RzzIbhySeXAut79In8AAsvtNT/OMF5ZrZtlNBi6wqZO/invgv
UkdCngSL0+TZAOySwfR0iNZaZJmZ/DfrBuP9p82HZRyK7X9GB/5Ziqs8WStOIzJr
2iQVB9TCKIrE7kWHFxA7HNzfWYgWU32lx/2R+0cH4zwuhFH2rKfrBR6Ekgl8F0+m
tuYqMMBCagF0U6OhFqTtTiQ3cz1A8inNlVkVv9AHI/2Rl5w9hRb88139TtV7aeK2
jbYLHaIwmZC5Ag0EYs2KtwEQAMwaMSjHenq5rU/vVNhhisKKvrzrzHtRFiSnshs8
cWWtr2hyAVRb+loZa5trBs6pal/X+V/fAm7LWBSjt0z1gyZfgamf0PHvmWl5JHiK
O6x22qYLS/F4O4d/tDwUPdPJPx/FXYu/q50B4IsJ0zfoKW2Zwp9hCUoY67EM+8c+
NF5pTqbZ8Fp7zM1oHIkhYRga2qXRW5lxhC8Xojc/nZp65qwW+r2JVlBECa/A2OL8
FsMMObkdgE2W6MWN8zXPayvGinx+PYRne9h8WiyJN9N44aG4No0kd4mXPO9vGXAg
8dhNZxKMXmWOqOBcme6aIVGJQtSEEjTl3qqSxYj8kUdIiR4Fznf5cYvjbzSgXRSi
tJdQu5eOk28c99t4TtnLzR1B6qrPDtwjtApoxw5YsjZKbKweOm+DqzhRVSOsoQE5
DC6CFkmdWybz+2O/UNA4qcJIq4bAHYfYskFHkmkIix71YLIthWq6F9+Fpnq8ZQp5
kX+TqxDyAqhirYhl3kJ/DSstpPe+GjebFWPNkvfXxJ8iwnOUqOzuVerpbWFYF8SC
B0lpxMncoJgx5dIM0QRFcw17rv1+GK8Ga0+8avhZ5hqd4raUvxlY7ZInwsMn70sN
Jc2hH70fYF9U3WW4o6p2IY/bh8V0Pu9nMJIILXFuSN7PdcNpSGk3tdQgJ32seAbc
OWfnABEBAAGJAiUEGAECAA8FAmLNircCGwwFCQPCZwAACgkQNQEd08vC4KtZvBAA
kyJd2aNJhpyQQMVZHUdnXwl/W16r+HwO+gg1nXBTj0swNiNKq9mk78IWKJW+XIEC
5RucAq4c2pg8lCHOwuIpPexEKsHTe6PjFnx6DT6ykaZjZQNiPJAl7QoPu0eUGW2L
vBG4/qlJNKzQQQUHBLMV8MlQhNdx5wBbs8s6UGQ0Q+YUzYCBZ4thQb8SfRSNDGc3
0DitLJD+hSJGeDQ38/1brF8hCQuJcOMYpKv7rWDpBDXY0oWhDWCkQo0F4+Ke+8ou
IUMWc/toyhIHcjRP6XpihC2utFfQE4hlugRn2lOI8vkCQkEidXqYZzvfA7zqdmjX
LYWkISsF6jd7tD/ScN8h9KW58Rq/fTiQ5eXsWbV5fY0wMsJJ6uXL/8/yfvJxw/Zp
YkHA+gIMvdmxTxP3qd+W9Hq+vToD8MbGqPFrVb29+xF6VmzB2KFyvNbiGnwSR7Ke
FuFbKkIoly1hlc7s/N1maU2LS4ByvPh0Q6h7AJO7jJL+/wu2kDoQbCLZ85nRGAth
j2b1ZsftaZk4vdZQrRoTovta5gVYJjxMYwFlBqoucXZF3VXoiBz0Hec6Oh9YsK3a
GGO1yxMkDDJPUSl5p43dfJIg9nVvpB37tFp+vn7Ogu01SLYsXChQWdNdw3BQT4pl
Plb3Yd+plt7shbg9LTSafrv7nNukxPzZmVk1FL9w3Ec=
=m5/V
-----END PGP PUBLIC KEY BLOCK-----
```

### Deposit To Card Transfer

#### Введение

Перевод с пополнением карты (D2C) — перевод средств с банковского счёта Присоединяющейся стороны (Deposit) на номер банковской карты получателя (PAN) или токенизированные данные карты (Card Reference ID). Выполняется в три этапа:

Первоначальный платёж — любой тип транзакции с данными держателя карты: sale, preauth, transfer и т. д. Важно выполнить первоначальный платёж максимально безопасно, чтобы гарантировать регистрацию карты её реальным держателем.
 
Регистрация карты — получите card-ref-id (идентификатор ссылки на карту) и зарегистрируйте карту клиента в его профиле. Идентификатор ссылки на карту можно использовать неограниченное число раз, пока банковская карта активна.
 
Перевод денег – выполните команду API v4/transfer-by-ref/, используя destination-card-ref-id, полученный на предыдущем шаге.
 
Значение терминов см. в [Глоссарии](https://doc.payneteasy.ru/integration/reference/glossary.html.md).
 

#### Deposit To Card Transfer Flow

```plantuml
@startuml

skinparam roundcorner 20
skinparam sequenceArrowThickness 1
skinparam maxmessagesize 1200
skinparam sequenceParticipant underline
actor Плательщик as P
participant "Присоединяющаяся Сторона" as A
participant "Payneteasy" as B
autonumber
hnote over P,B : Инициация платежа
== Регистрация карты ==
A -> B: api/v2/create-card-ref
activate A
activate B
B --> A: Return card-ref-id
deactivate B
A -> A: Назначение токен ИД профилю Клиента
deactivate A
== Получение информации о карте ==
group Опционально
A -> B: api/v2/get-card-info/
activate A
activate B
B -> A: Получение информации о карте
deactivate A
deactivate B
end
== Списание средств на карту ==
A -> B: api/v4/transfer-by-ref/
activate A
activate B
B --> A: Ответ с ИД транзакции
B -> B: Обработка\nсписания средств
group Получение финального статуса
== Получение обратного вызова \nПрисоединяющейся Стороны ==
A <- B: Обратный вызов с финальным статусом
A --> B: HTTP 200
deactivate B
== Запрос статуса ==
A -> B: Получение статуса по ИД транзакции
activate B
B --> A: Конечный статус
deactivate A
deactivate B
end
@enduml
```

(1) Для реализации регистрации карты и получения Card Reference ID см. [/api/v2/create-card-ref](https://doc.payneteasy.ru/integration/API_commands/api_v2_create-card-ref.html.md).
 
(3) Присоединяющаяся сторона назначает идентификатор ссылки на карту профилю клиента, после чего отображает страницу с сообщением об успешной регистрации карты и одобрении первоначального платежа.
 
(4) Сведения о реализации запроса информации о карте по Card Reference ID см. в [/api/v2/get-card-info](https://doc.payneteasy.ru/integration/API_commands/api_v2_get-card-info.html.md). Содержимое ответа на этот запрос можно использовать для отображения Плательщику информации о ранее использованной карте или для обновления базы данных Присоединяющейся стороны. Этот запрос можно выполнять в любое время, если Присоединяющаяся сторона располагает Card Reference ID.
 
(6) Присоединяющаяся сторона инициирует deposit to card transfer (D2C). Для реализации запроса deposit to card см. [/api/v4/transfer-by-ref](https://doc.payneteasy.ru/integration/API_commands/api_v4_deposit_transfer.html.md)
 
(9) Для имплементации обратного вызова с обработкой финального статуса см. [Обратный вызов Присоединяющейся Стороны](https://doc.payneteasy.ru/integration/API_commands/merchant_callback_parameters.html.md).
 
(11) Для реализации запроса статуса заказа см. [/api/v2/status/](https://doc.payneteasy.ru/integration/API_commands/api_v2_status.html.md). Статус следует запрашивать несколько раз с интервалом 3-5 секунд до получения финального статуса в ответе.
 
(12) Финальный статус может быть отправлен Присоединяющейся стороной на основе внутренней бизнес-модели или по запросу Получателя.

### Описание: Direct Bank transfer

#### Введение

Описание: Direct Bank transfer — международный банковский перевод через сеть Swift. Этот метод позволяет обрабатывать банковские переводы методом Direct (с прямой передачей банковских данных плательщика).
 
 
Значение терминов см. в [Глоссарии](https://doc.payneteasy.ru/integration/reference/glossary.html.md).
 

#### Direct Bank Transfer Flow

```plantuml
skinparam roundcorner 20
skinparam sequenceArrowThickness 1
skinparam maxmessagesize 1200
skinparam sequenceParticipant underline
actor Плательщик
participant "Присоединяющаяся Сторона" as A
participant "Payneteasy" as B
autonumber
Payer -> A: Инициализация
activate A
A -> B: /api/v2/bank-wire-transfer/
activate B
B --> A: ИД транзакции
B -> B: Обработка списания \nсредств Bank Wire
group Получение финального статуса
== Получение обратного вызова \nПрисоединяющейся Стороны ==
A <- B: Обратный вызов с финальным статусом
A --> B: HTTP 200
deactivate B
== Запрос статуса ==
A -> B: Получение статуса по ИД транзакции
activate B
B --> A: Конечный статус
deactivate B
end
A --> Плательщик: Показ результата
deactivate Плательщик
deactivate A
```

(2) Для реализации запроса банковского перевода см. /api/v2/bank-wire-transfer/.
 
(5) Для реализации обратного вызова с обработкой финального статуса см. [Обратный вызов Присоединяющейся Стороны](https://doc.payneteasy.ru/integration/API_commands/merchant_callback_parameters.html.md).
 
(7) Для реализации запроса статуса заказа см. [/api/v2/status/](https://doc.payneteasy.ru/integration/API_commands/api_v2_status.html.md). Статус следует запрашивать несколько раз с интервалом 3-5 секунд, пока в ответе не будет получен финальный статус.

### FAQ

#### Информация для диагностики

Пожалуйста, соберите эту информацию и предоставьте ее в службу поддержки для быстрого решения проблем, возникших во время интеграции.
 
 
> - Использовалась ли интеграционная среда (песочница) или производственная среда?
> - Работала ли данная функциональность ранее? С какого момента она перестала работать?
> - Добавьте доступную релевантную информацию из журналов (orderid, serial-number, client_orderid, ENDPOINTID, ENDPOINTGROUPID).

#### Часто задаваемые вопросы во время интеграции

##### Что означает ошибка INVALID_CONTROL_CODE?

Расчет подписи различается для разных типов вызовов API. Наиболее распространенные причины:
 
> - Неверные учетные данные. Проверьте учетные данные, полученные от менеджера платежного шлюза.
> - Вызов API для тестовой среды содержит URL производственной среды или наоборот.
> - Производственные учетные данные (ENDPOINTID, ENDPOINTGROUPID, control key и т. д.) использовались в песочнице или наоборот.
> - Параметры для расчета подписи указаны в неправильном порядке.
> - Сумма транзакции не конвертируется в минимальные десятичные единицы.
Лучший способ проверить расчет подписи — воспользоваться разделами конструктора запросов в документации API:
 
> - Выберите правильный URL-адрес из раскрывающегося списка с выбором вызовов API, если таковые имеются.
> - После нажатия кнопки Sign, пожалуйста, проверьте значение подписи для String to sign, подписывается ли та же самая строка или нет.
> - Если строка подписи выглядит правильно, значение подписи должно быть таким же, как в поле Signature.
> - Войдите в пользовательский интерфейс и найдите конкретные запросы и ответы API на экране интеграционной панели в разделе Инструменты.

##### В чём разница между ENDPOINTID и ENDPOINTGROUPID?

Шлюз Payneteasy может поддерживать любую валюту.
 
> - ENDPOINTID поддерживает одну валюту.
> - ENDPOINTGROUPID может поддерживать столько валют, сколько необходимо. Полный список валют следует отправить менеджеру платежного шлюза для настройки проекта.
Из-за разной природы этих двух сущностей невозможно использовать ENDPOINTID вместо ENDPOINTGROUPID и наоборот.
 

##### Можно ли использовать синхронный API?

Все API асинхронны, см. [Асинхронные ответы](https://doc.payneteasy.ru/integration/general_api_usage/async_response.html.md). Если требуется использование синхронного API, его следует реализовать на Присоединяющейся Стороне. Уточните у менеджера платёжного шлюза, возможно ли делать синхронные вызовы в вашей интеграции.
 

##### Как реализовать 3-D Secure (Verified by Visa / Master Card Secure Code) в собственном мобильном приложении?

Даже в собственном приложении необходимо использовать встроенный компонент Web View для открытия URL-адреса банковского сервера ACS.
 
Для обработки транзакций без перенаправления на страницу 3-D Secure приложение Присоединяющейся Стороны должно соответствовать следующим требованиям:
 
> - Плательщики идентифицированы, и вероятность мошенничества в этом случае низкая Присоединяющаяся Сторона может попросить менеджера платежного шлюза открыть счёт non3D.
> - У Присоединяющейся Стороны есть сертификат PCI DSS, и она может собирать данные о держателях карт на своей стороне. В этом случае Присоединяющаяся Сторона может попросить менеджера платежного шлюза открыть счет с поддержкой Direct API, чтобы избежать ненужных перенаправлений.

##### Что такое client_orderid?

Данный идентификатор транзакции генерируется на Присоединяющейся Стороне. Также в некоторых API данный параметр называется как merchant-order-id.
 

##### Как получить одобренную транзакцию в среде песочницы?

Для разных типов API Payneteasy имеет разные механизмы для получения одобренных транзакций и транзакций в других статусах. Для транзакций электронной коммерции Payneteasy использует разные CVV, см. [test_cards](https://doc.payneteasy.ru/integration/general_api_usage/test_scenarios.html.md). Для транзакций mPOS см. [mpos](https://doc.payneteasy.ru/integration/mpos_api_index.html.md).
 

##### Почему ответ отформатирован как (0xA)?

Для улучшения читаемости ответа в большинстве API Payneteasy добавляет символ (0xA) в конце каждого значения параметра. Для обработки ответа от платежного шлюза, пожалуйста, реализуйте механизм обработки этого символа.
 

##### Можно ли использовать redirect_url для получения статуса транзакции для бэк-офиса?

Это не рекомендуется.
 
Все параметры для конечного редиректа передаются через браузер клиента. Параметры могут быть утеряны во время передачи через интернет. Чтобы получить гарантированный результат от шлюза Payneteasy, см. [Обратный вызов Присоединяющейся Стороны](https://doc.payneteasy.ru/integration/API_commands/merchant_callback_parameters.html.md).
 

##### Можно ли использовать GET вместо POST для отправки данных на шлюз Payneteasy?

К сожалению это невозможно.
 
Передача параметров с использованием HTTP GET строго запрещена во избежание возможных утечек данных.
 

##### Что означает INVALID_CALLBACK_URL?

Пожалуйста, используйте полный публичный URL-адрес с http:// или https://
 
Например, [http://www.example.com](http://www.example.com) или [https://www.example.com](https://www.example.com) вместо www.example.com. Разрешены только следующие порты:
 
> - 80, 8080 для HTTP
> - 443, 8443 для HTTPS

##### Как часто можно опрашивать статус транзакции?

Статус следует запрашивать несколько раз с интервалом в 3–5 секунд, пока в ответ не будет получен окончательный статус.
 
Обычно обработка не3D-транзакции занимает до 5 секунд, а 3D-транзакции — до 60 минут. Транзакции, выполненные с помощью некоторых платежных методов или платежных каналов, особенно обработанные в автономном режиме, могут оставаться в нефинальном статусе в течение нескольких часов или даже дней, поэтому нет смысла часто опрашивать статус транзакции в таких случаях. Присоединяющаяся Сторона должна полагаться на обратный вызов для получения финального статуса транзакции, см. [Обратный вызов Присоединяющейся Стороны](https://doc.payneteasy.ru/integration/API_commands/merchant_callback_parameters.html.md).
 

##### Почему транзакция была отклонена из-за ошибки base 64?

Пожалуйста, используйте urldecode для обработки параметра html в ответе шлюза Payneteasy.
 
Эта ошибка введена Payneteasy для помощи Присоединяющейся Стороне в правильной обработке ответов API. Тест Base64 дает Присоединяющейся Стороне возможность проверить, будет ли страница 3DS, предоставленная банком, правильно обработана в производственной среде. Если Connecting Party получает эту ошибку, это означает, что urldecode, вероятно, не использовался для разбора ответа шлюза Payneteasy или, возможно, он работает неправильно (например, в некоторых версиях PHP вместо этого необходимо использовать rawurldecode).

### Финальное Перенаправление

#### Параметры Финального Перенаправления

Финальное перенаправление на сайт торговца (представленного Присоединяющейся Стороной) осуществляется, когда Плательщик завершает процесс оплаты. Финальное перенаправление инициируется внутри браузера клиента с помощью метода HTTP POST.

| Название параметра перенаправления | Описание |
|--------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| status | Подробности см. в [Список статусов](https://doc.payneteasy.ru/integration/reference/statuses.html.md). |
| orderid | Идентификатор заказа, присвоенный заказу gate.payneteasy.ru. |
| merchant_order | Идентификатор заказа Присоединяющейся Стороны. |
| client_orderid | Идентификатор заказа Присоединяющейся Стороны. |
| error_message | Для транзакций в статусе declined или error, этот параметр будет содержать причину отклонения или сведения об ошибке. |
| control | Контрольная сумма, подтверждающая, что gate.payneteasy.ru (а не мошенник) инициирует запрос. Представляет собой хеш SHA-1 от конкатенации параметров status + orderid + client_orderid + merchant-control. |
| descriptor | Дескриптор шлюза. |
| processor-tx-id | Идентификатор транзакции, присвоенный Эквайером. |
| amount | Фактическая сумма транзакции. |
| bin | Банковский BIN кредитной карты клиента. |
| type | Тип ответа. |
| card-type | Тип карты плательщика. |
| phone | Номер телефона плательщика. |
| last-four-digits | Последние четыре цифры карты плательщика. |
| card-holder-name | Имя на карте плательщика. |
| error_code | Код ошибки. |

Присоединяющейся Стороне не рекомендуется использовать перенаправление плательщика как основной источник информации о статусе транзакции. Если Присоединяющейся Стороной был передан параметр server_callback_url в инициирующем запросе на проведение транзакции, Платёжный Шлюз вызовет этот URL при достижении транзакцией финального статуса. Присоединяющаяся Сторона может использовать этот URL для произвольной обработки информации о транзакции, например, для сбора информации о транзакциях в базу данных. Параметры, отправляемые на URL обратного вызова описаны в разделе [Обратный вызов](https://doc.payneteasy.ru/integration/merchant_callback_parameters.html.md).

#### Пример запроса финального перенаправления

Платёжный Шлюз совершает перенаправление методом POST на адрес https://connectingparty.com/pay/redirect?token=some_token с параметрами в формате x-www-form-urlencoded format:

```http
error_message=null
&processor-tx-id=PNTEST-1788082
&amount=100.00
&merchant_order=test
&orderid=1788082
&client_orderid=test
&bin=444455
&control=854f38715ee6bf43fa18e3ca202985a06e0ae755
&gate-partial-reversal=enabled
&descriptor=DEMO1
&gate-partial-capture=enabled
&type=sale
&card-type=VISA
&phone=%2B31201112233
&last-four-digits=1111
&card-holder-name=TEST+HOLDER
&status=approved
```

### Сервис фискализации

#### Введение

Сервис фискализации используется для регистрации финансовых чеков и счетов в Платёжном Шлюзе Payneteasy и их дальнейшей обработки. Фискализация поддерживается как для первоначальных, так и для рекуррентных транзакций Sale и Preauth через интеграцию Server-To-Server или Form. Подходящий сценарий интеграции см. в соответствующих примерах использования или уточните детали у менеджера службы поддержки. Транзакция с чеком/счётом обрабатывается Платёжным Шлюзом Payneteasy с дополнительными запросами для налогового учёта.
 

#### Параметр сервиса фискализации (чек)

Чтобы инициировать транзакцию с использованием сервиса фискализации, Присоединяющаяся сторона отправляет HTTPS POST-запрос на Sale или Preauth с дополнительным параметром.
 

| Параметры запроса | Проверка | Comment |
|---------------------|-----------------------|-----------------------------------------------------------------------------|
| cheque | Описание: Json string | Финансовый чек или счёт. Обязательно для запроса транзакции с фискализацией |

#### Структура строки JSON для параметра чека

Пример простой строки JSON для параметра cheque:
 
```http
{
  "cheque_type" : 1,
  "tax_system" : 1,
  "positions" : [
    {
      "quantity" : 2,
      "price" : 322.94,
      "tax" : 4,
      "description" : "Product/Service 1"
    },
    {
      "quantity" : 1,
      "price" : 500,
      "tax" : 4,
      "description" : "Product/Service 2"
    }
  ]
}
```

Параметры строки JSON:
 

| Параметр | Проверка | Comment | Описание: Possible values |
|-------------|-------------|------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| cheque_type | Десятичный | Тип/признак расчёта | 0 — доход, 1 — расход, 2 — возврат дохода, 3 — возврат расхода |
| tax_system | Десятичный | Описание: Tax system | 0 — общая система налогообложения, 1 — упрощённая система налогообложения доходов, 2 — упрощённая система «доходы минус расходы», 3 — единый налог на вменённый доход, 4 — единый сельскохозяйственный налог, 5 — патентная система налогообложения. |
| positions | Array | Массив товаров/услуг | Массив товаров/услуг |
| quantity | Десятичный | Количество товара/услуги | |
| price | Десятичный | Цена за товар/услугу с учётом скидок и наценок | |
| tax | Десятичный | Описание: value-added tax | 1 — НДС 22%, 2 — НДС 10%, 3 — НДС 0%, 4 — без НДС, 5 — НДС 22/122, 6 — НДС 10/110 |
| description | String(128) | Описание товара/услуги | |

> **Note:** Обратите внимание: общая стоимость всех товаров/услуг, указанных в массиве positions, должна быть равна значению параметра amount в запросе Sale.

#### Пример запроса транзакции с фискализацией

Этот пример тела запроса Server-To-Server Sale с фискализацией показывает, как правильно включить параметр чека. Пример ответа приведён в документации соответствующей команды API.
 
```http
client_orderid=902B4FF5
&order_desc=Test Order Description
&first_name=John
&last_name=Smith
&ssn=1267
&birthday=19820115
&address1=100 Main st
&city=Seattle
&state=WA
&zip_code=98102
&country=US
&phone=%2B12063582043
&cell_phone=%2B19023384543
&amount=700.00
&email=john.smith@gmail.com
&currency=USD
&ipaddress=65.153.12.232
&site_url=www.google.com
&credit_card_number=4538977399606732
&card_printed_name=CARD HOLDER
&expire_month=12
&expire_year=2099
&cvv2=123
&purpose=user_account1
&redirect_url=https://doc.payneteasy.ru/doc/dummy.htm
&server_callback_url=https://httpstat.us/200
&merchant_data=VIP customer
&cheque={ "cheque_type" : 1, "tax_system" : 1, "positions" : [ { "quantity" : 2, "price" : 100.00, "tax" : 4, "description" : "Product/Service 1" }, { "quantity" : 1, "price" : 500, "tax" : 4, "description" : "Product/Service 2" } ] }
&control=768eb8162fc361a3e14150ec46e9a6dd8fbfa483
```

### Forms Customization

#### Платёж Page Display Logic

```plantuml
  skinparam ConditionEndStyle hline
  : (1) Initiate transaction;
  if ((2) Additional Payer input required?) then (yes)
  : (3) return input form;
  : (4) submit form;
  else (no)
  endif
  if ((5) External form required?) then (yes)
  : (6) request external form from the payment provider;
  : (7) redirect to external form;
  : (8) submit form on payment provider side;
  else (no)
  endif
  : (9) show wait form;
  : (10) process transaction;
  : (11) show finish form or redirect \nto Connecting Party website;
```

(1) Транзакции могут инициироваться API-запросами, пакетной загрузкой или через виртуальный терминал в UI. Для каждого метода оплаты предусмотрена собственная логика отображения платёжной страницы.
 

> **Note:** Payment Cashier может содержать несколько транзакций, инициированных в рамках одного платёжного сеанса, поскольку для Плательщика может быть доступно несколько способов оплаты. Когда Плательщик выбирает вкладку оплаты, инициируется соответствующая вспомогательная транзакция. См. [Настройка страницы Payment Cashier](#payment-cashier-page-customization-reference).

(3) Для способа оплаты банковской картой форма отображается на стороне Платёжного Шлюза и может быть настроена. См. [Настройка страницы оплаты](#payment-page-customization-reference). Для некоторых других способов оплаты на стороне Платёжного Шлюза могут быть дополнительные формы. За подробностями обратитесь в службу поддержки Payneteasy.
 
(7) Некоторые методы оплаты требуют перенаправления плательщика на собственную форму. Эта форма не размещается Платёжным Шлюзом и не может быть настроена.
 
(9) Пока транзакция не достигнет финального статуса, Платёжный Шлюз отображает [Wait Form](#wait-page-customization-reference) для Плательщика.
 
(11) После достижения транзакцией окончательного статуса Платёжный Шлюз показывает плательщику [Finish Form](#finish-page-customization-reference) или выполняет [перенаправление](https://doc.payneteasy.ru/integration/API_commands/final_redirect.html.md) на сайт Присоединяющейся стороны.
 

#### Payment Page Customization

##### Payment Page Example

```html
<html>
<head>
<script type="text/javascript">
  function isCCValid(r){var n=r.length;if(n>19||13>n)return!1;
    for(i=0,s=0,m=1,l=n;i<l;i++)d=parseInt(r.substring(l-i-1,l-i),10)*m,s+=d>=10?d%10+1:d,1==m?m++:m--;
    return s%10==0?!0:!1}
</script>
</head>
<body>
<h3>Order #$!MERCHANT_ORDER_ID - $!ORDERDESCRIPTION</h3>
<h3>Total amount: $!AMOUNT $!CURRENCY to $!MERCHANT</h3>
<form action="${ACTION}" method="post">
  <div>Cardholder name: <input name="${CARDHOLDER}" type="text" maxlength="64"/></div>
  <div><label for="cc-number">Credit Card Number</label> <input id="cc-number" name="${CARDNO}" type="text" maxlength="19" autocomplete="cc-number"/></div>
  <div>Card verification value: <input name="${CVV2}" type="text" maxlength="4" autocomplete="off"/></div>

    Expiration date:
    <select class="expiry-month" name="${EXPMONTH}" size="1" autocomplete="cc-exp-month" >
      <option value="01">January</option><option value="02">February</option><option value="03">March</option>
      <option value="04">April</option><option value="05">May</option><option value="06">June</option>
      <option value="07">July</option><option value="08">August</option><option value="09">September</option>
      <option value="10">October</option><option value="11">November</option><option value="12">December</option>
    </select>
      <select class="expiry-year" id="cc-exp-year" name="${EXPYEAR}" size="1" autocomplete="cc-exp-year">
      ${EXPIRE_YEARS}
    </select>

  <div><label for="dest-number">Destination card number:</label> <input id="dest-number" name="${DESTINATIONCARDNO}" type="text" maxlength="19" autocomplete="off"/></div>
  $!{INTERNAL_SECTION}
  #if($!card_error)
  <div style="color: red;">$!card_error</div>
  #end
  <input name="submit" onclick="return isCCValid(document.getElementById('cardnumber').value);" type="submit" value="Pay"/>
</form>
</body>
</html>
```

> **Note:** Описанный ниже код позволяет передавать данные карты-получателя в транзакциях типа Transfer:

```html
<div><label for="dest-number">Destination card number:</label>
<input id="dest-number" name="${DESTINATIONCARDNO}" type="text" maxlength="19" autocomplete="off"/></div>
```

##### Payment Page Autofill

Если Присоединяющаяся сторона хочет использовать автозаполнение в платёжной форме, некоторые атрибуты элементов <id> <autocomplete> <label for> должны быть жёстко заданы следующим образом:

```html
<label for="cc-number">Credit Card Number</label><span class="form-label-comment">The 13-19 digits on the front of your card</span>
<input class="card-number-field" id="cc-number" name="${CARDNO}" type="text" maxlength="19" autocomplete="cc-number" />
```

Если необходимо использовать автозаполнение в форме transfer, определённые атрибуты элементов <id> <autocomplete> <label for> должны быть жёстко заданы следующим образом:

```html
#if ($INPUT_SOURCE_CARD_CARDHOLDER)

<li class="form-li">
    <label class="form-label" for="cc-name">Card printed name:</label>
    <input class="form-name-field" id="cc-name" name="${CARDHOLDER}" type="text" maxlength="50" autocomplete="cc-name" value="${CARDHOLDER_VALUE}"/>
</li>
#end
#if ($INPUT_SOURCE_CARD_CVV2)

<li class="form-li">
    <label class="form-label" for="${CVV2}">Card security code (CVV2/CVC2):</label>
    <input class="form-cvv-field" name="${CVV2}" id="${CVV2}" type="password" maxlength="4" autocomplete="off"/>
</li>
#end
#end
#if ($INPUT_DESTINATION_CARD)

#if($!DESTINATIONCARDNO)
<li class="form-li">
    <label class="form-label" for="${DESTINATIONCARDNO}">Destination card number:</label>
    <input class="form-number-field" id="${DESTINATIONCARDNO}" name="${DESTINATIONCARDNO}" type="text" maxlength="19" autocomplete="off"/>
</li>
#end
#end
```

Payneteasy имеет шаблон формы оплаты по умолчанию, поддерживающий автозаполнение. Если Присоединяющаяся сторона хочет добавить дополнительные поля для автозаполнения, для именования ссылок следует использовать эту [спецификацию](https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#autofill/).

##### Payment Page Template Macros

| Макрос имени поля | Field Value Macro | Описание |
|---------------------------------|---------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ${APPLE_PAY} | n/a | Кнопка покупки Apple Pay будет доступна, если используется этот макрос. Недоступно для транзакций Transfer. |
| ${GOOGLE_PAY} | n/a | Кнопка покупки Google Pay будет доступна, если используется этот макрос. Недоступно для транзакций Transfer. |
| ${CARDNO} | ${CARDNOVALUE} | Номер кредитной карты плательщика. |
| ${EXPMONTH} | n/a | Месяц окончания срока действия банковской карты. |
| ${EXPYEAR} | n/a | Год окончания срока действия банковской карты. |
| ${CVV2} | ${CVV2VALUE} | Код безопасности карты. Пример: 432 |
| ${CARDHOLDER} | ${CARDHOLDER_VALUE} | Карта printed название. |
| ${MERCHANT} | n/a | End point display название. |
| ${SKIN_VERSION} | n/a | Описание: CSS skin version. |
| ${ORDERDESCRIPTION} | n/a | Описание заказа. |
| ${CUSTOMER_FIRST_NAME} | n/a | Имя плательщика, отправленное Присоединяющейся стороной через входные параметры. |
| ${CUSTOMER_LAST_NAME} | n/a | Фамилия плательщика, отправленная Присоединяющейся стороной через входные параметры. |
| ${CUSTOMER_EMAIL} | n/a | Адрес электронной почты плательщика, отправленный Присоединяющейся стороной через входные параметры. |
| ${DESTINATIONCARDNO} | n/a | Номер кредитной карты получателя. Доступно для транзакций Transfer. |
| ${DESTINATION_CARD_TYPE} | n/a | Тип карты получателя. Доступно для транзакций Transfer. |
| ${DESTINATION_LAST_FOUR_DIGITS} | n/a | Последние четыре цифры карты получателя. Доступно для транзакций Transfer. |
| ${AMOUNT} | n/a | Сумма. |
| ${CURRENCY} | n/a | Currency. |
| ${DESTINATION_PURPOSE} | n/a | Назначение, отправленное Присоединяющейся стороной через входные параметры. |
| ${PAYNET_ORDER_ID} | n/a | Идентификатор заказа Payneteasy. |
| ${MERCHANT_ORDER_ID} | n/a | Идентификатор заказа Присоединяющейся Стороны. |
| ${refresh_interval} | n/a | Интервал обновления, рекомендуемый системой. |
| ${uuid} | n/a | Internal. |
| ${INTERNAL_SECTION} | n/a | Внутренний для интеграции i Frame. |
| ${CUSTOMER_IP_COUNTRY_ISO_CODE} | n/a | Страна плательщика, определённая по IP-адресу. |
| ${PREFERRED_LANGUAGE} | n/a | Язык Плательщика, переданный Присоединяющейся стороной через входные параметры. Недоступно для Account Verification. |
| ${BROWSER_LANGUAGE} | n/a | Язык плательщика, определённый настройками браузера. |
| ${CUSTOMER_LANGUAGE} | n/a | Язык Плательщика, переданный Присоединяющейся стороной через входные параметры или определяемый настройками браузера, если первый не задан. |
| ${MERCHANT_FORM_DATA} | n/a | Parameters sent in MERCHANT_FORM_DATA API parameter are parsed into macros with the same name, the parameter is url-encoded, example: testparam%3Dtest1%26mynewparam%3Dtest2 and is parsed into $MFD_testparam = test1 and $MFD_mynewparam = test2 macros in the form. Parameter name characters[a-zA-Z0-9], parameter value characters[a-zA-Z0-9], only characters = and & are allowed as control characters, 2MB max size. Not available for Account Verification. For example, this parameter can be used to display payment form in light/dark mode depending on the value passed by Connecting Party (e.g. pass merchant_form_data=theme%3Ddark in request and $MFD_theme macro placeholder on payment form will be changed to dark. |
| ${MIN_AMOUNT} | n/a | Этот макрос имеет значение, указанное в параметре minimum-transaction-amount исходного запроса. Его можно использовать для проверки суммы транзакции перед отправкой платёжной формы. Обратитесь к менеджеру поддержки, чтобы включить эту функцию. |
| ${MAX_AMOUNT} | n/a | Этот макрос имеет значение, указанное в параметре maximum-transaction-amount исходного запроса. Его можно использовать для проверки суммы транзакции перед отправкой платёжной формы. Обратитесь к менеджеру поддержки, чтобы включить эту функцию. |
| ${CUSTOMER_ZIP_CODE} | n/a | Генерирует почтовый индекс (ZIP), если он не был получен от Плательщика. Недоступно для Account Verification. |

#### Prefilled Cardholder Data in Payment Page

Данные держателя карты Плательщика, использованные для обработки предыдущей транзакции, можно токенизировать для будущего использования запросом к [/api/v2/create-card-ref/](https://doc.payneteasy.ru/integration/API_commands/api_v2_create-card-ref.html.md). Полученный токен cardrefid затем можно передавать в следующих запросах к соответствующему API. При отправке этого параметра все поля ввода данных держателя карты будут неизменяемыми и предварительно заполненными на странице оплаты. CVV не токенизируется и должен быть предоставлен Плательщиком на этой странице оплаты. Ниже приведён пример настройки формы для работы с предварительно заполненными данными держателя карты на странице оплаты.

> **Note:** Эта функция доступна только для типов транзакций [Sale](https://doc.payneteasy.ru/integration/api_use_cases/sale_form.html.md) и [Preauth](https://doc.payneteasy.ru/integration/api_use_cases/preauth_form_capture_and_cancel.html.md) и не может использоваться в [платёжной кассе](https://doc.payneteasy.ru/integration/api_use_cases/payment_cashier.html.md).

##### Prefilled Cardholder Data Payment Page Example

```html
<html>
<head>
</head>
<body>
  <h3>Order #$!MERCHANT_ORDER_ID - $!ORDERDESCRIPTION</h3>
  <h3>Total amount: $!AMOUNT $!CURRENCY to $!MERCHANT</h3>
  <h4>Card Holder: ${CARDHOLDER} </h4>
  <h4>Card Number: $!CARD_BIN ...... $!CARD_LAST4DIGITS </h4>
  <h4>Exp year: $!EXPYEAR_VALUE </h4>
  <h4>Exp month: $!EXPMONTH_VALUE </h4>
  <form action="${ACTION}" method="post">
    <div>Cvv: <input name="${CVV2}" type="text" maxlength="4" autocomplete="off"/></div>
    $!{INTERNAL_SECTION}
    #if($!card_error)
      <div style="color: red;">$!card_error</div>
    #end
    <input name="submit" type="submit" value="Pay"/>
  </form>
</body>
</html>
```

##### Prefilled Cardholder Data Payment Page Macros

| Макрос имени поля | Field Value Macro | Описание |
|---------------------|---------------------|-------------------------------------------------|
| ${CARDHOLDER} | n/a | Имя на карте плательщика. |
| ${CARD_BIN} | n/a | Описание: Full card number. |
| ${CARD_LAST4DIGITS} | n/a | Последние 4 цифры карты. |
| ${EXPMONTH_VALUE} | n/a | Значение месяца истечения срока действия карты. |
| ${EXPYEAR_VALUE} | n/a | Значение года истечения срока действия карты. |
| ${CVV2} | n/a | Описание: CVV2 card value. |

#### Wait Page Customization

##### Wait Page Template

Страница ожидания — форма, на которой плательщик остаётся до достижения транзакцией окончательного статуса.

```html
<html>
<head>
    <script type="text/javascript">
      function fc(t) {
        document.getElementById("seconds-remaining").innerHTML = t;
        (t > 0) ? setTimeout(function(){fc(--t);}, 1000) : document.checkform.submit();}
    </script>
</head>
<body onload="fc($!refresh_interval)">
    <h3>Order #$!MERCHANT_ORDER_ID - $!ORDERDESCRIPTION</h3>
    <h3>Total amount: $!AMOUNT $!CURRENCY to $!MERCHANT</h3>
    Please wait, your payment is being processed, remaining <span id="seconds-remaining">&nbsp;</span> seconds.
    <form name="checkform" method="post">
        <input type="hidden" name="tmp" value="$!uuid"/>
        $!{INTERNAL_SECTION}
        <input type="submit" value="Check" />
    </form>
</body>
</html>
```

> **Note:** Описанный ниже код не относится к Account Verification:

```html
<h3>Total amount: $!AMOUNT $!CURRENCY to $!MERCHANT</h3>
```

##### Wait Page Template Macros

| Макрос имени поля | Field Value Macro | Описание |
|---------------------------------|---------------------|---------------------------------------------------------------------------------------------------------------------------------------------|
| $!refresh_interval | n/a | Интервал обновления, рекомендуемый системой. |
| $!MERCHANT_ORDER_ID | n/a | Идентификатор заказа Присоединяющейся Стороны. |
| $!ORDERDESCRIPTION | n/a | Описание заказа. |
| $!AMOUNT | n/a | Сумма. Недоступно для Account verification. |
| $!CURRENCY | n/a | Валюта. Недоступно для Account verification. |
| $!MERCHANT | n/a | End point display название. |
| $!uuid | n/a | Internal. |
| $!{INTERNAL_SECTION} | n/a | Внутренний для интеграции i Frame. |
| ${SKIN_VERSION} | n/a | Описание: CSS skin version. |
| ${PAYNET_ORDER_ID} | n/a | Идентификатор заказа Payneteasy. |
| ${CUSTOMER_IP_COUNTRY_ISO_CODE} | n/a | Страна плательщика, определённая по IP-адресу. |
| ${PREFERRED_LANGUAGE} | n/a | Язык плательщика, отправленный Присоединяющейся стороной через входные параметры. |
| ${BROWSER_LANGUAGE} | n/a | Язык плательщика, определённый настройками браузера. |
| ${CUSTOMER_LANGUAGE} | n/a | Язык Плательщика, переданный Присоединяющейся стороной через входные параметры или определяемый настройками браузера, если первый не задан. |

#### Finish Page Customization

##### Finish Page Template

Форма, на которой плательщику показывается [окончательный статус](https://doc.payneteasy.ru/integration/statuses.html.md) его запроса.

```html
<html>
    <head>
    </head>
    <body>
        <h3>Processing of the payment has finished</h3>
        <h3>Order Invoice: $!{MERCHANT_ORDER_ID}</h3>
        <h3>Order ID: $!{PAYNET_ORDER_ID}</h3>
        <h3>Status: $!{STATUS}</h3>
        #if($ERROR_MESSAGE)
            <h3>Error: $!{ERROR_MESSAGE}</h3>
        #end
    </body>
</html>
```

##### Finish Page Macros

| Макрос имени поля | Field Value Macro | Описание |
|---------------------------------|---------------------|---------------------------------------------------------------------------------------------------------------------------------------------|
| ${STATUS} | n/a | Order статус. |
| ${PAYNET_ORDER_ID} | n/a | Описание: System order id. |
| ${MERCHANT_ORDER_ID} | n/a | Идентификатор заказа Присоединяющейся Стороны. |
| ${ERROR_MESSAGE} | n/a | Содержит причину отклонения или сведения об ошибке. |
| ${SKIN_VERSION} | n/a | Описание: CSS skin version. |
| ${CUSTOMER_IP_COUNTRY_ISO_CODE} | n/a | Страна плательщика, определённая по IP-адресу. |
| ${PREFERRED_LANGUAGE} | n/a | Язык плательщика, отправленный Присоединяющейся стороной через входные параметры. |
| ${BROWSER_LANGUAGE} | n/a | Язык плательщика, определённый настройками браузера. |
| ${CUSTOMER_LANGUAGE} | n/a | Язык Плательщика, переданный Присоединяющейся стороной через входные параметры или определяемый настройками браузера, если первый не задан. |
| ${AMOUNT} | n/a | Сумма. Недоступно для Account verification. |
| ${CURRENCY} | n/a | Валюта. Недоступно для Account verification. |
| ${DESCRIPTION} | n/a | Описание транзакции. Недоступно для Account verification. |
| ${DATE} | n/a | Дата транзакции. Недоступно для Account verification. |
| ${PAYNET_PROCESSING_DATE} | n/a | Дата обработки Payneteasy. Недоступно для Account verification. |
| ${RRN} | n/a | Номер ссылки на получение. Недоступно для Account verification. |
| ${AUTH_CODE} | n/a | Код авторизации. Недоступно для Account verification. |
| ${CARD_TYPE} | n/a | Тип карты. Недоступно для Account verification. |
| ${LAST_FOUR_DIGITS} | n/a | Последние четыре цифры карты. Недоступно для Account verification. |
| ${CUSTOMER_REDIRECT_URL} | n/a | URL, на который держатель карты будет перенаправлен после завершения транзакции. |

#### Payment Cashier Page Customization

> **Note:** Эта страница относится только к интеграции [Payment Cashier](https://doc.payneteasy.ru/integration/api_use_cases/payment_cashier.html.md).

##### Parallel Form Template Sample

Parallel Form — это форма для выбора Плательщиком одного из доступных способов оплаты для выполнения транзакции.

```http
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
</head>
<body>

<span id="countryIsoCode" style="display: none;">$!CUSTOMER_IP_COUNTRY_ISO_CODE</span>

    <input name="customer_language_code" id="iso" type="hidden" value="$CUSTOMER_LANGUAGE"/>
    #if (!$HAS_PARALLEL_FORM_PAYMENT_METHODS)
        <select id="countrySelector" onchange="onCountrySelected(this);">
            <option value="EU">Europe</option>
            
        </select>
    #end
    #if ($HAS_PARALLEL_FORM_PAYMENT_METHODS)

            <ul id="formTabs" class="form-tabs-ul">
                #foreach ($paymentMethod in $PARALLEL_FORM_PAYMENT_METHODS)
                    <li id="$!{paymentMethod.identifier}-FORM-button" class="form-tab-button#if($velocityCount == 1) form-tab-button-active form-tab-button-active-$!{paymentMethod.identifier}#end" #if($paymentMethod.iframe) onclick="chooseIframe('$!{paymentMethod.identifier}');" #end>
                        $!{paymentMethod.name}
                    </li>
                #end
            </ul>
            <select id="countrySelector" onchange="onCountrySelected(this);">
                <option value="EU">Europe</option>
                
            </select>

    #foreach ($paymentMethod in $PARALLEL_FORM_PAYMENT_METHODS)
        <div class="ssl-header ssl-header-$!{paymentMethod.identifier}" id="merchant-description-$!{paymentMethod.identifier}" #if ($velocityCount> 1) style="display: none;"#end>
            <span class="ssl-text">${MERCHANT}</span>

                <span class="flag-EN" id="flag-$!{paymentMethod.identifier}"></span>
                <select id="langSelector-$!{paymentMethod.identifier}" class="langSelector langSelector-$!{paymentMethod.identifier}" onchange="selectLang('$!{paymentMethod.identifier}');">
                    <option value="EN">English</option>
                    
                </select>

        <script>
            merchantОписаниеIds.push("merchant-description-$!{paymentMethod.identifier}");
            paymentMethodsCountries["$!{paymentMethod.identifier}"] = "$!{paymentMethod.countries}";
        </script>
    #end
    #end
    #if ($HAS_PARALLEL_FORM_PAYMENT_METHODS)
        #foreach ($paymentMethod in $PARALLEL_FORM_PAYMENT_METHODS)
            #if ($paymentMethod.iframe)
                <div class="frame-container-$!{paymentMethod.identifier} payment-method-iframe" id="$!{paymentMethod.identifier}-FORM" pneopen="#if ($velocityCount == 1)true#{else} false#end" pnesrc="$!paymentMethod.initSessionUrl" #if ($velocityCount> 1) style="display: none;"#end>
                    <iframe src="#if ($velocityCount == 1)$!paymentMethod.initSessionUrl#end" scrolling="#if $!{paymentMethod.identifier} == 'QIWI' || $!{paymentMethod.identifier} == 'ASTROPAY')yes#{else}no#end">
                    </iframe>

            #end
        #end
        <form id="waitForm" action="$!WAIT_FORM_URL">
            #foreach( $p in $WAIT_FORM_PARAMETERS )
                <input type="hidden" name="$p.key" value="$!p.value">
            #end
            
        </form>
    #end

</body>
</html>
```

Подробнее см. [Country Codes](https://doc.payneteasy.ru/integration/country_codes.html.md) и [Language Codes](https://doc.payneteasy.ru/integration/language_codes.html.md).

##### Parallel Form Macros

| Макрос имени поля | Field Value Macro | Описание |
|------------------------------------|---------------------|---------------------------------------------------------------------------------------------------------------------------------------------|
| $!CUSTOMER_IP_COUNTRY_ISO_CODE | n/a | Страна плательщика, определённая по IP-адресу. |
| $!CUSTOMER_COUNTRY_CODE | n/a | Страна выставления счёта клиента, переданная во входящем API-запросе. |
| $CUSTOMER_LANGUAGE | n/a | Язык Плательщика, переданный Присоединяющейся стороной через входные параметры или определяемый настройками браузера, если первый не задан. |
| $HAS_PARALLEL_FORM_PAYMENT_METHODS | n/a | Определяет доступность параллельных методов оплаты формы. |
| $payment Method | n/a | Объект метода оплаты. |
| $PARALLEL_FORM_PAYMENT_METHODS | n/a | Массив с доступными параллельными методами оплаты формы. |
| $!{payment Method.identifier} | n/a | Идентификатор метода оплаты. |
| $velocity Count | n/a | Порядковый номер метода оплаты. |
| $payment Method.iframe | n/a | Iframe метода оплаты. |
| $!{payment Method.name} | n/a | Описание: Payment method name. |
| ${MERCHANT} | n/a | End point display название. |
| $!{payment Method.countries} | n/a | Страны, установленные для этого метода оплаты. |
| $$!payment Method.init Session Url | n/a | URL для инициализации сессии метода оплаты. |
| $!WAIT_FORM_URL | n/a | Описание: Waiting form URL. |
| $p | n/a | Параметр формы ожидания. |
| $WAIT_FORM_PARAMETERS | n/a | Массив параметров формы ожидания. |
| $p.key | n/a | Ключ параметра формы ожидания. |
| $!p.value | n/a | Значение параметра формы ожидания. |
| $!{INTERNAL_SECTION} | n/a | Внутренний для интеграции i Frame. |

##### Parallel Form Scripts

Следующие скрипты Parallel Form необходимы для её работы. Первый скрипт следует добавить в тег <head> html-документа:

```html
<script type="text/javascript">
var merchantОписаниеIds = [];
var paymentMethodsCountries = {};
function isCCValid(r) {
    var n = r.length;
    if (n > 19 || 13 > n) return !1;
    for (i = 0, s = 0, m = 1, l = n; i < l; i++) d = parseInt(r.substring(l - i - 1, l - i), 10) * m, s += d >= 10 ? d % 10 + 1 : d, 1 == m ? m++ : m--;
    return s % 10 == 0 ? !0 : !1
}

function runPayment(t) {
    if (isCCValid(t)) {
        return !0;
    } else {
        document.getElementById('cardnumber').style.borderColor = '#fb860f';
        return !1;
    }
}

function chooseIframe(paymentMethodName) {
    var id = paymentMethodName + '-FORM';
    var iframes = document.getElementsByTagName('IFRAME');
    for (var i = 0; i < iframes.length; i++) {
        var iframe = iframes[i].parentNode;
        var isCurrent = iframe.id == id;
        iframe.style.display = isCurrent ? 'block' : 'none';
        if (isCurrent && iframe.getAttribute("pneopen") == 'false') {
            iframe.firstElementChild.src = iframe.getAttribute("pnesrc") + "?country=" + document.getElementById("countryIsoCode").innerText;
            iframe.setAttribute("pneopen", 'true');
        }
        var buttonElem = document.getElementById(iframe.id + '-button');
        buttonElem.className = (iframe.id == id) ? 'form-tab-button form-tab-button-active form-tab-button-active-' + paymentMethodName : 'form-tab-button';
    }
    var descriptionId = 'merchant-description-' + paymentMethodName;
    for (var i = 0; i < merchantОписаниеIds.length; i++) {
        var isCurrent = merchantОписаниеIds[i] == descriptionId;
        document.getElementById(merchantОписаниеIds[i]).style.display = isCurrent ? 'flex' : 'none';
    }
}

function pneInit() {
    window.pneMasterSessionProcessed = function() {
        document.getElementById('waitForm').submit()
    }
    foreach( $paymentMethod in $PARALLEL_FORM_PAYMENT_METHODS )
        if( $paymentMethod.default )chooseIframe('$!{paymentMethod.identifier}-FORM');
        break
    end
    end
}
</script>
```

Второй скрипт следует добавить в HTML-код перед закрывающим тегом </body>.

```html
<script type="text/javascript">
function updateTabsVisibility() {
    var countryCode = getSelectedCountryCode();
    var paymentMethods = getPaymentMethods();
    var someIframeShown = false;
    for (var i = 0; i < paymentMethods.length; i++) {
        var paymentMethod = paymentMethods[i];
        var visible = isPaymentMethodVisible(paymentMethod, countryCode);
        updateTabVisibility(paymentMethod, visible);
        if (visible && !someIframeShown) {
            chooseIframe(paymentMethod);
            someIframeShown = true;
        }
    }
}

function getSelectedCountryCode() {
    return document.getElementById('countryIsoCode').innerText;
}

function setSelectedCountryCode(countryCode) {
    document.getElementById('countryIsoCode').innerText = countryCode;
}

function getPaymentMethods() {
    var lis = document.getElementById("formTabs").children;
    var result = [];
    for (var i = 0; i < lis.length; i++) {
        var li = lis[i];
        var id = li.id;
        if (id != null) {
            result.push(id.substring(0, id.indexOf("-FORM-button")));
        }
    }
    return result;
}

function isPaymentMethodVisible(paymentMethodId, countryCode) {
    if (paymentMethodsCountries[paymentMethodId] == "") {
        return true;
    } else {
        return paymentMethodsCountries[paymentMethodId].indexOf(countryCode) > -1;
    }
}

function updateTabVisibility(paymentMethod, visible) {
    document.getElementById(paymentMethod + '-FORM-button').style.display = visible ? 'inline-block' : 'none';
}

function onCountrySelected(selector) {
    setSelectedCountryCode(selector.value);
    updateTabsVisibility();
}

document.addEventListener('DOMContentLoaded', function() {
    pneInit();
    updateTabsVisibility();
    document.getElementById('countrySelector').value = getSelectedCountryCode();
});

function syncLangSelectors(ISO) {
    var methods = getPaymentMethods();
    for (var i = 0; i < methods.length; i++) {
        document.getElementById('flag-' + methods[i]).className = "flag-" + ISO;
        document.getElementById('langSelector-' + methods[i]).value = ISO;
    }
}

var ISO = document.getElementById('iso').value.toUpperCase();
ISO = 'EN';
document.getElementById('iso').value = ISO;
syncLangSelectors(ISO);

document.addEventListener('DOMContentLoaded', function() {
    //l10n();
});

function selectLang(method) {
    var ISO = document.getElementById('langSelector-' + method).value.toUpperCase();
    document.getElementById('iso').value = ISO;

    syncLangSelectors(ISO);
    //l10n();
}
</script>
```

Если необходимо определить страну биллинга Плательщика по данным, переданным через API, используется $!CUSTOMER_COUNTRY_CODE. Если необходимо определить страну биллинга Плательщика по IP-адресу из браузера Плательщика, используйте $!CUSTOMER_IP_COUNTRY_ISO_CODE; страна биллинга также изменится в соответствии с IP.

Основной набор по стране выставления счёта:

```html
<span id="countryIsoCode" style="display: none;">$!CUSTOMER_COUNTRY_CODE</span>
<input name="customer_language_code" id="iso" type="hidden" value="$CUSTOMER_LANGUAGE"/>

```

### Правила взаимодействия с API

### Описание: Account balance

#### Введение

API Get Balance помогают Присоединяющейся стороне проверить текущие балансы, настроенные в Платёжном Шлюзе. Балансы можно запрашивать по Endpoint (для конкретного провайдера), по Merchant (конкретный баланс или все балансы) и по Manager (конкретный баланс или все балансы). Кроме того, пользователи с учётной записью Manager могут загружать корректировки баланса через API.

#### Get Balance Flow

```plantuml
skinparam roundcorner 20
skinparam sequenceArrowThickness 1
skinparam maxmessagesize 1200
skinparam sequenceParticipant underline
participant "Connecting Party" as A
participant "Payneteasy" as B
autonumber
A --> B: /api/v2/get-balance/
activate B
A <-- B: balance amount
deactivate B
```

(1) Для реализации запроса get balance by Endpoint см. [/api/v2/get-balance/](https://doc.payneteasy.ru/integration/API_commands/api_v2_get_balance.html.md).
 

#### Get Balance Merchant Flow

```plantuml
skinparam roundcorner 20
skinparam sequenceArrowThickness 1
skinparam maxmessagesize 1200
skinparam sequenceParticipant underline
participant "Connecting Party" as A
participant "Payneteasy" as B
autonumber
A --> B: /api/v2/get-balance/merchant/
activate B
A <-- B: get balance by Merchant
deactivate B
```

(1) Для реализации запроса get balance by Merchant см. [/api/v2/get-balance/merchant/](https://doc.payneteasy.ru/integration/API_commands/api_v2_get_balance_merchant.html.md).
 

#### Get Balance Manager Flow

```plantuml
skinparam roundcorner 20
skinparam sequenceArrowThickness 1
skinparam maxmessagesize 1200
skinparam sequenceParticipant underline
participant "Connecting Party" as A
participant "Payneteasy" as B
autonumber
A --> B: /api/v2/get-balance/manager/
activate B
A <-- B: get balance by Manager
deactivate B
```

(1) Для реализации запроса get balance by Manager см. [/api/v2/get-balance/manager/](https://doc.payneteasy.ru/integration/API_commands/api_v2_get_balance_manager.html.md).
 

#### Get Balance Adjustments Flow

```plantuml
skinparam roundcorner 20
skinparam sequenceArrowThickness 1
skinparam maxmessagesize 1200
skinparam sequenceParticipant underline
participant "Connecting Party" as A
participant "Payneteasy" as B
autonumber
A --> B: /registry/upload/
activate B
A <-- B: Get Balance Adjustments
deactivate B
```

(1) Для реализации запроса Get Balance Adjustments см. [Get Balance Adjustments](https://doc.payneteasy.ru/integration/API_commands/accounts_adjustments.html.md).

### Глоссарий

| Платёжный Шлюз | Система Payneteasy, обеспечивающая приём, обработку, хранение и передачу платёжных данных между участниками платёжного процесса (плательщиком, Присоединяющейся стороной, платёжными учреждениями). |
|-----------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Присоединяющаяся Сторона | Сторонняя организация, которая реализует интеграцию с Платёжным Шлюзом согласно API Use-cases с помощью команд API. |
| Торговец | Учётная запись пользователя в Платёжном Шлюзе, предоставленная представителям торговца. |
| Менеджер | Учётная запись пользователя в Платёжном Шлюзе, предоставленная представителям PSP или платёжных учреждений. |
| Реселлер | Учётная запись пользователя в Платёжном Шлюзе, предоставляемая агенту, который привлекает торговцев для PSP и платёжных учреждений. |
| Payer | Лицо, которое оплачивает товары или услуги, предоставляемые Присоединяющейся стороной. Также называется Клиентом. |
| Sender | Лицо, инициирующее отправку средств со своей стороны другому лицу. |
| Receiver | Лицо, запрашивающее/получающее средства от отправителя или Присоединяющейся стороны. |
| Acquirer | Участник платёжной системы, имеющий лицензию на приём платёжных карт. |
| Issuer | Участник платёжной системы, имеющий лицензию на выпуск платёжных карт. |
| Endpoint | Уникально идентифицированный терминал в Платёжном Шлюзе, который присвоен Торговцу и должен передаваться в командах API Платёжного Шлюза. |
| Группы терминалов | Набор конечных точек с различными валютами, объединённый и доступный как одна логическая уникально идентифицируемая единица, которую необходимо указывать в командах API Платёжного Шлюза вместо конечной точки. |
| Master Endpoint | Специальные endpoint, объединяющие вспомогательные endpoint. При оплате плательщик может выбрать нужный метод оплаты в платёжной форме. При выборе метода оплаты на стороне Платёжного Шлюза вызываются вспомогательные транзакции на соответствующих endpoint, что приводит к инициированию разных методов оплаты. Актуально для интеграции Payment Cashier. См. [Payment Cashier](https://doc.payneteasy.ru/integration/api_use_cases/payment_cashier.html.md). |
| Auxiliary Endpoint | Обычные конечные точки, объединённые главной конечной точкой, имеют собственные настройки и формы. Каждая вспомогательная конечная точка имеет собственный способ оплаты: кредитная карта, банковский перевод, криптовалюта и т. д. Актуально для интеграции Payment Cashier. См. [Payment Cashier](https://doc.payneteasy.ru/integration/api_use_cases/payment_cashier.html.md). |
| Проект | Сущность Платёжного Шлюза, которая определяет условия приёма платёжного сообщения и его дальнейшую маршрутизацию к подключённому Процессору. |
| Шлюз | Набор параметров, идентифицирующих учётную запись, зарегистрированную во внешней системе обработки. Эти параметры могут использоваться для обработки платёжных данных во внешней системе с помощью протокола обмена сообщениями, реализованного в Процессоре. |
| Процессор | Внутренняя сущность Платёжного Шлюза, которая инкапсулирует взаимодействие со сторонней процессинговой системой (например, Эквайером). |
| PAN | Номер платёжной карты или основной номер счёта. |
| RPI | Номер идентификации рекуррентного платежа. Идентификатор токенизированных данных держателя карты, собранных в первоначальной транзакции или зарегистрированных без транзакции, который может многократно использоваться для рекуррентных транзакций. Некоторые API Платёжного Шлюза предназначены для приёма RPI, другие — для приёма Описание: Card reference ID. Подробности см. в соответствующем сценарии использования. |
| Описание: Card reference ID | Идентификатор токенизированных данных держателя карты, собранных в первоначальной транзакции и пригодных для многократного использования в рекуррентных транзакциях. Некоторые API Платёжного Шлюза принимают RPI, другие — Описание: Card reference ID. Подробнее см. соответствующий сценарий использования. |
| Form | Форма, в которой указываются платёжные данные. В Form API платёжная форма размещается на стороне Платёжного Шлюза. В Direct API платёжная форма размещается на стороне Присоединяющейся стороны. |
| ACS | 3DS Access Control Server. |
| 3ds Метод | Скриптовый вызов, предоставляемый интегратором 3DS и размещаемый на сайте запросчика 3DS (платёжной форме Присоединяющейся стороны или платёжной форме Платёжного Шлюза). При необходимости используется для получения дополнительной информации о браузере и принятия решений на основе риска. |
| Pa Req | Сообщение запроса аутентификации платежа. См. Pa Req в схеме принятия решений 3DS соответствующего Use-Case. |
| Pa Res | Сообщение ответа аутентификации платежа. См. Pa Res в схеме принятия решений 3DS соответствующего Use-Case. |
| CReq | Сообщение запроса Challenge. См. CReq в схеме принятия решений 3DS соответствующего use case. |
| CRes | Сообщение ответа Challenge. См. CRes в схеме принятия решений 3DS соответствующего use case. |

### Пример запроса со страхованием

```http
client_orderid=902B4FF5
&order_desc=Test Order Description
&first_name=John
&last_name=Smith
&ssn=1267
&birthday=19820115
&address1=100 Main st
&city=Seattle
&state=WA
&zip_code=98102
&country=US
&phone=+12063582043
&cell_phone=+19023384543
&amount=10.42
&insurance_amount=10
&email=john.smith@gmail.com
&currency=AED
&ipaddress=65.153.12.232
&site_url=www.google.com
&purpose=user_account1
&redirect_url=https://doc.payneteasy.ru/doc/dummy.htm
&server_callback_url=https://httpstat.us/200
&merchant_data=VIP customer
&merchant_form_data=testparam%3Dtest1%26mynewparam%3Dtest2
&insured_person_first_name=John
&insured_person_last_name=Doe
&insured_person_middle_name=J
&insured_person_birthday=19820115
&insured_person_document_series=4111
&insured_person_document_number=562297
&insured_person_document_issue_date=19970117
&insured_person_document_issuer_name=First document department
&insured_person_registration_address=Seattle 100 Main st
&insured_person_phone=+12063582043
&insured_person_email=john.smith@gmail.com
&card_insurance_agreement_number=210H3FIM2426726391
&card_insurance_agreement_sell_date=20210115
&card_insurance_agreement_start_date=20210116
&card_insurance_agreement_end_date=20250115
&card_insurance_agreement_amount=20000
&card_insurance_agreement_bonus=4000
&control=c1ac1d532c96ddde35ad87be8b80a3d5aa0f2f48
```

### Внутренние ошибки Платёжного Шлюза

| ИД ошибки | Сообщение ошибки | Тип ошибки | Код фильтра |
|-------------|---------------------------------------------------------------------------------------------|--------------|---------------|
| 1 | MALFORMED_REQUEST | INTERNAL | |
| 2 | INVALID_CONTROL_CODE | INTERNAL | |
| 3 | MERCHANT_CONTROL_KEY_NOT_FOUND | INTERNAL | |
| 4 | ENDPOINT_ID_NOT_SPECIFIED | INTERNAL | |
| 5 | ERROR_PARSING_ENDPOINT_ID | INTERNAL | |
| 6 | ILLEGAL_STATE_FOR_RETURN | INTERNAL | |
| 7 | MERCHANT_NOT_FOUND | INTERNAL | |
| 8 | BAD_CREDIT_CARD_NUMBER | INTERNAL | |
| 9 | BAD_CREDIT_CARD_CVV | INTERNAL | |
| 10 | NO_CARD_PRINTED_NAME | INTERNAL | |
| 17 | LANGUAGE_NOT_FOUND_BY_CODE | INTERNAL | |
| 101 | ORDER_NOT_FOUND | INTERNAL | |
| 102 | INTERNAL_ERROR | INTERNAL | |
| 103 | CREATE_ORDER_ERROR | INTERNAL | |
| 104 | SESSION_VALIDATION_ERROR | INTERNAL | |
| 105 | CARD_NUMBER_ERROR | INTERNAL | |
| 106 | SESSION_STATUS_ERROR | INTERNAL | |
| 107 | WRONG_REVERSAL_AMOUNT | INTERNAL | |
| 108 | RETURN_AMOUNT_REQUIRES_CURRENCY | INTERNAL | |
| 109 | PARTIAL_REVERSAL_NOT_SUPPORTED | INTERNAL | |
| 111 | ALREADY_CAPTURED | INTERNAL | |
| 112 | CAPTURE_ALREADY_STARTED | INTERNAL | |
| 114 | WRONG_CAPTURE_AMOUNT | INTERNAL | |
| 115 | CAPTURE_AMOUNT_REQUIRES_CURRENCY | INTERNAL | |
| 116 | PARTIAL_CAPTURE_NOT_SUPPORTED | INTERNAL | |
| 117 | ACKNOWLEDGEMENT_CALL_NETWORK_ERROR | INTERNAL | |
| 118 | ACKNOWLEDGEMENT_CALL_ERROR | INTERNAL | |
| 119 | ACKNOWLEDGEMENT_INVALID_RESPONSE | INTERNAL | |
| 120 | ACKNOWLEDGEMENT_VALIDATION_ERROR | INTERNAL | |
| 121 | CARD_DATA_NOT_FOUND | INTERNAL | |
| 122 | CARD_DATA_RETRIEVAL_ERROR | INTERNAL | |
| 123 | INVALID_CALLBACK_URL | INTERNAL | |
| 501 | PAYMENT_FORM_CANCELED | INTERNAL | |
| 1001 | ERROR_CREATING_ORDER_INFO | INTERNAL | |
| 1002 | ERROR_CREATING_TRANSACTION | INTERNAL | |
| 1003 | CREATE_TRANSACTION_ERROR | INTERNAL | |
| 1004 | CREATE_SESSION_ERROR | INTERNAL | |
| 1005 | PROCESSING_EMPTY_GATES_LIST | INTERNAL | |
| 1006 | FILTERING_IS_FAILED | INTERNAL | |
| 1007 | CHECKING_IS_FAILED | INTERNAL | |
| 1008 | SECURE_3D_FAILED | INTERNAL | 1050 |
| 1009 | RANDOM_SUM_CHECK_FAILED | INTERNAL | 1051 |
| 1010 | PHONE_CHECK_FAILED | INTERNAL | 1057 |
| 1011 | RANDOM_SUM_CHECK_CANCELLED | INTERNAL | |
| 1012 | PHONE_CHECK_CANCELLED | INTERNAL | |
| 1013 | SYSTEM_UNAVAILABLE | INTERNAL | |
| 1014 | CARDNO_ENROLLED_CHECK_FAILED | INTERNAL | 1058 |
| 1015 | SECURE_3D_TIMEOUT | INTERNAL | |
| 1016 | MPI_STATUS_CHECK_FAILED | INTERNAL | 1059 |
| 1017 | ECI_STATUS_CHECK_FAILED | INTERNAL | 1060 |
| 1018 | CAVV_STATUS_CHECK_FAILED | INTERNAL | 1061 |
| 1019 | GATE_DESCRIPTOR_CHECK_CANCELLED | INTERNAL | |
| 1020 | GATE_DESCRIPTOR_CHECK_FAILED | INTERNAL | 1062 |
| 1021 | RAPIDA_BALANCE_CHECK_FAILED | INTERNAL | |
| 2001 | PROCESSOR_BAD_MESSAGE | INTERNAL | |
| 2002 | PROCESSOR_CONNECT_TIME_OUT | INTERNAL | |
| 2003 | PROCESSOR_GATE_IO_ERROR_ON_RESPONSE | INTERNAL | |
| 2004 | PROCESSOR_CAN_NOT_GET_EXTERNAL_ID | INTERNAL | |
| 2005 | PROCESSOR_OR_GATE_NOT_CONFIGURED_PROPERLY | INTERNAL | |
| 2006 | PROCESSOR_ERROR_ON_GATE | INTERNAL | |
| 2007 | PROCESSOR_NETWORK_PROBLEM | INTERNAL | |
| 2008 | PROCESSOR_INTERNAL_ERROR | INTERNAL | |
| 3001 | PROCESS_CALLBACK_UNKNOWN_RESULT_TYPE | INTERNAL | |
| 3002 | PROCESS_CALLBACK_NOT_VERIFIED | INTERNAL | |
| 10000 | Транзакция была отклонена | INTERNAL | |
| N/A | Описание: project disabled | INTERNAL | |
| N/A | Описание: traffic disabled | INTERNAL | |
| N/A | Описание: end point disabled | INTERNAL | |
| N/A | Описание: merchant disabled | INTERNAL | |
| N/A | Описание: gate not found | INTERNAL | |
| N/A | Описание: zero weights | INTERNAL | |
| N/A | Сбой проверки поддержки нативного ребилла | INTERNAL | |
| N/A | Несоответствие recurrent processor шлюза | INTERNAL | |
| N/A | Несоответствие recurrent mid шлюза | INTERNAL | |
| 10002 | Кредитная карта в чёрном списке | FILTER | 1022 |
| 10003 | Достигнут лимит конечной точки. Транзакция может быть обработана только завтра. | FILTER | 1014 |
| 10004 | Достигнут лимит конечной точки. Транзакция может быть обработана только в следующем месяце. | FILTER | 1015 |
| 10010 | Клиент уже приобрёл этот товар. | FILTER | 1018 |
| 10011 | Клиент (карта) уже приобрёл этот товар в течение периода. | FILTER | 1020 |
| 10012 | Клиент (BIN и электронная почта) уже приобрёл этот товар в течение периода. | FILTER | 1021 |
| 10024 | Слишком много номеров карт с одного IP-адреса и электронной почты | FILTER | 1034 |
| 10025 | Электронная почта, IP и держатель клиента отфильтрованы | FILTER | 1035 |
| 10027 | Issuer country in blacklist | FILTER | |
| 10028 | Country in blacklist | FILTER | |
| 10029 | Эмитент кредитной карты в чёрном списке | FILTER | 1039 |
| 10030 | IP-адрес в чёрном списке | FILTER | 1040 |
| 10031 | Описание: Email blacklisted | FILTER | 1041 |
| 10033 | Email server blacklisted | FILTER | |
| 10046 | Disloyal customer | FILTER | |
| 10067 | Целевая кредитная карта в чёрном списке | FILTER | 1077 |
| 10068 | Описание: Email blacklisted | FILTER | 1078 |
| 10069 | Получатель в чёрном списке | FILTER | 1079 |
| 10094 | Кредитная карта в чёрном списке | FILTER | 1104 |
| 10095 | Целевая кредитная карта в чёрном списке | FILTER | 1105 |
| 10096 | IP-адрес в чёрном списке | FILTER | 1106 |
| 10097 | Описание: Email blacklisted | FILTER | 1107 |
| 10098 | Получатель в чёрном списке | FILTER | 1108 |
| 10106 | Достигнут дневной общий лимит торговца | FILTER | 1116 |
| 10107 | Достигнут месячный общий лимит торговца | FILTER | 1117 |
| 10108 | Достигнут дневной лимит 3D-Secure торговца | FILTER | 1118 |
| 10109 | Достигнут месячный лимит 3D-Secure торговца | FILTER | 1119 |
| 10110 | Достигнут дневной лимит не-3D-Secure торговца | FILTER | 1120 |
| 10111 | Достигнут месячный лимит не-3D-Secure торговца | FILTER | 1121 |
| 10113 | Billing country in blacklist | FILTER | |
| 10116 | Достигнут дневной общий лимит торговца для Процессора | FILTER | 1126 |
| 10117 | Достигнут месячный общий лимит торговца для Процессора | FILTER | 1127 |
| 10118 | Достигнут дневной лимит 3D-Secure торговца для Процессора | FILTER | 1128 |
| 10119 | Достигнут месячный лимит 3D-Secure торговца для Процессора | FILTER | 1129 |
| 10120 | Достигнут дневной лимит не-3D-Secure торговца для Процессора | FILTER | 1130 |
| 10121 | Достигнут месячный лимит не-3D-Secure торговца для Процессора | FILTER | 1131 |
| 10125 | Эмитент целевой кредитной карты в чёрном списке | FILTER | 1135 |
| 10128 | Общий балл фильтра достиг порога (100) | FILTER | 1138 |
| 10130 | Достигнут дневной лимит выплат торговца | FILTER | 1140 |
| 10131 | Достигнут месячный лимит выплат торговца | FILTER | 1141 |
| 10132 | Достигнут дневной лимит выплат торговца для Процессора | FILTER | 1142 |
| 10133 | Достигнут месячный лимит выплат торговца для Процессора | FILTER | 1143 |
| 10134 | Описание: Limit reached | FILTER | 1144 |
| 10135 | Нарушение правил PSP для транзакции без CVV (CANCEL) | FILTER | 1145 |
| 10136 | Нарушение правил PSP для транзакции без CVV (PICKUP) | FILTER | 1146 |
| 10137 | Billing country blacklisted for merchant | FILTER | |
| 10138 | IP-address country blacklisted for merchant | FILTER | |
| 10139 | Customer e-mail blacklisted for merchant | FILTER | |
| 10140 | Customer fingerprint blacklisted for merchant | FILTER | |
| 10141 | Customer ip-address blacklisted for merchant | FILTER | |
| 10142 | Customer purpose blacklisted for merchant | FILTER | |
| 10143 | Destination card bin blacklisted for merchant | FILTER | |
| 10144 | Destination card country blacklisted for merchant | FILTER | |
| 10145 | Destination card number blacklisted for merchant | FILTER | |
| 10146 | Destination card type blacklisted for merchant | FILTER | |
| 10147 | E-mail domain blacklisted for merchant | FILTER | |
| 10148 | Source card bin blacklisted for merchant | FILTER | |
| 10149 | Source card country blacklisted for merchant | FILTER | |
| 10150 | Source card number blacklisted for merchant | FILTER | |
| 10151 | Source card type blacklisted for merchant | FILTER | |
| 10152 | Merchant loyal customer e-mail check failed | FILTER | |
| 10153 | Merchant loyal customer purpose check failed | FILTER | |
| 10154 | Merchant loyal destination card number check failed | FILTER | |
| 10155 | Merchant loyal source card number check failed | FILTER | |
| 10156 | Customer e-mail blacklisted for manager | FILTER | |
| 10157 | Customer fingerprint blacklisted for manager | FILTER | |
| 10158 | Customer ip-address blacklisted for manager | FILTER | |
| 10159 | Customer purpose blacklisted for manager | FILTER | |
| 10160 | Destination card number blacklisted for manager | FILTER | |
| 10161 | E-mail domain blacklisted for manager | FILTER | |
| 10162 | Source card number blacklisted for manager | FILTER | |
| 10163 | Manager loyal customer e-mail check failed | FILTER | |
| 10164 | Manager loyal customer purpose check failed | FILTER | |
| 10165 | Manager loyal destination card number check failed | FILTER | |
| 10166 | Manager loyal source card number check failed | FILTER | |
| 10168 | Merchant loyal customer e-mail + source card number end check failed | FILTER | |
| 10169 | Customer e-mail + source card number blacklisted for merchant | FILTER | |
| 10183 | Merchant loyal customer e-mail + source card number check failed | FILTER | |
| 10184 | Merchant loyal customer phone + source card number check failed | FILTER | |
| 10185 | Merchant loyal customer purpose + source card number check failed | FILTER | |
| 10186 | Merchant loyal customer fingerprint + source card number check failed | FILTER | |
| 10193 | Manager loyal customer e-mail + source card number check failed | FILTER | |
| 10194 | Source card mask blacklisted for merchant | FILTER | |
| 10195 | Destination card mask blacklisted for merchant | FILTER | |
| 10196 | Source card mask blacklisted for manager | FILTER | |
| 10197 | Destination card mask blacklisted for manager | FILTER | |
| 10260 | Manager loyal destination card mask check failed | FILTER | |
| 10261 | Merchant loyal source card mask check failed | FILTER | |
| 10262 | Merchant loyal destination card mask check failed | FILTER | |
| 10263 | Manager loyal source card mask check failed | FILTER | |
| 10271 | Customer phone number blacklisted for manager | FILTER | |
| 10272 | Customer phone number blacklisted for merchant | FILTER | |
| 15027 | Электронная почта клиента в чёрном списке для шлюза | FILTER | |
| 15028 | Отпечаток клиента в чёрном списке для шлюза | FILTER | |
| 15029 | IP-адрес клиента в чёрном списке для шлюза | FILTER | |
| 15030 | Назначение клиента в чёрном списке для шлюза | FILTER | |
| 15031 | Номер карты получателя в чёрном списке для шлюза | FILTER | |
| 15032 | Домен электронной почты в чёрном списке для шлюза | FILTER | |
| 15033 | Номер карты источника в чёрном списке для шлюза | FILTER | |
| 15010 | Gate loyal card number check failed | FILTER | |
| 15168 | Gate loyal destination card mask check failed | FILTER | |
| 15169 | Gate loyal destination card mask check failed | FILTER | |
| 15177 | Gate auto loyal customer email check failed | FILTER | |
| 15178 | Gate loyal source card mask and expiration date check failed | FILTER | |
| 15179 | Gate loyal source card mask and country billing check failed | FILTER | |
| 15180 | Gate loyal source card mask extended check failed | FILTER | |
| 15181 | Gate loyal destination card mask extended check failed | FILTER | |
| 18042 | Processor loyal source card number check failed | FILTER | |
| 18043 | Processor loyal destination card number check failed | FILTER | |
| 18110 | Processor loyal source card mask check failed | FILTER | |
| 18111 | Processor loyal destination card mask check failed | FILTER | |
| 15038 | BIN карты получателя в чёрном списке для Процессора | FILTER | |
| 15039 | Страна карты получателя в чёрном списке для Процессора | FILTER | |
| 15040 | BIN карты источника в чёрном списке для Процессора | FILTER | |
| 15041 | Страна карты источника в чёрном списке для Процессора | FILTER | |
| 10001 | Повторный запрос | FILTER | 1007 |
| 10090 | Нарушение правил Visa для предавторизованной транзакции (DELAY) | FILTER | 1100 |
| 15060 | Сумма транзакции меньше минимально допустимой суммы шлюза | FILTER | |
| 15019 | Сумма транзакции больше максимально допустимой суммы шлюза | FILTER | |
| 15062 | Страна выставления счёта в чёрном списке для шлюза | FILTER | |
| 15063 | Страна IP-адреса в чёрном списке для шлюза | FILTER | |
| 15064 | Страна карты получателя в чёрном списке для шлюза | FILTER | |
| N/A | Достигнут баланс конечной точки | FILTER | |
| N/A | Все лимиты MID достигнуты | FILTER | |
| N/A | Шлюз пропущен в цепочке для карты и сообщения об ошибке | FILTER | |
| N/A | Шлюз пропущен в цепочке для карты и ошибки | FILTER | |
| N/A | Страна карты источника в чёрном списке для Процессора | FILTER | |
| N/A | Достигнута ёмкость лимитов обработки, обратитесь к менеджеру учётной записи | FILTER | |
| N/A | Достигнута ёмкость лимитов баланса, обратитесь к менеджеру учётной записи | FILTER | |
| N/A | Все шлюзы были отфильтрованы | FILTER | |

Besides the mentioned errors, handling of system filter codes and text messages should be implemented.
Full list of such filters can be found on transaction_filters

\* у каждого эквайера свой список ошибок и их кодов, обратитесь в службу поддержки для получения релевантного списка ошибок на промышленной среде.

### Joomla / Virtue Mart

The Payneteasy plugin for Joomla adds Payneteasy as a payment method to a
[Joomla](https://www.joomla.org/) store built on the [Virtue Mart](https://virtuemart.net/)
shopping cart component. Once installed and configured, customers can pay by card through
Payneteasy during Virtue Mart checkout.

A live demonstration shop with a Payneteasy Joomla plugin installed is available at
[joomla.codetime.net](https://joomla.codetime.net/).

> **Note:** This section describes the current plugin, [php-plugin-joomla-2](https://github.com/payneteasy/php-plugin-joomla-2), which targets Joomla + Virtue Mart and is distributed as a ready-to-install `payneteasy.zip` package. The earlier plugin for the Joom Shopping shopping cart is still available separately at [php-plugin-joomshopping](https://github.com/payneteasy/php-plugin-joomshopping); its installation (Composer build) and configuration differ from the steps below.

#### Source code

The plugin source is published on Git Hub at [payneteasy/php-plugin-joomla-2](https://github.com/payneteasy/php-plugin-joomla-2).

### Коды языков

#### Двухбуквенные коды языков

| ИД страны | Страна | Код |
|-------------|--------------------------------|-------|
| 1 | Afar | aa |
| 2 | Abkhazian | ab |
| 3 | Afrikaans | af |
| 4 | Akan | ak |
| 5 | Albanian | sq |
| 6 | Amharic | am |
| 7 | Arabic | ar |
| 8 | Aragonese | an |
| 9 | Assamese | as |
| 10 | Avaric | av |
| 11 | Avestan | ae |
| 12 | Aymara | ay |
| 13 | Azerbaijani | az |
| 14 | Bashkir | ba |
| 15 | Bambara | bm |
| 16 | Basque | eu |
| 17 | Belarusian | be |
| 18 | Bengali | bn |
| 19 | Bihari languages | bh |
| 20 | Bislama | bi |
| 21 | Tibetan | bo |
| 22 | Bosnian | bs |
| 23 | Breton | br |
| 24 | Bulgarian | bg |
| 25 | Burmese | my |
| 26 | Catalan Valencian | ca |
| 27 | Czech | cs |
| 28 | Chamorro | ch |
| 29 | Chechen | ce |
| 30 | Church Slavic | cu |
| 31 | Chuvash | cv |
| 32 | Cornish | kw |
| 33 | Corsican | co |
| 34 | Cree | cr |
| 35 | Welsh | cy |
| 36 | Danish | da |
| 37 | German | de |
| 38 | Divehi Maldivian | dv |
| 39 | Dutch Flemish | nl |
| 40 | Dzongkha | dz |
| 41 | Greek, Modern | el |
| 42 | English | en |
| 43 | Esperanto | eo |
| 44 | Estonian | et |
| 45 | Ewe | ee |
| 46 | Faroese | eo |
| 47 | Persian | fa |
| 48 | Fijian | fj |
| 49 | Finnish | fi |
| 50 | French | fr |
| 51 | Western Frisian | fy |
| 52 | Fulah | ff |
| 53 | Georgian | ka |
| 54 | Gaelic Scottish Gaelic | gd |
| 55 | Irish | ga |
| 56 | Galician | gl |
| 57 | Manx | gv |
| 58 | Guarani | gn |
| 59 | Gujarati | gu |
| 60 | Haitian Haitian Creole | ht |
| 61 | Hausa | ha |
| 62 | Hebrew | he |
| 63 | Herero | hz |
| 64 | Hindi | hi |
| 65 | Hiri Motu | ho |
| 66 | Croatian | hr |
| 67 | Hungarian | hu |
| 68 | Armenian | hy |
| 69 | Igbo | ig |
| 70 | Icelandic | is |
| 71 | Ido | io |
| 72 | Sichuan Yi Nuosu | ii |
| 73 | Inuktitut | iu |
| 74 | Interlingue Occidental | ie |
| 75 | Interlingua | ia |
| 76 | Indonesian | id |
| 77 | Inupiaq | ik |
| 78 | Italian | it |
| 79 | Javanese | jv |
| 80 | Japanese | ja |
| 81 | Kalaallisut Greenlandic | kl |
| 82 | Kannada | kn |
| 83 | Kashmiri | ks |
| 84 | Kanuri | kr |
| 85 | Kazakh | kk |
| 86 | Central Khmer | km |
| 87 | Kikuyu Gikuyu | ki |
| 88 | Kinyarwanda | rw |
| 89 | Kirghiz Kyrgyz | ky |
| 90 | Komi | kv |
| 91 | Kongo | kg |
| 92 | Korean | ko |
| 93 | Kuanyama Kwanyama | kj |
| 94 | Kurdish | ku |
| 95 | Lao | lo |
| 96 | Latin | la |
| 97 | Latvian | lv |
| 98 | Limburgan Limburger Limburgish | li |
| 99 | Lingala | ln |
| 100 | Lithuanian | lt |
| 101 | Luxembourgish Letzeburgesch | lb |
| 102 | Luba-Katanga | lu |
| 103 | Ganda | lg |
| 104 | Marshallese | mh |
| 105 | Malayalam | ml |
| 106 | Marathi | mr |
| 107 | Macedonian | mk |
| 108 | Malagasy | mg |
| 109 | Maltese | mt |
| 110 | Mongolian | mn |
| 111 | Maori | mi |
| 112 | Malay | ms |
| 113 | Nauru | na |
| 114 | Navajo Navaho | nv |
| 115 | South Ndebele | nr |
| 116 | North Ndebele | nd |
| 117 | Ndonga | ng |
| 118 | Nepali | ne |
| 119 | Norwegian Nynorsk | nn |
| 120 | Bokmaal, Norwegian | nb |
| 121 | Norwegian | no |
| 122 | Chichewa Chewa Nyanja | ny |
| 123 | Occitan (post 1500) | oc |
| 124 | Ojibwa | oj |
| 125 | Oriya | or |
| 126 | Oromo | om |
| 127 | Ossetian Ossetic | os |
| 128 | Panjabi Punjabi | pa |
| 129 | Pali | pi |
| 130 | Polish | pl |
| 131 | Portuguese | pt |
| 132 | Pushto Pashto | ps |
| 133 | Quechua | qu |
| 134 | Romansh | rm |
| 135 | Romanian Moldavian Moldovan | ro |
| 136 | Rundi | rn |
| 137 | Russian | ru |
| 138 | Sango | sg |
| 139 | Sanskrit | sa |
| 140 | Sinhala Sinhalese | si |
| 141 | Slovak | sk |
| 142 | Slovenian | sl |
| 143 | Northern Sami | se |
| 144 | Samoan | sm |
| 145 | Shona | sn |
| 146 | Sindhi | sd |
| 147 | Somali | so |
| 148 | Sotho, Southern | st |
| 149 | Spanish Castilian | es |
| 150 | Sardinian | sc |
| 151 | Serbian | sr |
| 152 | Swati | ss |
| 153 | Sundanese | su |
| 154 | Swahili | sw |
| 155 | Swedish | sv |
| 156 | Tahitian | ty |
| 157 | Tamil | ta |
| 158 | Tatar | tt |
| 159 | Telugu | te |
| 160 | Tajik | tg |
| 161 | Tagalog | tl |
| 162 | Thai | th |
| 163 | Tigrinya | ti |
| 164 | Tonga (Tonga Islands) | to |
| 165 | Tswana | tn |
| 166 | Tsonga | ts |
| 167 | Turkmen | tk |
| 168 | Turkish | tr |
| 169 | Twi | tw |
| 170 | Uighur Uyghur | ug |
| 171 | Ukrainian | uk |
| 172 | Urdu | ur |
| 173 | Uzbek | uz |
| 174 | Venda | ve |
| 175 | Vietnamese | vi |
| 176 | Volapuk | vo |
| 177 | Walloon | wa |
| 178 | Wolof | wo |
| 179 | Xhosa | xh |
| 180 | Yiddish | yi |
| 181 | Yoruba | yo |
| 182 | Zhuang Chuang | za |
| 183 | Chinese | zh |
| 184 | Zulu | zu |

### Magento

The Paynet Easy Magento plugin lets a Magento-based store accept payments through Payneteasy without leaving the standard Magento checkout flow. Shoppers pick a product, go through the usual Magento checkout steps, and are handed off to the Paynet Easy payment form (or a direct/server-to-server flow, depending on configuration) to enter their card details.

A live example of the checkout flow is available on the [Magento demo shop](https://magento.codetime.net/).

> **Note:** The step-by-step configuration walkthrough in this page (menu paths, field-by-field descriptions, screenshots-style flow) is drawn from documentation written for the older Magento 1.x plugin (`payneteasy/php-plugin-magento`). The plugin actually linked from this documentation set, [php-plugin-magento-2](https://github.com/payneteasy/php-plugin-magento-2), targets Magento 2 and has a different internal structure (it ships as a standard `app/code/Paynet/Paynet Easy` module rather than the legacy Magento 1 module layout). The general concepts below (requirements, credentials to fill in, sandbox testing) still apply, but exact admin menu wording and installation commands may differ. Always check the plugin repository’s own README for Magento-2-specific instructions before installing.

#### Source code

The Magento 2 plugin source is published at [php-plugin-magento-2](https://github.com/payneteasy/php-plugin-magento-2). A working checkout built on this plugin can be tried on the [Magento demo shop](https://magento.codetime.net/).

### Обратный вызов Присоединяющейся Стороны

#### Вводная информация

Если Присоединяющаяся Сторона указывает URL обратного вызова, Платёжный Шлюз отправляет HTTP GET запрос на этот URL, когда транзакция получает финальный статус вне зависимости от того, получен ли статус approved, declined или другой из [финальных статусов](https://doc.payneteasy.ru/integration/reference/statuses.html.md). Это позволяет Присоединяющейся Стороне лучше контролировать процесс прохождения транзакции, например, осуществляя соответствующие пометки во внутренней системе учёта.

> **Warning:** Сервер Присоединяющейся Стороны должен отвечать на этот GET запрос статусом 200 OK согласно [RFC](http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.2.1), в противном случае Платёжный Шлюз продолжит попытки отправить обратный вызов в течение 30 раз за 14 дней с увеличивающимся интервалом между запросами.

Please remember, callbacks are guaranteed to report Connecting Party about transaction status. Connecting Party on their side must provide a means of preventing receiving the same callback twice - in case of network or other technical problems.
It is recommended to check status, type, orderid and client_orderid to prevent duplication of transactions on Connecting Party side.

URL обратного вызова могут быть указаны Присоединяющейся Стороной следующими способами:

* Путём отправки server_callback_url или notify_url в инициирующем запросе на проведение транзакции. Если отправлен server_callback_url, Присоединяющаяся Сторона получит обратный вызов только по изначальной транзакции (например sale approved). Если вместо этого отправлен notify_url, Присоединяющаяся Сторона получит обратный вызов по изначальной транзакции, а также по всем последующим транзакциям, связанным с изначальной (например reversal, chargeback).
* Путём указания URL обратного вызова на уровне терминала. Каждый тип транзакции может иметь свой URL обратного вызова.

Для URL обратного вызова разрешены только следующие порты:

* для HTTP 80, 8080
* для HTTPS 443, 8443

#### Настраиваемый URL обратного вызова

Обычный URL обратного вызова содержит все параметры, указанные в [Параметрах обратного вызова](#merchant-callback-parameters).
 
Настраиваемый URL обратного вызова - это полностью определённый URL со всеми параметрами, необходимыми на конечной странице или скрипте обработки результата Присоединяющейся Стороной. Настраиваемый URL позволяет Присоединяющейся Стороне самостоятельно определить названия параметров, значения для которых определяются макросами в формате ${parameter_name}. Таким образом, gate.payneteasy.ru заменяет соответствующие значения параметров в настраиваемом URL перед отправкой на запроса него. Доступные макросы перечислены в разделе [Макросы обратного вызова](#callback-macros).
 

Настраиваемый URL обратного вызова

https://connectingparty.com/sale_completed.php

Настраиваемый URL обратного вызова

https://connectingparty.com/sale_completed.php?cardholder_name=${name}&tx_status=${status}&order_id=${merchant_order}

#### Параметры обратного вызова

> **Note:** Система автоматически добавляет нижеуказанные параметры к URL обратного вызова.

\* - эти параметры не возвращаются в ответе по умолчанию. Для их получения необходимо связаться со службой поддержки.
 

| Параметр | Описание |
|-------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| status | Подробности см. в [Список статусов](https://doc.payneteasy.ru/integration/reference/statuses.html.md). |
| merchant_order | Идентификатор заказа в системе Присоединяющейся Стороны, аналогичен параметру client_orderid. |
| client_orderid | Идентификационный номер транзакции, присовенный Присоединяющейся Стороной. |
| orderid | Идентификатор заказа в системе gate.payneteasy.ru. |
| type | Тип транзакции, например sale, reversal, chargeback. |
| amount | Фактическая сумма транзакции. Данное значение может быть изменено в ходе транзакции. |
| currency | Валюта транзакции. |
| descriptor | Дескриптор платежа, указанный на шлюзе, через который прошла транзакция. |
| error_code | Код ошибки. Данное поле не будет включено в обратный вызов, если статус транзакции status=approved. |
| error_message | Сообщение ошибки. Данное поле не будет включено в обратный вызов, если статус транзакции status=approved. |
| name | Имя держателя карты. |
| email | Адрес электронной почты плательщика. |
| Параметр country \* | Страна плательщика (двухбуквенный код страны). Список допустимых кодов стран см. в [Коды стран и штатов](https://doc.payneteasy.ru/integration/reference/country_codes.html.md). |
| Параметр state \* | Штат плательщика. Список допустимых кодов штатов см. в [Коды стран и штатов](https://doc.payneteasy.ru/integration/reference/country_codes.html.md). Обязательно для США, Канады и Австралии. |
| Параметр city \* | Город Плательщика. |
| Параметр zip_code \* | Почтовый индекс Плательщика. |
| Параметр address1 \* | Адрес Плательщика, строка 1. |
| approval-code | Код авторизации успешной транзакции, если присутствует. |
| last-four-digits | Последние четыре цифры номера карты плательщика. |
| bin | БИН карты плательщика. |
| card-type | Тип карты плательщика (VISA, MASTERCARD и т.д.). |
| phone | Номер телефона плательщика. |
| bank-name | Название банка плательщика. |
| card-exp-month | Месяц срока действия карты. |
| card-exp-year | Год срока действия карты. |
| gate-partial-reversal | Возможность проведения частичного возврата (enabled - возможно, disabled - невозможно). |
| gate-partial-capture | Возможность проведения частичного списания захолдированной суммы (enabled - возможно, disabled - невозможно). |
| reason-code | Причина возвратного платежа (chargeback) или метки о мошеннической операции. |
| processor-rrn | Уникальный идентификатор банковской транзакции, который назначается банком Эквайером. |
| comment | Комментарий, в случае возврата. |
| rapida-balance | Текущий баланс Присоединяющейся Стороны в системе Рапида (при наличии активной проверки баланса). |
| control | Контрольная сумма используется, чтобы убедиться, что callback Присоединяющейся стороне инициирует gate.payneteasy.ru, а не мошенник. Это контрольная сумма SHA-1 от конкатенации status + orderid + merchant_order + merchant_control. Скрипт callback ОБЯЗАН проверить этот параметр, сравнив его с контрольной суммой SHA-1 указанной выше конкатенации. |
| merchantdata | Значение, переданное в соответствующем параметре инициирующего запроса Присоединяющейся Стороной. |
| serial-number | Серийный номер запроса. |
| processor-tx-id | Идентификатор транзакции, присвоенный процессором. |
| processor-auth-credit-code | Зарезервировано. |
| card-hash-id | Уникальный хеш карты, всегда одинаковый для этой карты. |
| verified-3d-status | Для транзакции, прошедшей проверку 3DS, вернётся значение AUTHENTICATED. |
| processor-credit-rrn | Уникальный идентификатор, который назначается банком Эквайером. |
| processor-credit-arn | Номер ссылки на карту эквайера для кредитной карты. |
| processor-debit-arn | Уникальный ссылочный идентификатор транзакции. |
| eci | Индикатор электронной коммерции (Visa). |
| ips-src-payment-product-code | Код карты, установленный международным платёжным сервисом (Visa/Mastercard). |
| ips-src-payment-product-name | Расшифрованный код карты, установленный международным платёжным сервисом (Visa/Mastercard). |
| ips-src-payment-type-code | Тип кода карты, установленный международным платёжным сервисом (Visa/Mastercard). |
| ips-src-payment-type-name | Расшифрованный тип кода карты, установленный международным платёжным сервисом (Visa/Mastercard). |
| card-country-alpha-three-code | Трёхбуквенный код страны Эмитента карты отправителя. См [Коды стран](https://doc.payneteasy.ru/integration/reference/country_codes.html.md). |
| destination-card-country-alpha-three-code | Трёхбуквенный код страны Эмитента карты получателя. См [Коды стран](https://doc.payneteasy.ru/integration/reference/country_codes.html.md). |
| initial-amount | Сумма, установленная при инициировании транзакции, без каких-либо сборов или комиссий. Это значение не может измениться в ходе транзакции. |
| Описание: customer-ip \* | IP-адрес клиента |
| Параметр seller-commission \* | Итоговая комиссия проведённой транзакции. |
| Параметр acquirer-commission \* | Комиссия Эквайера для проведённой транзакции. |
| Описание: exchange-rate \* | Базовый курс обмена валюты. |
| Параметр effective-exchange-rate \* | Фактический курс обмена валюты. |
| Параметр motivational-message \* | Опциональный параметр, содержаний сообщение с расширенной информацией по причине отклонения транзакции. |
| orig-amount | Изначальная сумма транзакции, если была применена конвертация валюты на подчинённом терминале в интеграции через Параллельную форму. |
| orig-currency | Изначальная валюта транзакции, если была применена конвертация валюты на подчинённом терминале в интеграции через Параллельную форму. |
| transaction-date | Callback receiving date and time. |

#### Callback Macros

| Название макроса gate.payneteasy.ru | Описание |
|---------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ${status} | Статус транзакции, например approved, declined, processing и т.д. |
| ${merchant_order} | Идентификатор заказа в системе Присоединяющейся Стороны, аналогичен параметру client_orderid. |
| ${orderid} | Идентификатор заказа в системе gate.payneteasy.ru. |
| ${type} | Тип транзакции, например sale, return, chargeback и т.д. |
| ${amount} | Сумма транзакции. |
| ${descriptor} | Дескриптор платежа, указанный на шлюзе, через который прошла транзакция. |
| ${error_message} | Сообщение ошибки, если ${status} = declined. |
| ${name} | Имя держателя карты. |
| ${email} | Адрес электронной почты плательщика. |
| ${last-four-digits} | Последние четыре цифры номера карты плательщика. |
| ${bin} | БИН карты плательщика. |
| ${card-type} | Тип карты плательщика (VISA, MASTERCARD и т.д.). |
| ${card-exp-month} | Месяц срока действия карты. |
| ${card-exp-year} | Год срока действия карты. |
| ${gate-partial-reversal} | Возможность проведения частичного возврата (enabled - возможно, disabled - невозможно). |
| ${gate-partial-capture} | Возможность проведения частичного списания захолдированной суммы (enabled - возможно, disabled - невозможно). |
| ${reason-code} | Причина возвратного платежа (chargeback) или метки о мошеннической операции. |
| ${processor-rrn} | Уникальный идентификатор банковской транзакции, который назначается банком Эквайером. |
| ${approval-code} | Код одобрения банка. |
| ${comment} | Комментарий, в случае возврата. |
| ${rapida-balance} | Текущий баланс Присоединяющейся Стороны в системе Рапида (при наличии активной проверки баланса). |
| ${control} | Контрольная сумма используется, чтобы убедиться, что callback Присоединяющейся стороне инициирует gate.payneteasy.ru, а не мошенник. Это контрольная сумма SHA-1 от конкатенации status + orderid + merchant_order + merchant_control. Скрипт callback ОБЯЗАН проверить этот параметр, сравнив его с контрольной суммой SHA-1 указанной выше конкатенации. |
| ${merchantdata} | Значение, переданное в соответствующем параметре инициирующего запроса Присоединяющейся Стороной. |

#### Пример обратного вызова

```http
https://connectingparty.com/api/integration/check/pay/server?token=some_token
&serial-number=b8e5b762-c116-407e-a591-82a458e1
&merchant_order=preauth_1171
&client_orderid=preauth_1171
&processor-tx-id=e0a0572f-2154-737c-8ea7-92410
&orderid=57792
&status=approved
&amount=1.50
&currency=EUR
&descriptor=%D0%90+%D0%94%D0%B5%D0%BD%%D0%B3%D0%B8+-+card+registration
&original-gate-descriptor=%D0%90+%D0%940%BD%D1%8C%D0%B3%D0%B8+-+card+registration&gate-partial-capture=enabled
&type=preauth
&name=CARDHOLDER+NAME
&card-exp-month=6
&card-exp-year=2024
&email=22701231%40example.com
&processor-rrn=21660934567
&approval-code=265470
&control=bbd11a020f6bsdkfgjh23e24def54991bfb63c5&last-four-digits=0214
&bin=220220&card-type=VISA
&phone=%2B71914454778
&bank-name=Rabobank
&card-hash-id=235479750
&card-country-alpha-three-code=RUS
&ips-src-payment-product-code=VISA
&ips-src-payment-product-name=VISA
&ips-src-payment-type-code=Unknown
&ips-src-payment-type-name=VISA+Unknown
&initial-amount=1.50
&transaction-date=2022-06-15+12%3A37%3A02+CEST
```

#### Сопоставление параметров обратного вызова и ответа на запрос статуса

| Название параметра в обратного вызова | Название параметра в ответе на запрос статуса |
|-------------------------------------------|-------------------------------------------------|
| amount | amount |
| approval-code | approval-code |
| bin | bin |
| card-type | card-type |
| last-four-digits | last-four-digits |
| bank-name | bank-name |
| name | name |
| first-name | first-name |
| last-name | last-name |
| country | country |
| state | state |
| city | city |
| zip_code | zip_code |
| address1 | address1 |
| card-exp-month | card-exp-month |
| card-exp-year | card-exp-year |
| client_orderid | merchant-order-id |
| comment | comment |
| descriptor | descriptor |
| dest-bin | dest-bin |
| dest-card-type | dest-card-type |
| dest-last-four-digits | dest-last-four-digits |
| dest-bank-name | dest-bank-name |
| email | email |
| purpose | purpose |
| error_code | error-code |
| error_message | error-message |
| gate-partial-capture | gate-partial-capture |
| gate-partial-reversal | gate-partial-reversal |
| loyalty-balance | loyalty-balance |
| loyalty-bonus | loyalty-bonus |
| loyalty-message | loyalty-message |
| loyalty-program | loyalty-program |
| merchant_order | merchant-order-id |
| merchantdata | merchantdata |
| orderid | paynet-order-id |
| original-gate-descriptor | original-gate-descriptor |
| phone | phone |
| processor-rrn | processor-rrn |
| processor-tx-id | processor-tx-id |
| rapida-balance | rapida-balance |
| reason-code | reason-code |
| serial-number | serial-number |
| status | status |
| type | transaction-type |
| initial-amount | initial-amount |
| seller-commission | seller-commission |
| acquirer-commission | acquirer-commission |
| exchange-rate | exchange-rate |
| effective-exchange-rate | effective-exchange-rate |
| card-country-alpha-three-code | card-country-alpha-three-code |
| destination-card-country-alpha-three-code | destination-card-country-alpha-three-code |

#### Пример проверки контрольной суммы в Java

Ниже предоставлен пример проверки контрольной суммы в обратном вызове для языка программирования Java:

```java
import org.junit.Test;

import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

import static org.junit.Assert.assertEquals;

public class TestCallbackSignatureExampleTest {

    @Test
    public void test() {
        String digest3 = calculateCallbackSignature("approved", 123, "invoice-1", "AF4B5DE6-3468-424C-A922-C1DAD7CB4509");
        assertEquals("5bc8ee48f9ba37c0fd1e0b052a9bc105c6df87e1", digest3);
    }

    public String calculateCallbackSignature(String aTransactionStatus, long aOrderId, String aMerchantOrderId, String aMerchantControlKey) {
        String text   = aTransactionStatus + aOrderId + aMerchantOrderId + aMerchantControlKey;
        byte[] buffer = text.getBytes(StandardCharsets.UTF_8);
        byte[] shaSum = sha(buffer);
        return toHexString(shaSum);
    }

    /**
    * Calculates the SHA-1 digest and returns the value as a <code>byte[]</code>.
    *
    * @param data
    *            Data to digest
    * @return SHA-1 digest
    */
    private static byte[] sha(byte[] data) {
        try {
            MessageDigest digest = MessageDigest.getInstance("SHA");
            return digest.digest(data);
        } catch (NoSuchAlgorithmException e) {
           throw new IllegalStateException("Couldn't calculate SHA-1 digest", e);
        }
    }

    /**
     * Converts bytes to hex string
     */
    private static String toHexString(byte[] data) {
        StringBuilder sb = new StringBuilder();
        for (byte b : data) {
            String hex = Integer.toHexString(0xff & b);
            if (hex.length() == 1) {
                sb.append('0');
            }
            sb.append(hex);
        }
        return sb.toString();
    }

}
```

### Верификация карты с мобильного устройства

#### Введение

Верификация карты с мобильного устройства позволяет Consumer проще совершать transfer- и sale-транзакции с помощью единого процесса верификации. В ходе процесса карта проверяется со стороны Payneteasy и сопоставляется со ссылкой на сервере Присоединяющейся Стороны. Это позволяет Consumer избежать ввода данных карты при каждой transfer- или sale-транзакции. Интеграция основана на HTTP POST запросах/ответах с данными в формате JSON.
 
 
Значение терминов см. в [Глоссарии](https://doc.payneteasy.ru/integration/reference/glossary.html.md).
 

#### Сценарий верификации карты с мобильного устройства

```plantuml
@startuml
autonumber
title Мобильное Устройство - \nВерификация карты 3DS
skinparam ParticipantPadding 70
participant "Клиент" as client
participant "Мобильное приложение" as mobile
participant "Сервер \nПрисоединяющейся Стороны" as party
participant "Payneteasy" as company
client <-> mobile: Аутентификация
mobile -> party: Запрос \nтокена доступа
mobile <-- party: Ответ с \nтокеном доступа
note right
accessToken
end note
mobile -> party: Запрос \nинициации верификации
mobile <-- party: Ответ \nинициации верификации
mobile -> company: Обработка \nвалидации запроса
mobile <-- company: Обработка \nвалидации ответа
note right
session token
end note
party <- company : Проверка \nзапроса верификации
party --> company : Проверка \nответа верификации
company -> company: Начало обработки
mobile -> company: Верификация \nзапроса статуса
note left
session token
end note
mobile <-- company: Верификация \nответа со статусом
note right
state = PROCESSING
end note
mobile -> mobile: Открытие браузера и \nпредоставлние redirectUrl \nдля перенаправления \nна страницу 3DS
activate mobile
client <- mobile: Предоставление \nredirectUrl
client -> mobile: Предоставлние \nдержателем карты \nданных аутентификации
mobile -> company: Обновление статуса 3DS
company --> mobile: Запрос на закрытие браузера
destroy mobile
company -> company: Обработка верификации
party <- company: Запрос уведомления \nверификации сравнения \nкарты
note right
server card id
end note
party --> company: Ответ уведомления \nверификации сравнения \nкарты
mobile -> company: Запрос статуса верификации
note left
session token
end note
mobile <-- company: Ответ статуса верификации
note right
state = APPROVED|DECLINED
end note
party <- company: Запрос обратного вызова \nс финальным статусом
party --> company: Ответ обратного вызова \nс финальным статусом
@enduml
```

(1,2,3) Для выполнения аутентификации Consumer в приложении Присоединяющейся Стороны Присоединяющаяся Сторона может использовать любой подходящий ей метод. В результате сервер Присоединяющейся Стороны генерирует {access Token} и предоставляет его приложению Присоединяющейся Стороны. Этот параметр будет использоваться для начала и продолжения сессии.
 
(4,5) Для инициирования верификации карты приложение Присоединяющейся Стороны отправляет {access Token} с другими параметрами устройства на сервер Присоединяющейся Стороны. Для имплементации запроса инициирования верификации см. [Initiate verification](https://doc.payneteasy.ru/integration/API_commands/api_mobile_device_server/api_initiate_verification.html.md).
 
(6,7) Приложение Присоединяющейся Стороны отправляет данные держателя карты, устройства, сессии и другие параметры напрямую в Payneteasy для проверки валидности карты. Для имплементации запроса выполнения валидации см. [Perform validation](https://doc.payneteasy.ru/integration/API_commands/api_mobile_device/api_perform_validation.html.md).
 
(8,9) Проверка верификации используется в целях безопасности и позволяет Payneteasy сравнить данные, отправленные приложением Присоединяющейся Стороны, с данными, хранящимися на сервере Присоединяющейся Стороны. Для имплементации запроса проверки верификации см. [Check verification](https://doc.payneteasy.ru/integration/API_commands/api_mobile_device_server/api_check_verification.html.md).
 
(11,12,21,22) Запрос статуса верификации выполняется приложением Присоединяющейся Стороны в Payneteasy для получения статуса транзакции верификации. Для имплементации запроса статуса верификации см. [Verification status](https://doc.payneteasy.ru/integration/API_commands/api_mobile_device/api_verification_status.html.md).
 
(19,20) Payneteasy отправляет запрос уведомления о сопоставлении карты верификации на сервер/прокси Присоединяющейся Стороны с созданной на своей стороне ссылкой на карту - {server Card Id}. Для имплементации запроса уведомления о сопоставлении карты верификации см. [Verification card mapping notification](https://doc.payneteasy.ru/integration/API_commands/api_mobile_device_server/api_verification_card_mapping_notification.html.md).
 
(23,24) Если callback URL Присоединяющейся Стороны указан на уровне endpoint, Платёжный Шлюз отправляет сообщение на этот callback URL при достижении транзакцией финального статуса, независимо от того, является ли результат approved, declined или имеет другой [финальный статус](https://doc.payneteasy.ru/integration/reference/statuses.html.md). Подробнее см. в [Callbacks](https://doc.payneteasy.ru/integration/API_commands/merchant_callback_parameters.html.md).

### Mobile Device Sale

#### Введение

Транзакция Sale с мобильного устройства может выполняться с данными держателя карты или со ссылкой на карту, ранее созданной в процессе [проверки карты](https://doc.payneteasy.ru/integration/mobile_device_card_verification.html.md) либо в предыдущих транзакциях Transfer/Sale.
 
 
Значение терминов см. в [Глоссарии](https://doc.payneteasy.ru/integration/reference/glossary.html.md).
 

#### Общий сценарий оплаты

```plantuml
@startuml
autonumber
title Мобильное Устройство - \nОплата 3DS
skinparam ParticipantPadding 70
participant "Клиент" as client
participant "Мобильное приложение" as mobile
participant "Сервер \nПрисоединяющейся Стороны" as party
participant "Payneteasy" as company
client <-> mobile: Аутентификация
mobile -> party: Запрос \nтокена доступа
mobile <-- party: Ответ с \nтокеном доступа
note right
accessToken
end note
party <- mobile: Запрос \nинициации платежа
party --> mobile: Ответ \nинициации платежа
mobile -> company: Обработка \nзапроса платежа
mobile <-- company: Обработка \nответа платежа
note right
session token
end note
company -> party: Проверка \nзапроса платежа
company <-- party: Проверка \nответа платежа
company -> company: Начало обработки
mobile -> company: Запрос \nстатуса платежа
note left
session token
end note
mobile <-- company: Ответ \nстатуса платежа
note right
state = REDIRECT_REQUEST
redirectUrl
end note
mobile -> mobile: Открытие браузера и \nпредоставлние nredirectUrl \nдля перенаправления \nна страницу 3DS
activate mobile
client <-- mobile: Предоставление \nredirectUrl
client -> mobile: Предоставлние \nдержателем карты \nданных аутентификации
mobile -> company: Обновление статуса 3DS
company --> mobile: Запрос на закрытие браузера
destroy mobile
company -> company: Обработка платежа
    party <- company: Запрос \nуведомления платежа \nсравнения карты
note right
server card id
end note
party --> company: Ответ \nуведомления платежа \nсравнения карты
mobile -> company: Запрос статуса платежа
note left
session token
end note
mobile <-- company: Ответ статуса платежа
note right
bankorder id
state = APPROVED|DECLINED
end note
party <- company: Запрос обратного вызова \nс финальным статусом
party --> company: Ответ обратного вызова \nс финальным статусом
@enduml
```

(1,2,3) Для выполнения аутентификации Потребителя в приложении Присоединяющейся стороны Присоединяющаяся сторона может использовать любой метод, наиболее соответствующий её потребностям. В результате сервер Присоединяющейся стороны генерирует {access Token} и предоставляет его приложению Присоединяющейся стороны. Этот параметр будет использоваться для начала и продолжения сеанса.
 
(4,5) Чтобы инициировать Sale, приложение Присоединяющейся стороны отправляет {access Token} с суммой транзакции и другими параметрами устройства на сервер Присоединяющейся стороны; они используются для начала сеанса с уникальным случайным {nonce} и зашифрованной {signature}. Сведения о реализации запроса инициирования Sale см. в [Initiate Sale](https://doc.payneteasy.ru/integration/API_commands/api_mobile_device_server/api_initiate_sale.html.md).
 
(6,7) На этом этапе приложение Присоединяющейся стороны отправляет данные держателя карты, устройства, сеанса и другие параметры непосредственно в Payneteasy для выполнения транзакции Sale. Для реализации запроса см. [выполнение Sale](https://doc.payneteasy.ru/integration/API_commands/api_mobile_device/api_perform_sale.html.md).
 
(8,9) Check sale используется в целях безопасности и позволяет Payneteasy сравнивать данные, отправленные приложением Присоединяющейся стороны, с данными, хранящимися на сервере Присоединяющейся стороны. О реализации запроса Check sale см. [Check Sale](https://doc.payneteasy.ru/integration/API_commands/api_mobile_device_server/api_check_sale.html.md).
 
(11,12,21,22) Приложение Присоединяющейся стороны отправляет запрос статуса Sale в Payneteasy, чтобы получить статус транзакции Sale. Для реализации запроса см. [статус Sale](https://doc.payneteasy.ru/integration/API_commands/api_mobile_device/api_sale_status.html.md).
 
(19,20) Payneteasy отправляет на сервер/прокси Присоединяющейся стороны уведомление сопоставления карты Sale с созданной на её стороне ссылкой на карту — {server Card Id}. Для реализации запроса уведомления сопоставления карты Sale см. [Уведомление сопоставления карты Sale](https://doc.payneteasy.ru/integration/API_commands/api_mobile_device_server/api_sale_card_mapping_notification.html.md).
 
(23,24) Если callback URL Присоединяющейся Стороны указан на уровне endpoint, Платёжный Шлюз отправляет сообщение на этот callback URL при достижении транзакцией финального статуса, независимо от того, является ли результат approved, declined или имеет другой [финальный статус](https://doc.payneteasy.ru/integration/reference/statuses.html.md). Подробнее см. в [Callbacks](https://doc.payneteasy.ru/integration/API_commands/merchant_callback_parameters.html.md).
 

#### Repeat Общий сценарий оплаты

После успешной процедуры Card mapping новые транзакции Sale с теми же данными держателя карты можно выполнять проще для Покупателя.
 
Приложение Присоединяющейся стороны создаёт новые запросы Sale, используя {client Card Id} вместо данных держателя карты. Payneteasy отправляет этот {client Card Id} на сервер Присоединяющейся стороны в «Check sale request» и получает сопоставленный с ним {server Card Id} в «Check sale response». Этот {server Card Id} используется для продолжения обработки транзакции Sale.
 
Процесс транзакции остаётся прежним: [Initiate Sale](https://doc.payneteasy.ru/integration/API_commands/api_mobile_device_server/api_initiate_sale.html.md) -> [Perform sale](https://doc.payneteasy.ru/integration/API_commands/api_mobile_device/api_perform_sale.html.md) -> [Check Sale](https://doc.payneteasy.ru/integration/API_commands/api_mobile_device_server/api_check_sale.html.md).
 
Если не требуется изменять данные потребителя (адрес, телефон и т. д.), «запрос выполнения Sale» для повторного Sale можно отправить без необязательных параметров. Если данные потребителя нужно изменить, необходимо создать новую ссылку на исходную карту.
 
Если {client Card Id} используется в “Perform sale request”, {server Card Id} должен быть включён в “Check sale response” и подпись.
 
Если {client Card Id} был сопоставлен с {server Card Id} в транзакции со значением {consumer.email}, новые «запрос на выполнение продажи» и «ответ Check sale» с этим {client Card Id} также должны содержать то же значение {consumer.email}.
 
 
Для потока Repeat Sale используйте следующие параметры в запросе Perform Sale:
 
 
1. {source Of Funds.reference.client Card Id}
2. {source Of Funds.reference.security Code}

Instead of:
 
 
1. {source Of Funds.card.expiry.month}
2. {source Of Funds.card.expiry.year}
3. {source Of Funds.card.holder}
4. {source Of Funds.card.holder.first Name}
5. {source Of Funds.card.holder.last Name}
6. {source Of Funds.card.number}
7. {source Of Funds.card.security Code}

```plantuml
@startuml
autonumber
title Мобильное Устройство - \nСсылки на карту для повторного платежа
participant "Мобильное Устройство" as mobile
participant "Сервер \nПрисоединяющейся Стороны" as party
participant "Платёжный Шлюз" as company
skinparam ParticipantPadding 80
== Последняя стадия предыдущей транзакции ==
party <- company: Запрос на уведомление \nсравнения карты
note right
serverCardId
end note
party --> company: Ответ уведомления \nсравнения карты
party --> party: Создание clientCardId для serverCardId
party -> mobile: Созранение ссылки в приложении или \nотправка Клиенту по запросу
note right
clientCardId
end note
== Новый платёж ==
mobile -> party: Запрос на инициацию \nпроведения платежа
mobile <-- party: Ответ на инициацию \nпроведения платежа
mobile -> company: Обработка запроса \nна проведение оплаты
note left
clientCardId
end note
mobile <-- company: Обработка ответа \nна проведение оплаты
party <- company: Проверка запроса \nна проведение оплаты
note right
clientCardId
end note
party --> company: Проверка ответа \nна проведение оплаты
note left
serverCardId
end note
company -> company: Обработка оплаты
@enduml
```

(1,2) Payneteasy отправляет на сервер/прокси Присоединяющейся стороны уведомление сопоставления карты Sale с созданной на её стороне ссылкой на карту — {server Card Id}. Для реализации запроса уведомления сопоставления карты Sale см. [Уведомление сопоставления карты Sale](https://doc.payneteasy.ru/integration/API_commands/api_mobile_device_server/api_sale_card_mapping_notification.html.md).
 
(5,6) Чтобы инициировать Sale, приложение Присоединяющейся стороны отправляет {access Token} с суммой транзакции и другими параметрами устройства на сервер Присоединяющейся стороны; они используются для начала сеанса с уникальным случайным {nonce} и зашифрованной {signature}. Сведения о реализации запроса инициирования Sale см. в [Initiate Sale](https://doc.payneteasy.ru/integration/API_commands/api_mobile_device_server/api_initiate_sale.html.md).
 
(7,8) На этом этапе приложение Присоединяющейся стороны отправляет данные держателя карты, устройства, сеанса и другие параметры непосредственно в Payneteasy для выполнения транзакции Sale. Для реализации запроса см. [выполнение Sale](https://doc.payneteasy.ru/integration/API_commands/api_mobile_device/api_perform_sale.html.md).
 
(9,10) Check sale используется в целях безопасности и позволяет Payneteasy сравнивать данные, отправленные приложением Присоединяющейся стороны, с данными, хранящимися на сервере Присоединяющейся стороны. О реализации запроса Check sale см. [Check Sale](https://doc.payneteasy.ru/integration/API_commands/api_mobile_device_server/api_check_sale.html.md).

### Mobile Device Transfer

#### Введение

Перевод с мобильного устройства может выполняться с данными держателя карты отправителя и получателя средств или со ссылкой на карту, ранее созданной в процессе [проверки карты](https://doc.payneteasy.ru/integration/mobile_device_card_verification.html.md) либо в предыдущих транзакциях Transfer/Sale.
 
 
Значение терминов см. в [Глоссарии](https://doc.payneteasy.ru/integration/reference/glossary.html.md).
 

#### Сценарий Переводов

```plantuml
@startuml
autonumber
title Мобильное приложение - \nПеревод стредств с карты 3-DS
skinparam ParticipantPadding 70
participant "Клиент" as client
participant "Мобильное приложение" as mobile
participant "Сервер \nПрисоединяющейся Стороны" as party
participant "Payneteasy" as company
client <-> mobile: Аутентификация
mobile -> party: Запрос \nтокена доступа
mobile <-- party: Ответ с \nтокеном доступа
note right
accessToken
end note
mobile -> party: Запрос инициации \nперевода средств
mobile <-- party: Ответ инициации \nперевода средств
mobile -> company: Обработка запроса \nперевода средств
mobile <-- company: Обработка ответа \nперевода средств
note right
session token
end note
party <- company : Проверка запроса \nперевода средств
party --> company : Проверка ответа \nперевода средств
company -> company: Начало обработки
mobile -> company: Запрос статуса \nперевода средств
note left
session token
end note
mobile <-- company: Ответ статуса \nперевода средств
note right
state = REDIRECT_REQUEST
end note
mobile -> mobile: Открытие браузера и \nпредоставлние redirectUrl \nдля перенаправления \nна страницу 3DS
activate mobile
client <-- mobile: Предоставление redirectUrl
client -> mobile: Предоставлние \nдержателем карты \nданных аутентификации
mobile -> company: Обновление статуса \nперевода средств
company --> mobile: Запрос на закрытие браузера
destroy mobile
company -> company: Обработка перевода средств
    party <- company: Запрос уведомления \nперевода средств \nсравнения карты
note right
server card id
end note
    party --> company: Ответ уведомления \nперевода средств \nсравнения карты
mobile -> company: Запрос статуса перевода средств
note left
session token
end note
mobile <-- company: Ответ статуса перевода средств
note right
bankorder id
state = APPROVED|DECLINED
end note
party <- company: Запрос обратного вызова \nс финальным статусом
party --> company: Ответ обратного вызова \nс финальным статусом
@enduml
```

(1,2,3) Для выполнения аутентификации Потребителя в приложении Присоединяющейся стороны Присоединяющаяся сторона может использовать любой метод, наиболее соответствующий её потребностям. В результате сервер Присоединяющейся стороны генерирует {access Token} и предоставляет его приложению Присоединяющейся стороны. Этот параметр будет использоваться для начала и продолжения сеанса.
 
(4,5) Чтобы инициировать перевод средств, приложение Присоединяющейся стороны отправляет {access Token} с суммой транзакции и другими параметрами устройства на сервер Присоединяющейся стороны; они используются для начала сессии с уникальными случайными {nonce} и зашифрованной {signature}. Для инициирования запроса Transfer см. [Initiate Transfer](https://doc.payneteasy.ru/integration/API_commands/api_mobile_device_server/api_initiate_transfer.html.md).
 
(6,7) На этом этапе приложение Присоединяющейся стороны отправляет данные держателя карты, устройства, сеанса и другие параметры напрямую в Payneteasy для перевода средств с карты на карту. См. [Perform Transfer](https://doc.payneteasy.ru/integration/API_commands/api_mobile_device/api_perform_transfer.html.md).
 
(8,9) Check transfer используется в целях безопасности и позволяет Payneteasy сравнить данные приложения Присоединяющейся стороны с данными на сервере Присоединяющейся стороны. О реализации запроса см. [Check Transfer](https://doc.payneteasy.ru/integration/API_commands/api_mobile_device_server/api_check_transfer.html.md).
 
(11,12,21,22) Приложение Присоединяющейся стороны отправляет запрос статуса перевода в Payneteasy для получения статуса транзакции Transfer. Для реализации запроса см. [статус Transfer](https://doc.payneteasy.ru/integration/API_commands/api_mobile_device/api_transfer_status.html.md).
 
(19,20) Payneteasy отправляет на сервер/прокси Присоединяющейся стороны уведомление сопоставления карты Transfer с созданной на её стороне ссылкой на карту — {server Card Id}. Для реализации запроса уведомления сопоставления карты Transfer см. [Уведомление сопоставления карты Transfer](https://doc.payneteasy.ru/integration/API_commands/api_mobile_device_server/api_transfer_card_mapping_notification.html.md).
 
(23,24) Присоединяющаяся сторона указала URL обратного вызова; Платёжный Шлюз отправляет сообщение на URL обратного вызова каждый раз, когда транзакция достигает финального статуса, независимо от того, является ли результат approved, declined или имеет другой [финальный статус](https://doc.payneteasy.ru/integration/reference/statuses.html.md). Подробнее см. в [Callbacks](https://doc.payneteasy.ru/integration/API_commands/merchant_callback_parameters.html.md).
 

#### Repeat Сценарий Переводов

После успешной процедуры Card mapping новые переводы с теми же данными держателя карты можно выполнять проще для Покупателя.
 
Приложение Присоединяющейся стороны создаёт новые запросы Transfer, используя {client Card Id} вместо данных держателя исходной и/или целевой карты. Payneteasy отправляет эти {client Card Id} на сервер Присоединяющейся стороны в «Check transfer request» и получает сопоставленные с ними {server Card Id} в «Check transfer response». Эти {server Card Id} используются для продолжения обработки транзакции Transfer.
 
Поток транзакции остаётся тем же: [Инициация перевода](https://doc.payneteasy.ru/integration/API_commands/api_mobile_device_server/api_initiate_transfer.html.md) -> [Выполнение перевода](https://doc.payneteasy.ru/integration/API_commands/api_mobile_device/api_perform_transfer.html.md) -> [Проверка перевода](https://doc.payneteasy.ru/integration/API_commands/api_mobile_device_server/api_check_transfer.html.md).
 
Если нет необходимости изменять данные Потребителя (например, адрес, телефон и т. д.), «Perform transfer request» для Repeat transfer можно отправить без необязательных параметров и со ссылками на карты отправителя и получателя вместо данных держателя карты. Если данные Потребителя требуется изменить, необходимо создать новую ссылку на исходную карту.
 
Если источник и/или назначение {client Card Id} используются в «запросе выполнения перевода», источник и/или назначение {server Card Id} должны быть включены в «ответ проверки Transfer» и подпись.
 
Если исходный {client Card Id} был сопоставлен с {server Card Id} в транзакции со значением {consumer.email}, новый «запрос на выполнение перевода» и «ответ проверки подписи» с этим {client Card Id} также должны содержать то же значение {consumer.email}.
 
 
Для процесса Repeat Transfer используйте следующие параметры источника средств в запросе Perform Transfer:
 
 
1. {source Of Funds.reference.client Card Id}
2. {source Of Funds.reference.security Code}

Instead of:
 
 
1. {source Of Funds.card.expiry.month}
2. {source Of Funds.card.expiry.year}
3. {source Of Funds.card.holder}
4. {source Of Funds.card.holder.first Name}
5. {source Of Funds.card.holder.last Name}
6. {source Of Funds.card.number}
7. {source Of Funds.card.security Code}

Для получателя средств используйте {destination Of Funds.reference.client Card Id} вместо {destination Of Funds.card.number}.
 
```plantuml
@startuml
autonumber
title Мобильное Устройство - \nСсылка на карту для повторного перевода средств
participant "Мобильное приложение" as mobile
participant "Сервер \nПрисоединяющейся Стороны" as party
participant "Payneteasy" as company
skinparam ParticipantPadding 80
== Последняя стадия верификации карты \nили перевода средств ==
party <- company: Запрос на уведомление \nсравнения карты
note right
serverCardId
end note
party --> company: Ответ уведомления \nсравнения карты
party --> party: Создание clientCardId для serverCardId
party -> mobile: Хранение ссылки в приложении \nили отправка по запросу
note right
clientCardId
end note
== Новый перевод средств ==
mobile -> party: Запрос на инициацию \nперевода средств
mobile <-- party: Ответ на инициацию \nперевода средств
mobile -> company: Обработка перевода средств
note left
clientCardId
end note
mobile <-- company: Ответ обработки \nперевода средств
party <- company: Проверка запроса \nна перевод средств
note right
clientCardId
end note
party --> company: Проверка ответа \nперевода средств
note left
serverCardId
end note
company -> company: Обработка перевода средств
@enduml
```

(1,2) Payneteasy отправляет на сервер/прокси Присоединяющейся стороны уведомление сопоставления карты Transfer с созданной на её стороне ссылкой на карту — {server Card Id}. Для реализации запроса уведомления сопоставления карты Transfer см. [Уведомление сопоставления карты Transfer](https://doc.payneteasy.ru/integration/API_commands/api_mobile_device_server/api_transfer_card_mapping_notification.html.md).
 
(5,6) Чтобы инициировать перевод средств, приложение Присоединяющейся стороны отправляет {access Token} с суммой транзакции и другими параметрами устройства на сервер Присоединяющейся стороны; они используются для начала сессии с уникальными случайными {nonce} и зашифрованной {signature}. Для инициирования запроса Transfer см. [Initiate Transfer](https://doc.payneteasy.ru/integration/API_commands/api_mobile_device_server/api_initiate_transfer.html.md).
 
(7,8) На этом этапе приложение Присоединяющейся стороны отправляет данные держателя карты, устройства, сеанса и другие параметры напрямую в Payneteasy для перевода средств с карты на карту. См. [Perform Transfer](https://doc.payneteasy.ru/integration/API_commands/api_mobile_device/api_perform_transfer.html.md).
 
(9,10) Check transfer используется в целях безопасности и позволяет Payneteasy сравнить данные приложения Присоединяющейся стороны с данными на сервере Присоединяющейся стороны. О реализации запроса см. [Check Transfer](https://doc.payneteasy.ru/integration/API_commands/api_mobile_device_server/api_check_transfer.html.md).
 
 

#### Consumer Defined Transfer Rates Flow

Тарифы Transfer, заданные потребителем, — необязательная функция, позволяющая отправителю выбрать наиболее подходящую сумму комиссии для транзакции Transfer из нескольких доступных шлюзов поставщиков платежей.
 
Возможность такой функции зависит от интеграции. Пожалуйста, уточните детали у менеджера поддержки.
 
При включении этой функции поток Transfer расширяется:
 
1. Если Check transfer выполнен успешно, Payneteasy приостанавливает обработку, включает список возможных комиссий в следующий ответ статуса Transfer и ожидает подтверждения от потребителя.
2. Клиент выбирает наиболее подходящую комиссию из списка в приложении Присоединяющейся стороны.
3. Приложение Присоединяющейся стороны отправляет выбранный шлюз (используя его алиас-имя assigned Id) в запросе Complete transfer к Payneteasy.
4. Payneteasy продолжает обрабатывать транзакцию на выбранном шлюзе.

```plantuml
@startuml
autonumber
title Тарифы на перевод средств, утверждённые Клиентом
participant "Клиент" as client
participant "Мобильное приложение" as mobile
participant "Payneteasy" as company
== Перевод средств успешно проверен ==
company -> company : Остановка транзакции
loop пока окончательный перевод средств не отправлен
mobile -> company: Запрос статуса \nперевода средств
note left
session token
end note
mobile <-- company: Ответ статуса \nперевода средств
note right
state=TRANSFER_FEE_REQUEST
transferFeeList
end note
end
mobile -> client: Запрос на выбор комиссии
mobile <-- client: Комиссия выбрана
mobile -> company: Запрос на завершение \nперевода средств
    note left
    assignedId
    end note
mobile <-- company: Ответ на завершение \nперевода средств
company -> company: Продолжение обработки
@enduml
```

(2,3) Запрос статуса перевода выполняется приложением Присоединяющейся стороны к Payneteasy для получения статуса транзакции Transfer. Чтобы реализовать запрос статуса перевода, см. [Статус Transfer](https://doc.payneteasy.ru/integration/API_commands/api_mobile_device/api_transfer_status.html.md). Ответ статуса Transfer включает параметр state со значением TRANSFER_FEE_REQUEST и объект transfer Fee List со списком комиссий для возможных шлюзов обработки. Каждый шлюз обработки представлен собственным псевдонимом в параметре assigned Id. Значение TRANSFER_FEE_REQUEST в параметре state существует только в потоке «Тарифы Transfer, заданные потребителем». Указанные параметры могут отсутствовать в первом ответе статуса Transfer, поэтому приложение Присоединяющейся стороны должно продолжать опрос статуса транзакции. Когда транзакция достигнет состояния TRANSFER_FEE_REQUEST, обработка останется приостановленной до отправки запроса завершения перевода.
 
(6,7) Для реализации запроса Complete transfer см. [Complete transfer](https://doc.payneteasy.ru/integration/API_commands/api_mobile_device/api_complete_transfer.html.md).

### MODX

The [php-plugin-modx](https://github.com/payneteasy/php-plugin-modx) repository
contains a payment module for [MODX Revolution](https://modx.com/) sites that
use the mini Shop2 e-commerce extension. It adds Payneteasy as a payment
method inside mini Shop2’s checkout so orders placed on a MODX/mini Shop2 storefront
can be paid through the Payneteasy gateway.

There is no public demo shop for this plugin; the steps below are based on the
plugin’s own installation and removal notes rather than a live installation.

#### Source code

The plugin’s source and the installation/removal notes it is based on are
published at [payneteasy/php-plugin-modx](https://github.com/payneteasy/php-plugin-modx).

### mPOS API

#### Введение

mPOS - это устройство, способное считывать данные карты с пластиковых карт (например, треки магнитной полосы) или других устройств и передавать эти данные в Payneteasy mPOS API в зашифрованном виде.
 
mPOS API (MAPI) поддерживает транзакции [Sale](#mpos-api-sale) и [Preauth](#mpos-api-preauth) с запросами статуса и обратными вызовами для обработки статуса транзакции.
 
В зависимости от конкретного эквайрингового решения может потребоваться реализация регулярной процедуры Close Day для клиринга банковских платежей через API команду /api/v2/close-day/. Свяжитесь с менеджером поддержки для уточнения деталей.
 

#### Сценарий интеграции мобильного приложения

Payneteasy team creates a dedicated account on sandbox environment and provides integrator with test ENDPOINTID, merchant_control_key and test mPOS devices with pre-installed encryption key for processing test transactions.
mPOS devices (each has a serial number) are handed to integrator along with SDK for communication (see [mPOS SDK for iOS](https://doc.payneteasy.ru/integration/mpos_sdk_for_ios.html.md) and [mPOS SDK for Android and Java](https://doc.payneteasy.ru/integration/mpos_sdk_for_android_and_java.html.md)).
Integrator team implements Sale and/or Preauth transaction flows and Mobile App-to-mPOS communication tailoring their needs.

##### Общий сценарий оплаты

```plantuml
skinparam roundcorner 20
skinparam sequenceArrowThickness 1
skinparam maxmessagesize 1200
skinparam sequenceParticipant underline
actor Payer
participant "Connecting Party" as A
participant "Payneteasy" as B
autonumber
Payer -> A: Checkout
activate A
A -> B: /mapi/v1/sale/
activate B
B --> A: Order ID
B -> B: Process\nSale
group Get Final Status
== Receive Connecting Party Callback ==
A <- B: Callback with Final Status
A --> B: HTTP 200
deactivate B
== Order Status Request ==
A -> B: Get Status by Order ID
activate B
B --> A: Final Status
deactivate B
end
A --> Payer: Show result
deactivate Payer
deactivate A
```

(2) Для реализации запроса sale см. /mapi/v1/sale/.
 
(5) Для реализации обратного вызова с обработкой финального статуса см. [Обратный вызов Присоединяющейся Стороны](https://doc.payneteasy.ru/integration/API_commands/merchant_callback_parameters.html.md).
 
(7) Для реализации запроса статуса заказа см. [/api/v2/status/](https://doc.payneteasy.ru/integration/API_commands/api_v2_status.html.md). Статус следует запрашивать несколько раз с интервалом 3-5 секунд, пока в ответе не будет получен финальный статус.
 

##### Сценарий Preauth

```plantuml
skinparam roundcorner 20
skinparam sequenceArrowThickness 1
skinparam maxmessagesize 1200
skinparam sequenceParticipant underline
actor Payer
participant "Connecting Party" as A
participant "Payneteasy" as B
autonumber
Payer -> A: Checkout
activate A
A -> B: /mapi/v1/preauth/
activate B
B --> A: Order ID
B -> B: Process\nPreauth
group Get Final Status
== Receive Connecting Party Callback ==
A <- B: Callback with Final Status
A --> B: HTTP 200
deactivate B
== Order Status Request ==
A -> B: Get Status by Order ID
activate B
B --> A: Final Status
deactivate B
end
A --> Payer: Show result
deactivate Payer
deactivate A
```

(2) Для реализации запроса preauth см. /mapi/v1/preauth/.
 
(5) Для реализации обратного вызова с обработкой финального статуса см. [Обратный вызов Присоединяющейся Стороны](https://doc.payneteasy.ru/integration/API_commands/merchant_callback_parameters.html.md).
 
(7) Для реализации запроса статуса заказа см. [/api/v2/status/](https://doc.payneteasy.ru/integration/API_commands/api_v2_status.html.md). Статус следует запрашивать несколько раз с интервалом 3-5 секунд, пока в ответе не будет получен финальный статус.

### mPOS Integration

### mPOS API Ru

#### Закрытие дня

**Описание закрытия дня**

Деньги переводятся на расчетный счет торговца после закрытия дня. При неуспешном завершении процедуры закрытия дня или если процедура закрытия вовсе не инициируется торговцем, операция клиринга не производится, таким образом деньги не зачисляются на расчетный счет торговца.

Если по какой-либо причине не удается провести закрытие дня, используя «Удаленное закрытие дня», необходимо провести операцию закрытия дня вручную через личный кабинет или обратиться за помощью в службу поддержки.

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

Для закрытия дня доступны следующие способы:

[Принудительное закрытие дня](#manuallycloseday)

[Автоматическое закрытие дня](#autocloseday)

[Автоматическое закрытие дня по заранее установленному времени](#autoclosedaytime)

[Удаленное закрытие дня](#apicloseday)

##### Принудительное закрытие дня

Для принудительного закрытия дня менеджеру или его сотруднику в личном кабинете системы надо перейти в настройки шлюза, для которого требуется закрыть день.

> `pic1 close_day`
 
> `pic2 close_day`

На странице шлюза нажмите кнопку “Закрыть день” и подтвердите закрытие дня на всплывающем окне. На странице начнет отображаться окно “Закрытие дня для ‘имя шлюза’”, дождитесь завершения операции.

> `pic3 close_day`

После успешного закрытия дня на странице шлюза будет отображена информация о дате закрытия и сумме транзакций с момента последнего закрытия дня для данного шлюза до текущего закрытия дня.

> `pic4 close_day`

> **Warning:** Во время закрытия дня шлюз блокируется и транзакции по нему проходить не будут.

##### Автоматическое закрытие дня

Для автоматического закрытия дня менеджеру или его сотруднику в личном кабинете системы надо перейти в настройки шлюза, для которого требуется закрывать день автоматически.

> `pic1 close_day`
 
> `pic2 close_day`

На странице шлюза нажмите кнопку “Редактировать”, поставьте галочку напротив пункта “Автоматическое закрытия дня” и нажмите “Сохранить”.

> `pic5 close_day`
При автоматическом закрытии дня оптимальное время закрытия выбирается системой автоматически (ближе к концу рабочего дня по МСК).
 

> **Warning:** Во время автоматического закрытия дня шлюз блокируется и транзакции по нему проходить не будут.

После успешного автоматического закрытия дня на странице шлюза будет отображена информация о дате закрытия и сумме транзакций с момента последнего закрытия дня для данного шлюза до текущего закрытия дня.

> `pic4 close_day`

##### Автоматическое закрытие дня по заранее установленному времени

Для автоматического закрытия дня по заданному времени менеджеру или его сотруднику в личном кабинете системы надо перейти в настройки шлюза, для которого требуется закрывать день автоматически в установленное время.
 
> `pic1 close_day`
 
> `pic2 close_day`
На странице шлюза нажмите кнопку “Редактировать”, поставьте галочку напротив пункта “Закрывать день автоматически”, появится пункт “Время закрытия дня”, нужно выставить время закрытия дня, затем нажать “Сохранить”.
 
Обратите внимание, что пункт “Автоматическое закрытия дня” должен быть выключен, иначе время закрытия дня будет выбрано автоматически системой.
 
> `pic6 close_day`

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

> `pic6 close_day`

> **Warning:** Во время автоматического закрытия дня по заданному времени шлюз блокируется и транзакции по нему проходить не будут.

##### Удаленное закрытие дня

Удаленное закрытие дня позволяет закрыть день сразу на всех шлюзах определенного терминала. Для этого необходимо для ВСЕХ шлюзов ассоциированных с терминалом установить в настройках “Удаленное закрытие дня”.
 
Для удаленного закрытия дня менеджеру или его сотруднику в личном кабинете системы надо перейти в настройки шлюза, для которого требуется включить удаленное закрытие дня.
 
> `pic1 close_day`
 
> `pic2 close_day`
На странице шлюза нажмите кнопку “Редактировать”, поставьте галочку напротив пункта “Удаленное закрытие дня”, при необходимости, задайте число дней через которое будет срабатывать автоматическое закрытие дня, начиная с последнего успешного удаленного закрытия дня - пункт “Максимальная задержка закрытия дня (дн.)”, автоматически устанавливается 3 дня, затем нажмите “Сохранить”.
 
> `pic8 close_day`

> **Warning:** Во время удаленного закрытия дня шлюзы блокируются и транзакции по ним проходить не будут.

Для инициации Удаленного закрытия дня необходимо отправить HTTP запрос следующего вида:
 
```text
POST https://${hostname}/paynet/api/v2/close-day/{endpointId}
```

Перевод: Аутентификация пользователя происходит по OAuth 1.0, описание: [oauth](https://doc.payneteasy.ru/integration/general_api_usage/request_authentication_methods/oauth.html.md)
 

**Тело запроса**

В теле запроса укажите данные со следующей структурой:
 
```text
{
  "day_close_request_id": {string},
  "sale_approved_count": {string},
  "sale_approved_sum": {string},
  "reversal_approved_count": {string},
  "reversal_approved_sum": {string}
}
```

**Обязательные параметры**

| Имя свойства | Тип(длина) | Описание |
|----------------------|--------------|-----------------------------------------------------------------|
| day_close_request_id | string(8-32) | Уникальный идентификатор запроса. Может содержать буквы и цифры |

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

| Имя свойства | Тип(длина) | Описание |
|-------------------------|--------------|-------------------------------------------------------|
| sale_approved_count | string | Перевод: Число подтвержденных sale транзакций |
| sale_approved_sum | string | Перевод: Сумма по подтвержденным sale транзакциям |
| reversal_approved_count | string | Перевод: Число подтвержденных reversal транзакций |
| reversal_approved_sum | string | Перевод: Сумма по подтвержденным reversal транзакциям |

**Тело ответа**

Перевод: Пользователь генерирует идентификатор запроса и посылает запрос на закрытие дня. Если этот идентификатор используется впервые - начинается инициализация закрытия дня для гейта(ов), ассоциированного(ых) с переданным идентификатором терминала. Пользователю возвращается асинхронный ответ со статусом ‘starting’.
 
Пример структуры ответа следующий:
 
```text
{
  "response": {
    "статус": "starting",
    "gates": [ {
      "gateId": 193,
      "isDayClosing": true,
      "epntId": 1
      }, {
      "gateId": 82,
      "isDayClosing": true,
      "epntId": 1
      }, {
      "gateId": 317,
      "isDayClosing": true,
      "epntId": 1
    }
    ]
  },
  "theRequestSerialNumber": "00000000-0000-0000-0000-00000000001c"
}
```

| Имя свойства | Тип | Описание |
|------------------------|------------|-------------------------------------------------------------------------|
| статус | string | Статус операции закрытия дня |
| gate Id | long | Идентификатор шлюза по которому происходит закрытие дня |
| is Day Closing | Логический | Перевод: Флаг закрытия дня, при значении true - шлюз заблокирован |
| epnt Id | long | Свойство, присваемое банком терминалу при его настройке в системе банка |
| the Request Serial Number | string | Серийный номер запроса закрытия дня |
Перевод: Запрос с идентификатором day_close_request_id, уже использованным ранее, выполняет функцию статус-запроса. После первичного (инициирующего запроса) пользователь может продолжать посылать запросы по тому же адресу с тем же самым идентификатором запроса. В данном случае, этот идентификатор всегда будет ассоциирован с процедурой закрытия дня, которую он инициировал. Пока операция по закрытию дня в процессе выполнения - пользователю будет возвращаться асинхронный ответ со статусом ‘processing’.
 
Пример структуры ответа следущий:
 
```text
{
  "response": {
    "статус": "processing",
    "gates": [ {
      "gateId": 193,
      "isDayClosing": true,
      "epntId": 1
      }, {
      "gateId": 82,
      "isDayClosing": true,
      "epntId": 1
      }, {
      "gateId": 317,
      "isDayClosing": true,
      "epntId": 1
    }
    ]
  },
  "theRequestSerialNumber": "00000000-0000-0000-0000-00000000001e"
}
```

| Имя свойства | Тип | Описание |
|------------------------|------------|-------------------------------------------------------------------------|
| статус | string | Статус операции закрытия дня |
| gate Id | long | Идентификатор шлюза по которому происходит закрытие дня |
| is Day Closing | Логический | Перевод: Флаг закрытия дня, при значении true - шлюз заблокирован |
| epnt Id | long | Свойство, присваемое банком терминалу при его настройке в системе банка |
| the Request Serial Number | string | Серийный номер запроса закрытия дня |
Перевод: Информация о закрытом дне появится в ответе от сервера по мере ее поступления от процессоров (в случае одновременного закрытия нескольких гейтов). После закрытия дня гейта(ов) статус ответа примет значение ‘finished’, вне зависимости от того, завершилось ли закрытие дня на всех гейтах успешно, или часть гейтов (или все) закрылись с ошибкой.
 

> **Warning:** Перевод: Если во время удаленного закрытия дня шлюз(ы) останутся в заблокированном состоянии (в теле ответа при “статус”: “finished” для шлюза - “is Day Closing”: true), воспользуйтесь инструментом снятия блокировки в личном кабинете системы, который описан далее в этом разделе.

Пример структуры ответа следующий:
 
```text
{
  "response": {
    "статус": "finished",
        "gates": [ {
              "gateId": 193,
              "isDayClosing": false,
              "gateCloseDate": "Mon Dec 10 14:44:21 MSK 2018",
              "epntId": 1,
              "saleApprovedCount": "2334",
              "saleAmount": "87328428482.00",
              "reversalApprovedCount": "123",
              "reversalAmount": "12393423.00",
              "code39": "000",
              "RRN": "2034829434"
              }, {
              "gateId": 82,
              "isDayClosing": false,
              "gateCloseDate": "Mon Dec 10 14:44:21 MSK 2018",
              "epntId": 1,
              "saleApprovedCount": "2334",
              "saleAmount": "87328428482.00",
              "reversalApprovedCount": "123",
              "reversalAmount": "12393423.00",
              "code39": "000",
              "RRN": "2034829434"
              }, {
              "gateId": 317,
              "isDayClosing": false,
              "gateCloseDate": "Mon Dec 10 14:44:21 MSK 2018",
              "epntId": 1,
              "saleApprovedCount": "2334",
              "saleAmount": "87328428482.00",
              "reversalApprovedCount": "123",
              "reversalAmount": "12393423.00",
              "code39": "000",
              "RRN": "2034829434"
        }
        ]
      },
      "theRequestSerialNumber": "00000000-0000-0000-0000-00000000002c"
}
```

| Имя свойства | Тип | Описание |
|------------------------|------------|-------------------------------------------------------------------------|
| статус | string | Статус операции закрытия дня |
| gate Id | long | Идентификатор шлюза по которому происходит закрытие дня |
| is Day Closing | Логический | Перевод: Флаг закрытия дня, при значении true - шлюз заблокирован |
| gate Close Date | string | Дата закрытия дня шлюза |
| epnt Id | long | Свойство, присваемое банком терминалу при его настройке в системе банка |
| sale Approved Count | string | Перевод: Число подтвержденных sale транзакций |
| sale Amount | string | Перевод: Сумма по подтвержденным sale транзакциям |
| reversal Approved Count | string | Перевод: Число подтвержденных reversal транзакций |
| reversal Amount | string | Перевод: Сумма по подтвержденным reversal транзакциям |
| code39 | string | Результат закрытия, ответ банка на вызов процедуры закрытия гейта |
| RRN | string | Номер закрытия дня сгруппированный по ID терминала |
| the Request Serial Number | string | Серийный номер запроса закрытия дня |
Перевод: Если во время выполнения процедуры закрытия дня пользователь посылает повторный запрос на закрытие дня с новым идентификатором запроса - сервер вернет ответ со статусом ‘error’ и с описанием ошибки. Использовать повторно идентификатор этого запроса для дальнейшего инициирования закрытия дня бессмысленно, т.к. статус ошибки - это финальный статус и идентификатор запроса всегда будет ассоциирован с этим запросом.
 
Пример структуры ответа следующий:
 
```text
{
      "response": {
        "статус": "error",
        "errorCode": "99",
        "errorMessage": "gate is closing already"
      },
      "theRequestSerialNumber": "00000000-0000-0000-0000-000000000020"
}
```

| Имя свойства | Тип | Описание |
|------------------------|--------|-------------------------------------|
| статус | string | Статус операции закрытия дня |
| error Code | string | Код ошибки |
| error Message | string | Описание ошибки |
| the Request Serial Number | string | Серийный номер запроса закрытия дня |
Перевод: Если пользователь инициирует запрос с новым идентификатором запроса на терминал, по которому уже было закрытие дня, и часть ассоциированных с терминалом гейтов закрылись с ошибкой (и находятся в закрытом состоянии) - сервер пришлет ответ со статусом ‘error’ и соответствующим описанием ошибки.
 

> **Warning:** Для разрешения этой проблемы проведите операцию закрытия дня вручную в личном кабинете системы.

##### Инструмент снятия блокировки для шлюза

Перевод: Если во время проведения удаленного закрытия дня, один или несколько шлюзов остались в заблокированном состоянии (в теле ответа при “статус”: “finished” для шлюза - “is Day Closing”: true), Вы можете снять блокировку в личном кабинете системы и, при необходимости, закрыть день вручную.

Для снятия блокировки на шлюзе менеджеру или его сотруднику в личном кабинете системы надо перейти в настройки шлюза, для которого требуется снять блокировку.

> `pic1 close_day`
 
> `pic2 close_day`

На странице шлюза нажмите кнопку “Locks”, для вызова инструмента снятия блокировки.

> `pic9 close_day`
 
> `pic10 close_day`

Перевод: В меню “Current locks” отображена текущая информация о блокировке шлюза:

* Перевод: Lock session ID - идентификатор сессии блокировки.
* Перевод: Start day closing date - дата начала закрытия дня.
* Перевод: Bank terminal lock статус - блокировка терминала для проведения траназкций (Blocked/Free).
* Перевод: Initial gate job статус - статус задачи по инициализации шлюза.
* Перевод: Close day job статус - статус задачи по закрытию шлюза.
* Перевод: Is day closing - шлюз в стадии закрытия, т.е. находится ли в заблокированном состоянии (Y/N). Y - шлюз заблокирован, N - блокировки нет.

Доступны следующие команды снятия блокировки:

* CLEAR_TRANSACTION_LOCK - сбросить сессию из-за которой произошла блокировка.
* CLEAR_INIT_ATTEMPT - сбросить статус задачи по инициализации шлюза.
* CLEAR_CLOSING_DAY_ATTEMPTS - сбросить статус задачи по закрытию шлюза.
* CLEAR_CLOSING_DAY_FLAG - сбросить задачу по закрытию шлюза, снять блокировку.

Отметьте галочкой нужный пункт меню и нажмите кнопку “Update”.

Перевод: После выполнения команды сброса, повторно откройте инструмент снятия блокировки и проверьте, что в меню “Current locks” изменился статус сбрасываемого параметра. Например, если шлюз был заблокирован, то после снятия блокировки параметр “Is day closing” = N.

##### Инструмент отладки для удаленного закрытия дня

Перевод: Чтобы воспроизвести вызов API, введите все данные из исходного запроса, включая маркеры проверки подлинности. Не забудьте установить nonce и timestamp значения, которые Вы использовали. Запрос, подписанный с помощью OAuth, должен совпадать со значением в инструменте отладки ниже, вне зависимости от используемой библиотеки и языка программирования. Если подписи отличаются, значит в Вашем коде подписи OAuth есть ошибка.
 
<meta http-equiv="Cache-Control" content="no-cache">
<script src="../_static/js/oauth/sha1.js"></script>
<script src="../_static/js/oauth/oauth.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="../_static/js/highlight/styles/default.css">
<script src="../_static/js/highlight/highlight.pack.js"></script>

<script>
$(document).ready (function(){ 
 $("#remote Tab a").click (function (e){
 	e.prevent Default();
 	$(this).tab('show');
 });
});
</script>

<script type="text/javascript">
		var curl Remote Text = "";
 
		var php Remote Text = "";
		
		var ruby Remote Text = "";
 function sign (form) {
	 var url = "";
		var sandbox = "";
		var params = "";
		
		var xhttp = new XMLHttp Request();
		xhttp.onreadystatechange = function() {
		if (xhttp.ready State == 4 && xhttp.status == 200) {
			if (url == "../_static/examples/PHP/params_with_header_get_PHP.txt"){
				php Remote Text = xhttp.response Text;}
			else {
				ruby Remote Text = xhttp.response Text;}
			}
		}
	
		url = "../_static/examples/PHP/params_with_header_get_PHP.txt";
		xhttp.open("GET", url, false);
		xhttp.send();
		url = "../_static/examples/Ruby/params_with_header_get_Ruby.txt";
		xhttp.open("GET", url, false);
		xhttp.send();
	
 var accessor = { consumer Secret: form.consumer Secret.value
 , token Secret : form.token Secret.value};
 var message = { method: form.http Method.value
 , action: form. URL.value
 , parameters: OAuth.decode Form (form.parameters.value)
 };
 for (var e = 0; e < form.elements.length; ++e) {
 var input = form.elements[e];
 if (input.name != null) 
 if (input.name.substring(0, 6) == "oauth_"){ 
 if (input.value != null) 
 if (input.value != "") 
 if (!(input.type == "checkbox" || input.type == "radio") || input.checked)
 {
 message.parameters.push([input.name, input.value]);
 params += " '" + input.name + "' => '" + input.value + "', \\n";
 }
			}else if (input.name.substring(0, 10) == "parameters"){
						
						var example = input.value.split('&');
 for (var i = 0; i < example.length; i++){
					 var split = example[i].split('=');
						params += " '" + split[0] + "' => '" + split[1] + "', \\n";
						}
					}
 }
 OAuth. Signature Method.sign (message, accessor);
 show Text("normalized Parameters", OAuth. Signature Method.normalize Parameters (message.parameters));
 show Text("signature Base String" , OAuth. Signature Method.get Base String (message));
 show Text("signature" , OAuth.get Parameter (message.parameters, "oauth_signature"));
 show Text("authorization Header" , OAuth.get Authorization Header("", message.parameters));

	curl Remote Text = "curl -H 'Authorization: " + OAuth.get Authorization Header("", message.parameters) + "' '" + form. URL.value + "?" + OAuth. Signature Method.normalize Parameters (message.parameters) + "'";
	
 show Text("curl Request" , curl Remote Text);
 	
	php Remote Text = php Remote Text.replace('{$Authorization}', OAuth.get Authorization Header("", message.parameters));
	php Remote Text = php Remote Text.replace('{$sandbox}', form. URL.value );
	php Remote Text = php Remote Text.replace("{$generated parameters with values code}", params);

	ruby Remote Text = ruby Remote Text.replace("{$generated parameters with values code}", params);
 ruby Remote Text = ruby Remote Text.replace('{$Authorization}', OAuth.get Authorization Header("", message.parameters));
	ruby Remote Text = ruby Remote Text.replace('{$sandbox}', form. URL.value);
	
	show Text("php Request" , php Remote Text);
	show Text("ruby Request" , ruby Remote Text);
	
 	$(document).ready (function() {
 $('pre code').each (function (i, block) {
 hljs.highlight Block (block);
 });
 }); 
	return false;
 }
 function show Text (element Id, text) {
 var child = document.create Text Node (text);
 var element = document.get Element By Id (element Id);
				element.innerHTML ="";
 if (element.has Child Nodes()) {
 element.replace Child (child, element.first Child);
 } else {
 element.append Child (child);
 }
 }
 function fresh Timestamp() {
 document.request.oauth_timestamp.value = OAuth.timestamp();
 }
 function fresh Nonce() {
 document.request.oauth_nonce.value = OAuth.nonce(11);
 }
		 function copy To Clipboard (text) {
 var text Area = document.create Element("textarea");

 // Place in top-left corner of screen regardless of scroll position.
 text Area.style.position = 'fixed';
 text Area.style.top = 0;
 text Area.style.left = 0;

 // Ensure it has a small width and height. Setting to 1px / 1em
 // doesn't work as this gives a negative w/h on some browsers.
 text Area.style.width = '2em';
 text Area.style.height = '2em';

 // We don't need padding, reducing the size if it does flash render.
 text Area.style.padding = 0;

 // Clean up any borders.
 text Area.style.border = 'none';
 text Area.style.outline = 'none';
 text Area.style.box Shadow = 'none';

 // Avoid flash of white box if rendered for any reason.
 text Area.style.background = 'transparent';

 if (text == 'curl'){
	text Area.value = curl Remote Text;
 } else if ( text =='php'){
	text Area.value = php Remote Text;
 } else {
 text Area.value = ruby Remote Text;
 }
 document.body.append Child (text Area);

 text Area.select();

 try {
 var successful = document.exec Command('copy');
 var msg = successful ? 'successful' : 'unsuccessful';
 console.log('Copying text command was ' + msg);
 } catch (err) {
 console.log('Oops, unable to copy');
 }

 document.body.remove Child (text Area);

 
 }
</script>

<form name="request">

 
 <p></p>
 <input type="button" class="doc-button" style="font-size: 100%; padding: 2px 6px 3px 6px;" value="Sign" on Click="sign (document.request)"/>
 <p></p>
</form>

<ul class="nav nav-tabs" id="remote Tab">
 <li class="active">[CURL](#remoteCURL)</li>
 <li>[PHP](#remotePHP)</li>
 <li>[Ruby](#remote Ruby)</li>
 </ul>

 <button class="doc-button" onclick="copy To Clipboard('php')">Copy to clipboard</button>					
 <pre>
 <code class="php" id="php Request"></code>
 </pre>

 <button class="doc-button" onclick="copy To Clipboard('ruby')">Copy to clipboard</button>					
 <pre>
 <code class="language-ruby" id="ruby Request"></code>
 </pre>

### mPOS FAQ

#### Первоначальные действия при сбое работы терминала

В случае отсутствия описания ошибки в документации, при сбое работы терминала выполните следующие действия:

* Перезагрузить терминал, при необходимости, остальное оборудование.
* В случае ошибки сразу выгрузить логи с терминала.
* Проверить соединения: кабели, интернет и т.д.
* Переподключить терминал.
* Проверить настройки терминала в зависимости от типа подключения: USB/Ethernet.

Если проблема осталась, обратитесь в техническую поддержку.

#### Ошибка -01

Нет окончательного уведомления EMV, автоматический Reversal, отклонение: 94029.

Не пришел EMV Final Advice на сервер. Причины:

* нет соединения с интернетом
* вытащили карту из терминала
* ошибка в ПО на терминале, в SDK или в приложении

Перевод: Определить точную причину можно по логам. Найти в логах строчку с Invoice (например, у заказа 84822609 invoice - 461106A7-2E37-4D97-B594-8A1639691957).

Если в логах: CHIP_CARD_REMOVED, то вытащили карту.

Пример из логов:

```http
Web Apr 10 10:41:40 GMT +03:00 2019 DEBUG sdk.CardReaderPresenter PRESENTER:
PayneteasyReaderPresenter.cardReaderStateChanged(CardReaderEvent {state=SPIRE_48_TERMINATE_TRANSACTION_EVENT,message=<SpireTerminateTransaction48Event
   messageIdentifier = 48
   sequenceNumber    = 1
   reason            = 0x0E_14_CHIP_REMOVED
```

При этом деньги должны были вернуться автоматом.

#### Ошибка -02

Повторите попытку позже, отклонение: 94030.

Причины:

* Перевод: гейт заблокирован. Это видно по мониторингу на странице [мониторинга](https://gate.payneteasy.ru/paynet-ui/tools/monitoring). Строчка “Locked terminals - “. В значении указываются номера гейтов.
* подключены несколько терминалов (Spire или Miura) к одному гейту

Если заблокирован гейт, нужно зайти в личный кабинет системы, перейти в настройки гейта, выключить его, а затем включить.

 *Закрытие гейтов*

См. отчет Close Days Report в меню “Отчёты” - “Все отчёты”

#### Ошибка 2005 — PROCESSOR_OR_GATE_NOT_CONFIGURED_PROPERLY: недопустимые тарифы

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

#### Ошибка попытки использования магнитной полосы при доступном чипе

Проводят карту по магнитной полосе, а у нее есть чип.

#### Ошибка: шлюз 3822 заблокирован заказом 83677493, вложенная ошибка — blocked.by;83677492;-03

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

#### Ошибка Терминалы не проводят платежи

Проверить, не заблокирован ли гейт.

#### Перевод: Оповещение Locked terminals - 1517,1537,1573,1574…

* заходим на страницу гейта
* проверяем, если ошибка закрытия дня
* если есть, значит банковский день закрылся неуспешно
* нажимаем на кнопку “Считать успешно закрытым”
* нажать на кнопку “Закрыть день”
* если день опять не закроется, нужно звонить в банк

#### Как снимать блокировку гейта

* перейти на страницу “Настройки” - “Поиск настроек”
* ввести номер гейта
* нажать на кнопку Disable, потом Enable

#### Платежи не проходят и даже попыток не видно

Проверить в меню “Инструменты” - “Интеграционная панель”

#### Оповещение для UNKNOWN статусов

Перевод: Включить Failed session initiators в Tasks Будет приходить по 1-2 письма будет на каждый UNKNOWN.

#### Проверка вводил ли клиент пинкод или платеж прошел без ввода пинкода

Перевод: В поле Order Description пишем как прошла транзакция например, с вводом PIN - будет так Order description:EMV_CONTACT_PIN_OFFLINE.

#### Перезагружается терминал во время оплаты

Проблема с питанием терминала по USB.

Если терминал подключен к блоку питания, то проблема в БП, надо заменить его.

#### Отображение оборотов по терминалу

Для правильной суммы лучше пользоваться Performance отчетом из меню “Отчёты” - “Все отчёты

Перевод: Однако, нужно учитывать, что у каждой торговой точки мерчанта должен быть свой endpoint в разрезе ридеров мы не считаем, т.к. в течение дня ридер может сломаться и его заменят.

НЕЛЬЗЯ заводить один терминал в банке и подключать к нему больше одного ридера.

#### Как проверить заблокирован ли гейт

Перевод: Экран “Инструменты” - “Monitoring” - “Tasks”. Строчка: Locked mobile terminals.

#### Перевод: Ошибка 05 - Do not honour

Банк эмитент отклонил транзакцию. Причину отклонения нужно узнавать у банка, который выпустил карту.

#### Ошибка 88

Данная ошибка связана с некорректной работой ключа для бесконтактной оплаты. Для устранения данной ошибки необходимо связаться с нашей службой технической поддержки.

#### Очень долго грузится терминал. Примерно секунд 30-50. Выполнили 3+ентер и 2+ентер. Ситуация не изменилась

Терминал подбирает ip. Проверьте какой сейчас ip и зафиксируйте его в админке.

#### Идет подключение к терминалу и так остается в этом состоянии

Перевод: Ошибка There was a problem while creating a connection to the remote service. У терминала настройки под Ethernet, а должны быть под usb, необходимо поменять настройки на самом терминале. Также возможно, что терминалу не хватает мощности: попробуйте подключить терминал по usb к компьютеру или еще куда-то, возможно не хватает мощности запитать терминал.

#### Что если с утра провести принудительную сверку итогов, то в 10 часов её уже не будет?

Сверка будет утром в любом случае.

#### Написано, что автоотмена, с клиента списались деньги, касса выдала ошибку

Перевод: Терминал не дожидается статуса платежа (либо интернет либо еще что-то) в итоге отваливается по таймауту, хотя операция проходит. В таких случаях вероятнее всего проблема связана с тем, что используется версия SDK “sdk_version” = “0.2.27-3” и старее, в более поздних версиях, например ( 0.2.28-3) есть повторные запросы и таких ситуаций не происходит, плюс логируются все запросы статуса операции. SDK предоставляем мы, релиз её в вашем приложении не на нашей стороне. Информация о версии SDK доступна в reader-logs в первой строчке, например: “Creating manager version 0.2.27-3”.

Последние версии SDK можно посмотреть на сайте:

* iOS — [https://github.com/payneteasy/Payneteasy Reader/releases](https://github.com/payneteasy/Payneteasy Reader/releases)
* Android — [https://github.com/payneteasy/reader-example/wiki/Changelog](https://github.com/payneteasy/reader-example/wiki/Changelog)

#### Терминал не работает - деньги не списаны попробуйте другую карту. Неизвестная ошибка

Неправильно настроен терминал. Забыли указать Параметры / Редактирование / Smart Sale / SSL без ККМ = Да.

#### Подскажите, есть ли какие блокировки по терминалу? Не отражаются попытки оплаты и идут автоотмены

Почему терминалы PAX и Verifone иногда делали возврат: Все дело было в периодической (раз в час) проверке соединения с сервером. На всех терминала поменяли настройки - отключили проверку соединения, сделали ее только один раз, при включении. У нас сейчас практически все терминалы обновляются раз в день, какие не обновятся, тем нужно будет сделать 3+ENTER. Это касается только тех терминалов, которые работают по Ethernet, с USB подключением проблем нет.

#### Что означают обозначения EMV_CONTACT…?

* EMV_CONTACTLESS_SIGNATURE - бесконтактные способы оплаты картами до 1000 рублей, а также Apple Pay, Google Pay, и др.
* EMV_CONTACT_PIN_OFFLINE - оплата картой с чипом и вводом пин-кода.
* EMV_CONTACTLESS_PIN_ONLINE - бесконтактные способы оплаты картами от 1000 рублей с вводом пин-кода.
* EMV_CONTACT_SIGNATURE - если карта отказывается проверять пинкод у держателя карты, требуется подпись клиента на чеке в подтверждение операции.
* MAGNETIC_STRIPE_SIGNATURE - оплата картой с помощью магнитной ленты, предполагается подпись клиента на чеке. Также, возможно, с таким кодом пройдёт оплата телефоном Samsung с технологией эмуляции магнитной ленты.

#### Подскажите, есть ли какие блокировки по терминалу? Не отражаются попытки оплаты и идут автоотмены

В логах это проявляется так:

* Перевод: 2018.10.10 17:05:32 INFO unipos Проверка соединения по расписанию
* 2018.10.10 17:05:35 DEBUG TACL ========= Сборка сообщения =========
* 2018.10.10 17:05:35 DEBUG TACL ISO 000 : 800

#### Событие PNEReader: <PNEReader Event: state=Unknown (22), self.message=192.168.2.255-192.168.2.156:27015>…

<PNEReader Event: state=Unknown (22), self.message=192.168.2.255-192.168.2.156:27015>
2018-10-22 18:20:47.802 +03:00 -[Inpas Reader Manager stop],105 - Inpas Reader Manager.stop()
2018-10-22 18:20:47.803 +03:00 -[Inpas Reader Manager do Disconnect With Message:],144 - Inpas Reader Manager closing streams
2018-10-22 18:20:47.805 +03:00 -[Inpas Reader Manager Delegate on Reader Event:],260 - Inpas Reader Manager Delegate.presenter state Changed:
<PNEReader Event: state=Not Connected, self.message=(null)>

Перевод: Проблема может быть связана со старой версией SDK. Информация о версии SDK доступна в reader-logs в первой строчке, например: “Creating manager version 0.2.27-3”

Последние версии SDK можно посмотреть на сайте:

* iOS — [https://github.com/payneteasy/Payneteasy Reader/releases](https://github.com/payneteasy/Payneteasy Reader/releases)
* Android — [https://github.com/payneteasy/reader-example/wiki/Changelog](https://github.com/payneteasy/reader-example/wiki/Changelog)

#### Терминал не работает - деньги не списаны попробуйте другую карту. Неизвестная ошибка

Перевод: Это проявляется выводом сертификата ssl в логах:

* Sat Oct 20 22:33:36 GMT+03:00 2018 DEBUG sdk. Sa63Connection16Eve Connection event is Sa63Connection16Event{

operation = OPEN
host = 185.15.175.23
port = 20002
\_91_pulsar_tags = ‘CA:—–BEGIN CERTIFICATE—–
MIIDTTCCAj Wg AwIBAgIJALYx Pmm QmP+xMA0GCSqGSIb3DQEBCwUAMB4xHDAa BgNV

#### При попытке провести оплату пишет - “нет соединения с терминалом”

Проверить, включен ли Bluetooth.

#### При попытке проведения - ошибка, что банк отклонил платеж, но в списке заказов нет этого платежа

Зайти в меню “Инструменты” - “Интеграционная панель” и првоерить запросы по терминалу (Endpoint)

В старых версиях программы Cassby может высылаться нулевая сумма.

#### Не удалось отменить транзакцию

Проверить, не заблокирован ли гейт.

Если банк возвращает двухбуквенный код ответа, то следует обратиться в банк с номером RRN и кодом ответа банка.

#### Перевод: В Интеграционной панели в ЛК ошибка - Signature verification failed.

Перевод: Ошибка связана с подписью запроса. Проверьте в настройках терминала endpoint, login, control key.

### mPOS SDK для Android и Java

#### Введение

Payneteasy mPOS SDK — это программно-аппаратный комплекс мобильных платежей, позволяющий быстро и легко начать предоставлять сервис мобильных платежей. Использование доступного мобильного POS-терминала (mPOS) позволяет Присоединяющейся Стороне расширить свой бизнес за счёт очных безналичных платежей.

```plantuml
@startuml
left to right direction
rectangle "Mobile Device" {
(mPOS SDK)  #ffe6cc;line:black;line.dotted
(Mobile App)
}
(Payneteasy) -- (mPOS SDK)
(Payneteasy) - (Acquirer Bank)
(mPOS SDK) -- (Mobile App)
(mPOS device) - (mPOS SDK)
@enduml
```

Payneteasy Reader SDK обеспечивает быструю интеграцию с [mPOS](https://doc.payneteasy.ru/integration/mpos_api_index.html.md) терминалами в мобильных приложениях.

Возможности

- Работает как на Android, так и на Java
- Транзакции MSR, контактные EMV, бесконтактные EMV
- Транзакции с подтверждением подписью или PIN-кодом
- Удалённая загрузка ключей
- Удалённое обновление прошивки
- Удалённая настройка mPOS
- Сертифицирован Open Way. Первое мобильное POS-решение Chip&PIN в России — [news_card.jsp](https://www.openwaygroup.com/news_card.jsp?dcion=908&rgn=1&lng=1)
- Пользовательские сообщения на LCD-экране для всех стадий (только Miura)
- Единый API для всех ридеров
- Реализован [API сервера Payneteasy](https://doc.payneteasy.ru/integration/mpos_api.html.md)
- Множество типов транзакций: sale, preauthorization, capture, cancel, reversal, частичный reversal и др.

> **Note:** Требования: SDK поддерживает целевое развёртывание на Android от 2.2 и Oracle JVM (протестировано на 1.8)

#### Поддерживаемые терминалы

| Производитель | Модель | Подключение |
|-----------------|------------------|--------------------------------------------------------------------------------------------------------------------------------------------------|
| Miura | M006, M007, M010 | Поддержка транзакций MSR, Contact, Contactless. С PIN-кодом и без. Удалённая загрузка ключей, удалённая настройка, удалённое обновление MPI и ОС |
| Spire | SPm2 | Bluetooth |
| Verifone | Vx820 | Ethernet, USB, RS232 |
| PAX | SP30 | Ethernet, USB, RS232 |

> **Note:** Все терминалы поддерживают удалённую настройку и обновление прошивки.

> **Warning:** Поддержка прекращена с 1 января 2015 г.:

GD Seed: интеграция с официальным SDK.
 
GD Seed: собственный SDK. С оптимизацией памяти и производительности.
 
ID Tech Unimag II: интеграция с официальным SDK.
 
ID Tech Unimag II: собственный SDK. Оптимизация памяти и производительности. Расширяет список поддерживаемых моделей телефонов.
 
Bluebamboo P25.
 

> **Warning:** На стадии оценки:

Datecs DRD50, DRD10
 
Datecs MPED400, Bluepad 50
 
Wizar POS
 
BBPOS
 

#### Интеграционная среда

The SDK includes a maven repository - [http://paynet-qa.clubber.me/reader/maven/](http://paynet-qa.clubber.me/reader/maven/)
For Miura Shuttle model: Use TEST on emulators for events.

##### Настройка maven

[Android Maven-репозиторий можно найти здесь](https://github.com/payneteasy/reader-example). Добавьте репозиторий в pom.xml:

```text
<repository>
  id>reader-repo</id>
  <name>reader repo</name>
  <url>http://paynet-qa.clubber.me/reader/maven</url>
</repository>`
```

##### Настройка gradle

[Android Gradle-репозиторий можно найти здесь](https://github.com/payneteasy/reader-example-gradle). Добавьте следующее в секцию repositories:

```text
 repositories {
...
   maven { url "https://jitpack.io" }
   maven { url "http://paynet-qa.clubber.me/reader/maven" }
...
 }
```

- Добавьте следующее в зависимости:

```text
dependencies {
...
  def readerVersion = // check the latest version :ref:`here<https://github.com/payneteasy/reader-example/wiki/Changelog>`
  compile 'com.payneteasy.android.reader:api:' + readerVersion
  compile ('com.payneteasy.android.reader:lib:' + readerVersion)

  compile 'com.payneteasy.android.reader.readers:readers-common-bluetooth:' + readerVersion
  compile ('com.payneteasy.android.reader.readers:readers-miura:' + readerVersion) {
      exclude group:'junit', module:'junit'
  }
...
}
```

Подробнее см. полный [пример Gradle, доступный здесь](https://github.com/payneteasy/reader-example-gradle).

##### Для Bluetooth-ридеров (Android)

Добавьте следующее в Android Manifest.xml:

```text
<uses-permission android:name="android.permission.BLUETOOTH"/>
   <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
```

##### Для USB-терминалов (Android)

- Добавьте новый файл res/xml/device_filter.xml:

```text
<?xml version="1.0" encoding="utf-8"?>
<resources>

  
  <usb-device vendor-id="4660" product-id="257" class="255" subclass="0" protocol="0"/>

  
  <usb-device vendor-id="4554" product-id="537" class="10" subclass="0" protocol="0"/>

</resources>
```

- Добавьте любой элемент activity в Android Manifest.xml:

```text
<intent-filter>
      <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
  </intent-filter>
  <meta-data  android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" android:resource="@xml/device_filter" />`
```

- Добавьте в activity:

```text
public class MainActivity extends Activity {

   private final UsbPermissionResolver usbPermissionResolver = new UsbPermissionResolver();

   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       ...
       usbPermissionResolver.checkPermission(getIntent(), this);
   }

   @Override
   protected void onNewIntent(Intent intent) {
       super.onNewIntent(intent);
       usbPermissionResolver.checkPermission(intent, this);
   }

   @Override
   protected void onDestroy() {
       super.onDestroy();
       usbPermissionResolver.unregister(this);
   }

   ...

   }
```

> **Note:** Подробнее см. [этот коммит](https://github.com/payneteasy/reader-example-gradle/commit/2aa02c47f38cef4f3a673e98fc5d5ecb98720656).

##### Для Miura (Java)

См. пример app-2 — как запустить и собрать приложение для ридеров Miura для работы на JVM.

app-3-webstart показывает, как запустить приложение из браузера через Java Web Start:

##### Пример кода

Реализуйте интерфейс IReader Presenter:

```text
@Override
  public ProcessingContinuation onCard(BankCard bankCard) {

      setStatus("onCard: %s", bankCard);

      return ProcessingContinuation.Builder
              .startSaleOnline()
              .processingBaseUrl  ( Config.SERVER_BASE_URL)
              .merchantLogin      ( Config.MERCHANT_LOGIN )
              .merchantControlKey ( Config.MERCHANT_KEY   )
              .merchantEndPointId ( Config.END_POINT_ID   )
              .orderDescription   ( "test description"    )
              .orderInvoiceNumber ( "invoice-"+System.currentTimeMillis())
              .orderMerchantData  ( "custom merchant data for a internal use")
              .customerPhone      ( "+7 499 918-64-41"    )
              .customerEmail      ( "info@payneteasy.com" )
              .customerCountry    ( "RUS"                 )
              .listener(new IProcessingStageListener() {
                  @Override
                  public void onStageChanged(ProcessingStageEvent aEvent) {
                      setStatus("processing: %s", aEvent);
                  }
              })
              .build();

  }

  @Override
  public void onReaderSerialNumber(String aKsn) {
      setStatus("onReaderSerialNumber: %s", aKsn);
  }

  @Override
  public void cardReaderStateChanged(CardReaderEvent cardReaderEvent) {
      setStatus("cardReaderStateChanged: %s", cardReaderEvent);
  }

  @Override
  public void onCardError(CardError cardError) {
      setStatus("onCardError: %s", cardError);
  }

  @Override
  public void onReaderNotSupported(CardReaderProblem aProblem) {
      setStatus("onReaderNotSupported: %s", aProblem);
  }

  @Override
  public void onAudioData(short[] shorts, int i) {
      // for visualization
  }

  @Override
  public ConfigurationContinuation onConfiguration() {
      return new ConfigurationContinuation.Builder()
              .configDir              ( new File(activity.getFilesDir(), "miura-config"))
              .configurationBaseUrl   ( Config.SERVER_CONFIG_URL  )
              .merchantLogin          ( Config.MERCHANT_LOGIN     )
              .merchantControlKey     ( Config.MERCHANT_KEY       )
              .merchantEndPointId     ( Config.END_POINT_ID       )
              .build();
  }
```

> **Note:** Заполните Config. MERCHANT_LOGIN, Config. MERCHANT_KEY, Config. END_POINT_ID собственными значениями.

Запускает Reader Manager:

```text
CardReaderInfo cardReader = CardReaderInfo.TEST;
BigDecimal amount = new BigDecimal(1);
String currency = "RUB";

SimpleCardReaderPresenter presenter = new SimpleCardReaderPresenter(this, statusView);
cardReaderManager = CardReaderFactory.findManager(this, cardReader, presenter, amount, currency, null);`
```

Deal with картаReaderМенеджер:

- ICard Reader Manager.start Sale Session() запускает сессию продажи
- ICard Reader Manager.stop Session() останавливает сессию и освобождает ресурсы

#### Полезные ссылки

- Дополнительные примеры предоставляются по запросу.
- [Другие релизы можно найти здесь](https://github.com/payneteasy/reader-example/wiki/Changelog).

### Описание: mPOS SDK for iOS

#### Введение

Payneteasy mPOS SDK — это программно-аппаратный комплекс мобильных платежей, позволяющий быстро и легко начать предоставлять сервис мобильных платежей. Использование доступного мобильного POS-терминала (mPOS) позволяет Присоединяющейся Стороне расширить свой бизнес за счёт очных безналичных платежей.

```plantuml
@startuml
left to right direction
rectangle "Mobile Device" {
(mPOS SDK)  #ffe6cc;line:black;line.dotted
(Mobile App)
}
(Payneteasy) -- (mPOS SDK)
(Payneteasy) - (Acquirer Bank)
(mPOS SDK) -- (Mobile App)
(mPOS device) - (mPOS SDK)
@enduml
```

SDK Payneteasy Reader обеспечивает быструю интеграцию, соответствующую ADVT и M-TIP, с терминалами [mPOS](https://doc.payneteasy.ru/integration/mpos_api_index.html.md) в мобильных приложениях. SDK включает заголовочные файлы и одну статическую библиотеку.

#### Поддерживаемые терминалы

| Производитель | Модель | Подключение |
|-----------------|------------------|-----------------------|
| Miura | M006, M007, M010 | Bluetooth, USB, Wi-Fi |
| Spire | SPm2, SPm20 | Bluetooth |
| Verifone | Vx820 | Ethernet, USB, RS232 |
| PAX | SP30, D200 | Ethernet, USB, RS232 |

> **Note:** Требования: Payneteasy Reader SDK поддерживает целевое развёртывание на iOS версии 7.0+ и набор команд armv7+ (включая 64-бит), x86_64, i386 (для эмулятора).

#### Интеграционная среда

##### Добавьте SDK в проект

Добавьте следующее в Podfile:

```text
pod "PayneteasyReader", :git => 'git@github.com:evsinev/PayneteasyReader.git', :tag => '$VERSION'
```

Измените $VERSION на последнюю версию из списка релизов для [IOS](https://github.com/payneteasy/Payneteasy Reader/releases) или [Android](http://paynet-qa.clubber.me/reader/maven/com/payneteasy/android/reader) соответственно.

##### Для Miura, Spire и Pax

Добавьте следующее в \*-Info.plist:

```text
<key>UISupportedExternalAccessoryProtocols</key>
<array>
  <string>com.miura.shuttle</string>
  <string>com.thyron</string>
  <string>com.paxsz.ipos</string>
</array>
```

##### Пример кода

Реализуйте протокол PNEReader Presenter:

```text
- (void)stateChanged:(PNEReaderEvent *)aEvent {
 // displays reader status
 // see an example at https://github.com/payneteasy/ReaderExample/blob/master/ReaderExample/PaymentModule/PaymentPresenter.m#L69
}

- (PNEProcessingContinuation *)onCard:(PNECard *)aCard {
  // provide payneteasy.com account info
  PNEProcessingContinuation * continuation = [PNEProcessingContinuation
          continuationWithBaseUrl:@"https://sandbox.payneteasy.com/paynet"
                    merchantLogin:MERCHANT_LOGIN
                      merchantKey:MERCHANT_KEY
               merchantEndPointId:END_POINT_ID
               orderInvoiceNumber:[[NSUUID UUID] UUIDString]];

  return continuation;
}

- (void)onCardError:(PNECardError *)aError {
  // deal with the error
  // see an example at https://github.com/payneteasy/ReaderExample/blob/master/ReaderExample/PaymentModule/PaymentPresenter.m#L93
}

- (void)onProcessingEvent:(PNEProcessingEvent *)aEvent {
  // wait for Result event
  // see an example at https://github.com/payneteasy/ReaderExample/blob/master/ReaderExample/PaymentModule/PaymentPresenter.m#L96
}

- (PNEConfigurationContinuation *)onConfiguration {
  return [[PNEConfigurationContinuation alloc]
          initWithBaseUrl:@"https://paynet-qa.clubber.me/paynet/rki"
            merchantLogin:_payment.merchantLogin
              merchantKey:_payment.merchantKey
       merchantEndPointId:_payment.merchantEndPointId
             merchantName:_payment.merchantName
  ];
}
```

Start Reader Manager:

```text
PNEReaderFactory *factory = [[PNEReaderFactory alloc] init];
PNEReaderInfo *reader = [PNEReaderInfo infoWithType:PNEReaderType_MIURA_OR_SPIRE];
// Note: manager must be a property or a field or a static local variable, to prevent an elimination
manager = [factory createManager:reader
                        amount:[NSDecimalNumber decimalNumberWithString:@"1.00"]
                      currency:@"RUB"
                     presenter:self];
[manager start];
```

##### Полезные ссылки

- Дополнительные примеры предоставляются по запросу.
- Другие выпуски можно найти [здесь](https://github.com/payneteasy/Payneteasy Reader/releases).

##### Test Environment

| Сумма | Статус | Stage |
|---------|----------|-------------------------------------------------------------------------------------------------------|
| 1 | APPROVED | Purchase, Final Advice |
| 2 | DECLINED | Purchase |
| 3 | APPROVED | Purchase |
| 4 | DECLINED | Purchase, Final Advice |
| 1000.01 | APPROVED | Покупка, Final Advice с тестом PIN Online. В тестовых целях можно использовать только тестовые карты. |

> **Note:** Описание: Any card can be used.

Если карта запрашивает ARQC, хост отвечает с Authorisation Response Code = ‘Z3’ (невозможно перейти в онлайн, отклонено офлайн).

### mPOS Terminals

### Тестирование mPOS

#### QA-сервер Payneteasy

QA-среда Payneteasy - это [Sandbox-сервер](https://paynet-qa.clubber.me/paynet) для тестирования проблем со связностью. Поведение сервера зависит от суммы:

1.00 - Обычный платёж без каких-либо сетевых ошибок - результат APPROVED.
 
Прочие суммы - результат DECLINE.
 

Типы ошибок приведены ниже.

| Сумма | Результат | Описание |
|---------|-------------|--------------------------------------------------------|
| 1 | APPROVED | Обычный платёж без каких-либо сетевых ошибок. |
| 1.01 | APPROVED | OrderID не был получен на этапе sale. |
| 5 | APPROVED | Тайм-аут (70 секунд) для первого запроса статуса. |
| 5.01 | APPROVED | Тайм-аут (70 секунд) для sale. |
| 5.02 | APPROVED | Тайм-аут (70 секунд) для advice. |
| 5.03 | APPROVED | Тайм-аут (70 секунд) для запроса статуса после advice. |
| 6 | APPROVED | HTTP Статус 503 for sale. |
| 6.01 | APPROVED | HTTP Status 503 для первого запроса статуса. |
| 6.02 | APPROVED | HTTP Статус 503 for advice. |
| 6.03 | APPROVED | HTTP Status 503 для запроса статуса после advice. |
<script src="../_static/js/generate_card_number.js"></script>
<script src="../_static/js/crypto-js/sha1.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="../_static/js/highlight/styles/default.css">
<script src="../_static/js/highlight/highlight.pack.js"></script>

<script>hljs.init Highlighting On Load();</script>

<script type="text/javascript">
 $(document).ready (function(){
 $("#sha1Tab a").click (function (e){
 e.prevent Default();
 $(this).tab('show');
 });
 });
</script>

<script type="text/javascript">
 function sign (form) {
 var amount Info = document.get Element By Id("amount Warning");
 var signed Text = "";
 for (var e = 0; e < form.elements.length; ++e) {
 var input = form.elements[e];
 if (input.name != null)
 if (input.name.substring(0, 5) == "sha1_")
 if (input.value != null)
 if (input.value != "")
 if (!(input.type == "checkbox" || input.type == "radio") || input.checked)
 {
 if (input.name == "sha1_amount"){
 var amount To Fix = input.value \* 100;
 var fixedСумма = amount To Fix.to Fixed(0);
 if (fixedСумма != amount To Fix)
 { amount Info.innerHTML = amount Info.innerHTML.replace("​", "Possible floating point imprecision (for more information check Floating Point Math)");}
 else {amount Info.innerHTML = amount Info.innerHTML.replace("Possible floating point imprecision (for more information check Floating Point Math)", "​");}
 signed Text = signed Text + fixedСумма;}
 else
 {signed Text = signed Text + input.value;}
 }
 }
 show Text("signedvalue" , signed Text);
 show Text("sha1value" , CryptoJS.SHA1 (signed Text));

 return false;
 }

 function show Text (element Id, text) {
 var child = document.create Text Node (text);
 var element = document.get Element By Id (element Id);
 if (element.has Child Nodes()) {
 element.replace Child (child, element.first Child);
 } else {
 element.append Child (child);
 }
 }
</script>

<ul class="nav nav-tabs" id="sha1Tab">
 <li class="active">[1.00](#100)</li>
 <li class="">[1.01](#101)</li>
 <li class="">[5.00](#500)</li>
 <li class="">[5.01](#501)</li>
 <li class="">[5.03](#503)</li>
 <li class="">[6.00](#600)</li>
 <li class="">[6.01](#601)</li>
 <li class="">[6.02](#602)</li>
 <li class="">[6.03](#603)</li>
</ul>

### Тестирование mPOS

#### Сервер Sandbox

В зависимости от суммы он ведёт себя по-разному:

1.00 - обычный платёж без ошибок в сети. Результат APPROVED
 
Перевод: другие суммы - Результат: DECLINED
 

#### Сервер QA

Перевод: Специальный сервер для тестирования различных ошибок связи: https://paynet-qa.clubber.me/paynet
 
Перевод: Сервер принимает любые значения для endpoint, merchant login и merchant control key.
 

В зависимости от суммы он ведёт себя по-разному:

1.00 - обычный платёж без ошибок в сети. Результат APPROVED
 
Перевод: 1.01 - не был получен идентификатор платежа в ответе на sale. Результат: APPROVED
 
Перевод: 5.00 - timeout (70 секунд) на первый status. Результат: APPROVED
 
Перевод: 5.01 - timeout (70 секунд) на sale. Результат: APPROVED
 
Перевод: 5.02 - timeout (70 секунд) на advice. Результат: APPROVED
 
Перевод: 5.03 - timeout (70 секунд) на status после advice. Результат: APPROVED
 
Перевод: 6.00 - HTTP Status 503 на sale. Результат: APPROVED
 
Перевод: 6.01 - HTTP Status 503 на первый status. Результат: APPROVED
 
Перевод: 6.02 - HTTP Status 503 на advice. Результат: APPROVED
 
Перевод: 6.03 - HTTP Status 503 на status после advice. Результат: APPROVED
 

Все платежи должны в конце выдать статус APPROVED.

### Метод аутентификации запросов OAuth

#### OAuth HMAC-SHA1

Для формирования запроса с аутентификацией OAuth HMAC-SHA1 необходимо:

1. [Сформировать подпись](#hmac-sha1-signature-generation),
2. [Сформировать заголовки](#hmac-sha1-headers-generation),
3. [Сформировать запрос](#hmac-sha1-request-generation).

##### Формирование подписи OAuth HMAC-SHA1

Для подготовки подписи необходимо выполнить следующие действия:

1. Собрать все параметры тела запроса и все параметры OAuth, включенные в тело запроса (oauth_consumer_key, oauth_nonce, oauth_signature_method, oauth_timestamp, oauth_version):
 Значение oauth_consumer_key - логин торговца, предоставленный Платежным Шлюзом, например merchantlogin.
 
 Для oauth_nonce сгенерируйте уникальный случайный nonce, например y3qlvMPky7g.
 
 Для oauth_signature_method установите HMAC-SHA1.
 
 Для заголовка oauth_timestamp получите текущий timestamp в секундах, напр. 1669966913.
 
 Значение oauth_version - 1.0.
 
 Параметр oauth_signature в тело запроса не включен, он включен только в заголовок OAuth.
 
2. Применить процентное кодирование (percent-encode) к значениям каждого собранного на 1 этапе параметра. Справочная информация содержится в [RFC 3986](https://www.rfc-editor.org/rfc/rfc3986). Незарезервированные символы могут быть закодированы, но не должны кодироваться. Зарезервированные символы должны быть закодированы, например: `%` кодируется в `%25`, `/` кодируется в `%2F`, `=` кодируется в `%3D`.
3. Сортировать все собранные на этапе 1 параметры в лексикографическом порядке по названиям параметров.
4. Соединить с помощью конкатенации отсортированные параметры и их значения с помощью символов & и =:
 
 `object1=value Of Object1&object2=value Of Object2...`
 
 Пример строки соединенных параметров:
 
   ```http
   client-order-id=1234567890&oauth_consumer_key=merchantlogin&oauth_nonce=y3qlvMPky7g&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1669966913&oauth_version=1.0&sending-card-ref-id=7654321
   ```
5. Применить процентное кодирование к каждому элементу (POST, URL, строка соединенных параметров) и собрать базовую строку для подписи со структурой POST&URL&параметры (в соответствии с OAuth [A.5.1.](https://oauth.net/core/1.0a/#sig_base_example)).
 
 Пример базовой строки для подписи:
 
   ```text
   POST&https%3A%2F%2Fgate.payneteasy.ru%2Fpaynet%2Fapi%2Fv2%2Fpan-eligibility%2Fsend%2FENDPOINTID&client-order-id%3D1234567890%26oauth_consumer_key%3Dmerchantlogin%26oauth_nonce%3Dy3qlvMPky7g%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1669966913%26oauth_version%3D1.0%26sending-card-ref-id%3D7654321
   ```
6. Подпись строки с помощью HMAC-SHA1. Ключ подписи является конкатенацией consumer secret (контрольный ключ Торговца) + & + token secret (пустая строка).
 
 Пример ключа HMAC-SHA1:
 
   ```text
   11111111-1111-1111-1111-111111111111&
   ```
7. Закодировать полученную строку с помощью Base64 для получения подписи.
 
 Пример формирования подписи HMAC-SHA1 на Java:
 
   ```java
   package com.Payneteasy;

   import org.apache.commons.codec.binary.Base64;
   import javax.crypto.Mac;
   import javax.crypto.spec.SecretKeySpec;
   import java.security.InvalidKeyException;
   import java.security.NoSuchAlgorithmException;

   public class HMAC_SHA1 {
      private static final String HMAC_SHA1_ALGORITHM = "HmacSHA1";

      public static String calculateHMAC(String data, String key) throws NoSuchAlgorithmException, InvalidKeyException {
         SecretKeySpec signingKey = new SecretKeySpec(key.getBytes(), HMAC_SHA1_ALGORITHM);
         Mac mac = Mac.getInstance(HMAC_SHA1_ALGORITHM);
         mac.init(signingKey);
         return Base64.encodeBase64String(mac.doFinal(data.getBytes()));
      }
   }
   ```

 Пример подписи:
 
   ```text
   d/IPlITUmPcniwjA7Vckjr6WQeE=
   ```

##### Формирование заголовков OAuth HMAC-SHA1

Запрос с аутентификацией OAuth HMAC-SHA1 должен иметь следующие заголовки:

* content-type=application/x-www-form-urlencoded
* Authorization: OAuth

Заголовок Authorization: OAuth должен содержать те же параметры и значения OAuth, которые добавлены в тело запроса и строку для подписи (oauth_consumer_key, oauth_nonce, oauth_signature_method, oauth_timestamp, oauth_version). Также необходимо добавить подпись в качестве значения параметра oauth_signature в заголовок. Все значения параметров в заголовке Authorization: OAuth должны передаваться в кавычках (в соответствии с OAuth [5.4.1.](https://oauth.net/core/1.0a/#auth_header)) со структурой parameter=”value”, быть разделены обязательными запятыми (,) и необязательными пробелами. Параметр OAuth realm не является обязательным.
 
Пример заголовка Authorization (разделен построчно для удобства отображения):
 
```http
Authorization: OAuth
oauth_consumer_key="merchantlogin",
oauth_nonce="y3qlvMPky7g",
oauth_signature="d/IPlITUmPcniwjA7Vckjr6WQeE=",
oauth_signature_method="HMAC-SHA1",
oauth_timestamp="1669966913",
oauth_version="1.0"
```

> **Note:** Т.к. заголовки запроса обычно не кодируются, значения oauth параметров (особенно oauth_nonce и oauth_signature) должны быть закодированы отдельно (percent-encode) перед добавлением в заголовок Authorization.

##### Формирование запроса OAuth HMAC-SHA1

1. Необходимо использовать заголовки из предыдущей секции,
2. Включить параметры в тело запроса,
3. Применить процентное кодирование и отправить запрос.

Чтобы сформировать запрос:

```text
Request method:      POST
Request URI: https://gate.payneteasy.ru/paynet/api/v2/pan-eligibility/send/1111
Headers: Authorization=OAuth realm="",oauth_version="1.0",oauth_consumer_key="merchantlogin",oauth_timestamp="1669966913",oauth_nonce="y3qlvMPky7g",oauth_signature_method="HMAC-SHA1",oauth_signature="d%2FIPlITUmPcniwjA7Vckjr6WQeE%3D"
         Accept=*/*
         Content-Type=application/x-www-form-urlencoded; charset=ISO-8859-1
Body: client-order-id=1234567890&oauth_consumer_key=merchantlogin&oauth_nonce=y3qlvMPky7g&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1669966913&oauth_version=1.0&sending-card-ref-id=7654321
```

Чтобы сформировать CURL запрос:

```text
curl -H '
   Authorization: oauth_version="1.0",
   oauth_consumer_key="merchantlogin",
   oauth_timestamp="1669966913",
   oauth_nonce="y3qlvMPky7g",
   oauth_signature_method="HMAC-SHA1",
   oauth_signature="d%2FIPlITUmPcniwjA7Vckjr6WQeE%3D"
' --data '
   client-order-id=1234567890
   &oauth_consumer_key=merchantlogin
   &oauth_nonce=y3qlvMPky7g
   &oauth_signature_method=HMAC-SHA1
   &oauth_timestamp=1669966913
   &oauth_version=1.0
   &sending-card-ref-id=7654321
' 'https://gate.payneteasy.ru/paynet/api/v2/pan-eligibility/send/ENDPOINTID'
```

#### OAuth RSA-SHA256

Для формирования запроса с аутентификацией OAuth RSA-SHA256 необходимо:

1. [Сгенерировать пару из публичного и приватного ключа](#rsa-sha256-generating-key-pair),
2. [Сформировать подпись](#rsa-sha256-signature-generation),
3. [Сформировать заголовки](#rsa-sha256-headers-generation),
4. [Сформировать запрос](#rsa-sha256-request-generation).

##### Генерация ключей

Для отправки запросов с аутентификацией RSA-SHA256, необходимо сгенерировать пару из публичного и приватного ключа:

* ПРИВАТНЫЙ ключ для подписания запросов. Этот ключ должен быть защищён от несанкционированного доступа.
* ПУБЛИЧНЫЙ ключ для проверки, что запрос был подписан соответствующим приватным ключом. Этот ключ необходимо передать службе поддержки.

There are two ways to generate the key pair:

* Using a [Key-Pair-Factory tool](https://github.com/payneteasy/key-pair-factory) - the native cross-platform desktop app.
* Using [OpenSSL library](#rsa-sha256-generating-key-pair-via-openssl).

###### Генерация ключей via OpenSSL

Для генерации ключей необходимо скачать последнюю версию утилиты [openssl](https://www.openssl.org/) и запустить следующие команды:

```bash
openssl genpkey -algorithm RSA -out private_key_pkcs_8.pem -pkeyopt rsa_keygen_bits:4096
openssl rsa -pubout -in private_key_pkcs_8.pem -out public_key.pem
```

Необходимо использовать разные пары ключей для тестовой и производственной среды во избежание их компрометации.

Для использования инструментов формирования запросов и отладки в документации необходимо использовать ключ в контейнере PKCS#1 (незашифрованный приватный ключ RSA в текстовом формате PKCS#1 PEM). Такой ключ можно получить с помощью следующей команды:

```bash
openssl rsa -in private_key_pkcs_8.pem -out private_key_pkcs_1.pem
```

> **Note:** **Для OpenSSL v3+ (проверено на v3.0.5)** используйте вместо этого следующую команду:

```bash
openssl rsa -traditional -in private_key_pkcs_8.pem -out private_key_pkcs_1.pem
```

Получившийся приватный ключ PKCS#1 RSA будет начинаться со строки —–BEGIN RSA PRIVATE KEY—–. Для производственной среды подходит любой формат ключа, поддерживаемый программным комплексом Присоединяющейся стороны. Для инструментов формирования запросов и отладки в документации подходят только ключи с длиной до 4096. Пример приватного ключа PKCS#1 RSA:

```bash
-----BEGIN RSA PRIVATE KEY-----
MIIJKQIBAAKCAgEA16QK2iwgYUbMr2GqSbaS0PQZKF2DkstSj0dakW+hASTz5Ams
R5sDnurfeR4m+Htaxiv69MMdvoDLuCmZE8KQzsEOZovZ9UYSh9CKK4/FzQSZ8ZDP
8cpKLN7/gitWiM14iuC9Pi74TTLeg7PuGjeoc0jUs0WMf7sV6uzfZwvqYgUVRljY
gscwDRiTSGJQumQtanCs/LMIkxouThLztSSEmHhhEz2aWOomqR5hHO+HJ4I1AfET
V7VpKJ4c1+zMesDfpDxZ8VpQpno9iikFG64MigDFmBeskI6q15tBwbROYSfqNEmG
LwhYQ+SXnojueazkSJ45CeQRh6dn3GgD7kex2N3lK97qpqDcWOLqcsbe+ZyTGALn
WGzTZWjleO+yrdE6awD34kUYVnzD/9WvdYqpH2pXBDqOIXu6lm4gLe5pKTRiFEc+
TjgVb34tJGEERkrvqktSEmRQzMgZQnZk/5//7+csUIcSPmqdUn5oB6ngVueZkk7v
wtL6dcCxr5isWgXQEO+oYbt72Ns5RjLVWiXWv2ZNFd+iR4O6+etBxYNz+mg/2B5c
PO8NWyvvFlaBUu4I5GG1XntBGWncKQiZ49WCvLcYEbSfUEkWLj6zqJaDS/buT3jU
rWQ0WEI8G1HnTQp0cqmx9WpXDLx4n3ytRjHuHe3ND9AYE28yhfFY5baIU3UCAwEA
AQKCAgAC4QrQDOTFx7c15DzszQY6yfeIBW+bRyGsDgzUgkQJCuBCvCpTrmsm9QXU
zSVCDguRN8ca+3vrLjcKF2wWynM6f3NcxSM81hmrPIqLuFiwuw3/HqrYFJZW8QdC
SqfWHcAtQoDkUqY4CaTU51MXgIS8PU2xsw0EK5BIWa9F5e/ULTMyhD8nx9cJZbmZ
rs5bHrlIgYadvRoxNJlHq5MbaQhoLLtHEXx9EWtAuModI8mPKnrgssJKWn6z7yB9
dYjpXqfdvnyI72bCQkGOFaweyX0bXpVEyZQhPfZj+IuxNWIShADpf83N1POwvF2V
3Ugp0bgejBZA3o2pXP/S/oSG6ugh8dZHfa8vkw0x5N28393IzIMpzwE2EnsBidN1
ca7NwDpmpUyuULSpi3YoViUYY1i4Mwngv2XQdkbvoGusQwgWoNrppmDKxlL5qEBf
lIPCZAgZSR79KHYw2VOzkm84hu0jDXMthpt9A2gLkRhGnGgb4n5KzyCpY9iuFK2w
CO5FdjloXOjRLZb7G1JCeU6Qh0kjSE7seh9ltyo+VsWOLx4UwVOYGCMAF45yO0wF
/MJdYoUt1vC5G/DK8itTTjwb/xPlGDiC441TOReWVwF6n36+shb6szlI2EmqKBkp
2Sr5xQ5VNZkcG2W/BUF7+n8Rvisu17TyW0HmwDEBDfJQzgzgpQKCAQEA7RpBNVBH
Jx8gR7hQdbyi4/6U5KiYorkzuoK4KkjRWJfqJvp9uGZS2vDwOoIC8kCAXMwu3OCI
U0xkDvH7bb/qedn0IG7+72FUCKlxqkMk4lv03zE9yUPcYNT+w573uh+rXQ/mcsFF
+aBtupRZiDqqd4vuvjTpjw5Q4tyk/lxZfbe10S2NyxY4dZsbm8gl0SypLs/rLYjZ
8ZntRpZozIWoenrF3AnvtR114WBDpBVwSJ9KNd8xB5Fufc9TqsZ/EKPjDVrn2Sq2
Lt/xKSopwxPyIhKG1zmAeYhv8Q+GYUOQYCfBj2opDC3AOxANw2j9M8nYjCMDmPaP
5iDCUla35srp/wKCAQEA6NPj8auPGGFen2ZJoydpEPKgU3zAdv05VlKVIvbA9c+Y
oy7zNhnNw0PCkkYpB9jPGvpdn6KFh2ZTU/mgmIysKriLcLN4gKho7JUCU3kvg1mv
zJiz/5fR0xCCRNPLAANh6uJ+CXyssjbUoe9EmyVxKX3l2zKmy1zOKRc/FbAkql07
ItDReryb64IjsfT4GtU4nBK7zCzI+yya1BjL/McnGBcpKIwp9HCwaTQK7yxa7ThY
TsfTuxoyZM1/xZE0cKRJGVLtkao1VfOy0SDdCp+RwtBvVmt3Wt6vVcL6qG0LW5Fe
Uz0PN+CebMfhBCaqWXIXeuMUo+RdLnGn113Tl6i6iwKCAQEAz+NzRUGMAXtDHF84
/OJWmD1BY3OH0TU9a8ztmPWbyGf6gA6laKcfAqS6nTIdTzbK1ZKZjES6gv65xHjb
ERFyj0BQ0pc/o7fcrHOVG8ofbvFdtMxB9lQvyB84+WBKqMDXyZMFZZyctBC75Rnp
no6BpKvmupM+LZZJyX/YksV6GcaX/j5I0sY63rMO8/n7XnogJNFczOHu5e0mo/uB
C8ItRKadER8NM+oOz3tOE3JQrvwrXyzAmngjPuAn5daA1qA7lhwcqMbQUi08D/HO
CCNW7BT+cXsTcHv2WpBYLLPGxOhWyF42e10p7R9YUfud9miGG+kfYGDfLtGOUA+E
0zEbFQKCAQEA4lczDnqolpv5394RkiG6+zXTdLYfaM2NUwTfZOka9xxEl8cJuztk
lAIoggjg1HcKB4EDSTA2vUVVlppjbEm9CZ70N7DRYcnWjr/hTgLOlNO4mp6Mxdny
qkwvR/fZLf8bzrs2qcRhIrM5DN/NA0Jn+10f+nMIQUTMSpgFxPDDBDe0SIlWTApV
TaLrTpIGLBfCe7+ef8O98qgPMEeW7vswXzQM2BVCqBZw+SUVyCOHlXukJZoPlKHI
AcThBNC/eQ3M3miG+YfNZ+yMls9q82viyM/WnN3GXzmCnE37XYb8dp0gZK1EQR8F
BF1fu6hXDLNkbhuZsiZMC92DvFPDYnkuNwKCAQA6/2K8PLlOeK+0p/IGVsgJpgHn
Uh3BehVKHXeG/Buhn5bMXX3cB2hEHg2tz4pw3JxfZ1UflhyhKD43XnpxuMmt81Ka
Ja5MeXDg0kfnlXolVA4ezx2V2EohMExUykkOIfQBDTaNtjsg5PB4HLKFId3kJ6u/
JCXuy0EA07vl/kNl+cDEBLJsVtvtxHLdpdJhO1POi3IIgOpddO+a/O/GDsdlAWog
hyEb6r7+bWurjw0YjHX+R5ZQ+0XtnzXU20d2NiP/oH2IvQzXRUQ1U17Kzzn5PAhs
YC7r9lRV4VjbhEi3Zk2FBPrrzs2ieXo5aHXCnzFywQ99nlrz0Ic8vV16WR1x
-----END RSA PRIVATE KEY-----
```

##### Формирование подписи OAuth RSA-SHA256

Для подготовки подписи необходимо выполнить следующие действия:

1. Собрать все параметры тела запроса и все параметры OAuth, включенные в тело запроса (oauth_consumer_key, oauth_nonce, oauth_signature_method, oauth_timestamp, oauth_version):
 Значение oauth_consumer_key - логин торговца, предоставленный Платежным Шлюзом, например merchantlogin.
 
 Для oauth_nonce сгенерируйте уникальный случайный nonce, напр. ho Fl Zri9c17X1Tvb7yD2fsMEQUIWBQ3m.
 
 Для oauth_signature_method установите RSA-SHA256.
 
 Для заголовка oauth_timestamp получите текущий timestamp в секундах, напр. 1669720957.
 
 Значение oauth_version - 1.0.
 
 Параметр oauth_signature в тело запроса не включен, он включен только в заголовок OAuth.
 
2. Применить процентное кодирование (percent-encode) к значениям каждого собранного на 1 этапе параметра. Справочная информация содержится в [RFC 3986](https://www.rfc-editor.org/rfc/rfc3986). Незарезервированные символы могут быть закодированы, но не должны кодироваться. Зарезервированные символы должны быть закодированы, например: `%` кодируется в `%25`, `/` кодируется в `%2F`, `=` кодируется в `%3D`.
3. Сортировать все собранные на этапе 1 параметры в лексикографическом порядке по названиям параметров.
4. Соединить с помощью конкатенации отсортированные параметры и их значения с помощью символов & и =:`object1=value Of Object1&object2=value Of Object2...`
 
5. Применить процентное кодирование к каждому элементу (POST, URL, строка соединенных параметров) и собрать базовую строку для подписи со структурой POST&URL&параметры (в соответствии с OAuth [A.5.1.](https://oauth.net/core/1.0a/#sig_base_example)).
 
 Пример базовой строки для подписи:
 
   ```text
   POST&https%3A%2F%2Fgate.payneteasy.ru%2Fpaynet%2Fapi%2Fv4%2Ftransfer%2FENDPOINTID&amount%3D10.42%26card_printed_name%3DJohn%2520Doe%26card_recurring_payment_id%3D42322%26client_orderid%3D1%26credit_card_number%3D4210708776705721%26currency%3DUSD%26cvv2%3D123%26deposit2card%3Dfalse%26destination-card-no%3D4232618181101636%26destination_card_recurring_payment_id%3D61622%26expire_month%3D12%26expire_year%3D2099%26ipaddress%3D1.1.1.1.1%26oauth_consumer_key%3Dpaydroid%26oauth_nonce%3DhoFlZri9c17X1Tvb7yD2fsMEQUIWBQ3m%26oauth_signature_method%3DRSA-SHA256%26oauth_timestamp%3D1669720957%26oauth_version%3D1.0%26order_desc%3DYour%2520order%2520description%26redirect_url%3Dhttp%253A%252F%252Fwww.example.com
   ```
6. Подписать полученную строку для подписи с помощью RSA-SHA256 используя приватный ключ, получение которого описано в предыдущей секции.
 
7. Закодировать полученную строку с помощью Base64 для получения подписи.
 
 Пример подписи, закодированной в Base64:
 
   ```text
   K0hLc7GYh65UDTNvJvJbqoD95T7ekVEwIx+AxLBe2rNndPVzCAZMTi58J5pJlXZA1qOrgzUj/uL764NofP6qrqBXHX9Fpg+PdoMBey7zY9nMOmtdpHhkwyqA0n8e8oh68x+8RtC1+gmaIsIJDVurpCm2CdaViC2ny90GWPrrSin9CFwDmIKBtOJ7dxNnuFQJkvLxwK9JE9gRfQssG4vOrXrn2f5DvENFvFW3fL7meiN3mKuBFyEHIv2cibWopoUTQrxAgCfTHvRuU5nRIct9oWgCYLYzROOPyAIjtyDFKcTnUql9+tD2+p2rMDDU7HqJUGy764rb4ShuvuiuEvzIaNwg3JAxho9fqcKJz5LXt4efX1i8oFt33ztYSgZRojsoW4HCzuhZcQQmRexpmtCGYKqH3Q2BsG2jIkQAxL9BOUOzXNoeXoVQIf3+47cJ0KujEHuDXROblq3o9Uos5K+Mu9Carjs8jHMiBHo4aS4IAgXVY3mEuohCuRhL9/Y9buuyvdKSNsao7qHwD/6bb9Sj2MFFhYP6gHf+p1NipH05224aX9hMZty8Ovb3+ps/wNWYC8NVfft5bh8ETowaHQ5TUOPFdvU+5IkHOnnfbvz1/+jDeErd0Pdq4xH6c5/gZVQY9j6DFpazsw8d3karwXoBduv7I3mh7L3CSjTweABaRMw=
   ```

##### Формирование заголовков OAuth RSA-SHA256

Запрос с аутентификацией OAuth RSA-SHA256 должен иметь следующие заголовки:

* content-type=application/x-www-form-urlencoded
* Authorization: OAuth

Заголовок Authorization: OAuth должен содержать те же параметры и значения OAuth, которые добавлены в тело запроса и строку для подписи (oauth_consumer_key, oauth_nonce, oauth_signature_method, oauth_timestamp, oauth_version). Также необходимо добавить подпись в качестве значения параметра oauth_signature в заголовок. Все значения параметров в заголовке Authorization: OAuth должны передаваться в кавычках (в соответствии с OAuth [5.4.1.](https://oauth.net/core/1.0a/#auth_header)) со структурой parameter=”value”, быть разделены обязательными запятыми (,) и необязательными пробелами. Параметр OAuth realm не является обязательным.
 
Пример заголовка Authorization (разделен построчно для удобства отображения):
 
```http
Authorization: OAuth
oauth_consumer_key="paydroid",
oauth_nonce="hoFlZri9c17X1Tvb7yD2fsMEQUIWBQ3m",
oauth_signature="K0hLc7GYh65UDTNvJvJbqoD95T7ekVEwIx%2BAxLBe2rNndPVzCAZMTi58J5pJlXZA1qOrgzUj%2FuL764NofP6qrqBXHX9Fpg%2BPdoMBey7zY9nMOmtdpHhkwyqA0n8e8oh68x%2B8RtC1%2BgmaIsIJDVurpCm2CdaViC2ny90GWPrrSin9CFwDmIKBtOJ7dxNnuFQJkvLxwK9JE9gRfQssG4vOrXrn2f5DvENFvFW3fL7meiN3mKuBFyEHIv2cibWopoUTQrxAgCfTHvRuU5nRIct9oWgCYLYzROOPyAIjtyDFKcTnUql9%2BtD2%2Bp2rMDDU7HqJUGy764rb4ShuvuiuEvzIaNwg3JAxho9fqcKJz5LXt4efX1i8oFt33ztYSgZRojsoW4HCzuhZcQQmRexpmtCGYKqH3Q2BsG2jIkQAxL9BOUOzXNoeXoVQIf3%2B47cJ0KujEHuDXROblq3o9Uos5K%2BMu9Carjs8jHMiBHo4aS4IAgXVY3mEuohCuRhL9%2FY9buuyvdKSNsao7qHwD%2F6bb9Sj2MFFhYP6gHf%2Bp1NipH05224aX9hMZty8Ovb3%2Bps%2FwNWYC8NVfft5bh8ETowaHQ5TUOPFdvU%2B5IkHOnnfbvz1%2F%2BjDeErd0Pdq4xH6c5%2FgZVQY9j6DFpazsw8d3karwXoBduv7I3mh7L3CSjTweABaRMw%3D",
oauth_signature_method="RSA-SHA256",
oauth_timestamp="1669720957",
oauth_version="1.0"
```

> **Note:** Т.к. заголовки запроса обычно не кодируются, значения oauth параметров (особенно oauth_nonce и oauth_signature) должны быть закодированы отдельно (percent-encode) перед добавлением в заголовок Authorization.

##### Формирование запроса OAuth RSA-SHA256

Чтобы сформировать запрос:

1. Необходимо использовать заголовки из предыдущей секции,
2. Включить параметры в тело запроса,
3. Применить процентное кодирование и отправить запрос.

Чтобы сформировать запрос:

```text
Request method: POST
Request URI: https://gate.payneteasy.ru/paynet/api/v4/transfer/4473
Headers: Authorization= OAuth oauth_nonce="C12mCYiI4RDeVTvyZDHS3f0vUbBNrK9G", oauth_signature="S4ahUgep8EV3RTIPdcpO%2FzEwB8V1XwFcGi5zhrYKySPVVA2PAY7AxezPcOCMhMwZQfcf8VOH8O9v5zZ%2BmYV2Qsq4kjPe1zEJIjjdjhI%2B2MX9VW8dWn9DyoTD2lkOYUwGsCteXU6mwGtNergN5KwGTJgqYPfzWFLllSAhGwuOd%2FgHYVRnA6jd4FvywRaRiSsnzgsasGJjWCGzX%2F1B8L78H%2FqD1W7dNJHjC2JbonUiHVT4aOs74qpqYE9zcb5rK8PH1l2ems3ArXhqFaSF85%2BYzJ%2BkSeDswqeIZ1y3NS8XPrmaLeymLNqKpOfAl9Ng47AmIjSYEw3s5fQ7Xi9t4j7Y6fQA4RnIzIdmH4oeMiyzn7dpA87wqnXm5AIm6Den2TJaDg90UoCMXuGHkqfL8GGUSjaWleTOHlk%2FO4dBGDRw4LP1aEaJktQRmT5xwyoaQfz%2Bh2MR7zDpRbVZDpUto1iYlQl5UlgojOHaLLjW1gqggbvrtVXUBT73KcIboWW00VUcbVUX5Yb%2FSu7hUZO2fNAh4LYrsVcXRJxCZuwhXCiqvbR3EziEFDGVEZnKUDLCodzHbVA9hbpxHGa7TvSLFEANCPDFtapMF9eo%2F1yOt5Tkxag4g5yNes93lrVabsTqckiFIfKR2R3CcwJ6MQtMfo8ticJcKxfo2v%2BTkC0bEaRkBGk%3D", oauth_consumer_key="ny_qa_merchant", oauth_signature_method="RSA-SHA256", oauth_timestamp="1669892964", oauth_version="1.0"
         Accept=*/*
         Content-Type=application/x-www-form-urlencoded; charset=ISO-8859-1
Body: cvv2=123&ipaddress=1.1.1.1&amount=15.42&credit_card_number=4210708776705721&client_orderid=1&deposit2card=false&destination-card-no=4232618181101636&expire_month=12&order_desc=Your%20order%20description&card_printed_name=Vasia%20Pupkin&currency=RUB&expire_year=2099&redirect_url=http%3A%2F%2Fwww.example.com
```

Чтобы сформировать CURL запрос:

```text
curl -H '
   Authorization: OAuth oauth_consumer_key="paydroid",
   oauth_nonce="JOARJWjXJgfRUVqig8HIs0ouFWKfK4N5",
   oauth_signature="k5Z0XCVdDvb5h873XG6TDMO854PsuueSnSby4h0%2F3j4TKraY6ebjoFfDmndI09%2FQp6uEbCgKregNY5N0ccIVIay49l6v7jMdIFEfqU7E5eu%2BIJcoqG7kMFcdCu29hweYx7p4ZSk%2FUtdGlN3wyUUybCAx73XYoO0tkZteAleyzQlzdpzQ99vPS8FN2WMbNdzU3H2PLf0XOZy4DbAPleZGfu3GWxXe9erGsvzBJozs3WFxiPFeULfzWWsNc1h1P7cnzNbZqXkI%2BV3qiG3jc7tDqGRZP%2BLZFw3nihNlW%2F2Nlp%2FId6QG8kPNOEx2GxAuQa8kufv%2BbpohU8UftZG1SnNfoa4nDVgNbWoSbTXbgXxwHE0ZlccwT6q%2BHbTmgggvIdGN9JuuLUL8fDSCxqu3R7YMvcwArzrkd1XEFUFvYWxHc3QpfbBu0GyLkL7pnmz%2BFPTH48COZ7yXbK6nQDFSIy8lmaEJsnnjMYyMMVgjNkDNzqwNxOQuwprTZ7KzHqWrTj0zHTOHl44q1pJhIqMwxWDPMsziExYbAzxuOkdQFZi%2BK%2Bu3M7tvG5Foy7Vwj%2BDSPMPAhj7j2AmUG4HzaJcpiBWMq0CkGWRjvneOk3NiwkEwOxq5tJOFjsroditUqJQSX1PTqf%2FtuiqaE2Gt5EYl19ZzyXbxtMjGZwL%2BzF1cT6ftTi4%3D",
   oauth_signature_method="RSA-SHA256",
   oauth_timestamp="1669892687",
   oauth_version="1.0"
' --data '
   amount=10.42
   &card_printed_name=John%20Doe
   &card_recurring_payment_id=42322
   &client_orderid=1
   &credit_card_number=4210708776705721
   &currency=USD
   &cvv2=123
   &deposit2card=false
   &destination-card-no=4232618181101636
   &destination_card_recurring_payment_id=61622
   &expire_month=12
   &expire_year=2099
   &ipaddress=1.1.1.1.1
   &order_desc=Your%20order%20description
   &redirect_url=http%3A%2F%2Fwww.example.com
' 'https://gate.payneteasy.ru/paynet/api/v4/transfer/ENDPOINTID'
```

##### OAuth RSA-SHA256 Integration example for Java

**Key points:**

1. Param sorting:
 : Request and OAuth parameters are merged and sorted alphabetically (Tree Map) before building the base string. The oauth_signature itself is excluded — it is added only after signing.
2. Percent-encoding:
 : Spaces must be %20, not +. Plain URLEncoder.encode produces +, so the helper post-processes the result.
3. Base string layout:
 : METHOD&percent Encode (url)&percent Encode (k1=v1&k2=v2&…) — each part is percent-encoded once, the inner & between params is encoded too.
4. Signature:
 : SHA256withRSA over the base string (UTF-8 bytes), Base64-encoded, then percent-encoded once more before being placed into the oauth_signature value.
5. Nonce/timestamp:
 : Fixed in this example for reproducibility against the docs. In production use generate Nonce() and Instant.now().get Epoch Second().
6. Private key:
 : PKCS#8 PEM (—–BEGIN PRIVATE KEY—–). PKCS#1 (—–BEGIN RSA PRIVATE KEY—–)\` is not consumed by Key Factory directly — convert it first: openssl pkcs8 -topk8 -nocrypt -in pkcs1.pem -out pkcs8.pem.

```text
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.security.KeyFactory;
import java.security.PrivateKey;
import java.security.SecureRandom;
import java.security.Signature;
import java.security.spec.PKCS8EncodedKeySpec;
import java.util.Base64;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.TreeMap;
import java.util.stream.Collectors;

public class PpgOAuthExample {

public static void main(String[] args) throws Exception {
        String url        = "https://hostname/paynet/api/v4/transfer/4473";
        String httpMethod = "POST";
        String privateKeyPemPath = "src/test/resources/private_key_pkcs_8.pem";

Map&lt;String, String&gt; request = new LinkedHashMap<>();
        request.put("amount",              "10.42");
        request.put("client_orderid",      "1");
        request.put("card_printed_name",   "John Doe");
        request.put("credit_card_number",  "4210708776705721");
        request.put("currency",            "USD");
        request.put("cvv2",                "123");
        request.put("deposit2card",        "false");
        request.put("destination-card-no", "4232618181101636");
        request.put("expire_month",        "12");
        request.put("expire_year",         "2099");
        request.put("ipaddress",           "1.1.1.1");
        request.put("order_desc",          "Your order description");
        request.put("redirect_url",        "http://www.example.com");

Map&lt;String, String&gt; oauth = new LinkedHashMap<>();
        oauth.put("oauth_consumer_key",     "ny_qa_merchant");
        oauth.put("oauth_nonce",            "es6l1gjUhxg1AeCrbvp9FILOkFmgtJUb"); // generateNonce()
        oauth.put("oauth_signature_method", "RSA-SHA256");
        oauth.put("oauth_timestamp",        "1668887494");                       // Instant.now().getEpochSecond()
        oauth.put("oauth_version",          "1.0");

String baseString = buildSignatureBaseString(httpMethod, url, request, oauth);
        String signature  = percentEncode(sign(baseString, loadPrivateKey(privateKeyPemPath)));
        oauth.put("oauth_signature", signature);

String authHeader = "OAuth " + oauth.entrySet().stream()
                .map(e -> e.getKey() + "=\"" + e.getValue() + "\"")
                .collect(Collectors.joining(", "));

String body = request.entrySet().stream()
                .map(e -> e.getKey() + "=" + percentEncode(e.getValue()))
                .collect(Collectors.joining("&"));

System.out.println("Authorization: " + authHeader);
        System.out.println();
        System.out.println("Content-Type: application/x-www-form-urlencoded");
        System.out.println();
        System.out.println(body);
    }

static String buildSignatureBaseString(String method, String url,
                                           Map&lt;String, String&gt; request,
                                           Map&lt;String, String&gt; oauth) {
        Map&lt;String, String&gt; merged = new TreeMap<>();
        merged.putAll(request);
        merged.putAll(oauth);
        String params = merged.entrySet().stream()
                .map(e -> percentEncode(e.getKey()) + "=" + percentEncode(e.getValue()))
                .collect(Collectors.joining("&"));
        return percentEncode(method) + "&" + percentEncode(url) + "&" + percentEncode(params);
    }

// OAuth percent-encoding: like URLEncoder but space is %20, not '+'.
    static String percentEncode(String s) {
        try {
            return URLEncoder.encode(s, StandardCharsets.UTF_8.name()).replace("+", "%20");
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

static String sign(String input, PrivateKey key) throws Exception {
        Signature sig = Signature.getInstance("SHA256withRSA");
        sig.initSign(key);
        sig.update(input.getBytes(StandardCharsets.UTF_8));
        return Base64.getEncoder().encodeToString(sig.sign());
    }

static PrivateKey loadPrivateKey(String pemPath) throws Exception {
        String pem = new String(Files.readAllBytes(Paths.get(pemPath)), StandardCharsets.UTF_8)
                .replace("-----BEGIN PRIVATE KEY-----", "")
                .replace("-----END PRIVATE KEY-----", "")
                .replaceAll("\\s", "");
        byte[] der = Base64.getDecoder().decode(pem);
        return KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(der));
    }

static String generateNonce() {
        char[] alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".toCharArray();
        SecureRandom rnd = new SecureRandom();
        StringBuilder sb = new StringBuilder(32);
        for (int i = 0; i < 32; i++) sb.append(alphabet[rnd.nextInt(alphabet.length)]);
        return sb.toString();
    }
}
```

##### Формирование запроса OAuth RSA-SHA256

```text
<?php
/**
 * OAuth RSA-SHA256 Integration Example for gate.payneteasy.ru API
 * This example demonstrates a simplified single-file implementation
 */

// Include the OAuth library (tmhOAuth)
class tmhOAuth {
  const VERSION = '0.8.5';
  var $response = array();

  /**
   * Creates a new tmhOAuth object
   *
   * @param string $config, the configuration to use for this request
   * @return void
   */
  public function __construct($config=array()) {
    $this->buffer = null;
    $this->reconfigure($config);
    $this->reset_request_settings();
    $this->set_user_agent();
  }

  public function reconfigure($config=array()) {
    // default configuration options
    $this->config = array_merge(
      array(
        // leave 'user_agent' blank for default, otherwise set this to
        // something that clearly identifies your app
        'user_agent'                 => '',
        'host'                       => 'api.twitter.com',
        'method'                     => 'GET',

        'consumer_key'               => '',
        'consumer_secret'            => '',
        'token'                      => '',
        'secret'                     => '',

        // RSA private key (for RSA-SHA1 and RSA-SHA256 methods)
        // Please note that this is expected to be a string representing
        // the PEM-formatted key itself and NOT the file name
        'private_key_pem'            => '',

        // OAuth2 bearer token. This should already be URL encoded
        'bearer'                     => '',

        // oauth signing variables that are not dynamic
        'oauth_version'              => '1.0',
        'oauth_signature_method'     => 'HMAC-SHA1',

        // you probably don't want to change any of these curl values
        'curl_http_version'          => CURL_HTTP_VERSION_1_1,
        'curl_connecttimeout'        => 30,
        'curl_timeout'               => 10,

        // for security this should always be set to 2.
        'curl_ssl_verifyhost'        => 2,
        // for security this should always be set to true.
        'curl_ssl_verifypeer'        => true,
        // for security this should always be set to true.
        'use_ssl'                    => true,

        // you can get the latest cacert.pem from here http://curl.haxx.se/ca/cacert.pem
        // if you're getting HTTP 0 responses, check cacert.pem exists and is readable
        // without it curl won't be able to create an SSL connection
        'curl_cainfo'                => __DIR__ . DIRECTORY_SEPARATOR . 'cacert.pem',
        'curl_capath'                => __DIR__,

        // in some cases (very very odd ones) the SSL version must be set manually.
        // unless you know why your are changing this, you should leave it as false
        // to allow PHP to determine the value for this setting itself.
        'curl_sslversion'            => false,

        'curl_followlocation'        => false, // whether to follow redirects or not

        // support for proxy servers
        'curl_proxy'                 => false, // really you don't want to use this if you are using streaming
        'curl_proxyuserpwd'          => false, // format username:password for proxy, if required
        'curl_encoding'              => '',    // leave blank for all supported formats, else use gzip, deflate, identity etc

        // streaming API configuration
        'is_streaming'               => false,
        'streaming_eol'              => "\r\n",
        'streaming_metrics_interval' => 10,

        // header or querystring. You should always use header!
        // this is just to help me debug other developers implementations
        'as_header'                  => true,
        'force_nonce'                => false, // used for checking signatures. leave as false for auto
        'force_timestamp'            => false, // used for checking signatures. leave as false for auto
      ),
      $config
    );
  }

  private function reset_request_settings($options=array()) {
    $this->request_settings = array(
      'params'    => array(),
      'headers'   => array(),
      'with_user' => true,
      'multipart' => false,
    );

    if (!empty($options))
      $this->request_settings = array_merge($this->request_settings, $options);
  }

  /**
   * Sets the useragent for PHP to use
   * If '$this->config['user_agent']' already has a value it is used instead of one
   * being generated.
   *
   * @return void value is stored to the config array class variable
   */
  private function set_user_agent() {
    if (!empty($this->config['user_agent']))
      return;

    $ssl = ($this->config['curl_ssl_verifyhost'] && $this->config['curl_ssl_verifypeer'] && $this->config['use_ssl']) ? '+' : '-';
    $ua = 'tmhOAuth ' . self::VERSION . $ssl . 'SSL - //github.com/themattharris/tmhOAuth';
    $this->config['user_agent'] = $ua;
  }

  /**
   * Generates a random OAuth nonce.
   * If 'force_nonce' is false a nonce will be generated, otherwise the value of '$this->config['force_nonce']' will be used.
   *
   * @param string $length how many characters the nonce should be before MD5 hashing. default 12
   * @param string $include_time whether to include time at the beginning of the nonce. default true
   * @return $nonce as a string
   */
  private function nonce($length=12, $include_time=true) {
    if ($this->config['force_nonce'] === false) {
      $prefix = $include_time ? microtime() : '';
      return md5(substr($prefix . uniqid(), 0, $length));
    } else {
      return $this->config['force_nonce'];
    }
  }

  /**
   * Generates a timestamp.
   * If 'force_timestamp' is false a timestamp will be generated, otherwise the value of '$this->config['force_timestamp']' will be used.
   *
   * @return $time as a string
   */
  private function timestamp() {
    if ($this->config['force_timestamp'] === false) {
      $time = time();
    } else {
      $time = $this->config['force_timestamp'];
    }
    return (string) $time;
  }

  /**
   * Encodes the string or array passed in a way compatible with OAuth.
   * If an array is passed each array value will will be encoded.
   *
   * @param mixed $data the scalar or array to encode
   * @return $data encoded in a way compatible with OAuth
   */
  private function safe_encode($data) {
    if (is_array($data)) {
      return array_map(array($this, 'safe_encode'), $data);
    } else if (is_scalar($data)) {
      return str_ireplace(
        array('+', '%7E'),
        array(' ', '~'),
        rawurlencode($data)
      );
    } else {
      return '';
    }
  }

  /**
   * Decodes the string or array from it's URL encoded form
   * If an array is passed each array value will will be decoded.
   *
   * @param mixed $data the scalar or array to decode
   * @return string $data decoded from the URL encoded form
   */
  private function safe_decode($data) {
    if (is_array($data)) {
      return array_map(array($this, 'safe_decode'), $data);
    } else if (is_scalar($data)) {
      return rawurldecode($data);
    } else {
      return '';
    }
  }

  /**
   * Prepares OAuth1 signing parameters.
   *
   * @return void all required OAuth parameters, safely encoded, are stored to the class variable '$this->request_settings['oauth1_params']'
   */
  private function prepare_oauth1_params() {
    $defaults = array(
      'oauth_nonce'            => $this->nonce(),
      'oauth_timestamp'        => $this->timestamp(),
      'oauth_version'          => $this->config['oauth_version'],
      'oauth_consumer_key'     => $this->config['consumer_key'],
      'oauth_signature_method' => $this->config['oauth_signature_method'],
    );

    // include the user token if it exists
    if ( $oauth_token = $this->token() )
      $defaults['oauth_token'] = $oauth_token;

    $this->request_settings['oauth1_params'] = array();

    // safely encode
    foreach ($defaults as $k => $v) {
      $this->request_settings['oauth1_params'][$this->safe_encode($k)] = $this->safe_encode($v);
    }
  }

  private function token() {
    if ( $this->request_settings['with_user'] ) {
      if (isset($this->config['token']) && !empty($this->config['token'])) return $this->config['token'];
      elseif (isset($this->config['user_token'])) return $this->config['user_token'];
    }
    return '';
  }

  private function secret() {
    if ( $this->request_settings['with_user'] ) {
      if (isset($this->config['secret']) && !empty($this->config['secret'])) return $this->config['secret'];
      elseif (isset($this->config['user_secret'])) return $this->config['user_secret'];
    }
    return '';
  }

  /**
   * Extracts and decodes OAuth parameters from the passed string
   *
   * @param string $body the response body from an OAuth flow method
   * @return array the response body safely decoded to an array of key => values
   */
  public function extract_params($body) {
    $kvs = explode('&', $body);
    $decoded = array();
    foreach ($kvs as $kv) {
      $kv = explode('=', $kv, 2);
      $kv[0] = $this->safe_decode($kv[0]);
      $kv[1] = $this->safe_decode($kv[1]);
      $decoded[$kv[0]] = $kv[1];
    }
    return $decoded;
  }

  /**
   * Prepares the HTTP method for use in the base string by converting it to
   * uppercase.
   *
   * @return void value is stored to the class variable '$this->request_settings['method']'
   */
  private function prepare_method() {
    $this->request_settings['method'] = strtoupper($this->request_settings['method']);
  }

  /**
   * Prepares the URL for use in the base string by ripping it apart and
   * reconstructing it.
   *
   * Ref: 3.4.1.2
   *
   * @return void value is stored to the class array variable '$this->request_settings['url']'
   */
  private function prepare_url() {
    $parts = parse_url($this->request_settings['url']);

    $port   = isset($parts['port']) ? $parts['port'] : false;
    $scheme = $parts['scheme'];
    $host   = $parts['host'];
    $path   = isset($parts['path']) ? $parts['path'] : false;

    $port or $port = ($scheme == 'https') ? '443' : '80';

    if (($scheme == 'https' && $port != '443') || ($scheme == 'http' && $port != '80')) {
      $host = "$host:$port";
    }

    // the scheme and host MUST be lowercase
    $this->request_settings['url'] = strtolower("$scheme://$host");
    // but not the path
    $this->request_settings['url'] .= $path;
  }

  /**
   * If the request uses multipart, and the parameter isn't a file path, prepend a space
   * otherwise return the original value. we chose a space here as twitter whitespace trims from
   * the beginning of the tweet. we don't use \0 here because it's the character for string
   * termination.
   *
   * @param the parameter value
   * @return string the original or modified string, depending on the request and the input parameter
   */
  private function multipart_escape($value) {
    if (!$this->request_settings['multipart'] || strpos($value, '@') !== 0)
      return $value;

    // see if the parameter is a file.
    // we split on the semi-colon as it's the delimiter used on media uploads
    // for fields with semi-colons this will return the original string
    list($file) = explode(';', substr($value, 1), 2);
    if (file_exists($file))
      return $value;

    return " $value";
  }

  /**
   * Prepares all parameters for the base string and request.
   * Multipart parameters are ignored as they are not defined in the specification,
   * all other types of parameter are encoded for compatibility with OAuth.
   *
   * @param array $params the parameters for the request
   * @return void prepared values are stored in the class array variable '$this->request_settings'
   */
  private function prepare_params() {
    $doing_oauth1 = false;
    $this->request_settings['prepared_params'] = array();
    $prepared = &$this->request_settings['prepared_params'];
    $prepared_pairs = array();
    $prepared_pairs_with_oauth = array();

    if (isset($this->request_settings['oauth1_params'])) {
      $oauth1  = &$this->request_settings['oauth1_params'];
      $doing_oauth1 = true;
      $params = array_merge($oauth1, $this->request_settings['params']);

      // Remove oauth_signature if present
      // Ref: Spec: 9.1.1 ("The oauth_signature parameter MUST be excluded.")
      unset($params['oauth_signature']);

      // empty the oauth1 array. we reset these values later in this method
      $oauth1 = array();
    } else {
      $params = $this->request_settings['params'];
    }

    // Parameters are sorted by name, using lexicographical byte value ordering.
    // Ref: Spec: 9.1.1 (1)
    uksort($params, 'strcmp');

    // set this now so we're not doing it on every parameter
    $supports_curl_file = class_exists('CurlFile', false);

    // encode params unless we're doing multipart
    foreach ($params as $k => $v) {
      $k = $this->request_settings['multipart'] ? $k : $this->safe_encode($k);

      if (is_array($v))
        $v = implode(',', $v);

      // we don't need to do the multipart escaping if we support curlfile
      if ($supports_curl_file && ($v instanceof CurlFile)) {
        // leave $v alone
      } elseif ($this->request_settings['multipart']) {
        $v = $this->multipart_escape($v);
      } else {
        $v = $this->safe_encode($v);
      }

      // split parameters for the basestring and authorization header, and recreate the oauth1 array
      if ($doing_oauth1) {
        // if we're doing multipart, only store the oauth_* params, ignore the users request params
        if ((strpos($k, 'oauth') === 0) || !$this->request_settings['multipart'])
          $prepared_pairs_with_oauth[] = "{$k}={$v}";

        if (strpos($k, 'oauth') === 0) {
          $oauth1[$k] = $v;
          continue;
        }
      }
      $prepared[$k] = $v;

      if (!$this->request_settings['multipart'])
        $prepared_pairs[] = "{$k}={$v}";
    }

    if ($doing_oauth1) {
      $this->request_settings['basestring_params'] = implode('&', $prepared_pairs_with_oauth);
    }

    // setup params for GET/POST/PUT method handling
    if (!empty($prepared)) {
      $content = implode('&', $prepared_pairs);

      switch ($this->request_settings['method']) {
        case 'PUT':
          // fall through to POST as PUT should be treated the same
        case 'POST':
          $this->request_settings['postfields'] = $this->request_settings['multipart'] ? $prepared : $content;
          break;
        default:
          $this->request_settings['querystring'] = $content;
          break;
      }
    }
  }

  /**
   * Prepares the OAuth signing key
   *
   * @return void prepared signing key is stored in the class variable 'signing_key'
   */
  private function prepare_signing_key() {
    $left = $this->safe_encode($this->config['consumer_secret']);
    $right = $this->safe_encode($this->secret());
    $this->request_settings['signing_key'] = $left . '&' . $right;
  }

  /**
   * Prepare the base string.
   * Ref: Spec: 9.1.3 ("Concatenate Request Elements")
   *
   * @return void prepared base string is stored in the class variable 'base_string'
   */
  private function prepare_base_string() {
    $url = $this->request_settings['url'];

    # if the host header is set we need to rewrite the basestring to use
    # that, instead of the request host. otherwise the signature won't match
    # on the server side
    if (!empty($this->request_settings['headers']['Host'])) {
      $url = str_ireplace(
        $this->config['host'],
        $this->request_settings['headers']['Host'],
        $url
      );
    }

    $base = array(
      $this->request_settings['method'],
      $url,
      $this->request_settings['basestring_params']
    );
    $this->request_settings['basestring'] = implode('&', $this->safe_encode($base));
  }

  /**
   * Signs the OAuth 1 request
   *
   * @return void oauth_signature is added to the parameters in the class array variable '$this->request_settings'
   */
  private function prepare_oauth_signature() {
    switch ($this->config['oauth_signature_method']) {
      case 'HMAC-SHA1':
        $signature = $this->sign_with_hmac('sha1');
        break;
      case 'HMAC-SHA256':
        $signature = $this->sign_with_hmac('sha256');
        break;
      case 'RSA-SHA1':
        $signature = $this->sign_with_rsa(OPENSSL_ALGO_SHA1);
        break;
      case 'RSA-SHA256':
        $signature = $this->sign_with_rsa(OPENSSL_ALGO_SHA256);
        break;
      default:
        throw new Exception("Unsupported oauth_signature_method: '" . $this->config['oauth_signature_method'] . "'");
    }
    $this->request_settings['oauth1_params']['oauth_signature'] = $this->safe_encode(base64_encode($signature));
  }

  /**
   * Signs the OAuth 1 request using HMAC-based signature algorithm
   *
   * @param string $algorithm algorithm name (like sha1 or sha256)
   * @return binary signature
   */
  private function sign_with_hmac($algorithm) {
    return hash_hmac(
      $algorithm, $this->request_settings['basestring'], $this->request_settings['signing_key'], true
    );
  }

  /**
   * Signs the OAuth 1 request using RSA-based signature algorithm
   *
   * @param mixed $algorithm ID or name of hash algorithm that will be
   * used to compute base string hash before encrypting it with RSA;
   * values understood by openssl_sign()'s $signature_alg parameter
   * are accepted here (like 'sha1' or OPENSSL_ALGO_SHA256)
   * @return binary signature
   */
  private function sign_with_rsa($algorithm) {
    if (!function_exists('openssl_sign')) {
      throw new Exception("openssl_sign function does not exist. Please make sure Openssl extension is installed");
    }
    if ($this->config['private_key_pem'] == '') {
      throw new Exception("No private key PEM is configured, cannot sign");
    }
    $ok = openssl_sign($this->request_settings['basestring'], $signature, $this->config['private_key_pem'], $algorithm);
    if (!$ok) {
      throw new Exception("Cannot sign: " . openssl_error_string());
    }
    return $signature;
  }

  /**
   * Prepares the Authorization header
   *
   * @return void prepared authorization header is stored in the class variable headers['Authorization']
   */
  private function prepare_auth_header() {
    if (!$this->config['as_header'])
      return;

    // oauth1
    if (isset($this->request_settings['oauth1_params'])) {
      // sort again as oauth_signature was added post param preparation
      uksort($this->request_settings['oauth1_params'], 'strcmp');
      $encoded_quoted_pairs = array();
      foreach ($this->request_settings['oauth1_params'] as $k => $v) {
        $encoded_quoted_pairs[] = "{$k}=\"{$v}\"";
      }
      $header = 'OAuth ' . implode(', ', $encoded_quoted_pairs);
    } elseif (!empty($this->config['bearer'])) {
      $header = 'Bearer ' . $this->config['bearer'];
    }

    if (isset($header))
      $this->request_settings['headers']['Authorization'] = $header;
  }

  /**
   * Create the bearer token for OAuth2 requests from the consumer_key and consumer_secret.
   *
   * @return string the bearer token
   */
  public function bearer_token_credentials() {
    $credentials = implode(':', array(
      $this->safe_encode($this->config['consumer_key']),
      $this->safe_encode($this->config['consumer_secret'])
    ));
    return base64_encode($credentials);
  }

  /**
   * Make an HTTP request using this library. This method doesn't return anything.
   * Instead the response should be inspected directly.
   *
   * @param string $method the HTTP method being used. e.g. POST, GET, HEAD etc
   * @param string $url the request URL without query string parameters
   * @param array $params the request parameters as an array of key=value pairs. Default empty array
   * @param string $useauth whether to use authentication when making the request. Default true
   * @param string $multipart whether this request contains multipart data. Default false
   * @param array $headers any custom headers to send with the request. Default empty array
   * @return int the http response code for the request. 0 is returned if a connection could not be made
   */
  public function request($method, $url, $params=array(), $useauth=true, $multipart=false, $headers=array()) {
    $options = array(
      'method'    => $method,
      'url'       => $url,
      'params'    => $params,
      'with_user' => true,
      'multipart' => $multipart,
      'headers'   => $headers
    );
    $options = array_merge($this->default_options(), $options);

    if ($useauth) {
      return $this->user_request($options);
    } else {
      return $this->unauthenticated_request($options);
    }
  }

  public function apponly_request($options=array()) {
    $options = array_merge($this->default_options(), $options, array(
      'with_user' => false,
    ));
    $this->reset_request_settings($options);
    if ($options['without_bearer']) {
      return $this->oauth1_request();
    } else {
      $this->prepare_method();
      $this->prepare_url();
      $this->prepare_params();
      $this->prepare_auth_header();
      return $this->curlit();
    }
  }

  public function user_request($options=array()) {
    $options = array_merge($this->default_options(), $options, array(
      'with_user' => true,
    ));
    $this->reset_request_settings($options);
    return $this->oauth1_request();
  }

  public function unauthenticated_request($options=array()) {
    $options = array_merge($this->default_options(), $options, array(
      'with_user' => false,
    ));
    $this->reset_request_settings($options);
    $this->prepare_method();
    $this->prepare_url();
    $this->prepare_params();
    return $this->curlit();
  }

  /**
   * Signs the request and adds the OAuth signature. This runs all the request
   * parameter preparation methods.
   *
   * @param string $method the HTTP method being used. e.g. POST, GET, HEAD etc
   * @param string $url the request URL without query string parameters
   * @param array $params the request parameters as an array of key=value pairs
   * @param boolean $with_user whether to include the user credentials when making the request.
   * @return void
   */
  private function oauth1_request() {
    $this->prepare_oauth1_params();
    $this->prepare_method();
    $this->prepare_url();
    $this->prepare_params();
    $this->prepare_base_string();
    $this->prepare_signing_key();
    $this->prepare_oauth_signature();
    $this->prepare_auth_header();
    return $this->curlit();
  }

  private function default_options() {
    return array(
      'method'         => 'GET',
      'params'         => array(),
      'with_user'      => true,
      'multipart'      => false,
      'headers'        => array(),
      'without_bearer' => false,
    );
  }

  /**
   * Make a long poll HTTP request using this library. This method is
   * different to the other request methods as it isn't supposed to disconnect
   *
   * Using this method expects a callback which will receive the streaming
   * responses.
   *
   * @param string $method the HTTP method being used. e.g. POST, GET, HEAD etc
   * @param string $url the request URL without query string parameters
   * @param array $params the request parameters as an array of key=value pairs
   * @param string $callback the callback function to stream the buffer to.
   * @return void
   */
  public function streaming_request($method, $url, $params=array(), $callback='') {
    if ( ! empty($callback) ) {
      if ( ! is_callable($callback) ) {
        return false;
      }
      $this->config['streaming_callback'] = $callback;
    }
    $this->metrics['start']          = time();
    $this->metrics['interval_start'] = $this->metrics['start'];
    $this->metrics['messages']       = 0;
    $this->metrics['last_messages']  = 0;
    $this->metrics['bytes']          = 0;
    $this->metrics['last_bytes']     = 0;
    $this->config['is_streaming']    = true;
    $this->request($method, $url, $params);
  }

  /**
   * Handles the updating of the current Streaming API metrics.
   *
   * @return array the metrics for the streaming api connection
   */
  private function update_metrics() {
    $now = time();
    if (($this->metrics['interval_start'] + $this->config['streaming_metrics_interval']) > $now)
      return null;

    $this->metrics['mps'] = round( ($this->metrics['messages'] - $this->metrics['last_messages']) / $this->config['streaming_metrics_interval'], 2);
    $this->metrics['bps'] = round( ($this->metrics['bytes'] - $this->metrics['last_bytes']) / $this->config['streaming_metrics_interval'], 2);

    $this->metrics['last_bytes'] = $this->metrics['bytes'];
    $this->metrics['last_messages'] = $this->metrics['messages'];
    $this->metrics['interval_start'] = $now;
    return $this->metrics;
  }

  /**
   * Utility function to create the request URL in the requested format.
   * If a fully-qualified URI is provided, it will be returned.
   * Any multi-slashes (except for the protocol) will be replaced with a single slash.
   *
   *
   * @param string $request the API method without extension
   * @param string $extension the format of the response. Default json. Set to an empty string to exclude the format
   * @return string the concatenation of the host, API version, API method and format, or $request if it begins with http
   */
  public function url($request, $extension='json') {
    // remove multi-slashes
    $request = preg_replace('$([^:])//+$', '$1/', $request);

    if (stripos($request, 'http') === 0 || stripos($request, '//') === 0) {
      return $request;
    }

    $extension = strlen($extension) > 0 ? ".$extension" : '';
    $proto  = $this->config['use_ssl'] ? 'https:/' : 'http:/';

    // trim trailing slash
    $request = ltrim($request, '/');

    $pos = strlen($request) - strlen($extension);
    if (substr($request, $pos) === $extension)
      $request = substr_replace($request, '', $pos);

    return implode('/', array(
      $proto,
      $this->config['host'],
      $request . $extension
    ));
  }

  /**
   * Public access to the private safe decode/encode methods
   *
   * @param string $text the text to transform
   * @param string $mode the transformation mode. either encode or decode
   * @return string $text transformed by the given $mode
   */
  public function transformText($text, $mode='encode') {
    return $this->{"safe_$mode"}($text);
  }

  /**
   * Utility function to parse the returned curl headers and store them in the
   * class array variable.
   *
   * @param object $ch curl handle
   * @param string $header the response headers
   * @return string the length of the header
   */
  private function curlHeader($ch, $header) {
    $this->response['raw'] .= $header;

    list($key, $value) = array_pad(explode(':', $header, 2), 2, null);

    $key = trim($key);
    $value = trim($value);

    if ( ! isset($this->response['headers'][$key])) {
      $this->response['headers'][$key] = $value;
    } else {
      if (!is_array($this->response['headers'][$key])) {
        $this->response['headers'][$key] = array($this->response['headers'][$key]);
      }
      $this->response['headers'][$key][] = $value;
    }

    return strlen($header);
  }

  /**
    * Utility function to parse the returned curl buffer and store them until
    * an EOL is found. The buffer for curl is an undefined size so we need
    * to collect the content until an EOL is found.
    *
    * This function calls the previously defined streaming callback method.
    *
    * @param object $ch curl handle
    * @param string $data the current curl buffer
    * @return int the length of the data string processed in this function
    */
  private function curlWrite($ch, $data) {
    $l = strlen($data);
    if (strpos($data, $this->config['streaming_eol']) === false) {
      $this->buffer .= $data;
      return $l;
    }

    $buffered = explode($this->config['streaming_eol'], $data);
    $content = $this->buffer . $buffered[0];

    $this->metrics['messages']++;
    $this->metrics['bytes'] += strlen($content);

    if ( ! is_callable($this->config['streaming_callback']))
      return 0;

    $metrics = $this->update_metrics();
    $stop = call_user_func(
      $this->config['streaming_callback'],
      $content,
      strlen($content),
      $metrics
    );
    $this->buffer = $buffered[1];
    if ($stop)
      return 0;

    return $l;
  }

  /**
   * Makes a curl request. Takes no parameters as all should have been prepared
   * by the request method
   *
   * the response data is stored in the class variable 'response'
   *
   * @return int the http response code for the request. 0 is returned if a connection could not be made
   */
  private function curlit() {
    $this->response = array(
      'raw' => ''
    );

    // configure curl
    $c = curl_init();

    if ($this->request_settings['method'] == 'GET' && isset($this->request_settings['querystring'])) {
      $this->request_settings['url'] = $this->request_settings['url'] . '?' . $this->request_settings['querystring'];
    } elseif ($this->request_settings['method'] == 'POST' || $this->request_settings['method'] == 'PUT') {
      $postfields = array();
      if (isset($this->request_settings['postfields']))
        $postfields = $this->request_settings['postfields'];

      curl_setopt($c, CURLOPT_POSTFIELDS, $postfields);
    }

    curl_setopt($c, CURLOPT_CUSTOMREQUEST, $this->request_settings['method']);

    curl_setopt_array($c, array(
      CURLOPT_HTTP_VERSION   => $this->config['curl_http_version'],
      CURLOPT_USERAGENT      => $this->config['user_agent'],
      CURLOPT_CONNECTTIMEOUT => $this->config['curl_connecttimeout'],
      CURLOPT_TIMEOUT        => $this->config['curl_timeout'],
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_SSL_VERIFYPEER => $this->config['curl_ssl_verifypeer'],
      CURLOPT_SSL_VERIFYHOST => $this->config['curl_ssl_verifyhost'],

      CURLOPT_FOLLOWLOCATION => $this->config['curl_followlocation'],
      CURLOPT_PROXY          => $this->config['curl_proxy'],
      CURLOPT_ENCODING       => $this->config['curl_encoding'],
      CURLOPT_URL            => $this->request_settings['url'],
      // process the headers
      CURLOPT_HEADERFUNCTION => array($this, 'curlHeader'),
      CURLOPT_HEADER         => false,
      CURLINFO_HEADER_OUT    => true,
    ));

    if ($this->config['curl_cainfo'] !== false)
      curl_setopt($c, CURLOPT_CAINFO, $this->config['curl_cainfo']);

    if ($this->config['curl_capath'] !== false)
      curl_setopt($c, CURLOPT_CAPATH, $this->config['curl_capath']);

    if ($this->config['curl_proxyuserpwd'] !== false)
      curl_setopt($c, CURLOPT_PROXYUSERPWD, $this->config['curl_proxyuserpwd']);

    if ($this->config['curl_sslversion'] !== false)
      curl_setopt($c, CURLOPT_SSLVERSION, $this->config['curl_sslversion']);

    if ($this->config['is_streaming']) {
      // process the body
      $this->response['content-length'] = 0;
      curl_setopt($c, CURLOPT_TIMEOUT, 0);
      curl_setopt($c, CURLOPT_WRITEFUNCTION, array($this, 'curlWrite'));
    }

    if ( ! empty($this->request_settings['headers'])) {
      foreach ($this->request_settings['headers'] as $k => $v) {
        $headers[] = trim($k . ': ' . $v);
      }
      curl_setopt($c, CURLOPT_HTTPHEADER, $headers);
    }

    if (isset($this->config['block']) && (true === $this->config['block']))
      return 0;

    // do it!
    $response = curl_exec($c);
    $code = curl_getinfo($c, CURLINFO_HTTP_CODE);
    $info = curl_getinfo($c);
    $error = curl_error($c);
    $errno = curl_errno($c);
    curl_close($c);

    // store the response
    $this->response['code'] = $code;
    $this->response['response'] = $response;
    $this->response['info'] = $info;
    $this->response['error'] = $error;
    $this->response['errno'] = $errno;

    if (!isset($this->response['raw'])) {
      $this->response['raw'] = '';
    }
    $this->response['raw'] .= $response;

    return $code;
  }
}

/*
 * Configuration - Replace these values with your actual credentials
 */
$config = [
    'server_host' => 'sandbox.payneteasy.ru',
    'endpoint_id' => 1, // Your endpoint ID
    'merchant_login' => 'your-merchant-login',
    'private_key_file' => 'test-private-key.pem', // Your private key file
    'test_mode' => true // Set to false for production
];

/*
 * API Request Function
 */
function makeApiRequest($endpoint, $params, $config) {
    // Load private key
    $private_key_pem = file_get_contents($config['private_key_file']);
    if (!$private_key_pem) {
        throw new Exception("Could not load private key file");
    }

    // Initialize OAuth
    $oauth = new tmhOAuth();
    $oauth->reconfigure([
        'consumer_key' => $config['merchant_login'],
        'oauth_signature_method' => 'RSA-SHA256',
        'private_key_pem' => $private_key_pem,
        'curl_ssl_verifypeer' => $config['test_mode'] ? false : true
    ]);

    // Make request
    $url = "https://{$config['server_host']}/paynet/api/v4/{$endpoint}/{$config['endpoint_id']}";
    $status = $oauth->request('POST', $url, $params);

    // Handle response
    if ($status == 0) {
        throw new Exception('HTTP request failed');
    } elseif ($status != 200) {
        throw new Exception("HTTP error: {$status}");
    }

    return [
        'status' => $status,
        'response' => $oauth->response['response'],
        'headers' => $oauth->response['headers']
    ];
}

/*
 * Example Usage - Transfer by Reference
 */
if (isset($_POST['action']) && $_POST['action'] == 'transfer') {
    try {
        $params = [
            'client-order-id' => 'transfer-' . uniqid(),
            'amount' => $_POST['amount'] ?? '100',
            'currency' => $_POST['currency'] ?? 'RUB',
            'order_desc' => $_POST['description'] ?? 'Consumer credit',
            'destination-card-no' => $_POST['card_number'] ?? '4444333322221111'
        ];

        $result = makeApiRequest('transfer-by-ref', $params, $config);
        $response = json_decode($result['response'], true);

        echo "<div class='alert alert-success'>Success! Transaction ID: " .
             ($response['transaction-id'] ?? 'N/A') . "</div>";

    } catch (Exception $e) {
        echo "<div class='alert alert-danger'>Error: " . $e->getMessage() . "</div>";
    }
}

/*
 * Example Usage - Bank Payout
 */
if (isset($_POST['action']) && $_POST['action'] == 'payout') {
    try {
        $params = [
            'client-order-id' => 'payout-' . uniqid(),
            'amount' => $_POST['amount'] ?? '100',
            'currency' => $_POST['currency'] ?? 'USD',
            'order_desc' => $_POST['description'] ?? 'Bank payout',
            'account_number' => $_POST['account_number'] ?? '123412341234',
            'bank_name' => $_POST['bank_name'] ?? 'Test Bank'
        ];

        $result = makeApiRequest('payout', $params, $config);
        $response = json_decode($result['response'], true);

        echo "<div class='alert alert-success'>Success! Payout ID: " .
             ($response['payout-id'] ?? 'N/A') . "</div>";

    } catch (Exception $e) {
        echo "<div class='alert alert-danger'>Error: " . $e->getMessage() . "</div>";
    }
}
?>
```

### OpenAPI Specification

The API is described by a machine-readable specification in OpenAPI 3.1
format. The full JSON schema is published at
[https://doc.payneteasy.ru/openapi.json](https://doc.payneteasy.ru/openapi.json).

You can use it to:

- browse the API interactively in your browser
- generate client SDKs in your language of choice
- import the API into tools such as Postman or Insomnia
- feed it to AI coding assistants to generate clients and integrations

#### Response Format

By default the gateway returns responses in
`application/x-www-form-urlencoded` format — the same as it always
has. This behaviour is unchanged: when you send no special `Accept`
header, you keep receiving form-encoded responses exactly as before.

To receive the same data as JSON instead, send the
`Accept: application/vnd.pay+json` request header. A JSON response is
easier to deserialize, especially when you parse the response by hand.

This affects the **response** only — the **request** body is still sent
as `application/x-www-form-urlencoded` in both cases, with or without
the header.

Default response (`application/x-www-form-urlencoded`):

```text
type=async-response
&serial-number=00000000-0000-0000-0000-000002d9b22a
&merchant-order-id=inv4097763
&paynet-order-id=6768788
&end-point-id=22903
```

The same response when the request includes
`Accept: application/vnd.pay+json`:

```json
{
    "type": "async-response",
    "serial-number": "00000000-0000-0000-0000-000002d9b22a",
    "merchant-order-id": "inv4097763",
    "paynet-order-id": "6768788",
    "end-point-id": "22903"
}
```

#### Interactive Documentation

The full API reference is available online as interactive OpenAPI
documentation — no tools or downloads required. Open it in your browser
to browse every endpoint, review request and response parameters and
data schemas, and send test requests right from the page:

[OpenAPI Interactive Documentation](https://doc.payneteasy.ru/integration/openapi-doc.html.md)
 

#### SDK generation

[OpenAPI Generator](https://openapi-generator.tech/) is a free,
open-source tool that reads an OpenAPI specification and generates
ready-to-use client SDKs, server stubs, and documentation for more than
50 languages. Its command-line interface, `openapi-generator-cli`, is
the quickest way to turn the specification above into a working client.

Install it using any of the methods below (see the
[installation guide](https://openapi-generator.tech/docs/installation)
for all the options):

npm

```bash
npm install @openapitools/openapi-generator-cli -g
```

Homebrew

```bash
brew install openapi-generator
```

Docker

```bash
docker pull openapitools/openapi-generator-cli
```

JAR

```bash
# requires Java 11+; replace <version> with the latest release from
# https://github.com/OpenAPITools/openapi-generator/releases
wget https://repo1.maven.org/maven2/org/openapitools/openapi-generator-cli/<version>/openapi-generator-cli-<version>.jar \
    -O openapi-generator-cli.jar
java -jar openapi-generator-cli.jar version
```

Then generate a client in the language of your choice:

Java

```bash
openapi-generator-cli generate \
    -i https://doc.payneteasy.ru/openapi.json \
    -g java \
    -o sdk-java
```

Python

```bash
openapi-generator-cli generate \
    -i https://doc.payneteasy.ru/openapi.json \
    -g python \
    -o sdk-python
```

Type Script

```bash
openapi-generator-cli generate \
    -i https://doc.payneteasy.ru/openapi.json \
    -g typescript-fetch \
    -o sdk-ts
```

PHP

```bash
openapi-generator-cli generate \
    -i https://doc.payneteasy.ru/openapi.json \
    -g php \
    -o sdk-php
```

C#

```bash
openapi-generator-cli generate \
    -i https://doc.payneteasy.ru/openapi.json \
    -g csharp \
    -o sdk-csharp
```

Go

```bash
openapi-generator-cli generate \
    -i https://doc.payneteasy.ru/openapi.json \
    -g go \
    -o sdk-go
```

Ruby

```bash
openapi-generator-cli generate \
    -i https://doc.payneteasy.ru/openapi.json \
    -g ruby \
    -o sdk-ruby
```

Kotlin

```bash
openapi-generator-cli generate \
    -i https://doc.payneteasy.ru/openapi.json \
    -g kotlin \
    -o sdk-kotlin
```

Swift

```bash
openapi-generator-cli generate \
    -i https://doc.payneteasy.ru/openapi.json \
    -g swift5 \
    -o sdk-swift
```

Rust

```bash
openapi-generator-cli generate \
    -i https://doc.payneteasy.ru/openapi.json \
    -g rust \
    -o sdk-rust
```

Dart

```bash
openapi-generator-cli generate \
    -i https://doc.payneteasy.ru/openapi.json \
    -g dart \
    -o sdk-dart
```

C++

```bash
openapi-generator-cli generate \
    -i https://doc.payneteasy.ru/openapi.json \
    -g cpp-restsdk \
    -o sdk-cpp
```

#### Using AI Agents

AI coding assistants — such as Claude Code, ChatGPT, Cursor, and
Windsurf — can read an OpenAPI specification and generate a client or
integration automatically.

Copy the prompt below into your AI assistant and adjust the target
language and requirements as needed:

```text
Generate an API client from this OpenAPI specification:

https://doc.payneteasy.ru/openapi.json

Requirements:
- target language: Python (or TypeScript, PHP, Java, ...)
- create a typed API client class
- generate request and response models
- include usage examples
```

### Open Cart

The [Paynet Easy plugin for Open Cart](https://github.com/payneteasy/php-plugin-opencart) adds a Paynet Easy
payment method to Open Cart 1.x stores, using the redirect-based payment form integration of the
Payneteasy merchant API. Once installed, customers choose Paynet Easy at checkout and are taken to a
hosted payment form to enter their card details; the order status in Open Cart is then updated automatically
based on the result returned by Payneteasy.

A live example of the plugin running in an Open Cart storefront is available at the
[Open Cart demo shop](https://opencart.codetime.net/).

> **Note:** The instructions below document the Open Cart 1.x plugin ([php-plugin-opencart](https://github.com/payneteasy/php-plugin-opencart)). A separate plugin for Open Cart 4 is published at [php-plugin-opencart-4](https://github.com/payneteasy/php-plugin-opencart-4); it ships as an Open Cart extension with the standard `admin` / `catalog` module layout rather than the Composer-built package described here. If your store runs Open Cart 4, use that repository and follow its README for installation.

#### Source code

The plugin source code, build instructions and issue tracker are available in the
[php-plugin-opencart repository](https://github.com/payneteasy/php-plugin-opencart) on Git Hub. For
Open Cart 4 stores, use the [php-plugin-opencart-4](https://github.com/payneteasy/php-plugin-opencart-4)
repository instead.

### Стадии транзакции

Некоторые протоколы API имеют дополнительные стадии транзакции. Если получена стадия не из списка, обратитесь в службу поддержки за уточнением.
 

| Название стадии | Описание | Окончательная стадия |
|----------------------------------|----------------------------------------------------------------------------------------------------------------------|------------------------|
| AUTH_3D_VALIDATED | Транзакция обрабатывается, внутренний этап завершён, вам следует продолжать опрос, нефинальный статус | No |
| AUTH_3D_VALIDATING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| AUTH_APPROVED | Транзакция была одобрена, окончательный статус | Yes |
| AUTH_CANCELLED | Транзакция была отклонена, окончательный статус | Yes |
| AUTH_CARD_CHIP_VALIDATED | Транзакция обрабатывается, внутренний этап завершён, вам следует продолжать опрос, нефинальный статус | No |
| AUTH_CARD_CHIP_VALIDATING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| AUTH_CHAIN_DECLINED | Транзакция отклонена, но обработка всё ещё выполняется; нефинальный статус | No |
| AUTH_CUST_EMAIL_VALIDATED | Транзакция обрабатывается, внутренний этап завершён, вам следует продолжать опрос, нефинальный статус | No |
| AUTH_CUST_EMAIL_VALIDATING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| AUTH_CUST_PHONE_VALIDATED | Транзакция обрабатывается, внутренний этап завершён, вам следует продолжать опрос, нефинальный статус | No |
| AUTH_CUST_PHONE_VALIDATING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| AUTH_CUST_TWITTER_VALIDATED | Транзакция обрабатывается, внутренний этап завершён, вам следует продолжать опрос, нефинальный статус | No |
| AUTH_CUST_TWITTER_VALIDATING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| AUTH_DECLINED | Транзакция была отклонена, окончательный статус | Yes |
| AUTH_DESCRIPTOR_VALIDATED | Транзакция обрабатывается, внутренний этап завершён, вам следует продолжать опрос, нефинальный статус | No |
| AUTH_DESCRIPTOR_VALIDATING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| AUTH_ERROR | Статус транзакции неизвестен; сообщите менеджеру учётной записи, окончательный статус | Yes |
| AUTH_FAILED | Транзакция была отклонена, окончательный статус | Yes |
| AUTH_FILTERED | Транзакция отклонена внутренней или внешней системой контроля мошенничества, окончательный статус | Yes |
| AUTH_FILTERING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| AUTH_LOAN_REGISTERING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| AUTH_LOAN_VALIDATING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| AUTH_LOYALTY_VALIDATED | Транзакция обрабатывается, внутренний этап завершён, вам следует продолжать опрос, нефинальный статус | No |
| AUTH_LOYALTY_VALIDATING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| AUTH_PHONE_VALIDATED | Транзакция обрабатывается, внутренний этап завершён, вам следует продолжать опрос, нефинальный статус | No |
| AUTH_PHONE_VALIDATING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| AUTH_PHONE_VERIFICATED | Проверка завершена, продолжайте опрос; нефинальный статус | No |
| AUTH_PHONE_VERIFICATING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| AUTH_PROCESSING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| AUTH_RND_VALIDATED | Транзакция обрабатывается, внутренний этап завершён, вам следует продолжать опрос, нефинальный статус | No |
| AUTH_RND_VALIDATING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| AUTH_STARTING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| AUTH_TEST_CHECKING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| AUTH_UNKNOWN | Транзакция была отклонена, но что-то пошло не так, пожалуйста, сообщите вашему аккаунт-менеджеру, нефинальный статус | No |
| AV_3D_VALIDATED | Транзакция обрабатывается, внутренний этап завершён, вам следует продолжать опрос, нефинальный статус | No |
| AV_3D_VALIDATING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| AV_APPROVED | Транзакция была одобрена, окончательный статус | Yes |
| AV_CANCELLED | Транзакция была отклонена, окончательный статус | Yes |
| AV_CHAIN_DECLINED | Транзакция отклонена, но обработка всё ещё выполняется; нефинальный статус | No |
| AV_CUST_EMAIL_VALIDATED | Транзакция обрабатывается, внутренний этап завершён, вам следует продолжать опрос, нефинальный статус | No |
| AV_CUST_EMAIL_VALIDATING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| AV_CUST_PHONE_VALIDATED | Транзакция обрабатывается, внутренний этап завершён, вам следует продолжать опрос, нефинальный статус | No |
| AV_CUST_PHONE_VALIDATING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| AV_CUST_TWITTER_VALIDATED | Транзакция обрабатывается, внутренний этап завершён, вам следует продолжать опрос, нефинальный статус | No |
| AV_CUST_TWITTER_VALIDATING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| AV_DECLINED | Транзакция была отклонена, окончательный статус | Yes |
| AV_DESCRIPTOR_VALIDATED | Транзакция обрабатывается, внутренний этап завершён, вам следует продолжать опрос, нефинальный статус | No |
| AV_DESCRIPTOR_VALIDATING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| AV_ERROR | Статус транзакции неизвестен; сообщите менеджеру учётной записи, окончательный статус | Yes |
| AV_FAILED | Транзакция была отклонена, окончательный статус | Yes |
| AV_FILTERED | Транзакция отклонена внутренней или внешней системой контроля мошенничества, окончательный статус | Yes |
| AV_FILTERING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| AV_PHONE_VALIDATED | Транзакция обрабатывается, внутренний этап завершён, вам следует продолжать опрос, нефинальный статус | No |
| AV_PHONE_VALIDATING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| AV_PHONE_VERIFICATED | Проверка завершена, продолжайте опрос; нефинальный статус | No |
| AV_PHONE_VERIFICATING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| AV_PROCESSING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| AV_RND_VALIDATED | Транзакция обрабатывается, внутренний этап завершён, вам следует продолжать опрос, нефинальный статус | No |
| AV_RND_VALIDATING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| AV_STARTING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| AV_TEST_CHECKING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| AV_UNKNOWN | Транзакция была отклонена, но что-то пошло не так, пожалуйста, сообщите вашему аккаунт-менеджеру, нефинальный статус | No |
| CANCEL_APPROVED | Транзакция была одобрена, окончательный статус | Yes |
| CANCEL_DECLINED | Транзакция была отклонена, окончательный статус | Yes |
| CANCEL_ERROR | Статус транзакции неизвестен; сообщите менеджеру учётной записи, окончательный статус | Yes |
| CANCEL_PROCESSING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| CANCEL_REJECTED | Транзакция была отклонена, окончательный статус | Yes |
| CANCEL_STARTING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| CANCEL_UNKNOWN | Транзакция была отклонена, но что-то пошло не так, пожалуйста, сообщите вашему аккаунт-менеджеру, нефинальный статус | No |
| CAPTURE_APPROVED | Транзакция была одобрена, окончательный статус | Yes |
| CAPTURE_DECLINED | Транзакция была отклонена, окончательный статус | Yes |
| CAPTURE_ERROR | Статус транзакции неизвестен; сообщите менеджеру учётной записи, окончательный статус | Yes |
| CAPTURE_PROCESSING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| CAPTURE_REJECTED | Транзакция была отклонена, окончательный статус | Yes |
| CAPTURE_STARTING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| CAPTURE_UNKNOWN | Транзакция была отклонена, но что-то пошло не так, пожалуйста, сообщите вашему аккаунт-менеджеру, нефинальный статус | No |
| CHARGEBACK_APPROVED | Транзакция была одобрена, окончательный статус | Yes |
| CREATE_CM_APPROVED | Транзакция была одобрена, окончательный статус | Yes |
| CREATE_CM_CANCELLED | Транзакция была отклонена, окончательный статус | Yes |
| CREATE_CM_DECLINED | Транзакция была отклонена, окончательный статус | Yes |
| CREATE_CM_EMAIL_VALIDATED | Транзакция обрабатывается, внутренний этап завершён, вам следует продолжать опрос, нефинальный статус | No |
| CREATE_CM_EMAIL_VALIDATING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| CREATE_CM_ERROR | Статус транзакции неизвестен; сообщите менеджеру учётной записи, окончательный статус | Yes |
| CREATE_CM_EXTERNAL_VALIDATED | Транзакция обрабатывается, внутренний этап завершён, вам следует продолжать опрос, нефинальный статус | No |
| CREATE_CM_EXTERNAL_VALIDATING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| CREATE_CM_FAILED | Транзакция была отклонена, окончательный статус | Yes |
| CREATE_CM_FILTERED | Транзакция отклонена внутренней или внешней системой контроля мошенничества, окончательный статус | Yes |
| CREATE_CM_FILTERING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| CREATE_CM_PE_VALIDATED | Транзакция обрабатывается, внутренний этап завершён, вам следует продолжать опрос, нефинальный статус | No |
| CREATE_CM_PE_VALIDATING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| CREATE_CM_PHONE_VALIDATED | Транзакция обрабатывается, внутренний этап завершён, вам следует продолжать опрос, нефинальный статус | No |
| CREATE_CM_PHONE_VALIDATING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| CREATE_CM_PROCESSING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| CREATE_CM_STARTING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| CREATE_CM_TWITTER_VALIDATED | Транзакция обрабатывается, внутренний этап завершён, вам следует продолжать опрос, нефинальный статус | No |
| CREATE_CM_TWITTER_VALIDATING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| CREATE_CM_UNKNOWN | Транзакция была отклонена, но что-то пошло не так, пожалуйста, сообщите вашему аккаунт-менеджеру, нефинальный статус | No |
| DELETE_CM_APPROVED | Транзакция была одобрена, окончательный статус | Yes |
| DELETE_CM_CANCELLED | Транзакция была отклонена, окончательный статус | Yes |
| DELETE_CM_EMAIL_VALIDATED | Транзакция обрабатывается, внутренний этап завершён, вам следует продолжать опрос, нефинальный статус | No |
| DELETE_CM_EMAIL_VALIDATING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| DELETE_CM_ERROR | Статус транзакции неизвестен; сообщите менеджеру учётной записи, окончательный статус | Yes |
| DELETE_CM_FAILED | Транзакция была отклонена, окончательный статус | Yes |
| DELETE_CM_FILTERED | Транзакция отклонена внутренней или внешней системой контроля мошенничества, окончательный статус | Yes |
| DELETE_CM_FILTERING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| DELETE_CM_PHONE_VALIDATED | Транзакция обрабатывается, внутренний этап завершён, вам следует продолжать опрос, нефинальный статус | No |
| DELETE_CM_PHONE_VALIDATING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| DELETE_CM_PROCESSING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| DELETE_CM_STARTING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| DELETE_CM_TWITTER_VALIDATED | Транзакция обрабатывается, внутренний этап завершён, вам следует продолжать опрос, нефинальный статус | No |
| DELETE_CM_TWITTER_VALIDATING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| DELETE_CM_UNKNOWN | Транзакция была отклонена, но что-то пошло не так, пожалуйста, сообщите вашему аккаунт-менеджеру, нефинальный статус | No |
| DISPUTE_APPROVED | Транзакция была одобрена, окончательный статус | Yes |
| FRAUD_APPROVED | Транзакция была одобрена, окончательный статус | Yes |
| INQUIRE_CM_APPROVED | Транзакция была одобрена, окончательный статус | Yes |
| INQUIRE_CM_CANCELLED | Транзакция была отклонена, окончательный статус | Yes |
| INQUIRE_CM_EMAIL_VALIDATED | Транзакция обрабатывается, внутренний этап завершён, вам следует продолжать опрос, нефинальный статус | No |
| INQUIRE_CM_EMAIL_VALIDATING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| INQUIRE_CM_ERROR | Статус транзакции неизвестен; сообщите менеджеру учётной записи, окончательный статус | Yes |
| INQUIRE_CM_FAILED | Транзакция была отклонена, окончательный статус | Yes |
| INQUIRE_CM_FILTERED | Транзакция отклонена внутренней или внешней системой контроля мошенничества, окончательный статус | Yes |
| INQUIRE_CM_FILTERING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| INQUIRE_CM_PHONE_VALIDATED | Транзакция обрабатывается, внутренний этап завершён, вам следует продолжать опрос, нефинальный статус | No |
| INQUIRE_CM_PHONE_VALIDATING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| INQUIRE_CM_PROCESSING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| INQUIRE_CM_STARTING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| INQUIRE_CM_TWITTER_VALIDATED | Транзакция обрабатывается, внутренний этап завершён, вам следует продолжать опрос, нефинальный статус | No |
| INQUIRE_CM_TWITTER_VALIDATING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| INQUIRE_CM_UNKNOWN | Транзакция была отклонена, но что-то пошло не так, пожалуйста, сообщите вашему аккаунт-менеджеру, нефинальный статус | No |
| MFO_SCORING_APPROVED | Транзакция была одобрена, окончательный статус | Yes |
| MFO_SCORING_DECLINED | Транзакция была отклонена, окончательный статус | Yes |
| MFO_SCORING_ERROR | Статус транзакции неизвестен; сообщите менеджеру учётной записи, окончательный статус | Yes |
| MFO_SCORING_STARTING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| PAN_ELIGIBILITY_APPROVED | Транзакция была одобрена, окончательный статус | Yes |
| PAN_ELIGIBILITY_CANCELLED | Транзакция была отклонена, окончательный статус | Yes |
| PAN_ELIGIBILITY_ERROR | Статус транзакции неизвестен; сообщите менеджеру учётной записи, окончательный статус | Yes |
| PAN_ELIGIBILITY_FAILED | Транзакция была отклонена, окончательный статус | Yes |
| PAN_ELIGIBILITY_FILTERED | Транзакция отклонена внутренней или внешней системой контроля мошенничества, окончательный статус | Yes |
| PAN_ELIGIBILITY_FILTERING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| PAN_ELIGIBILITY_PROCESSING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| PAN_ELIGIBILITY_REJECTED | Транзакция была отклонена, окончательный статус | Yes |
| PAN_ELIGIBILITY_STARTING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| PAN_ELIGIBILITY_UNKNOWN | Транзакция была отклонена, но что-то пошло не так, пожалуйста, сообщите вашему аккаунт-менеджеру, нефинальный статус | No |
| PAYOUT_CHECK_VALIDATING | Возможность выплаты не подтверждена | No |
| PAYOUT_CHECK_VALIDATED | Возможность выплаты подтверждена | No |
| RETRIEVAL_APPROVED | Транзакция была одобрена, окончательный статус | Yes |
| REVERSAL_APPROVED | Транзакция была одобрена, окончательный статус | Yes |
| REVERSAL_DECLINED | Транзакция была отклонена, окончательный статус | Yes |
| REVERSAL_ERROR | Статус транзакции неизвестен; сообщите менеджеру учётной записи, окончательный статус | Yes |
| REVERSAL_PROCESSING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| REVERSAL_REJECTED | Транзакция была отклонена, окончательный статус | Yes |
| REVERSAL_STARTING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| REVERSAL_UNKNOWN | Транзакция была отклонена, но что-то пошло не так, пожалуйста, сообщите вашему аккаунт-менеджеру, нефинальный статус | No |
| SALE3D_END_APPROVED | Транзакция была одобрена, окончательный статус | Yes |
| SALE3D_END_DECLINED | Транзакция была отклонена, окончательный статус | Yes |
| SALE3D_END_ERROR | Статус транзакции неизвестен; сообщите менеджеру учётной записи, окончательный статус | Yes |
| SALE3D_END_PROCESSING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| SALE3D_END_UNKNOWN | Транзакция была отклонена, но что-то пошло не так, пожалуйста, сообщите вашему аккаунт-менеджеру, нефинальный статус | No |
| SALE_3D_VALIDATED | Транзакция обрабатывается, внутренний этап завершён, вам следует продолжать опрос, нефинальный статус | No |
| SALE_3D_VALIDATING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| SALE_APPROVED | Транзакция была одобрена, окончательный статус | Yes |
| SALE_AUTO_REVERSAL_PROCESSING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| SALE_CANCELLED | Транзакция была отклонена, окончательный статус | Yes |
| SALE_CARD_CHIP_VALIDATED | Транзакция обрабатывается, внутренний этап завершён, вам следует продолжать опрос, нефинальный статус | No |
| SALE_CARD_CHIP_VALIDATING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| SALE_CHAIN_DECLINED | Транзакция отклонена, но обработка всё ещё выполняется; нефинальный статус | No |
| SALE_CUST_EMAIL_VALIDATED | Транзакция обрабатывается, внутренний этап завершён, вам следует продолжать опрос, нефинальный статус | No |
| SALE_CUST_EMAIL_VALIDATING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| SALE_CUST_PHONE_VALIDATED | Транзакция обрабатывается, внутренний этап завершён, вам следует продолжать опрос, нефинальный статус | No |
| SALE_CUST_PHONE_VALIDATING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| SALE_CUST_TWITTER_VALIDATED | Транзакция обрабатывается, внутренний этап завершён, вам следует продолжать опрос, нефинальный статус | No |
| SALE_CUST_TWITTER_VALIDATING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| SALE_DECLINED | Транзакция была отклонена, окончательный статус | Yes |
| SALE_DESCRIPTOR_VALIDATED | Транзакция обрабатывается, внутренний этап завершён, вам следует продолжать опрос, нефинальный статус | No |
| SALE_DESCRIPTOR_VALIDATING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| SALE_EMV_PROCESSING | Транзакция обрабатывается, отправляется 0200 эквайеру, вам следует продолжать опрос, нефинальный статус | No |
| SALE_EMV_VALIDATING | Транзакция обрабатывается, ожидается 2nd Gen AC от чипа, вам следует отправить EMV Final Advice на хост | No |
| SALE_EMV_VALIDATED | Транзакция обрабатывается, получен EMV Final Advice, вам следует продолжать опрос, нефинальный статус | No |
| SALE_EMV_ADVICE_PROCESSING | Транзакция обрабатывается, отправляется 0220 эквайеру, вам следует продолжать опрос, нефинальный статус | No |
| SALE_ERROR | Статус транзакции неизвестен; сообщите менеджеру учётной записи, окончательный статус | Yes |
| SALE_FAILED | Транзакция была отклонена, окончательный статус | Yes |
| SALE_FILTERED | Транзакция отклонена внутренней или внешней системой контроля мошенничества, окончательный статус | Yes |
| SALE_FILTERING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| SALE_LOYALTY_VALIDATED | Транзакция обрабатывается, внутренний этап завершён, вам следует продолжать опрос, нефинальный статус | No |
| SALE_LOYALTY_VALIDATING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| SALE_PHONE_VALIDATED | Транзакция обрабатывается, внутренний этап завершён, вам следует продолжать опрос, нефинальный статус | No |
| SALE_PHONE_VALIDATING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| SALE_PHONE_VERIFICATED | Проверка завершена, продолжайте опрос; нефинальный статус | No |
| SALE_PHONE_VERIFICATING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| SALE_PROCESSING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| SALE_RND_VALIDATED | Транзакция обрабатывается, внутренний этап завершён, вам следует продолжать опрос, нефинальный статус | No |
| SALE_RND_VALIDATING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| SALE_STARTING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| SALE_TEST_CHECKING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| SALE_UNKNOWN | Транзакция была отклонена, но что-то пошло не так, пожалуйста, сообщите вашему аккаунт-менеджеру, нефинальный статус | No |
| TRANSFER_3D_VALIDATED | Транзакция обрабатывается, внутренний этап завершён, вам следует продолжать опрос, нефинальный статус | No |
| TRANSFER_3D_VALIDATING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| TRANSFER_APPROVED | Транзакция была одобрена, окончательный статус | Yes |
| TRANSFER_BALANCE_VALIDATED | Транзакция обрабатывается, внутренний этап завершён, вам следует продолжать опрос, нефинальный статус | No |
| TRANSFER_BALANCE_VALIDATING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| TRANSFER_CANCELLED | Транзакция была отклонена, окончательный статус | Yes |
| TRANSFER_CARD_CHIP_VALIDATED | Транзакция обрабатывается, внутренний этап завершён, вам следует продолжать опрос, нефинальный статус | No |
| TRANSFER_CARD_CHIP_VALIDATING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| TRANSFER_CHAIN_DECLINED | Транзакция отклонена, но обработка всё ещё выполняется; нефинальный статус | No |
| TRANSFER_CHECK_VALIDATED | Транзакция обрабатывается, внутренний этап завершён, вам следует продолжать опрос, нефинальный статус | No |
| TRANSFER_CHECK_VALIDATING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| TRANSFER_CUST_EMAIL_VALIDATED | Транзакция обрабатывается, внутренний этап завершён, вам следует продолжать опрос, нефинальный статус | No |
| TRANSFER_CUST_EMAIL_VALIDATING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| TRANSFER_CUST_PHONE_VALIDATED | Транзакция обрабатывается, внутренний этап завершён, вам следует продолжать опрос, нефинальный статус | No |
| TRANSFER_CUST_PHONE_VALIDATING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| TRANSFER_CUST_TWITTER_VALIDATED | Транзакция обрабатывается, внутренний этап завершён, вам следует продолжать опрос, нефинальный статус | No |
| TRANSFER_CUST_TWITTER_VALIDATING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| TRANSFER_DECLINED | Транзакция была отклонена, окончательный статус | Yes |
| TRANSFER_DESCRIPTOR_VALIDATED | Транзакция обрабатывается, внутренний этап завершён, вам следует продолжать опрос, нефинальный статус | No |
| TRANSFER_DESCRIPTOR_VALIDATING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| TRANSFER_ERROR | Статус транзакции неизвестен; сообщите менеджеру учётной записи, окончательный статус | Yes |
| TRANSFER_FAILED | Транзакция была отклонена, окончательный статус | Yes |
| TRANSFER_FILTERED | Транзакция отклонена внутренней или внешней системой контроля мошенничества, окончательный статус | Yes |
| TRANSFER_FILTERING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| TRANSFER_LOYALTY_VALIDATED | Транзакция обрабатывается, внутренний этап завершён, вам следует продолжать опрос, нефинальный статус | No |
| TRANSFER_LOYALTY_VALIDATING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| TRANSFER_PHONE_VALIDATED | Транзакция обрабатывается, внутренний этап завершён, вам следует продолжать опрос, нефинальный статус | No |
| TRANSFER_PHONE_VALIDATING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| TRANSFER_PHONE_VERIFICATED | Проверка завершена, продолжайте опрос; нефинальный статус | No |
| TRANSFER_PHONE_VERIFICATING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| TRANSFER_PROCESSING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| TRANSFER_RND_VALIDATED | Транзакция обрабатывается, внутренний этап завершён, вам следует продолжать опрос, нефинальный статус | No |
| TRANSFER_RND_VALIDATING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| TRANSFER_TEST_CHECKING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| TRANSFER_UNKNOWN | Транзакция была отклонена, но что-то пошло не так, пожалуйста, сообщите вашему аккаунт-менеджеру, нефинальный статус | No |
| UPDATE_CM_APPROVED | Транзакция была одобрена, окончательный статус | Yes |
| UPDATE_CM_CANCELLED | Транзакция была отклонена, окончательный статус | Yes |
| UPDATE_CM_DECLINED | Транзакция была отклонена, окончательный статус | Yes |
| UPDATE_CM_EMAIL_VALIDATED | Транзакция обрабатывается, внутренний этап завершён, вам следует продолжать опрос, нефинальный статус | No |
| UPDATE_CM_EMAIL_VALIDATING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| UPDATE_CM_ERROR | Статус транзакции неизвестен; сообщите менеджеру учётной записи, окончательный статус | Yes |
| UPDATE_CM_EXTERNAL_VALIDATED | Транзакция обрабатывается, внутренний этап завершён, вам следует продолжать опрос, нефинальный статус | No |
| UPDATE_CM_EXTERNAL_VALIDATING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| UPDATE_CM_FAILED | Транзакция была отклонена, окончательный статус | Yes |
| UPDATE_CM_FILTERED | Транзакция отклонена внутренней или внешней системой контроля мошенничества, окончательный статус | Yes |
| UPDATE_CM_FILTERING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| UPDATE_CM_PE_VALIDATED | Транзакция обрабатывается, внутренний этап завершён, вам следует продолжать опрос, нефинальный статус | No |
| UPDATE_CM_PE_VALIDATING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| UPDATE_CM_PHONE_VALIDATED | Транзакция обрабатывается, внутренний этап завершён, вам следует продолжать опрос, нефинальный статус | No |
| UPDATE_CM_PHONE_VALIDATING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| UPDATE_CM_PROCESSING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| UPDATE_CM_STARTING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| UPDATE_CM_TWITTER_VALIDATED | Транзакция обрабатывается, внутренний этап завершён, вам следует продолжать опрос, нефинальный статус | No |
| UPDATE_CM_TWITTER_VALIDATING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| UPDATE_CM_UNKNOWN | Транзакция была отклонена, но что-то пошло не так, пожалуйста, сообщите вашему аккаунт-менеджеру, нефинальный статус | No |
| VOID_APPROVED | Транзакция была одобрена, окончательный статус | Yes |
| VOID_ERROR | Статус транзакции неизвестен; сообщите менеджеру учётной записи, окончательный статус | Yes |
| VOID_PROCESSING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| VOID_REJECTED | Транзакция была отклонена, окончательный статус | Yes |
| VOID_STARTING | Транзакция обрабатывается, продолжайте опрос; нефинальный статус | No |
| VOID_UNKNOWN | Транзакция была отклонена, но что-то пошло не так, пожалуйста, сообщите вашему аккаунт-менеджеру, нефинальный статус | No |

### os Commerce

The os Commerce plugin lets an [os Commerce](https://www.oscommerce.com/) 4 store accept card payments processed through Payneteasy. Shoppers pay on a hosted payment form without leaving the checkout flow, and the module also adds an optional surcharge fee line to the order totals.

A live demo storefront with the plugin installed is available at [oscommerce.codetime.net](https://oscommerce.codetime.net), and you can walk through a full checkout there before installing the module on your own shop.

#### Source code

The plugin is developed in the open on Git Hub: [payneteasy/php-plugin-oscommerce-4](https://github.com/payneteasy/php-plugin-oscommerce-4). Download the `plugin-oscommerce.zip` release archive from that repository for either of the installation methods below.

### PAN Eligibility

#### Введение

Сервисы проверки PAN позволяют Присоединяющейся стороне определить, подходит ли карта для Money Transfer (как отправляющая или получающая), и получить расширенную информацию об эмитенте и продукте карты до отправки финансового запроса.

#### PAN Eligibility Direct Flow

```plantuml
skinparam roundcorner 20
skinparam sequenceArrowThickness 1
skinparam maxmessagesize 1200
skinparam sequenceParticipant underline
actor Payer
participant "Connecting Party" as A
participant "Payneteasy" as B
autonumber
Payer -> A: Checkout
activate A
A -> B: /api/v2/pan-eligibility/send/
activate B
A -> B: /api/v2/pan-eligibility/receive/
A -> B: /api/v2/pan-eligibility/both/
B --> A: Order ID
B -> B: Process\npan-eligibility
group Get Final Status
== Receive Connecting Party Callback ==
A <- B: Callback with Final Status
A --> B: HTTP 200
deactivate B
== Order Status Request ==
A -> B: Get Status by Order ID
activate B
B --> A: Final Status
deactivate B
end
A --> Payer: Show result
deactivate Payer
deactivate A
```

(2,3,4) О реализации запроса прямого процесса проверки PAN см. /api/v2/pan-eligibility/. Информацию о проверке PAN можно запросить для карты Плательщика (Отправителя), карты Получателя или обеих карт сразу.
 
(5) Для реализации обратного вызова с обработкой финального статуса см. [Обратный вызов Присоединяющейся Стороны](https://doc.payneteasy.ru/integration/API_commands/merchant_callback_parameters.html.md).
 
(7) Для реализации запроса статуса заказа см. [/api/v2/status/](https://doc.payneteasy.ru/integration/API_commands/api_v2_status.html.md). Статус следует запрашивать несколько раз с интервалом 3-5 секунд, пока в ответе не будет получен финальный статус.
 

#### PAN Eligibility Form Flow

```plantuml
  skinparam roundcorner 20
  skinparam sequenceArrowThickness 2
  skinparam ParticipantPadding 30
  actor Payer as Customer
  participant "Connecting Party\nwebsite" as Merchant
  participant "Payment Gateway" as g
  autonumber
  Customer -> Merchant: Checkout
  activate Merchant
  == Purchase payment request ==
  Merchant -> g: api/v2/pan-eligibility/send-form
  activate g
  Merchant -> g: api/v2/pan-eligibility/receive-form
  Merchant -> g: api/v2/pan-eligibility/both-form
  g --> Merchant: Redirect-url, orderId
  deactivate g
  Merchant -> Customer: Provide redirect-url \nto payer’s browser
  deactivate Merchant
  activate Customer
  Customer -> g: GET redirect-url
  deactivate Customer
  activate g
  g --> Customer: Payment Form
  deactivate g
  activate Customer
  Customer -> g: Submit form
  deactivate Customer
  activate g
  g --> g: Process PAN Eligibility
  == Final redirect of customer ==
  g -> Customer: Connecting Party website redirect_url
  activate Customer
  Customer -> Merchant: POST redirect_url\nstatus, orderid
  deactivate Customer
  activate Merchant
  group Get Final Status
  == Receive Connecting Party Callback ==
  Merchant <- g: Сallback with final status
  g <-- Merchant: HTTP 200
  deactivate g
  == Order Status Request ==
  Merchant -> g: api/v2/status
  activate g
  g --> Merchant: Response \nstatus, order-stage
  deactivate g
  end
  Merchant --> Customer: Show result
  deactivate Merchant
```

(2,3,4) О реализации запроса процесса проверки PAN через форму см. /api/v2/pan-eligibility-form/. Информацию о проверке PAN можно запросить для карты Плательщика (Отправителя), карты Получателя или обеих карт сразу.
 
(5) Для реализации обратного вызова с обработкой финального статуса см. [Обратный вызов Присоединяющейся Стороны](https://doc.payneteasy.ru/integration/API_commands/merchant_callback_parameters.html.md).
 
(7) Для реализации запроса статуса заказа см. [/api/v2/status/](https://doc.payneteasy.ru/integration/API_commands/api_v2_status.html.md). Статус следует запрашивать несколько раз с интервалом 3-5 секунд, пока в ответе не будет получен финальный статус.
 

#### PAN Eligibility Callback

##### Параметры обратного вызова

Дополнительные параметры отправляются в callback-уведомлениях для транзакций PAN Eligibility. Подробнее см. [Параметры callback Присоединяющейся стороны](https://doc.payneteasy.ru/integration/API_commands/merchant_callback_parameters.html.md).

| Параметр | Описание |
|---------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| status | Подробности см. в [Список статусов](https://doc.payneteasy.ru/integration/reference/statuses.html.md). |
| serial-number | Серийный номер запроса. |
| client_orderid | Идентификационный номер транзакции, присовенный Присоединяющейся Стороной. |
| paynet-order-id | Идентификатор заказа, заданный Payneteasy. |
| processor-tx-id | Идентификатор транзакции, присвоенный процессором. |
| type | Тип транзакции, например sale, reversal, chargeback. |
| sending-card-type | Тип отправляющей карты (VISA, MASTERCARD). |
| sending-cardholder | Держатель отправляющей карты. |
| sending-bin | Идентификационный номер банка отправляющей карты. |
| sending-last-four-digits | Последние 4 цифры отправляющей карты. |
| sending-eligible | Подходит ли отправляющая карта для отправки средств. Возможные значения: true/false/unknown. |
| sending-ica | Описание: The sending card ICA. |
| sending-bank-name | Название банка отправляющей карты. |
| sending-currency-code | Код валюты отправляющей карты. |
| sending-country-code | Код страны отправляющей карты. |
| sending-acceptance-brand-code | Код бренда принятия отправляющей карты. |
| sending-acceptance-brand-name | Название бренда принятия отправляющей карты. |
| sending-product-brand-code | Код бренда продукта отправляющей карты. |
| sending-product-brand-name | Название бренда продукта отправляющей карты. |
| receiving-card-type | Тип получающей карты (VISA, MASTERCARD). |
| receiving-bin | Идентификационный номер банка получающей карты. |
| receiving-last-four-digits | Последние 4 цифры получающей карты. |
| receiving-eligible | Подходит ли получающая карта для отправки средств. Возможные значения: true/false/unknown. |
| receiving-ica | ICA получающей карты. |
| receiving-bank-name | Название банка получающей карты. |
| receiving-currency-code | Код валюты получающей карты. |
| receiving-country-code | Код страны получающей карты. |
| receiving-acceptance-brand-code | Код бренда принятия получающей карты. |
| receiving-acceptance-brand-name | Название бренда принятия получающей карты. |
| receiving-product-brand-code | Код бренда продукта получающей карты. |
| receiving-product-brand-name | Название бренда продукта получающей карты. |
| error-code | Код ошибки. |
| error-message | Error Message. |
| control | Контрольная сумма, сгенерированная [SHA-1](https://doc.payneteasy.ru/integration/general_api_usage/request_authentication_methods/sha.html.md). Строка для подписи представляет собой объединение следующих параметров: 1. Параметр обратного вызова: status. 2. Параметр обратного вызова: orderid. 3. Параметр обратного вызова: merchant_order. 4. merchant_control (Контрольный ключ, присвоенный аккаунту Торговца в Платёжном Шлюзе Payneteasy). |

##### Callback Macros

Простой URL callback содержит все параметры, перечисленные в [Параметры обратного вызова](https://doc.payneteasy.ru/integration/API_commands/merchant_callback_parameters.html.md). Настраиваемый URL позволяет Присоединяющейся стороне определять собственные имена параметров, тогда как фактические значения параметров задаются с помощью макросов в формате ${parameter_name}. Доступные макросы перечислены в [Callback Macros](https://doc.payneteasy.ru/integration/API_commands/merchant_callback_parameters.html.md).

| Макрос имени поля | Field Value Macro | Описание |
|------------------------------------|---------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ${status} | n/a | Статус транзакции: одобрена, отклонена, обрабатывается. |
| ${serial-number} | n/a | Уникальный номер, присваиваемый сервером Payneteasy конкретному запросу от Присоединяющейся стороны. |
| ${client-order-id} | n/a | Уникальный идентификатор заказа, присвоенный Присоединяющейся Стороной. |
| ${paynet-order-id} | n/a | Идентификатор заказа, созданный Payneteasy. |
| ${processor-tx-id} | n/a | Идентификатор транзакции, сгенерированный Процессором. |
| ${type} | n/a | Тип транзакции, например sale, return, chargeback и т.д. |
| ${sending-card-type} | n/a | Тип отправляющей карты (VISA, MASTERCARD). |
| ${sending-cardholder} | n/a | Держатель отправляющей карты. |
| ${sending-bin} | n/a | Идентификационный номер банка отправляющей карты. |
| ${sending-last-four-digits} | n/a | Последние 4 цифры отправляющей карты. |
| ${sending-eligible} | n/a | Подходит ли отправляющая карта для отправки средств. Возможные значения: true/false/unknown. |
| ${sending-ica} | n/a | Описание: The sending card ICA. |
| ${sending-bank-name} | n/a | Название банка отправляющей карты. |
| ${sending-currency-code} | n/a | Код валюты отправляющей карты. |
| ${sending-country-code} | n/a | Код страны отправляющей карты. |
| ${sending-acceptance-brand-code} | n/a | Код бренда принятия отправляющей карты. |
| ${sending-acceptance-brand-name} | n/a | Название бренда принятия отправляющей карты. |
| ${sending-product-brand-code} | n/a | Код бренда продукта отправляющей карты. |
| ${sending-product-brand-name} | n/a | Название бренда продукта отправляющей карты. |
| ${receiving-card-type} | n/a | Тип получающей карты (VISA, MASTERCARD). |
| ${receiving-bin} | n/a | Идентификационный номер банка получающей карты. |
| ${receiving-last-four-digits} | n/a | Последние 4 цифры получающей карты. |
| ${receiving-eligible} | n/a | Подходит ли получающая карта для отправки средств. Возможные значения: true/false/unknown. |
| ${receiving-ica} | n/a | ICA получающей карты. |
| ${receiving-bank-name} | n/a | Название банка получающей карты. |
| ${receiving-currency-code} | n/a | Код валюты получающей карты. |
| ${receiving-country-code} | n/a | Код страны получающей карты. |
| ${receiving-acceptance-brand-code} | n/a | Код бренда принятия получающей карты. |
| ${receiving-acceptance-brand-name} | n/a | Название бренда принятия получающей карты. |
| ${receiving-product-brand-code} | n/a | Код бренда продукта получающей карты. |
| ${receiving-product-brand-name} | n/a | Название бренда продукта получающей карты. |
| ${error-code} | n/a | Код ошибки. |
| ${error-message} | n/a | Error Message. |
| ${control} | n/a | Контрольная сумма, сгенерированная [SHA-1](https://doc.payneteasy.ru/integration/general_api_usage/request_authentication_methods/sha.html.md). Строка для подписи представляет собой объединение следующих параметров: 1. Параметр обратного вызова: status. 2. Параметр обратного вызова: orderid. 3. Параметр обратного вызова: merchant_order. 4. merchant_control (Контрольный ключ, присвоенный аккаунту Торговца в Платёжном Шлюзе Payneteasy). |

### Pax Manual

#### Руководство администратора

##### Перевод терминала Pax в режим работы через USB-порт

1. Войти в меню администратора, см. ниже.
2. Установить следующие параметры:

* Параметры / Редактирование / Smart Sale / Связь с банком / Через кассу
* Параметры / Редактирование / Smart Sale / Порт терминала / USB
* Параметры / Редактирование / Smart Sale / SSL без ККМ / Да

1. Отключить терминал от USB и подключить его обратно.

<iframe width="871" height="490" src="https://www.youtube.com/embed/S_QGNcmR2tU" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

##### Переключение терминала в режим работы с USB порта на Ethernet

1. Войти в меню администратора, см. ниже.
2. Установить следующие параметры:

* Параметры / Редактирование / Smart Sale / Связь с банком / Через терминал
* Параметры / Редактирование / Smart Sale / Порт терминала / Ethernet

1. Отключить терминал от USB и подключить его обратно.

<iframe width="871" height="490" src="https://www.youtube.com/embed/x Dm Av Zl YfEU" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

##### Настройка терминала на работу без кассы

1. Войти в меню администратора, см. ниже.
2. Установить следующие параметры:

* Параметры / Редактирование / Smart Sale / Режим ККМ / Касса или Терминал (по умолчанию - Касса)

1. После установки параметра терминал перезагрузится и в меню появится иконка для инициации платежа.

> **Note:** В этом режиме терминала Pax SP30 печать слипов (чеков платежной системы) невозможна, т.к. принтер отсутствует.

##### Создание нового кассира

1. Войти в меню администратора, см. ниже.
2. Установить следующие параметры:

* Параметры / Управление доступом / Управление правами / Новый оператор - создать нового оператора в группу “Кассиры” и установить пароль (на этапе “Введите карту доступа” нажать Enter).
* Параметры / Управление доступом / Авто логин - выбрать нужного оператора (в случае необходимости).

##### Вход меню Администратора

1. Дождаться логотипа или надписи Ожидание команды от ККМ, затем нажать ENTER.
2. Введите пароль 1234, затем нажмите ENTER.
3. Выбрать пункт меню “Блокировка терм.” и нажать ENTER.
4. Выбрать пункт “Администратор” и ввести пароль Администратора.
5. Дождаться логотипа или надписи Ожидание команды от ККМ, затем нажать ENTER.
6. Введите пароль 1234, затем нажмите ENTER.

##### Вход в системное меню

1. При включении зажать кнопку “Func”.
2. При появлении надписи SELF-TEST SUCCESS зажать кнопку “Cancel”.

#### Руководство пользователя

##### Подключение терминала к сети Ethernet

1. Подключить кабель к разъему с надписью ETH.
2. На роутере найти IP-адрес терминала по его MAC-адресу и закрепить его на DHCP-сервере роутера за терминалом. MAC-адрес терминала написан на желтой этикетке на нижней панели терминала.
3. При включении терминал должен успешно установить соединение с сервером.
4. Выгрузить логи на сервер (2+ENTER) и запросить у службы поддержки IP-адрес для терминала в системе управления.

##### Нахождение IP-адреса терминала в сети

Поиск IP-адреса Pax/Verifone в сети производится самостоятельно. Указание диапазона не обязательно.

Ограничения:

* Маска сети не должна выдавать больше 500 IP адресов.
* При нахождении больше одного терминала отобразится ошибка.

> **Note:** Описание: В случае присутствия больше одного терминала в сети, может быть указан его идентификатор (например, terminal_id=12345678) после чего терминал может быть проверен.

Правила для заполнения поля адрес:

* В случае присутствия в сети одного терминала и количество IP-адресов меньше 500, нет необходимости вводить данные.
* Описание: В случае присутствия в сети больше одного терминала и количество IP-адресов меньше 500, необходимо ввести идентификатор терминала (например, terminal_id=12345678).
* Описание: В случае присутствия в сети одного терминала и количество IP-адресов больше 500 IP-адресов, необходимо указать диапазон поиска IP-range (например, range=192.168.0.1-192.168.0.254).
* Перевод: В случае присутствия в сети больше одного терминала и количество IP-адресов больше 500, необходимо ввести идентификатор терминала или диапазон поиска IP-range на выбор.

> **Note:** Перевод: Установка программы для поиска терминала на [iOS](https://dengisend.ru/demo-ios/Socket Scaner/install.html) и [Android](https://mpos.pne.io/verifone/scanner/scanner.apk).

##### Автоматический поиск терминала (только для IOS)

* Описание: В настройках терминала прописать диапазон, в котором будет находится терминал (например, range=10.45.69.1-10.45.69.254:27015).

##### Обновление конфигурации

###### Способ №1

1. Дождаться логотипа или надписи Ожидание команды от ККМ, затем зажать клавиши 3 и ENTER одновременно.
2. Введите пароль 1234, затем нажмите ENTER.
3. После отображения сообщения Журнал содержит операции, возможны финансовые потери. Продолжить? нажать ENTER.

* В случае подключения терминала по USB, после отображения сообщения Загрузка параметров будет отложена нажать ENTER.
* В случае подключения терминала по Ethernet, подключение к сети и загрузка программ пройдет автоматически.

<iframe width="871" height="490" src="https://www.youtube.com/embed/MSlpEIaO0B0" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

###### Способ №2

1. Дождаться логотипа или надписи Ожидание команды от ККМ, затем нажать ENTER.
2. Введите пароль 1234, затем нажмите ENTER.
3. Описание: Выбрать пункт Параметры, нажав кнопку 6, затем нажать ENTER.
4. Нажмите ENTER (курсор установлен на пункте ЗАГРУЗКА ПАРАМ.).
5. После отображения сообщения Журнал содержит операции, возможны финансовые потери. Продолжить? нажать ENTER.

* В случае подключения терминала по USB, после отображения сообщения Загрузка параметров будет отложена нажать ENTER. Затем необходимо произвести оплату, во время которой будет произведено обновление конфигурации.
* В случае подключения терминала по Ethernet, подключение к сети и загрузка программ пройдет автоматически.

##### Отправка логов на сервер

###### Способ №1

1. Дождаться логотипа или надписи Ожидание команды от ККМ, затем зажать клавиши 2 и ENTER одновременно.
2. В случае подключения терминала по USB, после отображения сообщения Выгрузка логов будет отложена нажать ENTER.

* В случае подключения терминала по Ethernet, подключение к сети и загрузка программ пройдет автоматически.

<iframe width="871" height="490" src="https://www.youtube.com/embed/RHGZGYRx64k" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

###### Способ №2

1. Дождаться логотипа или надписи Ожидание команды от ККМ, затем нажать ENTER.
2. Введите пароль 1234, затем нажмите ENTER.
3. Описание: Выбрать пункт Параметры, нажав кнопку 6, затем нажать ENTER.
4. Выберите пункт меню Логирование.
5. Выберите пункт Выгрузка лога.
6. В случае подключения терминала по USB, после отображения сообщения Выгрузка логов будет отложена нажать ENTER. Затем необходимо произвести оплату, во время которой будет произведено обновление конфигурации.

* В случае подключения терминала по Ethernet, подключение к сети и загрузка программ пройдет автоматически.

#### FAQ

##### Каждое утро Pax при первой оплате очень долго чем-то занимается, после чего выдает ошибку “Оплата не прошла, используйте другую карту”.

В случае подключения терминала по USB, происходит сверка итогов. Процесс сверки может происходить только во время проведения транзакции.
 

> **Note:** Процесс сверки логов происходит каждый день в 10:00 GMT+0.

Рекомендация: Проведение пустой транзакции утром следующего дня.
 

##### При попытке оплаты или загрузке возникает ошибка “Нет соединения с хостом”. Терминал подключен по USB.

Рекомендация: Отключить терминал, включить и проверить настройки для работы по USB.
 

> **Note:** Необходимо использование USB-кабеля старого типа, т.к. работа USB-кабеля нового типа может быть некорректной.

Перевод: Возможен недостаток питания терминала от кассы АТОЛ-150. Можно поставить USB-hub с отдельным питанием или поставить Verifone Vx820.
 
Перевод: В случае наличия провода с разветвлением на LAN, возможна организация работы через роутер. Также возможно дополнительное питание терминала через разъемы микро-usb/мини-usb, в случае наличия их в кабеле.
 

##### Подключённый к стороней кассе Pax не принял карту, но на кассу отдал команду печати фискального документа.

Логи по сторонним кассам есть только у вас, у нас в этом случае не пишутся.
 

##### Как осуществить сверку итогов принудительно на терминале?

Рекомендация: Зажать на терминале клавиши 4 и Enter одновременно.
 

##### Эвотор теряет связь с терминалом по USB (на Эвоторе отображается ошибка “Прерывание связи”).

* Полностью удалить терминал с Эвотора, перезагрузить Эвотор и терминал.
* Переподключить терминал к другому порту.
* Привязать терминал, проверить настройки Эвотора - что указан верный номер терминала и стоит галка по умолчанию.
* Проверить настройки терминала:

Параметры / Редактирование / Smart Sale / Связь с банком.
Параметры / Редактирование / Smart Sale / Порт терминала.
Параметры / Редактирование / Smart Sale / SSL без ККМ.
Если есть возможность переподключить терминал по Ethernet кабелю.

### Payment Cashier

#### Введение

Интеграция с Платёжной кассой позволяет Плательщику выбрать способ оплаты для транзакции. Платёжную кассу можно настроить на стороне Присоединяющейся стороны или на стороне Платёжного Шлюза (также называемой Параллельной формой), что рассматривается в этом примере использования. Присоединяющаяся сторона перенаправляет Плательщика в Параллельную форму, размещённую на стороне Платёжного Шлюза; Плательщик выбирает один из доступных способов оплаты и пытается выполнить платёж. Параллельная форма может инициировать транзакции sale или preauth для каждого настроенного способа оплаты. После успешной транзакции Плательщик перенаправляется обратно к Присоединяющейся стороне. Подробнее см. [Настройка платёжного потока](#payment-flow-customization-url).
 
Чтобы узнать, как можно настраивать формы, перейдите к разделу [Настройка форм](https://doc.payneteasy.ru/integration/reference/forms_customization.html.md) с примерами и макросами [Настройки страницы Платёжной кассы](https://doc.payneteasy.ru/integration/reference/forms_customization.html.md), [Настройки страницы оплаты](https://doc.payneteasy.ru/integration/reference/forms_customization.html.md), [Предварительно заполненные данные держателя карты на странице оплаты](https://doc.payneteasy.ru/integration/reference/forms_customization.html.md), [Настройки страницы ожидания](https://doc.payneteasy.ru/integration/reference/forms_customization.html.md) и [Настройки страницы завершения](https://doc.payneteasy.ru/integration/reference/forms_customization.html.md).
 
 
Значение терминов см. в [Глоссарии](https://doc.payneteasy.ru/integration/reference/glossary.html.md).
 
 
Платёжная касса, настроенная в Платёжном Шлюзе, имеет внутреннюю структуру Главных Эндпоинтов, объединяющих обычные Эндпоинты. Обычные Эндпоинты, подключённые к Главному Эндпоинту, называются Вспомогательными Эндпоинтами. Каждый Вспомогательный Эндпоинт настраивается для конкретного способа оплаты. При выполнении оплаты Плательщик может выбрать способ оплаты в Параллельной форме. Когда Плательщик выбирает способ оплаты, Параллельная форма инициирует вспомогательную транзакцию в соответствующем Вспомогательном Эндпоинте. Если валюта Вспомогательного Эндпоинта отличается от валюты Главного Эндпоинта, сумма главной транзакции будет конвертирована в соответствующую валюту этого способа оплаты. Кроме того, Главные Эндпоинты можно объединить в Группу Эндпоинтов для создания единой логической сущности для мультивалютных интеграций. См. [Параметры мультивалютной интеграции](#cashier-multicurrency) и выберите предпочтительный вариант с менеджером службы поддержки Payneteasy.
 

#### Payment Cashier Flow

```plantuml
  skinparam roundcorner 20
  skinparam sequenceArrowThickness 2
  skinparam ParticipantPadding 30
  actor Плательщик as Customer
  participant "Веб-сайт\nПрисоединяющейся Стороны" as Merchant
  participant "Платёжный Шлюз" as g
  autonumber
  Customer -> Merchant: Инициализия
  activate Merchant
  == Запрос кассы ==
  Merchant -> g: api/v2/sale-form
  activate g
  g --> Merchant: Redirect-url, orderId
  deactivate g
  Merchant -> Customer: Предоставление redirect-url \nбраузеру Плательщика
  deactivate Merchant
  activate Customer
  Customer -> g: GET redirect-url
  deactivate Customer
  activate g
  g --> Customer: Возврат параллельной формы
  deactivate g
  activate Customer
  Customer --> Customer: Выбор Плательщиком метода оплаты
  activate Customer
  Customer -> g: Запрос параллельной формой транзакции \nдля выбранного метода оплаты
  deactivate Customer
  activate g
  g --> g: Инициирование \nвспомогательной транзакции \nдля выбранного метода оплаты
  g --> Customer: Возврат вспомогательной формы
  deactivate g
  alt if Открытие Плательщиком другой \nпараллельной формы окна оплаты
  Customer --> Customer: Выбор Плательщиком метода оплаты
  activate Customer
  Customer -> g: Запрос параллельной формой транзакции \nдля выбранного метода оплаты
  deactivate Customer
  activate g
  g --> g: Инициирование \nвспомогательной транзакции \nдля выбранного метода оплаты
  g --> Customer: Возврат вспомогательной формы
  deactivate g
  end
  Customer -> g: Подтверждение формы
  deactivate Customer
  activate g
  g --> g: Обработка транзакции
  == Финальное перенаправление Плательщика ==
  g -> Customer: redirect_url веб-сайта \nПрисоединяющейся Стороны
  activate Customer
  Customer -> Merchant: POST redirect_url\nstatus, orderid
  deactivate Customer
  group Получение финального статуса
  == Получение обратного вызова \nПрисоединяющейся Стороны ==
  activate Merchant
  Merchant <- g: Обратный вызов \nс финальным статусом
  g <-- Merchant: HTTP 200
  deactivate g
  == Запрос статуса ==
  Merchant -> g: api/v2/status
  activate g
  g --> Merchant: Ответ \nstatus, order-stage
  deactivate g
  end
  Merchant --> Customer: Показ результата
  deactivate Merchant
```

(2) Для реализации запроса sale-form см. [/api/v2/sale-form/](https://doc.payneteasy.ru/integration/API_commands/api_v2_sale-form.html.md).
 
(14) Для реализации финального перенаправления см. [Final Redirect](https://doc.payneteasy.ru/integration/API_commands/final_redirect.html.md).
 
(16,17) Для реализации запроса статуса заказа см. [/api/v2/status/](https://doc.payneteasy.ru/integration/API_commands/api_v2_status.html.md). Статус следует запрашивать несколько раз с интервалами 3–5 секунд, пока в ответе не будет получен окончательный статус.
 
(18) Сведения о реализации callback с обработкой финального статуса см. в [Callbacks Присоединяющейся стороны](https://doc.payneteasy.ru/integration/API_commands/merchant_callback_parameters.html.md). Callback отправляется со статусом основной транзакции (транзакции кассира). Чтобы получать дополнительные callback о результате каждой инициированной транзакции, обратитесь к менеджеру поддержки Payneteasy.
 

#### Options For Multi-Currency Integration

Платёжную кассу можно настроить для нескольких валют. Для каждой валюты транзакции, необходимой Присоединяющейся стороне, создаётся отдельный Главный Эндпоинт с уникальным идентификатором. Чтобы в будущем не интегрироваться с новыми идентификаторами Главных Эндпоинтов для поддержки дополнительных валют, Присоединяющаяся сторона может выбрать интеграцию с Группой Эндпоинтов. Группа Эндпоинтов — это единая логическая сущность, объединяющая Главные Эндпоинты в разных валютах. В будущем Главные Эндпоинты в новых валютах можно добавить в ту же Группу Эндпоинтов.

```plantuml
title Options for multi-currency processing integration
package "Integration to Endpoint Group" {
  class "layoutHelper1" #ffe6cc;line:black;line.dotted
  class "Payment\nmethod 1\ncurrency A" #ffe6cc;line:black;line.dotted
  class "Payment\nmethod 2\ncurrency A" #ffe6cc;line:black;line.dotted
  class "Payment\nmethod 1\ncurrency B" #dae8fc;line:black;line.dotted
  class "Payment\nmethod 2\ncurrency X" #daf9fc;line:black;line.dotted
  class "Master Endpoint\n currency A" #ffe6cc;line:black;line.dotted
  class "Master Endpoint\n currency B" #dae8fc;line:black;line.dotted
  class "Endpoint\nGroup" #ffcdcc;line:black;line.dotted
}
package "Integration to multiple Master Endpoints" {
class "layoutHelper2\n" #ffe6cc;line:black;line.dotted
  class "Payment\nmethod 1\ncurrency C" #e1d5e7;line:black;line.dotted
  class "Payment\nmethod 2\ncurrency C" #e1d5e7;line:black;line.dotted
  class "Payment\nmethod 1\ncurrency D" #dafcdd;line:black;line.dotted
  class "Payment\nmethod 2\ncurrency Y" #abf8d8;line:black;line.dotted
  class "Master Endpoint\n currency C" #e1d5e7;line:black;line.dotted
  class "Master Endpoint\n currency D" #dafcdd;line:black;line.dotted
}
class "layoutHelper3" #ffe6cc;line:black;line.dotted
class "Connecting Party\n (Merchant)" #ececec;line:black;line.bold

"Connecting Party\n (Merchant)" -left-> "Endpoint\nGroup"
"Connecting Party\n (Merchant)" -down-> "layoutHelper3"
"Connecting Party\n (Merchant)" -down-> "Master Endpoint\n currency C"
"Connecting Party\n (Merchant)" -down-> "Master Endpoint\n currency D"

"Endpoint\nGroup" -down- "Master Endpoint\n currency A"
"Endpoint\nGroup" -down- "Master Endpoint\n currency B"
"Master Endpoint\n currency C" -down- "Payment\nmethod 1\ncurrency C"
"Master Endpoint\n currency C" -down- "Payment\nmethod 2\ncurrency C"
"Master Endpoint\n currency D" -down- "Payment\nmethod 1\ncurrency D"
"Master Endpoint\n currency D" -down- "Payment\nmethod 2\ncurrency Y"
"Master Endpoint\n currency A" -down- "Payment\nmethod 1\ncurrency A"
"Master Endpoint\n currency A" -down- "Payment\nmethod 2\ncurrency A"
"Master Endpoint\n currency B" -down- "Payment\nmethod 1\ncurrency B"
"Master Endpoint\n currency B" -down- "Payment\nmethod 2\ncurrency X"
"Connecting Party\n (Merchant)" -left[hidden]- "layoutHelper1"
"Connecting Party\n (Merchant)" -right[hidden]- "layoutHelper2\n"
"layoutHelper1" -[hidden]- "Master Endpoint\n currency A"
"layoutHelper1" -[hidden]- "Master Endpoint\n currency B"
"layoutHelper2\n" -[hidden]- "Master Endpoint\n currency C"
"layoutHelper2\n" -[hidden]- "Master Endpoint\n currency D"
hide members
hide circle
hide layoutHelper1
hide layoutHelper2\n
hide layoutHelper3
```

#### Payment Flow Customization Scenarios

##### Callback Notification Options

По умолчанию обратные вызовы имеют следующую форму:
 
 
Обратный вызов главной конечной точки: client_orderid=A&orderid=B
 
Обратный вызов вспомогательной конечной точки: client_orderid=A&orderid=C (если он установлен на вспомогательной конечной точке)
 
 
Для корректной обработки обратных вызовов на стороне Присоединяющейся стороны важно учитывать, что обратный вызов от вспомогательной конечной точки может прийти раньше, чем от главной конечной точки: окончательный статус вспомогательной транзакции запускает окончательный статус главной транзакции.
 
 
Существует другая настройка, которая может быть предпочтительнее стандартной (чтобы включить эту функцию, пожалуйста, обратитесь к менеджеру поддержки Payneteasy) :
 
 
Обратный вызов главной конечной точки: client_orderid=A&orderid=B
 
Обратный вызов вспомогательной конечной точки: client_orderid=B&orderid=C (если он установлен на вспомогательной конечной точке)
 
 
Обратный вызов на вспомогательной конечной точке может потребоваться в двух случаях:
 
 
1. Присоединяющаяся сторона хочет иметь полную информацию обо всех попытках оплаты в Payment Cashier.
 
2. Присоединяющаяся сторона реализует интеграцию preauth -> capture/cancel в Payment Cashier. Транзакции Capture/cancel могут инициироваться для одобренной транзакции preauth запросом к Master Endpoint ID с использованием orderid вспомогательной транзакции. Этот orderid поступает в callback от Auxiliary Endpoint, когда транзакция preauth получает окончательный статус.
 

##### Redirect Payer After Any Decline

By default, the Payer stays on the Parallel Form if one of the auxiliary transactions is declined, so the Payer can try to pay with another available payment method.
There is an option to redirect the Payer to the Connecting Party’s website after receiving an unsuccessful status (decline, filtered, error, etc.) on any payment method tab of the Cashier (auxiliary transaction decline will cause the decline on the master transaction). Please contact Payneteasy support manager to enable this feature.

##### Keep Payer on Finish Page

When one of the auxiliary transactions is approved, Parallel Form redirects the Payer back to the Connecting Party’s website (see [Final Redirect](https://doc.payneteasy.ru/integration/API_commands/final_redirect.html.md)).
There is an option to keep the Payer on Finish Page instead of redirecting for approved auxiliary transaction (it might be useful if Payment Cashier is displayed in an iframe on the Connecting Party’s website). Please contact Payneteasy support manager to enable this feature.

##### Forced Payer Redirect

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

###### Option 1

Auxiliary Finish Form Template:

```html
<script>
        function backToMerchant() {
            window.parent.postMessage(
                "redirect-to-merchant",
                "https://pay.connectingparty.com"
            );
        }
    </script>
</head>
<body onload="backToMerchant()">

        <h2 class="summary__title">Deposit <span class="status-title">${STATUS}</span></h2>

            <a class="link" href="#" onclick="backToMerchant()">Back to merchant website</a>

```

Master Payment Form Template:

```html
<script>
    window.addEventListener("message", function(event) {
        if (event.origin !== "https://pay.connectingparty.com")
            return;
        if (event.data === "redirect-to-merchant") {
            window.location.replace("https://connectingparty.com/result");
        }
    }, false);
</script>
```

###### Option 2

Auxiliary Finish Form Template:

```html

        <h2 class="summary__title">Deposit <span class="status-title">${STATUS}</span></h2>

            <a class="link" target="_parent" href="${CUSTOMER_REDIRECT_URL}">Back to merchant website</a>

```

#### Subsequent Transactions on Payment Cashier

Если Присоединяющаяся сторона хочет инициировать транзакции cancel, reversal или capture в Платёжной кассе, ей необходимо отправить запрос на идентификатор Главного Эндпоинта, используя order_id вспомогательной транзакции. Это значение можно получить в callback от Вспомогательного Эндпоинта вместе с другими сведениями об этой транзакции. Подробнее см. в разделе [Параметры уведомления callback](#payment-flow-customization-url) и ознакомьтесь с приведённым ниже потоком транзакции.

##### Сценарий отмены

```plantuml
  skinparam roundcorner 20
  skinparam sequenceArrowThickness 1
  skinparam maxmessagesize 100
  skinparam sequenceParticipant underline
  actor Плательщик
  participant "Присоединяющаяся Сторона" as A
  participant "Платёжный Шлюз" as B
  hnote over A,B : Успешная транзакция преавторизации
  autonumber
  group Опционально
  Плательщик -> A: Инициация отмены
  activate A
  end
  == Отмена ==
  A -> B: api/v2/return
  activate B
  B --> A: ИД транзации
  B -> B: Обработка отмены
  group Получение финального статуса
  == Получение обратного вызова \nПрисоединяющейся Стороны ==
  A <- B: Обратный вызов с финальным статусом
  A --> B: HTTP 200
  deactivate B
  == Запрос статуса ==
  A -> B: Получение статуса по ИД транзакции api/v2/status
  activate B
  B --> A: Ответ со статусом, Order-stage
  deactivate B
  end
  group Опционально
  A --> Плательщик: Конечный статус
  deactivate A
  end
```

(1) Отмена предавторизации может быть вызвана Присоединяющейся Стороной в соответствии с бизнес-моделью или по запросу Плательщика.
 
(2) Для имплементации запроса на отмену см. [/api/v2/return/](https://doc.payneteasy.ru/integration/API_commands/api_v2_return.html.md).
 
(5) Обратный вызов по отмене будет отправлен только в случае, если notify_url был предоставлен в инициирующем запросе предавторизации или дополнительный обратный вызов установлен на предоставленный URL для отмен на уровне терминала. Если в запросе предавторизации был предоставлен server_callback_url, обратный вызов по отмене не будет отправлен. Для обработки обратных вызовов см. [Обратный вызов Присоединяющейся Стороны](https://doc.payneteasy.ru/integration/API_commands/merchant_callback_parameters.html.md).
 
(7) Для реализации запроса статуса заказа см. [/api/v2/status/](https://doc.payneteasy.ru/integration/API_commands/api_v2_status.html.md). Статус следует запрашивать несколько раз с интервалом 3-5 секунд, пока в ответе не будет получен финальный статус.
 
(9) Конечный статус может быть предоставлен Присоединяющейся Стороной в соответствии с бизнес-моделью или по запросу Плательщика.
 

##### Сценарий списания

```plantuml
  skinparam roundcorner 20
  skinparam sequenceArrowThickness 1
  skinparam maxmessagesize 100
  skinparam sequenceParticipant underline
  actor Плательщик
  participant "Присоединяющаяся Сторона" as A
  participant "Платёжный Шлюз" as B
  hnote over A,B : Успешная транзакция преавторизации
  autonumber
  group Опционально
  Плательщик -> A: Инициация списания
  activate A
  end
  == Списание ==
  A -> B: api/v2/capture
  activate B
  B --> A: ИД транзакции
  B -> B: Обработка списания
  group Получение финального статуса
  == Получение обратного вызова \nПрисоединяющейся Стороны ==
  A <- B: Обратный вызов с финальным статусом
  A --> B: HTTP 200
  deactivate B
  == Запрос статуса ==
  A -> B: Получение статуса по ИД транзакции api/v2/status
  activate B
  B --> A: Ответ со статусом, Order-stage
  deactivate B
  end
  group Опционально
  A --> Плательщик: Конечный статус
  deactivate A
  end
```

(1) Списание может быть инициировано Присоединяющейся Стороной в соответствии с бизнес-моделью или по запросу Плательщика.
 
(2) Для имплементации запроса на списание см. [/api/v2/capture/](https://doc.payneteasy.ru/integration/API_commands/api_v2_capture.html.md).
 
(5) Callback для Capture будет отправлен только если notify_url был предоставлен в первоначальном запросе транзакции или дополнительный URL callback для транзакций Capture указан на уровне endpoint. Если server_callback_url был предоставлен в первоначальном запросе транзакции, callback для Capture не отправляется. Для реализации callback с обработкой окончательного статуса см. [Connecting Party Callbacks](https://doc.payneteasy.ru/integration/API_commands/merchant_callback_parameters.html.md).
 
(7) Для реализации запроса статуса заказа см. [/api/v2/status/](https://doc.payneteasy.ru/integration/API_commands/api_v2_status.html.md). Статус следует запрашивать несколько раз с интервалом 3-5 секунд, пока в ответе не будет получен финальный статус.
 
(9) Конечный статус может быть предоставлен Присоединяющейся Стороной в соответствии с бизнес-моделью или по запросу Плательщика.
 

##### Reversal Flow

```plantuml
  skinparam roundcorner 20
  skinparam sequenceArrowThickness 1
  skinparam maxmessagesize 100
  skinparam sequenceParticipant underline
  actor Плательщик
  participant "Присоединяющаяся Сторона" as A
  participant "Платёжный Шлюз" as B
  hnote over A,B : Успешная транзакция платежа или списания
  autonumber
  group Опционально
  Плательщик -> A: Инициация возврата
  activate A
  end
  == Возврат ==
  A -> B: api/v2/return
  activate B
  B --> A: ИД транзакции
  B -> B: Обработка возврата
  group Получение финального статуса
  == Получение обратного вызова \nПрисоединяющейся Стороны ==
  A <- B: Обратный вызов с финальным статусом
  A --> B: HTTP 200
  deactivate B
  == Запрос статуса ==
  A -> B: Получение статуса по ИД транзакции api/v2/status
  activate B
  B --> A: Ответ со статусом, Order-stage
  deactivate B
  end
  group Опционально
  A --> Плательщик: Конечный статус
  deactivate A
  end
```

Возврат может быть инициирован Присоединяющейся Стороной, опираясь на внутреннюю политику компании или по запросу Плательщика.
 
(2) Для имплементации запроса возврата см. [/api/v2/return/](https://doc.payneteasy.ru/integration/API_commands/api_v2_return.html.md).
 
(5) Callback для Return будет отправлен только если notify_url был предоставлен в первоначальном запросе транзакции или дополнительный URL callback для транзакций Return указан на уровне endpoint. Если server_callback_url был предоставлен в первоначальном запросе транзакции, callback для Return не отправляется. Для реализации callback с обработкой окончательного статуса см. [Connecting Party Callbacks](https://doc.payneteasy.ru/integration/API_commands/merchant_callback_parameters.html.md).
 
(7) Для реализации запроса статуса заказа см. [/api/v2/status/](https://doc.payneteasy.ru/integration/API_commands/api_v2_status.html.md). Статус следует запрашивать несколько раз с интервалом 3-5 секунд, пока в ответе не будет получен финальный статус.
 
(9) Финальный статус может быть отправлен Присоединяющейся Стороной, опираясь на внутреннюю политику компании или по запросу Плательщика.

### Выплата с банковским подтверждением

#### Введение

Выплата - это тип финансовой транзакции, в результате которой Присоединяющаяся Сторона зачисляет средства на банковский счёт Клиента (Получателя). Этот сценарий предполагает интеграцию выплат, требующих дополнительного подтверждения от банка.
 
Значение терминов см. в [Глоссарии](https://doc.payneteasy.ru/integration/reference/glossary.html.md).
 

#### Общий сценарий выплаты

```plantuml
participant Получатель as R
participant "Присоединяющаяся Сторона" as cp
autonumber
group Опционально
R -> cp : Инициализация
activate cp
end
== Запрос на выплату ==
cp -> "Payneteasy": /api/v4/payout-check/
activate "Payneteasy"
"Payneteasy" --> cp: ИД транзакции
cp -> "Payneteasy": Получение статуса по ИД транзакции\napi/v2/status
"Payneteasy" --> cp : Ответ со\nстатусом,order-stage
cp -> "Payneteasy": /api/v4/payout-pay/
"Payneteasy" --> cp : Ответ payout-pay
group Опционально
cp -> "Payneteasy": Получение статуса по ИД транзакции\napi/v2/status
"Payneteasy" --> cp : Ответ со\nстатусом,redirect-to
cp -> R: Предоставлние URL-а перенаправления
deactivate "Payneteasy"
deactivate cp
activate R
R -> "Payneteasy": Перенаправление на redirect-to
deactivate R
activate "Payneteasy"
"Payneteasy" -> R: Дополнительная форма подстверждения
deactivate "Payneteasy"
activate R
R -> "Payneteasy": Подтверждение формы
deactivate R
activate "Payneteasy"
end
"Payneteasy" --> "Payneteasy": Обработка\nвыплаты
group Получение финального статуса
== Получение обратного вызова \nПрисоединяющейся Стороны ==
cp <- "Payneteasy" : Обратный вызов с финальным статусом
"Payneteasy" <-- cp: HTTP 200
deactivate "Payneteasy"
== Запрос статуса ==
cp -> "Payneteasy": Получение статуса по ИД транзакции\napi/v2/status
activate "Payneteasy"
"Payneteasy" --> cp : Ответ со\nстатусом,order-stage
deactivate "Payneteasy"
end
group Опционально
cp --> R: Показ результата
deactivate cp
end
```

(1) Выплата может быть инициирована Присоединяющейся Стороной в зависимости от внутренней бизнес-модели или запроса Получателя.
 
(2) Для имплементации запроса на проверку возможности выплаты см. [/api/v4/payout-check](https://doc.payneteasy.ru/integration/API_commands/api_v4_payout-check.html.md).
 
(4) Для имплементации запроса статуса, см. [/api/v2/status/](https://doc.payneteasy.ru/integration/API_commands/api_v2_status.html.md).
 
(5) Параметр order-stage обязан вернуть payout_check_validated, возврат payout_check_validating означает что банк все ещё обрабатывает запрос. В этом случае Присоединяющаяся Сторона продолжает запрашивать статус транзакции.
 
(6) Чтобы продолжить обработку Payout, реализуйте запрос payout-pay, см. [/api/v4/payout-pay](https://doc.payneteasy.ru/integration/API_commands/api_v4_payout-pay.html.md).
 
(9) Некоторые типы выплат требуют от Получателя заполнить дополнительные данные в форме. Форма будет перенаправлена клиенту в параметре redirect-to ответа на запрос статуса.
 
(12) Получатель подтверждает форму выплаты.
 
(13) Получатель перенаправляется назад к Присоединяющейся Стороне. См. [Финальное Перенаправление](https://doc.payneteasy.ru/integration/API_commands/final_redirect.html.md).
 
(15) Для имплементации обратного вызова с обработкой финального статуса см. [Обратный вызов Присоединяющейся Стороны.](https://doc.payneteasy.ru/integration/API_commands/merchant_callback_parameters.html.md).
 
(17) Статус должен запрашиваться несколько раз с интервалами в 3-5 секунд до получения финального статуса в ответе.
 
(19) Финальный статус может быть отправлен Присоединяющейся Стороной в зависимости от бизнес модели или запроса Получателя.

### PHP Framework

If your website or application is not built on one of the supported CMS or
e-commerce platforms, you can integrate with Payneteasy directly from
plain PHP using the official PHP client library. The library wraps the
Payneteasy Merchant API (request signing, transport, response
parsing and payment status handling) into a set of PHP classes, so you do
not have to implement the API protocol yourself.

The library implements the following payment scenarios:

1. Account verification
2. Sale transactions
3. Preauth/Capture transactions
4. Transfer transactions
5. Return transactions
6. Recurrent transactions
7. Payment Form integration
8. Merchant callbacks

Buy Now Button, e Check, Western Union, Bitcoin, Loan and Qiwi integrations
are listed in the library’s own documentation as not yet implemented.

#### Source code

The library is published on Git Hub: [payneteasy/php-library-payneteasy-api](https://github.com/payneteasy/php-library-payneteasy-api).
The repository README links to more detailed documentation pages (in
English and Russian) describing the library’s internal structure and each
payment scenario in more depth.

### Предавторизация с использованием формы, списание и отмена

#### Введение

Оплата — тип транзакции, при которой банк блокирует определённую сумму на карте Плательщика и не позволяет использовать эту сумму. Важно учесть, что блокирование средств действует в течение определённого периода (обычно это до 7 дней для дебетовых карт и до 28 дней для кредитных карт). Интеграция по форме позволяет Присоединяющейся стороне снять с себя ответственность за хранение, обработку и передачу карточных данных Плательщика или какой-либо другой конфиденциальной информации о платеже. Эти данные вводятся Плательщиком на платёжной форме Payneteasy в среде, сертифицированной по стандарту безопасности PCI DSS.
 
[Списание](#capture-form-request-url) - тип транзакции, следующий за предавторизацией, для списания предварительно заблокированных средств с карты Плательщика.
 
[Отмена](#cancel-form-request-url) - противоположная списанию транзакция, отменяющая блокировку и возвращающая средства в свободное пользование Плательщиком.
 
Все формы настраиваемы. Примеры и макросы - см. настройки [Платёжной Формы](https://doc.payneteasy.ru/integration/reference/forms_customization.html.md), [Предварительно Заполненных Данных](https://doc.payneteasy.ru/integration/reference/forms_customization.html.md), [Формы Ожидания](https://doc.payneteasy.ru/integration/reference/forms_customization.html.md) и [Финишной Формы](https://doc.payneteasy.ru/integration/reference/forms_customization.html.md) в разделе [Настройка Форм](https://doc.payneteasy.ru/integration/reference/forms_customization.html.md).
 
 
Значение терминов см. в [Глоссарии](https://doc.payneteasy.ru/integration/reference/glossary.html.md).
 

#### Сценарий предавторизации по форме

```plantuml
  skinparam roundcorner 20
  skinparam sequenceArrowThickness 2
  skinparam ParticipantPadding 30
  actor Плательщик as Customer
  participant "Веб-сайт\nПрисоединяющейся Стороны" as Merchant
  participant "Платёжный Шлюз" as g
  autonumber
  Customer -> Merchant: Инициализация
  activate Merchant
  == Запрос проведения оплаты ==
  Merchant -> g: api/v2/preauth-form
  activate g
  g --> Merchant: Redirect-url, orderId
  deactivate g
  Merchant -> Customer: Предоставление redirect-url \nбраузеру Плательщика
  deactivate Merchant
  activate Customer
  Customer -> g: GET redirect-url
  deactivate Customer
  activate g
  g --> Customer: Форма оплаты
  deactivate g
  activate Customer
  Customer -> g: Подтверждение формы
  deactivate Customer
  activate g
  g --> g: Обработка платежа
  == Финальное перенаправление клиента ==
  g -> Customer: redirect_url веб-сайта \nПрисоединяющейся Стороны
  activate Customer
  Customer -> Merchant: POST redirect_url\nstatus, orderid
  deactivate Customer
  activate Merchant
  group Get Final Status
  == Получение обратного вызова \nПрисоединяющейся Стороны ==
  Merchant <- g: Обратный Вызов \nс финальным статусом
  g <-- Merchant: HTTP 200
  deactivate g
  == Запрос статуса ==
  Merchant -> g: api/v2/status
  activate g
  g --> Merchant: Ответ \nstatus, order-stage
  deactivate g
  end
  Merchant -> Customer: Показ результата
  deactivate Merchant
```

(2) Для имплементации запроса на проведение предавторизации по форме см. [/api/v2/preauth-form/](https://doc.payneteasy.ru/integration/API_commands/api_v2_preauth-form.html.md).
 
(9) Для имплементации финального перенаправления Плательщика см. [Финальное Перенаправление](https://doc.payneteasy.ru/integration/API_commands/final_redirect.html.md).
 
(11,12) Для имплементации запроса статуса заказа, см. [/api/v2/status/](https://doc.payneteasy.ru/integration/API_commands/api_v2_status.html.md). Статус должен запрашиваться несоклько раз с интервалами в 3-5 секунд до получения финального статуса.
 
(13 Для обработки обратного вызова с окончательным статусом заказа см. [Обратный вызов Присоединяющейся Стороны](https://doc.payneteasy.ru/integration/API_commands/merchant_callback_parameters.html.md).
 

#### Сценарий списания

```plantuml
  skinparam roundcorner 20
  skinparam sequenceArrowThickness 1
  skinparam maxmessagesize 100
  skinparam sequenceParticipant underline
  actor Плательщик
  participant "Присоединяющаяся Сторона" as A
  participant "Платёжный Шлюз" as B
  hnote over A,B : Успешная транзакция преавторизации
  autonumber
  group Опционально
  Плательщик -> A: Инициация списания
  activate A
  end
  == Списание ==
  A -> B: api/v2/capture
  activate B
  B --> A: ИД транзакции
  B -> B: Обработка списания
  group Получение финального статуса
  == Получение обратного вызова \nПрисоединяющейся Стороны ==
  A <- B: Обратный вызов с финальным статусом
  A --> B: HTTP 200
  deactivate B
  == Запрос статуса ==
  A -> B: Получение статуса по ИД транзакции api/v2/status
  activate B
  B --> A: Ответ со статусом, Order-stage
  deactivate B
  end
  group Опционально
  A --> Плательщик: Конечный статус
  deactivate A
  end
```

(1) Списание может быть инициировано Присоединяющейся Стороной в соответствии с бизнес-моделью или по запросу Плательщика.
 
(2) Для имплементации запроса на списание см. [/api/v2/capture/](https://doc.payneteasy.ru/integration/API_commands/api_v2_capture.html.md).
 
(5) Обратный вызов по списанию будет отправлен только в случае, если notify_url был предоставлен в инициирующем запросе предавторизации или дополнительный обратный вызов установлен на предоставленный URL для списаний на уровне терминала. Если в запросе предавторизации был предоставлен server_callback_url, обратный вызов по списанию не будет отправлен. Для обработки обратных вызовов см. [Обратный вызов Присоединяющейся Стороны](https://doc.payneteasy.ru/integration/API_commands/merchant_callback_parameters.html.md).
 
(7) Для реализации запроса статуса заказа см. [/api/v2/status/](https://doc.payneteasy.ru/integration/API_commands/api_v2_status.html.md). Статус следует запрашивать несколько раз с интервалом 3-5 секунд, пока в ответе не будет получен финальный статус.
 
(9) Конечный статус может быть предоставлен Присоединяющейся Стороной в соответствии с бизнес-моделью или по запросу Плательщика.
 

#### Сценарий отмены

```plantuml
  skinparam roundcorner 20
  skinparam sequenceArrowThickness 1
  skinparam maxmessagesize 100
  skinparam sequenceParticipant underline
  actor Плательщик
  participant "Присоединяющаяся Сторона" as A
  participant "Платёжный Шлюз" as B
  hnote over A,B : Успешная транзакция преавторизации
  autonumber
  group Опционально
  Плательщик -> A: Инициация отмены
  activate A
  end
  == Отмена ==
  A -> B: api/v2/return
  activate B
  B --> A: ИД транзакции
  B -> B: Обработка отмены
  group Получение финального статуса
  == Получение обратного вызова \nПрисоединяющейся Стороны ==
  A <- B: Обратный вызов с финальным статусом
  A --> B: HTTP 200
  deactivate B
  == Запрос статуса ==
  A -> B: Получение статуса по ИД транзакции api/v2/status
  activate B
  B --> A: Ответ со статусом, Order-stage
  deactivate B
  end
  group Опционально
  A --> Плательщик: Конечный статус
  deactivate A
  end
```

(1) Отмена предавторизации может быть вызвана Присоединяющейся Стороной в соответствии с бизнес-моделью или по запросу Плательщика.
 
(2) Для имплементации запроса на отмену см. [/api/v2/return/](https://doc.payneteasy.ru/integration/API_commands/api_v2_return.html.md).
 
(5) Обратный вызов по отмене будет отправлен только в случае, если notify_url был предоставлен в инициирующем запросе предавторизации или дополнительный обратный вызов установлен на предоставленный URL для отмен на уровне терминала. Если в запросе предавторизации был предоставлен server_callback_url, обратный вызов по отмене не будет отправлен. Для обработки обратных вызовов см. [Обратный вызов Присоединяющейся Стороны](https://doc.payneteasy.ru/integration/API_commands/merchant_callback_parameters.html.md).
 
(7) Для реализации запроса статуса заказа см. [/api/v2/status/](https://doc.payneteasy.ru/integration/API_commands/api_v2_status.html.md). Статус следует запрашивать несколько раз с интервалом 3-5 секунд, пока в ответе не будет получен финальный статус.
 
(9) Конечный статус может быть предоставлен Присоединяющейся Стороной в соответствии с бизнес-моделью или по запросу Плательщика.

### Presta Shop

The Paynet Easy payment module for Presta Shop lets a store built on Presta Shop 1.7 and later accept card payments through Payneteasy. It plugs into the standard Presta Shop checkout as a payment method and processes Sale transactions via the Payneteasy Connecting Party API, either through a redirect (“FORM” integration) or an embedded card form (“DIRECT” integration) shown directly on the payment step.

A live example of the plugin running on a sample storefront is available here: [Presta Shop demo shop](https://prestashop17.codetime.net).

#### Source code

The plugin source code is maintained on Git Hub: [payneteasy/php-plugin-prestashop-1](https://github.com/payneteasy/php-plugin-prestashop-1).

### Шаблоны квитанции и сообщения

#### Введение

Шаблоны квитанции и сообщения должны быть отправлены в службу поддержки Payneteasy для установки.
 
Payneteasy поддерживает доставку чеков и сообщений клиенту после каждой успешной транзакции.
 
Доступ к чекам осуществляется по уникальному URL, описанному ниже. Сообщения можно отправлять по SMS или email через сервер сообщений Присоединяющейся стороны.
 

#### Receipt Template

Квитанции можно отправлять только в формате HTML.
 
Идентификатор квитанции можно найти в ответе статуса.
 

| Интеграционная среда | Производственная среда |
|--------------------------------------------------------------------------|-----------------------------------------------------------------------|
| https://sandbox.payneteasy.ru/paynet/view-receipt/ENDPOINT-ID/RECEIPT-ID | https://gate.payneteasy.ru/paynet/view-receipt/ENDPOINT-ID/RECEIPT-ID |

##### Макросы шаблона квитанции

| Макрос имени поля | Описание |
|----------------------------------|--------------------------------------------------------------------------------------------------------------------------------------|
| $!{PAYMENT_FORM_HEADER} | Название на платёжной форме в конечной точке |
| $!{DATE} | Описание: Order date. |
| $!{DESCRIPTION} | Описание заказа. |
| $!{AMOUNT} | Сумма. |
| $!{CURRENCY} | Валюта, в которой списывается транзакция (трёхбуквенный код валюты). |
| $!{PAYNET_ORDER_ID} | Идентификатор заказа Payneteasy. |
| $!{MERCHANT_ORDER_ID} | Идентификатор заказа, назначенный этому заказу Присоединяющейся стороной. |
| $!{RRN} | Регистрационный номер банка-получателя. |
| $!{AUTH_CODE} | Authorization Code. |
| $!{AUTH_RESPONSE_CODE} | Двух- либо шестизначный буквенно-цифровой код, предоставляемый эмитентом, который указывает ответ авторизации (одобрение или отказ). |
| $!{STATUS} | Order статус. |
| $!{SKIN_VERSION} | Описание: CSS skin version. |
| $!{BIN} | Банковский BIN кредитной карты клиента. |
| $!{LAST_FOUR_DIGITS} | Последние четыре цифры карты. |
| $!{CARD_TYPE} | Описание: Card type. |
| $!{CARDHOLDER_NAME} | Карта holder название. |
| $!{DESTINATION_BIN} | BIN банка номера кредитной карты получателя. |
| $!{DESTINATION_LAST_FOUR_DIGITS} | Последние четыре цифры карты получателя. |
| $!{DESTINATION_CARD_TYPE} | Тип карты получателя. |
| $!{PAYNET_PROCESSING_DATE} | Дата обработки Payneteasy. |
| $!{ACQUIRER_PROCESSING_DATE} | Дата обработки банком-эквайером. |
| $!{READER_PROCESSING_DATE} | Дата обработки терминала считывателя. |
| $!{TERMINAL_ID} | Terminal ID. |
| $!{EMV_ISSUER_RESPONSE} | Код ответа на запрос авторизации, отправленный эмитентом. |
| $!{EMV_TERMINAL_AID_9F06} | Идентификатор приложения терминала. Идентифицирует приложение, как описано в ISO/IEC 7816-5. |
| $!{EMV_TVR_95} | Результаты проверки терминала. Статус различных функций с точки зрения терминала. |
| $!{EVM_CID_9F27} | Cryptogram Information Data. Указывает тип криптограммы и действия, которые должен выполнить терминал. |
| $!{EMV_APP_LABEL_50} | Метка приложения. Мнемоника, связанная с AID согласно ISO/IEC 7816-5. |
| $!{EMV_CVR_9F34} | Результаты метода проверки держателя карты (CVM). Указывает результаты последней выполненной CVM. |
| $!{EMV_APP_CRYPTOGRAM_9f26} | Криптограмма приложения. Криптограмма, возвращаемая ICC в ответ на команду GENERATE AC. |
| $!{EMV_PAN_SEQUENCE_5f34} | Application Primary Account Number (PAN) Sequence Number. Идентифицирует и различает карты с одинаковым PAN. |
| $!{PIN_OR_SIGNATURE} | Запрашивать PIN или только иметь подпись. |
| $!{READER_ENTRY_MODE} | Конфигурация аутентификации клиента в терминале. |
| $!{HAS_SIGNATURE} | Наличие подписи (TRUE или FALSE). |
| $!{RECEIPT_ID} | Receipt ID. |
| $!{RECEIPT_URL} | URI текущей квитанции. |
| $!{FUNCTIONS} | Библиотека функций для работы со строками. |

##### Пример шаблона квитанции

```html
<!DOCTYPE html>
<html>
    <body style="font-family:'tahoma';color:#1A407D;">

        <h1 style="font-weight:900;color:#7D1A40;">
            $!AMOUNT $!CURRENCY Paid
        </h1>

            Hi $!CARDHOLDER_NAME,
             
            Thank you for your payment through Payneteasy!
             
            Here are your transaction details:

            $!CARDHOLDER_NAME
             
            Transaction # : $!PAYNET_ORDER_ID
             
            Paid with $!CARD_TYPE ending with $!LAST_FOUR_DIGITS
             
            $!DATE

            The transaction will appear on your credit card statement as nymeria.

        <div style="height: 2px;background-color:#E7E7E7;margin-top:32px;margin-bottom:32px;"></div>
             
            <a style="font-family:'tahoma';color:#1A407D;" href="https://site.company_server/"><span>gate.payneteasy.ru</span></a>
            <span style="font-family:'tahoma';color:#1A407D;margin-right:16px;margin-left:16px;">Support@gate.payneteasy.ru</span>

    </body>
</html>
```

#### Описание: Message template

Сообщения можно отправлять клиенту в виде обычного текста, SMS или HTML.
 
Сервер сообщений должен быть указан на уровне проекта или конечной точки.
 

##### Макросы шаблона сообщения

| Макрос имени поля | Описание |
|------------------------------|--------------------------------------------------------------------------------------------------------------------------------------|
| $!{CARDHOLDER_VALUE} | Карта printed название. |
| $!{CARDHOLDER_EMAIL} | Электронная почта держателя карты, переданная во входящем API-запросе. |
| $!{CARDHOLDER_PHONE} | Номер телефона держателя карты, переданный во входящем API-запросе. |
| $!{CUSTOMER_FULL_NAME} | Полное имя клиента, отправленное Присоединяющейся стороной через входные параметры. |
| $!{CUSTOMER_FIRST_NAME} | Имя клиента, отправленное Присоединяющейся стороной через входные параметры. |
| $!{CUSTOMER_LAST_NAME} | Фамилия клиента, отправленная Присоединяющейся стороной через входные параметры. |
| $!{CUSTOMER_COUNTRY_NAME} | Название страны клиента, переданное во входящем API-запросе. |
| $!{CUSTOMER_COUNTRY_CODE} | Страна выставления счёта клиента, переданная во входящем API-запросе. Например: IL, RU и т. д. |
| $!{CUSTOMER_STATE_NAME} | Название региона клиента, переданное присоединяющейся стороной через входные параметры, если таковые есть в стране клиента. |
| $!{CUSTOMER_STATE_CODE} | Код региона клиента, переданный присоединяющейся стороной через входные параметры, если таковые есть в стране клиента. |
| $!{CUSTOMER_CITY} | Название города клиента, переданное во входящем API-запросе. |
| $!{CUSTOMER_ZIP_CODE} | Описание: Customer’s ZIP code. |
| $!{CUSTOMER_ADDRESS1} | Адрес клиента, переданный во входящем API-запросе. |
| $!{CUSTOMER_ADDRESS2} | Адрес клиента, переданный во входящем API-запросе, если требовался дополнительный адрес. |
| $!{AMOUNT} | Сумма. |
| $!{GATEDESCRIPTOR} | Дескриптор шлюза, указанный в платёжном шлюзе. |
| $!{ORDERDESCRIPTION} | Описание заказа. |
| $!{CURRENCY} | Валюта, в которой списывается транзакция (трёхбуквенный код валюты). |
| $!{CARD_NUMBER} | Описание: 6 + 4 masked card number |
| $!{BIN} | Банковский BIN кредитной карты клиента. |
| $!{LAST_FOUR_DIGITS} | Последние четыре цифры карты. |
| $!{CARD_TYPE} | Описание: Card type. |
| $!{PAYNET_ORDER_ID} | Идентификатор заказа Payneteasy. |
| $!{MERCHANT_ORDER_ID} | Идентификатор заказа, назначенный этому заказу Присоединяющейся стороной. |
| $!{CREATED_DATE} | Дата создания транзакции в Payneteasy. |
| $!{CREATED_YEAR} | Год создания транзакции в Payneteasy |
| $!{CREATED_MONTH} | Месяц создания транзакции в Payneteasy |
| $!{CREATED_DAY} | День создания транзакции в Payneteasy |
| $!{MERCHANT} | End point display название. |
| $!{MERCHANT_NAME} | Отображаемое имя Присоединяющейся стороны. |
| $!{MERCHANT_EMAIL} | Электронная почта Присоединяющейся стороны. |
| $!{ENDPOINT_ID} | Описание: End point ID. |
| $!{PAYMENT_FORM_NAME} | Название на платёжной форме в конечной точке. |
| $!{RRN} | Регистрационный номер банка-получателя. |
| $!{APPROVAL_CODE} | Код проверки, необходимый для авторизации платежа |
| $!{AUTH_RESPONSE_CODE} | Двух- либо шестизначный буквенно-цифровой код, предоставляемый эмитентом, который указывает ответ авторизации (одобрение или отказ). |
| $!{STATUS} | Описание: Status of the order. |
| $!{PAYNET_PROCESSING_DATE} | Дата обработки Payneteasy (год, месяц, день и время в часовом поясе МСК). |
| $!{ACQUIRER_PROCESSING_DATE} | Дата обработки банком-эквайером (год, месяц, день и время в часовом поясе МСК). |
| $!{READER_PROCESSING_DATE} | Дата обработки терминала считывателя (год, месяц, день и время в часовом поясе МСК). |
| $!{TERMINAL_ID} | Terminal ID. |
| $!{EMV_ISSUER_RESPONSE} | Код ответа на запрос авторизации, отправленный эмитентом. |
| $!{EMV_TVR_95} | Результаты проверки терминала. Статус различных функций с точки зрения терминала. |
| $!{EVM_CID_9F27} | Cryptogram Information Data. Указывает тип криптограммы и действия, которые должен выполнить терминал. |
| $!{EMV_APP_LABEL_50} | Метка приложения. Мнемоника, связанная с AID согласно ISO/IEC 7816-5. |
| $!{EMV_CVR_9F34} | Результаты метода проверки держателя карты (CVM). Указывает результаты последней выполненной CVM. |
| $!{EMV_APP_CRYPTOGRAM_9f26} | Криптограмма приложения. Криптограмма, возвращаемая ICC в ответ на команду GENERATE AC. |
| $!{EMV_PAN_SEQUENCE_5f34} | Application Primary Account Number (PAN) Sequence Number. Идентифицирует и различает карты с одинаковым PAN. |
| $!{PIN_OR_SIGNATURE} | Запрашивать PIN или только иметь подпись. |
| $!{READER_ENTRY_MODE} | Конфигурация аутентификации клиента в терминале. |
| $!{HAS_SIGNATURE} | Наличие подписи (TRUE или FALSE). |
| $!{RECEIPT_ID} | Receipt ID. |
| $!{RECEIPT_URI} | URN текущей квитанции (/view-receipt/ENDPOINT-ID/RECEIPT-ID). |
| $!{PURPOSE} | Любая дополнительная информация, отправленная Присоединяющейся стороной. |
| $!{MERCHANT_DATA} | Любая дополнительная информация по данной транзакции, которая может быть полезна во внешних системах Присоединяющейся стороны. |
| $!{ENDPOINT_SEQUENCE_VALUE} | Используется при наличии последовательности конечных точек, увеличивающейся на единицу в числовом формате. |

##### Примеры шаблона сообщения

Пример шаблона обычного текста и SMS:
 
```http
$!{AMOUNT} $!{CURRENCY} Paid
Hi $!{CARDHOLDER_VALUE},
Thank you for your payment through Payneteasy!
Here are your transaction details:
$!{CARDHOLDER_VALUE}
Transaction # : $!{PAYNET_ORDER_ID}
Paid with $!{CARD_TYPE} ending with $!{LAST_FOUR_DIGITS}
$!{CREATED_DATE}
The transaction will appear on your credit card statement as nymeria.
```

Пример HTML-шаблона:
 
```html
<!DOCTYPE html>
<html>
    <body style="font-family:'tahoma';color:#1A407D;">

        <h1 style="font-weight:900;color:#7D1A40;">
            $!AMOUNT $!CURRENCY Paid
        </h1>

            Hi $!CARDHOLDER_VALUE,
             
            Thank you for your payment through Payneteasy!
             
            Here are your transaction details:

            $!CARDHOLDER_VALUE
             
            Transaction # : $!PAYNET_ORDER_ID
             
            Paid with $!CARD_TYPE ending with $!LAST_FOUR_DIGITS
             
            $!CREATED_DATE

            The transaction will appear on your credit card statement as nymeria.

        <div style="height: 2px;background-color:#E7E7E7;margin-top:32px;margin-bottom:32px;"></div>
             
            <a style="font-family:'tahoma';color:#1A407D;" href="https://site.company_server/"><span>gate.payneteasy.ru</span></a>
            <span style="font-family:'tahoma';color:#1A407D;margin-right:16px;margin-left:16px;">Support@gate.payneteasy.ru</span>

    </body>
</html>
```

### Сервис регулярных платежей

#### Введение

Повторяющаяся (также Рекуррентная) транзакция — это тип банковского платежа, при котором с держателя карты взимаются сборы в заранее определенные интервалы за услуги или товары постоянного характера (членство, подписки, платежи по кредитам). Перед взиманием сборов карта должна быть зарегистрирована в платежном шлюзе. Служба повторяющихся платежей обеспечивает автоматическую обработку платежей по регулярному графику, например, ежедневно, еженедельно, ежемесячно или ежегодно. С помощью этой службы плательщики могут настроить свои платежные реквизиты один раз, и система будет автоматически списывать средства с их кредитной карты или банковского счета с указанными интервалами. Присоединяющейся стороне не требуется указывать повторяющийся график на стороне платежного шлюза: запросы на повторяющиеся платежи также можно инициировать вручную в соответствии с внутренним графиком Присоединяющейся стороны, бизнес-моделью или запросом плательщика. Чтобы просмотреть и управлять услугой повторяющихся платежей из пользовательского интерфейса, свяжитесь со службой поддержки.
 

#### Процесс прямых повторяющихся платежей

Данный процесс подразумевает, что у Присоединяющейся стороны есть сертификат PCI DSS, позволяющий работать с данными держателей карт.
 
```plantuml
@startuml
skinparam roundcorner 20
skinparam sequenceArrowThickness 1
skinparam maxmessagesize 1200
skinparam sequenceParticipant underline
actor Плательщик
participant "Присоединяющаяся Сторона" as A
participant "Payneteasy" as B
autonumber
Плательщик -> A: Подписка на\nрегулярные платежи
== Создание регулярного платежа ==
activate A
A -> B: /api/v4/create-recurring-payment/
activate B
B -> B: Создание профиля\nрегулярного платежа
B --> A: ID регулярного платежа
deactivate B
Плательщик <-- A: Регулярный платеж\nзарегистрирован
deactivate A
group Если установлено расписание платежей
...                                       Согласно расписанию...
B -> B: Обработка запланированной\nрегулярной транзакции
activate B
A <- B: Колбэк с финальным статусом
activate A
A --> B: HTTP 200
deactivate B
Плательщик <-- A: Уведомление плательщика
deactivate A
end
group Опционально
== Обработка регулярного платежа ==
A -> B: v4/process-recurring-payment/\nwith ID регулярного платежа
activate B
activate A
A <-- B: Создание регулярной транзакции
B -> B: Обработка регулярной\nтранзакции
A <- B: Колбэк с финальным статусом
A --> B: HTTP 200
deactivate B
Плательщик <-- A: Уведомление плательщика
deactivate A
end
group Опционально
== Обновление регулярного платежа ==
A -> B: v4/update-recurring-payment/\nwith ID регулярного платежа
activate B
activate A
A <-- B: Обновление регулярного платежа
deactivate A
B -> B: Обновление профиля\nрегулярного платежа
group Если установлено расписание платежей
deactivate B
...                                       Согласно расписанию...
B -> B: Обработка запланированной\nрегулярной транзакции
activate B
A <- B: Колбэк с финальным статусом
activate A
A --> B: HTTP 200
deactivate B
A --> Плательщик: Уведомление плательщика
deactivate A
end
end
@enduml
```

(2) Чтобы создать повторяющийся платеж, см. /api/v4/create-recurring-payment/. Чтобы создать повторяющиеся платежи для нескольких Плательщиков в одном запросе с данными CSV, см. /api/v4/create-recurring-payments/.
 
(7, 8, 13, 14, 20, 21) Чтобы реализовать обратный вызов с обработкой окончательного статуса, см. [Обратный вызов Присоединяющейся стороны](https://doc.payneteasy.ru/integration/API_commands/merchant_callback_parameters.html.md).
 
(10) Для обработки повторяющихся платежей см. /api/v4/process-recurring-payment/. Для обработки повторяющихся платежей для нескольких Плательщиков в одном запросе с данными CSV см. /api/v4/process-recurring-payments/.
 
(16)Для обновления повторяющихся платежей см. /api/v4/update-recurring-payment/. Для обновления повторяющихся платежей для нескольких Плательщиков в одном запросе с данными CSV см. /api/v4/update-recurring-payments/.
 
(6, 19) Согласно расписанию означает, что если расписание установлено, система будет автоматически обрабатывать транзакции с указанными интервалами, обновлять профиль и уведомлять Присоединяющуюся сторону о каждой завершенной транзакции. Если расписание не установлено, средства могут быть списаны с клиента только вручную через пользовательский интерфейс или вызов API. Расписание можно изменить позже (см. шаг 16).
 
(9, 15, 22) Результаты платежа могут быть отправлены Присоединяющейся стороной на основе внутренней бизнес-модели или запроса Плательщика.
 

#### Процесс регулярных платежей с начальной транзакцией

В отличие от процесса прямых регулярных платежей , в процессе регулярных платежей с начальной транзакцией требуется выполнение первичного платежа для проверки и авторизации карты плательщика. Для этой цели подойдет любой тип транзакции, содержащий платежные данные: продажа, предварительная аутентификация, перевод и т. д. Эта транзакция должна быть предварительно обработана в платежном шлюзе и иметь окончательный статус.
 
Данный процесс не содержит данных о держателях карт при обмене данными между Плательщиком и Присоединяющейся стороной, а также между Присоединяющейся стороной и Платежным шлюзом, поэтому сертификация PCI DSS для Присоединяющейся стороны не требуется.
 
```plantuml
@startuml
skinparam roundcorner 20
skinparam sequenceArrowThickness 1
skinparam maxmessagesize 1200
skinparam sequenceParticipant underline
actor Плательщик
participant "Подключающая сторона" as A
participant "Payneteasy" as B
autonumber
hnote over Плательщик,B : Начальный платеж
Плательщик -> A: Подписка на\nрегулярные платежи
activate Плательщик
activate A
== Регистрация карты ==
A -> B: Инициировать регистрацию карты\nчерез v4/create-card-ref
activate B
B -> B: Создать профиль\nрегулярного платежа
B --> A: Вернуть ID регулярного платежа
deactivate B
Плательщик <-- A: Регулярный платеж\nзарегистрирован
deactivate A
deactivate Плательщик
group Опционально
== Обработка регулярного платежа ==
A -> B: v4/process-recurring-payment/\nс ID регулярного платежа
activate B
activate A
A <-- B: Создание регулярной транзакции
B -> B: Обработать регулярную\nтранзакцию
A <- B: Колбэк с финальным статусом
A --> B: HTTP 200
deactivate B
Плательщик <-- A: Уведомить Плательщика
deactivate A
end
group Опционально
== Обновление регулярного платежа ==
A -> B: v4/update-recurring-payment/\nс ID регулярного платежа
activate B
activate A
A <-- B: Обновление регулярного платежа
deactivate A
B -> B: Обновить профиль\nрегулярного платежа
group Если установлено расписание
deactivate B
...                                       Согласно расписанию...
B -> B: Обработать запланированную\nрегулярную транзакцию
activate B
A <- B: Колбэк с финальным статусом
activate A
A --> B: HTTP 200
deactivate B
A --> Плательщик: Уведомить Плательщика
deactivate A
end
end
@enduml
```

Обсудите с менеджером службы поддержки, какой вариант использования API будет наиболее подходящим для первоначального платежа.
 
(2) Чтобы инициировать запрос на регистрацию карты и получить идентификатор регулярного платежа, см. [api/v4/create-card-ref](https://doc.payneteasy.ru/integration/API_commands/api_v4_create-card-ref.html.md).
 
(9, 10, 16, 17) Чтобы реализовать обратный вызов с обработкой окончательного статуса, см. [Обратный вызов Присоединяющейся стороны](https://doc.payneteasy.ru/integration/API_commands/merchant_callback_parameters.html.md).
 
(6) Для обработки повторяющихся платежей см. /api/v4/process-recurring-payment/. Для обработки повторяющихся платежей для нескольких Плательщиков в одном запросе с данными CSV см. /api/v4/process-recurring-payments/.
 
(12) Для обновления повторяющихся платежей см. /api/v4/update-recurring-payment/. Для обновления повторяющихся платежей для нескольких Плательщиков в одном запросе с данными CSV см. /api/v4/update-recurring-payments/.
 
(15) Согласно расписанию означает, что если расписание установлено, система будет автоматически обрабатывать транзакции с указанными интервалами, обновлять профиль и уведомлять Присоединяющуюся сторону о каждой завершенной транзакции. Если расписание не установлено, средства могут быть списаны с клиента только вручную через пользовательский интерфейс или вызов API. Расписание можно изменить позже (см. шаг 12).
 
(11, 18) Результаты платежа могут быть отправлены Присоединяющейсястороной на основе внутренней бизнес-модели или запроса Плательщика.

### Повторная предавторизация, списание и отмена

#### Введение

Оплата — тип транзакции, при которой банк блокирует определённую сумму на карте Плательщика и не позволяет использовать эту сумму. Важно учесть, что блокирование средств действует в течение определённого периода (обычно это до 7 дней для дебетовых карт и до 28 дней для кредитных карт).
 
 
См. определения терминов (Присоединяющаяся Сторона, 3DS Method и т.д.) в [Глоссарии](https://doc.payneteasy.ru/integration/reference/glossary.html.md).
 
 
Повторная предавторизация (рекуррентная предавторизация) - это тип транзакции, при которой средства Плательщика блокируются на определённый период с повторным использованием ранее сохранённого средства оплаты. Повторная предавторизация может быть инициирована вручную по инициативе Плательщика (таким образом можно упростить оплату для Плательщика), либо автоматически с заданным интервалом по инициативе Присоединяющейся Стороны (например, в модели подписки). Плательщику не требуется повторно заполнять платёжные данные, Присоединяющая Сторона использует Ссылочный идентификатор (Card Reference ID) для инициации оплаты. Необходимость проведения 3DS и ввода защитного кода (CVC, CVV и т.п.) в случае оплаты картой определяется настройками счёта в Эквайере и зависит от модели бизнеса Присоединяющейся стороны.
 
 
[Списание](#capture-preauth) - тип транзакции, следующий за предавторизацией, для списания предварительно заблокированных средств с карты Плательщика.
 
[Отмена](#cancel-preauth) - противоположная списанию транзакция, отменяющая блокировку и возвращающая средства в свободное пользование Плательщиком.
 
 
Повторная оплата совершается в 3 стадии:
 
1. Первый платёж – необходимо совершить первую оплату для проверки платёжного средства (например, карты) Плательщика. Для первого платежа подходит любой тип транзакции с платёжной информацией Плательщика - sale, preauth, transfer, и др.
 
2. Регистрация карты (или иного платёжного метода) – необходимо получить Ссылочный идентификатор (Card reference ID) и привязать его к профилю Плательщика. Регистрация платёжного метода возможна только для транзакций в [финальном статусе](https://doc.payneteasy.ru/integration/reference/statuses.html.md).
 
3. Повторный платёж – необходимо вызвать новую транзакцию оплаты с использованием ссылочного идентификатора, полученного на предыдущем шаге.
 

#### Сценарий повторной предавторизации

```plantuml
skinparam roundcorner 20
skinparam sequenceArrowThickness 1
skinparam maxmessagesize 1200
skinparam sequenceParticipant underline
actor Плательщик
participant "Присоединяющаяся Сторона" as A
participant "Платёжный Шлюз" as B
autonumber
hnote over Плательщик,B : Инициация платежа
== Регистрация карты ==
A -> B: api/v2/create-card-ref/
activate B
activate A
B --> A: Возврат ИД токена карты
deactivate B
A -> A: Сохранение ИД токена карты \nв профиле Плательщика
deactivate A
== Получение информации карты ==
group Опционально
A -> B: api/v2/get-card-info/
activate A
activate B
B --> A: Возврат информации карты
deactivate A
deactivate B
end
== Повторяющаяся Преавторизация ==
group Опционально
Плательщик -> A: Инициация Повторяющейся Преавторизации
activate A
activate Плательщик
end
A -> A: Получение ИД токена карты \nиз профиля Плательщика
group Опционально
A -> Плательщик: Запрос CVV Плательщика
Плательщик --> A: Ввод CVV
end
A -> B: api/v2/make-rebill-preauth/
activate B
B --> A: Ответ ИД транзакции
hnote over Плательщик,B : См. Схема прохождения 3DS
group Получение финального статуса
== Получение обратного вызова ==
A <- B: Обратный вызов с финальным статусом
A --> B: HTTP 200
deactivate B
== Запрос статуса ==
A -> B: Получение статуса по ИД транзакции
activate B
B --> A: Конечный статус
deactivate B
end
group Опционально
A --> Плательщик: Показ результата
deactivate Плательщик
deactivate A
end
```

> **Note:** Тип транзакции и имплементация первого платежа зависит от бизнес-модели Присоединяющейся Стороны. Свяжитесь с отделом поддержки Payneteasy для получения подходящего интеграционного сценария для проведения первого платежа.

(1) Для регистрации карты и получения ссылочного идентификатора см. [/api/v2/create-card-ref/](https://doc.payneteasy.ru/integration/API_commands/api_v2_create-card-ref.html.md).
 
(4) Для выполнения запроса на получение информации по ссылочному идентификатору см. [/api/v2/get-card-info/](https://doc.payneteasy.ru/integration/API_commands/api_v2_get-card-info.html.md). Содержимое ответа на этот запрос может быть использовано для показа Плательщику деталей предыдущего использованного метода оплаты или обновления базы данных Присоединяющейся Стороны. Запрос может быть выполнен в любой момент, если у Присоединяющейся стороны уже есть ссылочный идентификатор (Card reference ID).
 
(6) Повторная предавторизация может быть инициирована Плательщиком или Присоединяющейся Стороной в соответствии с бизнес-моделью.
 
(8, 9) Присоединяющаяся Сторона отправляет запрос Плательщику для ввода CVV/CVC (если применимо для сценария повторной.предавторизации)
 
(10) Для инициирования транзакции рекуррентной преавторизации см. [/api/v2/make-rebill-preauth/](https://doc.payneteasy.ru/integration/API_commands/api_v2_make-rebill-preauth.html.md). По умолчанию 3DS инициируется и выполняется платежным шлюзом через [Упрощенную схему аутентификации](#simplified-authentication-flow). См. [Схему принятия решения по 3DS](#ds-2x-decision-making-schema-preauth).
 
(12) Для имплементации обратного вызова с обработкой финального статуса см. [Обратный вызов Присоединяющейся Стороны](https://doc.payneteasy.ru/integration/API_commands/merchant_callback_parameters.html.md).
 
(14) Для имплементации запроса статуса, см. [/api/v2/status/](https://doc.payneteasy.ru/integration/API_commands/api_v2_status.html.md). Статус должен запрашиваться несколько раз с интервалами в 3-5 секунд до получения финального статуса в ответе.
 
(16) Результаты транзакции могут отправляться Присоединяющейся Стороной в соответствии с бизнес-моделью или по запросу Плательщика.
 

#### Схема прохождения 3DS

```plantuml
  
  title Схема прохождения 3DS
    start
    : (1) Send **/api/v2/status** request\nwith orderid=**paynet-order-id**\nProcess **/api/v2/status** response;
    while ((2) Check If **status** response field equals\nto finished status values\n**status** == approved\nOR **status** == declined\nOR **status** == error\nOR **status** == unknown\nOR **status** == filtered) is (NO);
    switch ((3) **html** and **redirect-to** field is present)
    case (YES)
   #Plum :(4) Create Wait HTML Page\nwhich redirects to result page\n(3DS 2.x or 1.0.2 to be applied)\n\nSee Simplified authentication flow;
    case (NO)
  endswitch
    backward:(5) Send new\n**/api/v2/status** request\nProcess\n**/api/v2/status** response;
    endwhile (YES)
    :(6) Show result page to the Payer;
    stop
    legend left
    =Legend
    | Color | Implementation responsibility |
    |<#Turquoise>| Connecting party |
    |<#Plum>| Connecting and other party |
    | | Other Party |
    endlegend
```

Присоединяющаяся сторона должна реализовать все шаги, отмеченные зелёным и фиолетовым цветом. Ниже приведены описания шагов со ссылками на API-команды в соответствии с номером шага.

(1) Для реализации запроса статуса заказа см. [/api/v2/status/](https://doc.payneteasy.ru/integration/API_commands/api_v2_status.html.md). Статус следует запрашивать несколько раз с интервалом 3-5 секунд до получения финального статуса в ответе.
 
(4) Если значения html и redirect-to, см. [Упрощённый сценарий аутентификации с html страницей](#simplified-authentication-flow).
 
(5) То же, что и пункт (1).
 

> **Note:** «[Схема принятия решения по 3DS](#ds-2x-decision-making-schema-preauth) демонстрирует процесс инициирования и выполнения 3DS платежным шлюзом. Для ознакомления с другими сценариями реализации 3DS, пожалуйста, изучите [Обзор 3DS](https://doc.payneteasy.ru/integration/reference/3ds_overview.html.md) и свяжитесь с менеджером поддержки».

##### Сценарий без 3DS

Оплата считается проведённой без прохождения 3DS (без 3DS аутентификации) при нижеприведённых условиях:

1. Соблюдены шаги 1-2-(5)-6 [Схемы Прохождения 3DS](https://doc.payneteasy.ru/integration/server_to_server_sale.html.md).
 
2. Отсутствие параметров tds_status, html и redirect-to.
 
3. Транзакция получила финальный статус (подтверждено, отклонено, ошибка, отфильтровано).
 

> **Note:** Транзакции со статусом «unknown» могут показываться как транзакции, прошедшие 3DS, так и как транзакции без прохождения 3DS. Детальнее о статусах транзакций см. [Статусы](https://doc.payneteasy.ru/integration/API_commands/api_v2_status.html.md).

##### Упрощённый процесс аутентификации

```plantuml

title Упрощённый процесс аутентификации
start
#Turquoise:(1) Send **/api/v2/status/** API request;
#Turquoise:(2) Process **/api/v2/status/** response.
Gather:
**html** parameter;
fork
#Turquoise:(3)Gather **html** parameter;
#Turquoise:(4) Return content from **html** parameter to the Payer's browser as is;
forkagain
#Turquoise:(5)Gather **redirect-to** parameter;
#Turquoise:(6)Redirect Payer to redirect URL;
endfork
:(7) Payer's browser gets redirected to ACS and Payer passes either 3DS 1.0.2 or 3DS 2.X flow.;
:(8) Payer's browser gets redirected back to **redirect_url** provided in the initial **api/v2/sale/** request.;
#Turquoise:(9) Process Payer's Browser final redirect to **redirect_url**.;
#Turquoise:(10) Return Wait HTML Page to the Payer's browser;
fork
note left
        **Wait HTML Page** lifecycle
end note
repeat
#Turquoise: (11) Request Connecting Party Server on the status of the transaction;
#Turquoise: (12) Process transaction status;
repeat while ((13) Received finished status\n(approved, declined, error, filtered or unknown)?) is (no)
-> (yes);
#Turquoise:(14) Redirect Payer's browser to the result page;
fork again
note left
        **Connecting Party Server** lifecycle
end note
#Turquoise:(15) Send **/api/v2/status/** API request;
#Turquoise:(16) Process **/api/v2/status/** response \nand follow **Схема прохождения 3DS** to analyze status response;
end fork
stop
legend left
=Legend
| Color | Implementation responsibility |
|<#Turquoise>| Connecting party |
| | Other Party |
endlegend
```

(1) и (2). Для имплементации запроса статуса заказа, см. [/api/v2/status/](https://doc.payneteasy.ru/integration/API_commands/api_v2_status.html.md).
 
(9) Для инициации финального перенаправления см. [Финальное перенаправление](https://doc.payneteasy.ru/integration/API_commands/final_redirect.html.md).
 
(10) HTML-страница ожидания в контуре Присоединяющейся Стороны может иметь произвольный дизайн и должна взаимодействовать с сервером Присоединяющейся Стороны в соответствии с диаграммой.
 
(15) и (16) то же, что и (1) и (2).
 

#### Сценарий списания

```plantuml
skinparam roundcorner 20
skinparam sequenceArrowThickness 1
skinparam maxmessagesize 100
skinparam sequenceParticipant underline
actor Плательщик
participant "Присоединяющаяся Сторона" as A
participant "Платёжный Шлюз" as B
hnote over Плательщик,B : Успешная транзакция преавторизации
autonumber
== Списание ==
group Опционально
Плательщик -> A: Инициация списания
activate Плательщик
activate A
end
A -> B: api/v2/capture
activate B
B --> A: ИД транзакции
B -> B: Обработка списания
group Получение финального статуса
== Получение обратного вызова ==
A <- B: Обратный вызов с финальным статусом
A --> B: HTTP 200
deactivate B
== Запрос статуса ==
A -> B: Получение статуса по ИД транзакции api/v2/status
activate B
B --> A: Ответ со статусом, Order-stage
deactivate B
end
group Опционально
A --> Плательщик: Конечный статус
deactivate Плательщик
deactivate A
end
```

(1) Списание может быть инициировано Присоединяющейся Стороной в соответствии с бизнес-моделью или по запросу Плательщика.
 
(2) Для имплементации запроса на списание см. [/api/v2/capture/](https://doc.payneteasy.ru/integration/API_commands/api_v2_capture.html.md).
 
(5) Обратный вызов по списанию будет отправлен только в случае, если notify_url был предоставлен в инициирующем запросе предавторизации или дополнительный обратный вызов установлен на предоставленный URL для списаний на уровне терминала. Если в запросе предавторизации был предоставлен server_callback_url, обратный вызов по списанию не будет отправлен. Для обработки обратных вызовов см. [Обратный вызов Присоединяющейся Стороны](https://doc.payneteasy.ru/integration/API_commands/merchant_callback_parameters.html.md).
 
(7) Для реализации запроса статуса заказа см. [/api/v2/status/](https://doc.payneteasy.ru/integration/API_commands/api_v2_status.html.md). Статус следует запрашивать несколько раз с интервалом 3-5 секунд, пока в ответе не будет получен финальный статус.
 
(9) Конечный статус может быть предоставлен Присоединяющейся Стороной в соответствии с бизнес-моделью или по запросу Плательщика.
 

#### Сценарий отмены

```plantuml
skinparam roundcorner 20
skinparam sequenceArrowThickness 1
skinparam maxmessagesize 100
skinparam sequenceParticipant underline
actor Плательщик
participant "Присоединяющаяся Сторона" as A
participant "Платёжный Шлюз" as B
hnote over Плательщик,B : Успешная транзакция преавторизации
autonumber
== Отмена ==
group Опционально
Плательщик -> A: Инициация отмены
activate Плательщик
activate A
end
A -> B: api/v2/return
activate B
B --> A: ИД транзакции
B -> B: Обработка отмены
group Получение финального статуса
== Получение обратного вызова ==
A <- B: Обратный вызов с финальным статусом
A --> B: HTTP 200
deactivate B
== Запрос статуса ==
A -> B: Получение статуса по ИД транзакции api/v2/status
activate B
B --> A: Ответ со статусом, Order-stage
deactivate B
end
group Опционально
A --> Плательщик: Конечный статус
deactivate Плательщик
deactivate A
end
```

(1) Отмена предавторизации может быть вызвана Присоединяющейся Стороной в соответствии с бизнес-моделью или по запросу Плательщика.
 
(2) Для имплементации запроса на отмену см. [/api/v2/return/](https://doc.payneteasy.ru/integration/API_commands/api_v2_return.html.md).
 
(5) Обратный вызов по отмене будет отправлен только в случае, если notify_url был предоставлен в инициирующем запросе предавторизации или дополнительный обратный вызов установлен на предоставленный URL для отмен на уровне терминала. Если в запросе предавторизации был предоставлен server_callback_url, обратный вызов по отмене не будет отправлен. Для обработки обратных вызовов см. [Обратный вызов Присоединяющейся Стороны](https://doc.payneteasy.ru/integration/API_commands/merchant_callback_parameters.html.md).
 
(7) Для реализации запроса статуса заказа см. [/api/v2/status/](https://doc.payneteasy.ru/integration/API_commands/api_v2_status.html.md). Статус следует запрашивать несколько раз с интервалом 3-5 секунд, пока в ответе не будет получен финальный статус.
 
(9) Конечный статус может быть предоставлен Присоединяющейся Стороной в соответствии с бизнес-моделью или по запросу Плательщика.

### Повторная оплата

#### Введение

Повторная оплата (рекуррентный платёж) - это тип транзакции, при которой Плательщик получает товар или услугу от Присоединяющейся Стороны в обмен на деньги или другие активы с повторным использованием ранее сохранённого средства оплаты. Повторная оплата может быть инициирована вручную по инициативе Плательщика (таким образом можно упростить оплату для Плательщика), либо автоматически с заданным интервалом по инициативе Присоединяющейся Стороны (например, в модели подписки). Плательщику не требуется повторно заполнять платёжные данные, Присоединяющая Сторона использует Ссылочный идентификатор (Card Reference ID) для инициации оплаты. Необходимость проведения 3DS и ввода защитного кода (CVC, CVV и т.п.) в случае оплаты картой определяется настройками счёта в Эквайере и зависит от модели бизнеса Присоединяющейся стороны.
 
 
См. определения терминов (Присоединяющаяся Сторона, 3DS Method и т.д.) в [Глоссарии](https://doc.payneteasy.ru/integration/reference/glossary.html.md).
 
 
Повторная оплата совершается в 3 стадии:
 
1. Первый платёж – необходимо совершить первую оплату для проверки платёжного средства (например, карты) Плательщика. Для первого платежа подходит любой тип транзакции с платёжной информацией Плательщика - sale, preauth, transfer, и др.
 
2. Регистрация карты (или иного платёжного метода) – необходимо получить Ссылочный идентификатор (Card reference ID) и привязать его к профилю Плательщика. Регистрация платёжного метода возможна только для транзакций в [финальном статусе](https://doc.payneteasy.ru/integration/reference/statuses.html.md).
 
3. Повторный платёж – необходимо вызвать новую транзакцию оплаты с использованием ссылочного идентификатора, полученного на предыдущем шаге.
 

#### Сценарий повторной оплаты

```plantuml
skinparam roundcorner 20
skinparam sequenceArrowThickness 1
skinparam maxmessagesize 1200
skinparam sequenceParticipant underline
actor Плательщик
participant "Присоединяющаяся Сторона" as A
participant "Платёжный Шлюз" as B
autonumber
hnote over Плательщик,B : Изначальная оплата
== Регистрация карты ==
A -> B: api/v2/create-card-ref/
activate B
activate A
B --> A: Возврат токена ID карты
deactivate B
A -> A: Сохранение токена ID карты в профиле Плательщика
deactivate A
== Получение информации карты ==
group Опционально
A -> B: api/v2/get-card-info/
activate A
activate B
B --> A: Возврат информации карты
deactivate A
deactivate B
end
== Повторяющийся платёж ==
group Опционально
Плательщик -> A: Инициация повторяющегося платежа
activate A
activate Плательщик
end
A -> A: Получение токена ID карты из профиля Плательщика
group Опционально
A -> Payer: Запрос CVV Плательщика
Плательщик --> A: Подтверждение CVV
end
A -> B: api/v2/make-rebill-sale/
activate B
B --> A: Ответ с ИД транзакции
hnote over Плательщик,B : См. Схема прохождения 3DS
group Получение финального статуса
== Получение обратного вызова ==
A <- B: Обратный вызов с фианальным статусом
A --> B: HTTP 200
deactivate B
== Запрос статуса ==
A -> B: Получение статуса по ИД транзакции
activate B
B --> A: Конечный статус
deactivate B
end
group Опционально
A --> Плательщик: SПоказ результата
deactivate Плательщик
deactivate A
end
```

> **Note:** Тип транзакции и имплементация первого платежа зависит от бизнес-модели Присоединяющейся Стороны. Свяжитесь с отделом поддержки Payneteasy для получения подходящего интеграционного сценария для проведения первого платежа.

(1) Для регистрации карты и получения ссылочного идентификатора см. [/api/v2/create-card-ref/](https://doc.payneteasy.ru/integration/API_commands/api_v2_create-card-ref.html.md).
 
(4) Для выполнения запроса на получение информации по ссылочному идентификатору см. [/api/v2/get-card-info/](https://doc.payneteasy.ru/integration/API_commands/api_v2_get-card-info.html.md). Содержимое ответа на этот запрос может быть использовано для показа Плательщику деталей предыдущего использованного метода оплаты или обновления базы данных Присоединяющейся Стороны. Запрос может быть выполнен в любой момент, если у Присоединяющейся стороны уже есть ссылочный идентификатор (Card reference ID).
 
(6) Повторная предавторизация может быть инициирована Плательщиком или Присоединяющейся Стороной в соответствии с бизнес-моделью.
 
(8, 9) Присоединяющаяся Сторона отправляет запрос Плательщику для ввода CVV/CVC (если применимо для сценария повторной.предавторизации)
 
(10) Для инициирования транзакции рекуррентной продажи см. [/api/v2/make-rebill-sale/](https://doc.payneteasy.ru/integration/API_commands/api_v2_make-rebill-sale.html.md). По умолчанию 3DS инициируется и выполняется платежным шлюзом через [Упрощенную схему аутентификации](#recurring-sale-simplified-authentication-flow). См. [Схему принятия решения по 3DS](#ds-2x-decision-making-schema-sale).
 
(12) Для имплементации обратного вызова с обработкой финального статуса см. [Обратный вызов Присоединяющейся Стороны](https://doc.payneteasy.ru/integration/API_commands/merchant_callback_parameters.html.md).
 
(14) Для имплементации запроса статуса, см. [/api/v2/status/](https://doc.payneteasy.ru/integration/API_commands/api_v2_status.html.md). Статус должен запрашиваться несколько раз с интервалами в 3-5 секунд до получения финального статуса в ответе.
 
(16) Результаты транзакции могут отправляться Присоединяющейся Стороной в соответствии с бизнес-моделью или по запросу Плательщика.
 

##### Схема прохождения 3DS

```plantuml
  
  title Схема прохождения 3DS
    start
    : (1) Send **/api/v2/status** request\nwith orderid=**paynet-order-id**\nProcess **/api/v2/status** response;
    while ((2) Check If **status** response field equals\nto finished status values\n**status** == approved\nOR **status** == declined\nOR **status** == error\nOR **status** == unknown\nOR **status** == filtered) is (NO);
    switch ((3) **html** and **redirect-to** field is present)
    case (YES)
   #Plum :(4) Create Wait HTML Page\nwhich redirects to result page\n(3DS 2.x or 1.0.2 to be applied)\n\nSee Simplified authentication flow;
    case (NO)
  endswitch
    backward:(5) Send new\n**/api/v2/status** request\nProcess\n**/api/v2/status** response;
    endwhile (YES)
    :(6) Show result page to the Payer;
    stop
    legend left
    =Legend
    | Color | Implementation responsibility |
    |<#Turquoise>| Connecting party |
    |<#Plum>| Connecting and other party |
    | | Other Party |
    endlegend
```

Присоединяющаяся сторона должна реализовать все шаги, отмеченные зелёным и фиолетовым цветом. Ниже приведены описания шагов со ссылками на API-команды в соответствии с номером шага.

(1) Для реализации запроса статуса заказа см. [/api/v2/status/](https://doc.payneteasy.ru/integration/API_commands/api_v2_status.html.md). Статус следует запрашивать несколько раз с интервалом 3-5 секунд до получения финального статуса в ответе.
 
(4) Если присутствуют значения html и redirect-to, см. [Упрощённый сценарий аутентификации с html страницей](https://doc.payneteasy.ru/integration/recurring_preauth_capture_and_cancel.html.md).
 
(5) То же, что и пункт (1).
 

> **Note:** Схема [принятия решений 3DS](#ds-2x-decision-making-schema-sale) демонстрирует инициацию и выполнение 3DS Платёжным Шлюзом. Другие сценарии реализации 3DS см. в разделе [Обзор 3DS](https://doc.payneteasy.ru/integration/reference/3ds_overview.html.md); обратитесь к менеджеру поддержки.

###### Сценарий без 3DS

Оплата считается проведённой без прохождения 3DS (без 3DS аутентификации) при нижеприведённых условиях:

1. Соблюдены шаги 1-2-(5)-6 [Схемы Прохождения 3DS](https://doc.payneteasy.ru/integration/server_to_server_sale.html.md).
 
2. Отсутствие параметров tds_status, html и redirect-to.
 
3. Транзакция получила финальный статус (подтверждено, отклонено, ошибка, отфильтровано).
 

> **Note:** Транзакции со статусом «unknown» могут показываться как транзакции, прошедшие 3DS, так и как транзакции без прохождения 3DS. Детальнее о статусах транзакций см. [Статусы](https://doc.payneteasy.ru/integration/API_commands/api_v2_status.html.md).

###### Упрощённый процесс аутентификации

```plantuml

title Упрощённый процесс аутентификации
start
#Turquoise:(1) Send **/api/v2/status/** API request;
#Turquoise:(2) Process **/api/v2/status/** response.
Gather:
**html** parameter;
fork
#Turquoise:(3)Gather **html** parameter;
#Turquoise:(4) Return content from **html** parameter to the Payer's browser as is;
forkagain
#Turquoise:(5)Gather **redirect-to** parameter;
#Turquoise:(6)Redirect Payer to redirect URL;
endfork
:(7) Payer's browser gets redirected to ACS and Payer passes either 3DS 1.0.2 or 3DS 2.X flow.;
:(8) Payer's browser gets redirected back to **redirect_url** provided in the initial **api/v2/sale/** request.;
#Turquoise:(9) Process Payer's Browser final redirect to **redirect_url**.;
#Turquoise:(10) Return Wait HTML Page to the Payer's browser;
fork
note left
        **Wait HTML Page** lifecycle
end note
repeat
#Turquoise: (11) Request Connecting Party Server on the status of the transaction;
#Turquoise: (12) Process transaction status;
repeat while ((13) Received finished status\n(approved, declined, error, filtered or unknown)?) is (no)
-> (yes);
#Turquoise:(14) Redirect Payer's browser to the result page;
fork again
note left
        **Connecting Party Server** lifecycle
end note
#Turquoise:(15) Send **/api/v2/status/** API request;
#Turquoise:(16) Process **/api/v2/status/** response \nand follow **Схема прохождения 3DS** to analyze status response;
end fork
stop
legend left
=Legend
| Color | Implementation responsibility |
|<#Turquoise>| Connecting party |
| | Other Party |
endlegend
```

(1) и (2). Для имплементации запроса статуса заказа, см. [/api/v2/status/](https://doc.payneteasy.ru/integration/API_commands/api_v2_status.html.md).
 
(9) Для инициации финального перенаправления см. [Финальное перенаправление](https://doc.payneteasy.ru/integration/API_commands/final_redirect.html.md).
 
(10) HTML-страница ожидания в контуре Присоединяющейся Стороны может иметь произвольный дизайн и должна взаимодействовать с сервером Присоединяющейся Стороны в соответствии с диаграммой.
 
(15) и (16) то же, что и (1) и (2).

### Справочник

### Отчеты для Интеграции

#### Отчёт об удалённых транзакциях

##### Введение

Отчёт об удалённых транзакциях позволяет получить полную информацию о транзакциях и их статусах для сверки, проверки целостности данных и дальнейшего анализа.
 
Присоединяющаяся сторона может получить отчёт о транзакциях через API Платёжного Шлюза.
 

##### Remote Transactions Report Flow

```plantuml
  @startuml
  autonumber
  skinparam roundcorner 20
  skinparam sequenceArrowThickness 2
  skinparam ParticipantPadding 30
  participant "Connecting Party" as User
  participant "Payment Gateway" as Merchant
  User -> Merchant: GET request to download transaction report\n/services/transaction-report
  activate User
  activate Merchant
  Merchant --> Merchant: Report is created
  Merchant --> User: Send remote transaction report
  deactivate Merchant
  deactivate User
  @enduml
```

(1) Для отправки GET-запроса на загрузку удалённого отчёта по транзакциям см. [/services/transaction-report](https://doc.payneteasy.ru/integration/API_commands/services_transaction-report.html.md).
 
(2) Отчёт об удалённых транзакциях создаётся на основе применённых фильтров.
 
(3) Подготовленный отчёт отправляется Присоединяющейся стороне.
 

#### Описание: Custom reports

##### Введение

Пользовательские отчёты позволяют получать из системы Payneteasy настроенную информацию для конкретных бизнес-потребностей. Содержимое и формат пользовательского отчёта необходимо запросить у представителей Платёжного Шлюза.
 
Присоединяющаяся сторона может получить пользовательский отчёт через API Платёжного Шлюза.
 

##### Custom Report Flow

```plantuml
  @startuml
  autonumber
  skinparam roundcorner 20
  skinparam sequenceArrowThickness 2
  skinparam ParticipantPadding 30
  participant "Connecting Party" as User
  participant "Payment Gateway" as Merchant
  User -> Merchant: GET request to download custom report\n/services/v2/rpt-engine
  activate User
  activate Merchant
  Merchant --> Merchant: Report is created
  Merchant --> User: Send custom report
  deactivate Merchant
  deactivate User
  @enduml
```

(1) Для отправки GET-запроса на загрузку пользовательского отчёта см. [/services/v2/rpt-engine](https://doc.payneteasy.ru/integration/API_commands/services_v2_rpt-engine.html.md).
 
(2) Пользовательский отчёт подготавливается на основе применённых фильтров.
 
(3) Подготовленный отчёт отправляется Присоединяющейся стороне.

### Методы аутентификации запросов

### Возврат

#### Введение

**Возврат:** Транзакция возврата - означает возврат денег на кредитную карту или какой-либо другой аккаунт Плательщика. Возвращённые средства не отображаются непосредственно после инициации запроса на возврат средств, т.к. запрос обрабатывается банком-эмитентом в течение нескольких дней. Возврат может быть проведён только для транзакций Продажи, Преавторизированной Продажи и последующего Подтверждения с успешным конечным статусом. После успешного Возврата Продажа принимает статус Отменённой транзакции, Преавторизированная Продажа и Подтверждение - статус Возврата.См. [Статусы](https://doc.payneteasy.ru/integration/reference/statuses.html.md).
 
**Аннулирование:** Транзакция аннулирования может быть использована вместо транзакции возврата для осуществления возврата средств на аккаунт Плательщика. Транзакция аннулирования позволяет не дожидаться клиринга и обработки возврата со стороны банка эмитента. Транзакция может быть аннулирована в случае если она была авторизирована, но не подтверждена. Если же клиринг уже прошел, а аннулирование не поддерживается, единственным решением возврата средств на аккаунт Плательщика является транзакция Возврата.
 
Аннулирование может быть применено только для транзакций Продажи и Подтверждения в успешном конечном статусе. Запрос на аннулирование инициирует транзакцию аннулирования. См. [Статусы](https://doc.payneteasy.ru/integration/reference/statuses.html.md). Аннулирование может не поддерживаться в большинстве случаев, пожалуйста, свяжитесь с менеджером Поддержки для дополнительной информации.
 
 
Значение терминов см. в [Глоссарии](https://doc.payneteasy.ru/integration/reference/glossary.html.md).
 

#### Сценарий Возврата

```plantuml
  skinparam roundcorner 20
  skinparam sequenceArrowThickness 1
  skinparam maxmessagesize 100
  skinparam sequenceParticipant underline
  actor Плательщик
  participant "Присоединяющаяся Сторона" as A
  participant "Платёжный Шлюз" as B
  hnote over A,B : Успешная транзакция оплаты, преавторизации или списания
  autonumber
  group Опционально
  Плательщик -> A: Инициация возврата
  activate A
  end
  == Возврат ==
  A -> B: api/v2/return
  activate B
  B --> A: ИД транзакции
  B -> B: Обработка возврата
  group Получение финального статуса
  == Получение обратного вызова \nПрисоединяющейся Стороны ==
  A <- B: Обратный вызов с финальным статусом
  A --> B: HTTP 200
  deactivate B
  == Запрос статуса ==
  A -> B: Получение статуса по ИД транзакции api/v2/status
  activate B
  B --> A: Ответ со статусом, Order-stage
  deactivate B
  end
  group Опционально
  A --> Плательщик: Конечный статус
  deactivate A
  end
```

Возврат может быть инициирован Присоединяющейся Стороной, опираясь на внутреннюю политику компании или по запросу Плательщика.
 
(2) Для имплементации запроса возврата см. [/api/v2/return/](https://doc.payneteasy.ru/integration/API_commands/api_v2_return.html.md).
 
(5) Обратный вызов для транзакций возврата будет отправлен только в случае если notify_url был отправлен в начальном запросе или прописан дополнительный URL обратного вызова транзакции возврата на уровне терминала. Если server_callback_url был отправлен в начальном запросе транзакции, обратный вызов для возврата не будет отправлен. Для имплементации обратных вызовов с настройкой финального статуса см. [Обратные Вызовы Присоединяющейся Стороны](https://doc.payneteasy.ru/integration/API_commands/merchant_callback_parameters.html.md).
 
(7) Для реализации запроса статуса заказа см. [/api/v2/status/](https://doc.payneteasy.ru/integration/API_commands/api_v2_status.html.md). Статус следует запрашивать несколько раз с интервалом 3-5 секунд, пока в ответе не будет получен финальный статус.
 
(9) Финальный статус может быть отправлен Присоединяющейся Стороной, опираясь на внутреннюю политику компании или по запросу Плательщика.
 

#### Сценарий аннулирования

```plantuml
  skinparam roundcorner 20
  skinparam sequenceArrowThickness 1
  skinparam maxmessagesize 100
  skinparam sequenceParticipant underline
  actor Плательщик
  participant "Присоединяющаяся Сторона" as A
  participant "Платёжный Шлюз" as B
  hnote over A,B : Успешная транзакция оплаты или списания
  autonumber
  group Опционально
  Плательщик -> A: Инициация Аннулирования
  activate A
  end
  == Аннулирование ==
  A -> B: api/v2/void
  activate B
  B --> A: ИД транзакции
  B -> B: Обработка аннулирования
  group Получение финального статуса
  == Получение обратного вызова ==
  A <- B: Обратный вызов с финальным статусом
  A --> B: HTTP 200
  deactivate B
  == Запрос статуса ==
  A -> B: Получение статуса по ИД транзакции api/v2/status
  activate B
  B --> A: Ответ со статусом, Order-stage
  deactivate B
  end
  group Опционально
  A --> Плательщик: Конечный статус
  deactivate A
  end
```

Аннулирование может быть инициировано Присоединяющейся Стороной, опираясь на внутреннюю политику компании или по запросу Плательщика.
 
(2) Для имплементации запроса на аннулирование см. [/api/v2/void/](https://doc.payneteasy.ru/integration/API_commands/api_v2_void.html.md).
 
(5) Обратный вызов для транзакций аннулирования будет отправлен только в случае, если notify_url был отправлен в начальном запросе или прописан дополнительный URL обратного вызова транзакции аннулирования на уровне терминала. Если server_callback_url был отправлен в начальном запросе транзакции, обратный вызов для аннулирования не будет отправлен. Для имплементации обратных вызовов с настройкой финального статуса см. [Обратные Вызовы Присоединяющейся Стороны](https://doc.payneteasy.ru/integration/API_commands/merchant_callback_parameters.html.md).
 
(7) Для реализации запроса статуса заказа см. [/api/v2/status/](https://doc.payneteasy.ru/integration/API_commands/api_v2_status.html.md). Статус следует запрашивать несколько раз с интервалом 3-5 секунд, пока в ответе не будет получен финальный статус.
 
(9) Финальный статус может быть отправлен Присоединяющейся Стороной, опираясь на внутреннюю политику компании или по запросу Плательщика.

### Оплата с использованием формы

#### Введение

Оплата — тип транзакции, при которой Плательщик получает товар или услугу от Присоединяющейся Стороны в обмен на деньги или другие активы. Интеграция по форме позволяет Присоединяющейся стороне снять с себя ответственность за хранение, обработку и передачу карточных данных Плательщика или какой-либо другой конфиденциальной информации о платеже. Эти данные вводятся Плательщиком на платёжной форме Payneteasy в среде, сертифицированной по стандарту безопасности PCI DSS.
 
Все формы настраиваемы. Примеры и макросы - см. настройки [Платёжной Формы](https://doc.payneteasy.ru/integration/reference/forms_customization.html.md), [Предварительно Заполненных Данных](https://doc.payneteasy.ru/integration/reference/forms_customization.html.md), [Формы Ожидания](https://doc.payneteasy.ru/integration/reference/forms_customization.html.md) и [Финишной Формы](https://doc.payneteasy.ru/integration/reference/forms_customization.html.md) в разделе [Настройка Форм](https://doc.payneteasy.ru/integration/reference/forms_customization.html.md).
 
 
Значение терминов см. в [Глоссарии](https://doc.payneteasy.ru/integration/reference/glossary.html.md).
 

#### Сценарий оплаты по форме

```plantuml
  @startuml
  skinparam roundcorner 20
  skinparam sequenceArrowThickness 2
  skinparam ParticipantPadding 30
  actor Плательщик as Customer
  participant "Веб-сайт\nПрисоединяющейся Стороны" as Merchant
  participant "Платёжный Шлюз" as g
  autonumber
  Customer -> Merchant: Инициализация
  activate Merchant
  == Запрос на проведение оплаты ==
  Merchant -> g: api/v2/sale-form
  activate g
  g --> Merchant: Redirect-url, orderId
  deactivate g
  Merchant -> Customer: Предоставление redirect-url \nбраузеру Плательщика
  deactivate Merchant
  activate Customer
  Customer -> g: GET redirect-url
  deactivate Customer
  activate g
  g --> Customer: Форма оплаты
  deactivate g
  activate Customer
  Customer -> g: Подтверждение формы
  deactivate Customer
  activate g
  g --> g: Обработка оплаты
  == Финальное перенаправление клиента ==
  g -> Customer: redirect_url веб-сайта Присоединяющейся Стороны
  activate Customer
  Customer -> Merchant: POST redirect_url\nstatus, orderid
  deactivate Customer
  activate Merchant
  group Получение финального статуса
  == Получение обратного вызова \nПрисоединяющейся Стороны ==
  Merchant <- g: Обратный вызов с финальным статусом
  g <-- Merchant: HTTP 200
  deactivate g
  == Запрос статуса ==
  Merchant -> g: api/v2/status
  activate g
  g --> Merchant: Ответ \nstatus, order-stage
  deactivate g
  end
  Merchant --> Customer: Показ результата
  deactivate Merchant
  @enduml
```

(2) Для имплементации запроса на проведение оплаты с использованием формы см. [/api/v2/sale-form/](https://doc.payneteasy.ru/integration/API_commands/api_v2_sale-form.html.md).
 
(9) Для имплементации финального перенаправления Плательщика см. [Финальное Перенаправление](https://doc.payneteasy.ru/integration/API_commands/final_redirect.html.md).
 
(11,12) Для обработки обратного вызова с окончательным статусом заказа см. [Обратный вызов Присоединяющейся Стороны](https://doc.payneteasy.ru/integration/API_commands/merchant_callback_parameters.html.md).
 
(13) Для имплементации запроса статуса заказа см. [/api/v2/status/](https://doc.payneteasy.ru/integration/API_commands/api_v2_status.html.md). Статус должен запрашиваться несколько раз с интервалами в 3-5 секунд до получения финального статуса в ответе.

### Подключение СБП с использованием формы

#### Введение

Оплата — вид сделки, при которой Плательщик получает товар или услугу от Присоединяющейся Cтороны в обмен на деньги или другие активы. Данный сценарий позволяет Присоединяющейся Стороне предложить Плательщику оплату через СБП с помощью QR-кода, который будет отображён на форме на стороне Платёжного Шлюза.
 

#### Cценарий оплаты через СБП с использованием формы

```plantuml
  @startuml
  skinparam roundcorner 20
  skinparam sequenceArrowThickness 2
  skinparam ParticipantPadding 30
  actor Плательщик as Customer
  participant "Веб-сайт\nПрисоединяющейся Стороны" as Merchant
  participant "Платёжный Шлюз" as g
  autonumber
  Customer -> Merchant: Инициализация
  activate Merchant
  == Запрос на проведение оплаты ==
  Merchant -> g: api/v2/sale-form
  activate g
  g --> Merchant: Redirect-url, orderId
  deactivate g
  Merchant -> Customer: Предоставление redirect-url \nбраузеру Плательщика
  deactivate Merchant
  activate Customer
  Customer -> g: GET redirect-url
  deactivate Customer
  activate g
  g --> Customer: Форма оплаты
  deactivate g
  activate Customer
  Customer -> g: Подтверждение формы
  deactivate Customer
  activate g
  g --> g: Обработка оплаты
  == Финальное перенаправление клиента ==
  g -> Customer: Веб-сайт Присоединяющейся Стороны redirect_url
  activate Customer
  Customer -> Merchant: POST redirect_url\nstatus, orderid
  deactivate Customer
  activate Merchant
  group Получение финального статуса
  == Получение обратного вызова \nПрисоединяющейся Стороны ==
  Merchant <- g: Обратный вызов \nс финальным статусом
  g <-- Merchant: HTTP 200
  deactivate g
  == Запрос статуса ==
  Merchant -> g: api/v2/status
  activate g
  g --> Merchant: Ответ \nstatus, order-stage
  deactivate g
  end
  Merchant --> Customer: Показ результата
  deactivate Merchant
  @enduml
```

(2) Для имплементации запроса на проведение оплаты с использованием формы см. [/api/v2/sale-form/](https://doc.payneteasy.ru/integration/API_commands/api_v2_sale-form.html.md).
 
(9) Для имплементации финального перенаправления Плательщика см. [Финальное Перенаправление](https://doc.payneteasy.ru/integration/API_commands/final_redirect.html.md).
 
(11,12) Для обработки обратного вызова с окончательным статусом заказа см. [Обратный вызов Присоединяющейся Стороны](https://doc.payneteasy.ru/integration/API_commands/merchant_callback_parameters.html.md).
 
(13) Для имплементации запроса статуса заказа см. [/api/v2/status/](https://doc.payneteasy.ru/integration/API_commands/api_v2_status.html.md). Статус должен запрашиваться несколько раз с интервалами в 3-5 секунд до получения финального статуса в ответе.

### Сценарий верификации аккаунта с прямым подключением

#### Введение

Верификация аккаунта - это нефинансовая транзакция, позволяющая проверить и зарегистрировать информацию аккаунта Плательщика. Эта процедура верификации помогает предотвратить потенциальную мошенническую активность и соответствовать отраслевым требованиям, а также облегчить дальнейшие транзакции, которые проводятся с данного аккаунта. Верификации аккаунта с прямой передачей карточных данных в запросе позволяет Присоединяющейся Стороне предложить Плательщику проверку информации аккаунта и регистрации с помощью QR-кода, полученного напрямую и отображенного Плательщику Присоединяющецся Стороной.
 

#### Сценарий верификации аккаунта СБП

```plantuml
skinparam roundcorner 20
skinparam sequenceArrowThickness 1
skinparam maxmessagesize 1200
skinparam sequenceParticipant underline
actor Плательщик
participant "Присоединяющаяся Сторона" as A
participant "Payneteasy" as B
autonumber
Плательщик -> A: Инициализация
activate A
A -> B: /api/v2/account-verification/
activate B
B --> A: ИД транзакции
A -> B: Получение статуса по ИД транзакции
B --> A: Возврат qr-кода
A --> Плательщик: Отправка qr-кода Плательщику
Плательщик -> A: Сканирование qr-кода
B -> B: Обработка\nВерификации Аккаунта
group Получение финального статуса
== Получение обратного вызова \nПрисоединяющейся Стороны ==
A <- B: Обратный вызов \nс финальным статусом
A --> B: HTTP 200
deactivate B
== Запрос статуса ==
A -> B: Получение статуса по ИД транзакции
activate B
B --> A: Конечный статус
deactivate B
end
A --> Плательщик: Показ результата
deactivate Плательщик
deactivate A
```

(2) Для имплементации запроса на верификацию аккаунта см. /api/v2/account-verification/.
 
(4, 11) Для имплементации запроса статуса заказа, см. [/api/v2/status/](https://doc.payneteasy.ru/integration/API_commands/api_v2_status.html.md). Статус следует запрашивать несколько раз с интервалом 3–5 секунд, пока не будет получен QR-код или окончательный статус.
 
(6) Присоединяющаяся Сторона отображает полученный QR-код Плательщику
 
(7) Плательщик сканирует QR-код для проведения транзакции.
 
(9) Для имплементации обратного вызова с обработкой финального статуса см. [Обратный вызов Присоединяющейся Стороны](https://doc.payneteasy.ru/integration/API_commands/merchant_callback_parameters.html.md).

### Предавторизация, Capture и Cancel сервер-сервер

#### Введение

Preauth (предавторизация) — это тип транзакции, при котором банк блокирует указанную сумму на карточном счёте Плательщика и не позволяет держателю карты использовать заблокированные средства. Важно отметить, что блокировка сохраняется в течение определённого периода времени, зависящего от типа карты — дебетовая или кредитная (обычно максимальный срок блокировки составляет 7 дней для дебетовых карт и 28 дней для кредитных). В сценарии Server-to-server Preauth данные карты передаются непосредственно в инициирующем запросе.
 
 
См. определения терминов (Присоединяющаяся Сторона, 3DS Method и т.д.) в [Глоссарии](https://doc.payneteasy.ru/integration/reference/glossary.html.md).
 
 
[Capture](#capture-server) — транзакция, следующая за Preauth, которая списывает заблокированную сумму с карты Плательщика.
 
[Cancel](#cancel-server) — операция, обратная Capture, которая отменяет списание и возвращает заблокированную сумму на карту Плательщика.
 

#### Сценарий Preauth

```plantuml
skinparam roundcorner 20
skinparam sequenceArrowThickness 1
skinparam maxmessagesize 1200
skinparam sequenceParticipant underline
actor Плательщик
participant "Присоединяющаяся Сторона" as A
participant "Payneteasy" as B
autonumber
Плательщик -> A: Инициализация
activate A
A -> B: /api/v2/preauth/
activate B
B --> A: ИД транзакции
B -> B: Обработка\nпреавторизации
hnote over Плательщик,B : См. Схема прохождения 3DS
group Получение финального статуса
== Получение обратного вызова Присоединяющейся Стороны ==
A <- B: Обратный вызов с финальным статусом
A --> B: HTTP 200
deactivate B
== Запрос статуса ==
A -> B: Получение статуса по ИД транзакции
activate B
B --> A: Конечный статус
deactivate B
end
A --> Плательщик: Конечный статус
deactivate Плательщик
deactivate A
```

(2) Для реализации запроса на преавторизацию см. [/api/v2/preauth/](https://doc.payneteasy.ru/integration/API_commands/api_v2_preauth.html.md). По умолчанию 3DS инициируется и выполняется платежным шлюзом через [Упрощенную схему аутентификации](#simplified-authentication-flow-preauth). См. [Схему принятия решения по 3DS](#ds-server-to-server-preauth-reference).
 
(5) Для реализации обратного вызова с обработкой финального статуса см. [Обратный вызов Присоединяющейся Стороны](https://doc.payneteasy.ru/integration/API_commands/merchant_callback_parameters.html.md).
 
(7) Для реализации запроса статуса заказа см. [/api/v2/status/](https://doc.payneteasy.ru/integration/API_commands/api_v2_status.html.md). Статус следует запрашивать несколько раз с интервалом 3-5 секунд, пока в ответе не будет получен финальный статус.
 

#### Схема прохождения 3DS

```plantuml
  
  title Схема прохождения 3DS
    start
    : (1) Send **/api/v2/status** request\nwith orderid=**paynet-order-id**\nProcess **/api/v2/status** response;
    while ((2) Check If **status** response field equals\nto finished status values\n**status** == approved\nOR **status** == declined\nOR **status** == error\nOR **status** == unknown\nOR **status** == filtered) is (NO);
    switch ((3) **html** and **redirect-to** field is present)
    case (YES)
   #Plum :(4) Create Wait HTML Page\nwhich redirects to result page\n(3DS 2.x or 1.0.2 to be applied)\n\nSee Simplified authentication flow;
    case (NO)
  endswitch
    backward:(5) Send new\n**/api/v2/status** request\nProcess\n**/api/v2/status** response;
    endwhile (YES)
    :(6) Show result page to the Payer;
    stop
    legend left
    =Legend
    | Color | Implementation responsibility |
    |<#Turquoise>| Connecting party |
    |<#Plum>| Connecting and other party |
    | | Other Party |
    endlegend
```

Присоединяющаяся сторона должна реализовать все шаги, отмеченные зелёным и фиолетовым цветом. Ниже приведены описания шагов со ссылками на API-команды в соответствии с номером шага.

(1) Для реализации запроса статуса заказа см. [/api/v2/status/](https://doc.payneteasy.ru/integration/API_commands/api_v2_status.html.md). Статус следует запрашивать несколько раз с интервалом 3-5 секунд до получения финального статуса в ответе.
 
(4) Если присутствуют поля html и redirect-to, см. [Simplified authentication flow with html page](#simplified-authentication-flow-preauth).
 
(5) То же, что и пункт (1).
 

> **Note:** «[Схема принятия решения по 3DS](#ds-server-to-server-preauth-reference) демонстрирует процесс инициирования и выполнения 3DS платежным шлюзом. Для ознакомления с другими сценариями реализации 3DS, пожалуйста, изучите [Обзор 3DS](https://doc.payneteasy.ru/integration/reference/3ds_overview.html.md) и свяжитесь с менеджером поддержки».

##### Сценарий без 3DS

Оплата считается проведённой без прохождения 3DS (без 3DS аутентификации) при нижеприведённых условиях:

1. были выполнены шаги 1-2-(5)-6 из [3DS decision making schema](https://doc.payneteasy.ru/integration/server_to_server_sale.html.md).
 
2. Отсутствие параметров tds_status, html и redirect-to.
 
3. Транзакция получила финальный статус (approved, declined, error, filtered).
 

> **Note:** Транзакции со статусом «unknown» могут показываться как транзакции, прошедшие 3DS, так и как транзакции без прохождения 3DS. Детальнее о статусах транзакций см. [Статусы](https://doc.payneteasy.ru/integration/API_commands/api_v2_status.html.md).

##### Упрощённый процесс аутентификации

```plantuml

title Упрощённый процесс аутентификации
start
#Turquoise:(1) Send **/api/v2/status/** API request;
#Turquoise:(2) Process **/api/v2/status/** response.
Gather:
**html** parameter;
fork
#Turquoise:(3)Gather **html** parameter;
#Turquoise:(4) Return content from **html** parameter to the Payer's browser as is;
forkagain
#Turquoise:(5)Gather **redirect-to** parameter;
#Turquoise:(6)Redirect Payer to redirect URL;
endfork
:(7) Payer's browser gets redirected to ACS and Payer passes either 3DS 1.0.2 or 3DS 2.X flow.;
:(8) Payer's browser gets redirected back to **redirect_url** provided in the initial **api/v2/sale/** request.;
#Turquoise:(9) Process Payer's Browser final redirect to **redirect_url**.;
#Turquoise:(10) Return Wait HTML Page to the Payer's browser;
fork
note left
        **Wait HTML Page** lifecycle
end note
repeat
#Turquoise: (11) Request Connecting Party Server on the status of the transaction;
#Turquoise: (12) Process transaction status;
repeat while ((13) Received finished status\n(approved, declined, error, filtered or unknown)?) is (no)
-> (yes);
#Turquoise:(14) Redirect Payer's browser to the result page;
fork again
note left
        **Connecting Party Server** lifecycle
end note
#Turquoise:(15) Send **/api/v2/status/** API request;
#Turquoise:(16) Process **/api/v2/status/** response \nand follow **Схема прохождения 3DS** to analyze status response;
end fork
stop
legend left
=Legend
| Color | Implementation responsibility |
|<#Turquoise>| Connecting party |
| | Other Party |
endlegend
```

(1) и (2). Для имплементации запроса статуса заказа, см. [/api/v2/status/](https://doc.payneteasy.ru/integration/API_commands/api_v2_status.html.md).
 
(9) Для инициации финального перенаправления см. [Финальное перенаправление](https://doc.payneteasy.ru/integration/API_commands/final_redirect.html.md).
 
(10) HTML-страница ожидания в контуре Присоединяющейся Стороны может иметь произвольный дизайн и должна взаимодействовать с сервером Присоединяющейся Стороны в соответствии с диаграммой.
 
(15) и (16) то же, что и (1) и (2).
 

#### Сценарий списания

```plantuml
skinparam roundcorner 20
skinparam sequenceArrowThickness 1
skinparam maxmessagesize 100
skinparam sequenceParticipant underline
actor Плательщик
participant "Присоединяющаяся Сторона" as A
participant "Платёжный Шлюз" as B
hnote over Плательщик,B : Успешная транзакция преавторизации
autonumber
== Списание ==
group Опционально
Плательщик -> A: Инициация списания
activate Плательщик
activate A
end
A -> B: api/v2/capture
activate B
B --> A: ИД транзакции
B -> B: Обработка списания
group Получение финального статуса
== Получение обратного вызова ==
A <- B: Обратный вызов с финальным статусом
A --> B: HTTP 200
deactivate B
== Запрос статуса ==
A -> B: Получение статуса по ИД транзакции api/v2/status
activate B
B --> A: Ответ со статусом, Order-stage
deactivate B
end
group Опционально
A --> Плательщик: Конечный статус
deactivate Плательщик
deactivate A
end
```

(1) Списание может быть инициировано Присоединяющейся Стороной в соответствии с бизнес-моделью или по запросу Плательщика.
 
(2) Для имплементации запроса на списание см. [/api/v2/capture/](https://doc.payneteasy.ru/integration/API_commands/api_v2_capture.html.md).
 
(5) Обратный вызов по списанию будет отправлен только в случае, если notify_url был предоставлен в инициирующем запросе предавторизации или дополнительный обратный вызов установлен на предоставленный URL для списаний на уровне терминала. Если в запросе предавторизации был предоставлен server_callback_url, обратный вызов по списанию не будет отправлен. Для обработки обратных вызовов см. [Обратный вызов Присоединяющейся Стороны](https://doc.payneteasy.ru/integration/API_commands/merchant_callback_parameters.html.md).
 
(7) Для реализации запроса статуса заказа см. [/api/v2/status/](https://doc.payneteasy.ru/integration/API_commands/api_v2_status.html.md). Статус следует запрашивать несколько раз с интервалом 3-5 секунд, пока в ответе не будет получен финальный статус.
 
(9) Конечный статус может быть предоставлен Присоединяющейся Стороной в соответствии с бизнес-моделью или по запросу Плательщика.
 

#### Сценарий отмены

```plantuml
skinparam roundcorner 20
skinparam sequenceArrowThickness 1
skinparam maxmessagesize 100
skinparam sequenceParticipant underline
actor Плательщик
participant "Присоединяющаяся Сторона" as A
participant "Платёжный Шлюз" as B
hnote over Плательщик,B : Успешная транзакция преавторизации
autonumber
== Отмена ==
group Опционально
Payer -> A: Инициация отмены
activate Плательщик
activate A
end
A -> B: api/v2/return
activate B
B --> A: ИД транзакции
B -> B: Обработка отмены
group Получение финального статуса
== Получение обратного вызова ==
A <- B: Обратный вызов с финальным статусом
A --> B: HTTP 200
deactivate B
== Запрос статуса ==
A -> B: Получение статуса по ИД транзакции api/v2/status
activate B
B --> A: Ответ со статусом, Order-stage
deactivate B
end
group Опционально
A --> Плательщик: Конечный статус
deactivate Плательщик
deactivate A
end
```

(1) Отмена предавторизации может быть вызвана Присоединяющейся Стороной в соответствии с бизнес-моделью или по запросу Плательщика.
 
(2) Для имплементации запроса на отмену см. [/api/v2/return/](https://doc.payneteasy.ru/integration/API_commands/api_v2_return.html.md).
 
(5) Обратный вызов по отмене будет отправлен только в случае, если notify_url был предоставлен в инициирующем запросе предавторизации или дополнительный обратный вызов установлен на предоставленный URL для отмен на уровне терминала. Если в запросе предавторизации был предоставлен server_callback_url, обратный вызов по отмене не будет отправлен. Для обработки обратных вызовов см. [Обратный вызов Присоединяющейся Стороны](https://doc.payneteasy.ru/integration/API_commands/merchant_callback_parameters.html.md).
 
(7) Для реализации запроса статуса заказа см. [/api/v2/status/](https://doc.payneteasy.ru/integration/API_commands/api_v2_status.html.md). Статус следует запрашивать несколько раз с интервалом 3-5 секунд, пока в ответе не будет получен финальный статус.
 
(9) Конечный статус может быть предоставлен Присоединяющейся Стороной в соответствии с бизнес-моделью или по запросу Плательщика.

### Прямая оплата

#### Введение

Оплата — тип транзакции, при которой Плательщик получает товар или услугу от Присоединяющейся Стороны в обмен на деньги или другие активы. При осуществлении сценария интеграции оплаты с прямой передачей карточных данных в запросе данные карты передаются непосредственно при передаче запроса.
 
 
См. определения терминов (Присоединяющаяся Сторона, 3DS Method и т.д.) в [Глоссарии](https://doc.payneteasy.ru/integration/reference/glossary.html.md).
 

#### Общий сценарий оплаты

```plantuml
skinparam roundcorner 20
skinparam sequenceArrowThickness 1
skinparam maxmessagesize 1200
skinparam sequenceParticipant underline
actor Плательщик
participant "Присоединяющаяся Сторона" as A
participant "Payneteasy" as B
autonumber
Плательщик -> A: Инициализация
activate A
A -> B: /api/v2/sale/
activate B
B --> A: ИД Транзакции
B -> B: Обработка\nПлатежа
hnote over Плательщик,B : Схема прохождения 3DS
group Получение конечного статуса
== Получение обратного вызова \nПрисоединяющейся Стороны ==
A <- B: Обратного вызов с конечным статусом
A --> B: HTTP 200
deactivate B
== Запрос статуса ==
A -> B: Получение статуса по ИД транзакции
activate B
B --> A: Конечный статус
deactivate B
end
A --> Плательщик: Показ результата
deactivate Плательщик
deactivate A
```

(2) Для имплементации запроса на проведение оплаты см. [/api/v2/sale/](https://doc.payneteasy.ru/integration/API_commands/api_v2_sale.html.md). По умолчанию 3DS аутентификация 3DS инициируется и выполняется платежным шлюзом через [Упрощенную схему аутентификации](#simplified-authentication-flow-sale). См. [Схему прохождения 3DS](#ds-server-to-server-sale-reference)
 
(5) Для реализации обратного вызова с обработкой финального статуса см. [Обратный вызов Присоединяющейся Стороны](https://doc.payneteasy.ru/integration/API_commands/merchant_callback_parameters.html.md).
 
(7) Для реализации запроса статуса заказа см. [/api/v2/status/](https://doc.payneteasy.ru/integration/API_commands/api_v2_status.html.md). Статус следует запрашивать несколько раз с интервалом 3-5 секунд, пока в ответе не будет получен финальный статус.
 

#### Схема прохождения 3DS

```plantuml
  
  title Схема прохождения 3DS
    start
    : (1) Send **/api/v2/status** request\nwith orderid=**paynet-order-id**\nProcess **/api/v2/status** response;
    while ((2) Check If **status** response field equals\nto finished status values\n**status** == approved\nOR **status** == declined\nOR **status** == error\nOR **status** == unknown\nOR **status** == filtered) is (NO);
    switch ((3) **html** and **redirect-to** field is present)
    case (YES)
   #Plum :(4) Create Wait HTML Page\nwhich redirects to result page\n(3DS 2.x or 1.0.2 to be applied)\n\nSee Simplified authentication flow;
    case (NO)
  endswitch
    backward:(5) Send new\n**/api/v2/status** request\nProcess\n**/api/v2/status** response;
    endwhile (YES)
    :(6) Show result page to the Payer;
    stop
    legend left
    =Legend
    | Color | Implementation responsibility |
    |<#Turquoise>| Connecting party |
    |<#Plum>| Connecting and other party |
    | | Other Party |
    endlegend
```

Присоединяющаяся сторона должна реализовать все шаги, отмеченные зелёным и фиолетовым цветом. Ниже приведены описания шагов со ссылками на API-команды в соответствии с номером шага.

(1) Для реализации запроса статуса заказа см. [/api/v2/status/](https://doc.payneteasy.ru/integration/API_commands/api_v2_status.html.md). Статус следует запрашивать несколько раз с интервалом 3-5 секунд до получения финального статуса в ответе.
 
(4) Если присутствуют значения html и redirect-to, см. [Упрощённый сценарий аутентификации с html страницей](https://doc.payneteasy.ru/integration/recurring_preauth_capture_and_cancel.html.md).
 
(5) То же, что и пункт (1).
 

> **Note:** [Схема принятия решений по 3DS](#ds-server-to-server-sale-reference) демонстрирует инициацию и проведение 3DS Платежным Шлюзом. Для ознакомления с другими сценариями реализации 3DS, пожалуйста, изучите раздел [Обзор 3DS](https://doc.payneteasy.ru/integration/reference/3ds_overview.html.md) и свяжитесь с вашим менеджером поддержки

##### Сценарий без 3DS

Оплата считается проведённой без прохождения 3DS (без 3DS аутентификации) при нижеприведённых условиях:

1. Соблюдены шаги 1-2-(5)-6 [Схемы Прохождения 3DS](#ds-server-to-server-sale-reference).
 
2. Отсутствие параметров tds_status, html и redirect-to.
 
3. Транзакция получила финальный статус (подтверждено, отклонено, ошибка, отфильтровано).
 

> **Note:** Транзакции со статусом «unknown» могут показываться как транзакции, прошедшие 3DS, так и как транзакции без прохождения 3DS. Детальнее о статусах транзакций см. [Статусы](https://doc.payneteasy.ru/integration/API_commands/api_v2_status.html.md).

##### Упрощённый процесс аутентификации

```plantuml

title Упрощённый процесс аутентификации
start
#Turquoise:(1) Отправка API запроса **/api/v2/status/**;
#Turquoise:(2) Обработка ответа **/api/v2/status/**.
Сбор параметра:
**html**;
fork
#Turquoise:(3) Сбор параметра **html**;
#Turquoise:(4) Возврат данных с параметра **html** браузеру Отправителя;
forkagain
#Turquoise:(5) Сбор параметра **redirect-to**;
#Turquoise:(6) Перенаправление Плательщика на redirect URL;
endfork
:(7) Браузер Отправителя перенаправляется на ACS и Отправитель проходит или 3DS 1.0.2 или 3DS 2.X flow.;
:(8) Браузер Отправителя перенаправляется назад на **redirect_url**, предоставленный в начальном запросе **api/v2/sale/**.;
#Turquoise:(9) Обработка финального перенаправления браузера Отправителя **redirect_url**.;
#Turquoise:(10) Возврат HTML страницы ожидания браузеру Отправителя;
fork
note left
        Жизненный цикл **HTML страницы ожидания**
end note
repeat
#Turquoise: (11) Запрос серверу Присоединяющейся Стороны о статусе транзакции;
#Turquoise: (12) Обработка статуса транзакции;
repeat while ((13) Получение финального статуса\n(approved, declined, error or unknown)?) is (no)
-> (yes);
#Turquoise:(14) Перенаправление браузера Отправителя на страницу результата;
fork again
note left
        Жизненный цикл **сервера Присоединяющейся Стороны**
end note
#Turquoise:(15) Отправка API запроса **/api/v2/status/**;
#Turquoise:(16) Обработка ответа **/api/v2/status/** \nи последующая **Схема прохождения 3DS** для анализа статуса ответа;
end fork
stop
legend left
=Legend
| Цвет | Ответственность за обработку |
|<#Turquoise>| Присоединяющаяся Сторона |
| | Другие стороны |
endlegend
```

(1) и (2). Для имплементации запроса статуса заказа, см. [/api/v2/status/](https://doc.payneteasy.ru/integration/API_commands/api_v2_status.html.md).
 
(9) Для инициации финального перенаправления см. [Финальное перенаправление](https://doc.payneteasy.ru/integration/API_commands/final_redirect.html.md).
 
(10) HTML-страница ожидания в контуре Присоединяющейся Стороны может иметь произвольный дизайн и должна взаимодействовать с сервером Присоединяющейся Стороны в соответствии с диаграммой.
 
(15) и (16) то же, что и (1) и (2).

### Прямое подключение СБП

#### Введение

Продажа — тип транзакции, при которой Плательщик получает товар или услугу от Присоединяющейся Стороны в обмен на деньги или другие активы. Данный сценарий позволяет предложить Плательщику оплату через СБП с помощью QR-кода, напрямую полученного и отображённого Присоединяющейся Стороной.
 

#### Cценарий прямой оплаты через СБП

```plantuml
skinparam roundcorner 20
skinparam sequenceArrowThickness 1
skinparam maxmessagesize 1200
skinparam sequenceParticipant underline
actor Плательщик
participant "Присоединяющаяся Сторона" as A
participant "Payneteasy" as B
autonumber
Плательщик -> A: Инициализация
activate A
A -> B: /api/v2/sale/
activate B
B --> A: ИД транзакции
A -> B: Получение статуса по ИД транзакции
B --> A: Возврат qr-кода
A --> Плательщик: Отправка qr-кода Плательщику
Плательщик -> A: SСканирование qr-кода
B -> B: Обработка\nоплаты
group Получение финального статуса
== Получение обратного вызова \nПрисоединяющейся Стороны ==
A <- B: Обратный вызов с конечным статусом
A --> B: HTTP 200
deactivate B
== Запрос статуса ==
A -> B: Получение статуса по ИД транзакции
activate B
B --> A: Конечный статус
deactivate B
end
A --> Плательщик: Показ результата
deactivate Плательщик
deactivate A
```

(2) Для имплементации запроса на проведение оплаты см. [/api/v2/sale/](https://doc.payneteasy.ru/integration/API_commands/api_v2_sale.html.md).
 
(4, 11) Для имплементации запроса статуса заказа, см. [/api/v2/status/](https://doc.payneteasy.ru/integration/API_commands/api_v2_status.html.md). Статус следует запрашивать несколько раз с интервалом 3–5 секунд, пока не будет получен QR-код или окончательный статус.
 
(6) Присоединяющаяся Сторона отображает полученный QR-код Плательщику
 
(7) Плательщик сканирует QR-код для проведения транзакции.
 
(9) Для имплементации обратного вызова с обработкой финального статуса см. [Обратный вызов Присоединяющейся Стороны](https://doc.payneteasy.ru/integration/API_commands/merchant_callback_parameters.html.md).

### /services/transaction-report

#### Введение

Удалённый отчёт по транзакциям предоставляет возможность получить полную информацию о транзакциях с их статусами для проверки и дальнейшего анализа.
 
 
Отчёт об удалённых транзакциях инициируется запросом HTTPS GET с использованием указанных ниже [URL](#services-transaction-report-url) и [параметров](#services-transaction-report-parameters). Для аутентификации используйте [HMAC-SHA1](https://doc.payneteasy.ru/integration/general_api_usage/request_authentication_methods/oauth.html.md).
 

#### API URL

> **Note:** Путь API URL не должен быть задан фиксированным значением, т.к. он может быть изменён позднее.

| Интеграционная среда | Производственная среда |
|---------------------------------------------------------------------|------------------------------------------------------------------|
| https://sandbox.payneteasy.ru/paynet-ui/services/transaction-report | https://gate.payneteasy.ru/paynet-ui/services/transaction-report |

#### Параметры запроса

| Название параметра | Обязательно | Описание |
|----------------------|---------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| created From Date | Yes | Фильтрует транзакции по дате создания. Должна быть в следующем формате: YYYY-MM-DD HH:MM:SS. |
| created To Date | Yes | Фильтрует транзакции по дате создания. Должна быть в следующем формате: YYYY-MM-DD HH:MM:SS. |
| bank From Date | No | Фильтрует транзакции по дате загрузки транзакции в банк. Должна быть в следующем формате: YYYY-MM-DD HH:MM:SS. |
| bank To Date | No | Фильтрует транзакции по дате загрузки транзакции в банк. Должна быть в следующем формате: YYYY-MM-DD HH:MM:SS. |
| transaction Types | No | Список типов транзакций для возврата, разделённый запятыми. Если параметр не указан, возвращаются транзакции всех типов. Поддерживаются следующие типы: sale, reversal, preauth, capture, cancel, transfer, payout, fraud, chargeback, retrieval, dispute, refund. |
| transaction Statuses | No | Список статусов транзакций для возврата, разделённых запятыми. Если параметр не указан, возвращаются транзакции во всех статусах. Распознаются статусы: approved, declined, filtered. |
| endpoints | No | Список идентификаторов конечных точек через запятую, которым должны принадлежать возвращаемые транзакции. Если параметр не указан, возвращаются транзакции, принадлежащие любой конечной точке Присоединяющейся стороны, отправляющей запрос. |

> **Note:** Существуют некоторые ограничения:

\* Если указан параметр endpoints, а некоторые конечные точки в списке не принадлежат Присоединяющейся стороне, отправляющей запрос, или некоторые конечные точки из списка не существуют, возвращается сообщение об ошибке.
 
\* Период, указанный параметрами created From Date и created To Date, не должен превышать 31 день.
 
\* Нельзя выполнять более 10 запросов в час к этому отчёту.
 

#### Параметры ответа

> **Note:** Возвращаемый отчёт имеет корректный формат CSV. В соответствии с [RFC 4180](https://datatracker.ietf.org/doc/html/rfc4180) поля, содержащие переводы строк (CRLF, CR, LF), двойные кавычки и запятые, заключаются в двойные кавычки.

| Название параметра | Описание | Значение |
|--------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------|
| Txid | Идентификатор транзакции в Payneteasy, также называемый идентификатором заказа. | `Тип`: Int `Длина`: 10 |
| Параметр Created Date | Дата создания в часовом поясе сервера. | `Type`: Datetime `Длина`: - |
| Дата создания (без времени) | Дата создания в часовом поясе сервера, без времени. | `Type`: Datetime `Длина`: - |
| Параметр Bank Date | Описание: Creation date in bank. | `Type`: Datetime `Длина`: - |
| Торговец | Имя Присоединяющейся стороны. | `Тип`: Varchar `Длина`: 128 |
| Параметр End-Point ID | Endpoint ID. | `Тип`: Int `Длина`: 10 |
| Параметр End-Point Name | Endpoint Name. | `Тип`: Varchar `Длина`: 128 |
| Параметр Project ID | Идентификатор проекта Присоединяющейся стороны. | `Тип`: Int `Длина`: 10 |
| Параметр Project name | Описание: Name of the project. | `Тип`: Varchar `Длина`: 128 |
| Currency | Валюта транзакции. | `Тип`: Varchar `Длина`: 3 |
| Параметр Site URL | Доменное имя сайта. | `Тип`: Varchar `Длина`: 100 |
| Параметр Card type | Тип карты международных платёжных систем. | `Тип`: Varchar `Длина`: 32 |
| Ip | Описание: IP address. | `Тип`: Varchar `Длина`: 128 |
| Type | Тип транзакции. | `Тип`: Varchar `Длина`: 32 |
| Статус | Описание: Transaction status. | `Тип`: Varchar `Длина`: 32 |
| Параметр Error Number | Описание: Error code. | `Тип`: Int `Длина`: 10 |
| Описание ошибки | Error Описание. | `Тип`: Varchar `Длина`: 256 |
| Параметр Reason code | Код причины (если информация доступна). | `Тип`: Varchar `Длина`: 16 |
| Reason | Причина (если информация доступна). | `Тип`: Varchar `Длина`: 256 |
| Comment | Комментарий (если информация доступна). | `Тип`: Varchar `Длина`: 256 |
| Сумма | Сумма транзакции. | `Тип`: Decimal `Length`: 15,3 |
| Параметр Processor ID | Идентификационный номер транзакции Процессора/эквайера. | `Тип`: Varchar `Длина`: 128 |
| Параметр Card No | Masked PAN. | `Тип`: Varchar `Длина`: 20 |
| Name | Карта holder название. | `Тип`: Varchar `Длина`: 128 |
| Параметр Routing Number | Описание: Routing step ID. | `Тип`: Varchar `Длина`: 16 |
| Параметр Account Number | Идентификационный номер баланса Присоединяющейся стороны. | `Тип`: Varchar `Длина`: 24 |
| Email | Описание: Customer email. | `Тип`: Varchar `Длина`: 128 |
| Phone | Номер телефона клиента. | `Тип`: Varchar `Длина`: 128 |
| Address | Описание: Address passed by API. | `Тип`: Varchar `Длина`: 256 |
| Zip | Описание: Zip passed by API. | `Тип`: Varchar `Длина`: 32 |
| City | Описание: City passed by API. | `Тип`: Varchar `Длина`: 128 |
| State | Описание: State passed by API. | `Тип`: Varchar `Длина`: 128 |
| Country | Описание: Country passed by API. | `Тип`: Varchar `Длина`: 128 |
| Параметр First name | Имя клиента. Для транзакций Transfer: имя отправителя (если передано) или имя получателя. | `Тип`: Varchar `Длина`: 128 |
| Параметр Last name | Фамилия клиента. Для транзакций Transfer: фамилия отправителя (если передана) или фамилия получателя. | `Тип`: Varchar `Длина`: 128 |
| Описание заказа | Описание платежа, переданное через API. | `Тип`: Varchar `Длина`: 256 |
| Параметр Merchant OID | Идентификатор транзакции на стороне Присоединяющейся стороны. | `Тип`: Varchar `Длина`: 256 |
| OID торговца вспомогательной транзакции | ID мастер-транзакции в поле Merchant order ID; если мастер-транзакций нет, он будет совпадать с полем Параметр Merchant OID. | `Тип`: Varchar `Длина`: 256 |
| Параметр Reversal Amount | Описание: Refund amount. | `Тип`: Decimal `Length`: 15,3 |
| Параметр Capture Amount | Сумма подтверждения транзакции после авторизации DMS. | `Тип`: Decimal `Length`: 15,3 |
| Параметр Approval Code | Описание: Authorization code. | `Тип`: Varchar `Длина`: 10 |
| Параметр Auth credit code | Код Auth Credit указывается как код авторизации при выполнении AFT и OCT. | `Тип`: Varchar `Длина`: 10 |
| Значение проверки авторизации | Проверочные значения аутентификации держателя карты. Указываются только после оплаты заказа и при наличии соответствующего разрешения. | `Тип`: Varchar `Длина`: 64 |
| Параметр Transaction XID | Идентификатор электронной коммерческой транзакции. Указывается только после оплаты заказа и при наличии соответствующего разрешения. | `Тип`: Varchar `Длина`: 64 |
| Параметр Transaction RRN | RRN - Retrieval Reference Number. | `Тип`: Varchar `Длина`: 20 |
| Параметр Transaction ARN | ARN - Acquirers Reference Number. | `Тип`: Varchar `Длина`: 64 |
| Параметр Card MPI status | Отдельный инструмент для проверки участия карты в 3-D Secure; может иметь значение Y / N. | `Тип`: Varchar `Длина`: 3 |
| Индикатор электронной коммерции | ECI. | `Тип`: Varchar `Длина`: 3 |
| Параметр Is 3DS | Инструмент для проверки, прошла ли транзакция валидацию 3DS; может иметь значение True / False. | `Тип`: Varchar `Длина`: 3 |
| Параметр Is enrolled | Инструмент для проверки участия транзакции; может иметь значение True / False. | `Тип`: Varchar `Длина`: 3 |
| Документ поддержки: код причины Chargeback | Эти поля относятся к управлению спорами. | `Тип`: Varchar `Длина`: 256 |
| Документ поддержки: название причины Chargeback | Эти поля относятся к управлению спорами. | `Тип`: Varchar `Длина`: 256 |
| Описанные услуги/товары | Эти поля относятся к управлению спорами. | `Тип`: Varchar `Длина`: 256 |
| Что не соответствует описанию | Описание: Dispute details. | `Тип`: Varchar `Длина`: 256 |
| Ответ торговца | Эти поля относятся к управлению спорами. | `Type`: Text `Длина`: - |
| Пытался решить вопрос с торговцем | Эти поля относятся к управлению спорами. | `Тип`: Varchar `Длина`: 256 |
| Дата последнего контакта | Эти поля относятся к управлению спорами. | `Тип`: Varchar `Длина`: 256 |
| Параметр Contact Name | Эти поля относятся к управлению спорами. | `Тип`: Varchar `Длина`: 256 |
| Параметр Contact Method | Эти поля относятся к управлению спорами. | `Тип`: Varchar `Длина`: 256 |
| Параметр Cb Comments | Эти поля относятся к управлению спорами. | `Type`: Text `Длина`: - |
| Параметр Cb Documents | Эти поля относятся к управлению спорами. | `Type`: Text `Длина`: - |
| Дополнительные файлы Chargeback | Эти поля относятся к управлению спорами. | `Type`: Text `Длина`: - |
| Параметр Gate ID | Gate ID. | `Тип`: Int `Длина`: 10 |
| Параметр Gate Name | Gate Name. | `Тип`: Varchar `Длина`: 128 |
| Параметр Gate descriptor | Дескриптор, указанный на шлюзе. | `Тип`: Varchar `Длина`: 128 |
| Параметр Gate method | Описание: Gate properties. | `Тип`: Varchar `Длина`: 255 |
| Параметр Gate method 2 | Описание: Gate properties. | `Тип`: Varchar `Длина`: 255 |
| Тип бизнеса шлюза | Описание: Gate properties. | `Тип`: Varchar `Длина`: 256 |
| Параметр Gate MID | Gate MID. | `Тип`: Varchar `Длина`: 256 |
| Параметр View Receipt URL | Параметр, отвечающий за отображение URL квитанции. | `Тип`: Varchar `Длина`: 100 |
| Пункт назначения | Параметр, передаваемый в поле назначения. | `Тип`: Varchar `Длина`: 128 |
| Комиссия клиента | Общая комиссия за транзакцию. | `Тип`: Decimal `Length`: 15,3 |
| Номер карты получателя | Описание: 6 + 4 of destination card. | `Тип`: Varchar `Длина`: 20 |
| Банк получателя | Эмитент карты получателя. | `Тип`: Varchar `Длина`: 128 |
| Параметр Bank name | Описание: Issuer of source card. | `Тип`: Varchar `Длина`: 128 |
| Параметр DAPI IMEI | Произвольная строка, переданная Присоединяющейся стороной в начальном запросе, также используемая как уникальный 32-символьный идентификатор устройства в DAPI. | `Тип`: Varchar `Длина`: 32 |
| Параметр BIN country code | Код страны ISO 3166-1 alpha-2 эмитента карты источника (определяется по BIN). | `Тип`: Varchar `Длина`: 3 |
| Параметр BIN country | Название страны эмитента карты источника (определяется по BIN). | `Тип`: Varchar `Длина`: 128 |
| Код страны BIN получателя | Код страны ISO 3166-1 alpha-2 эмитента карты получателя (определяется по BIN). | `Тип`: Varchar `Длина`: 3 |
| Название страны BIN получателя | Название страны эмитента карты получателя (определяется по BIN). | `Тип`: Varchar `Длина`: 128 |
| Процессор | Processor Name. | `Тип`: Varchar `Длина`: 128 |
| Параметр Processor ID | Processor ID. | `Тип`: Int `Длина`: 10 |
| Код ошибки Процессора | Processor Error Code. | `Тип`: Int `Длина`: 10 |
| Card Ref Id | ИД ссылки на карту, полученный на шаге [Регистрации Карты](https://doc.payneteasy.ru/integration/api_v2_create-card-ref.html.md). | `Тип`: Int `Длина`: 10 |
| Дата исходной транзакции в банке (часовой пояс сервера) | Дата, полученная от банка в часовом поясе сервера. | `Type`: Datetime `Длина`: - |
| Дата исходной транзакции в банке (часовой пояс пользователя) | Дата, полученная от банка в часовом поясе Присоединяющейся стороны. | `Type`: Datetime `Длина`: - |
| Исходная сумма транзакции | Сумма, полученная от Присоединяющейся стороны. | `Тип`: Decimal `Length`: 15,3 |
| Внешний идентификатор торговца | Внешний идентификатор торговца. | `Тип`: Varchar `Длина`: 128 |
| Тарифный план Менеджера | Название тарифного плана менеджера. | `Тип`: Varchar `Длина`: 128 |
| Параметр Bank name attr | Описание: Bank name. | `Тип`: Varchar `Длина`: 128 |
| Параметр Bank branch | Описание: Bank branch name. | `Тип`: Varchar `Длина`: 128 |
| Параметр Account name | Описание: Bank account name. | `Тип`: Varchar `Длина`: 128 |
| Дата изменения статуса | Описание: Date of status change. | `Type`: Datetime `Длина`: - |
| Идентификатор тарифного плана менеджера | Описание: Manager rate plan id. | `Тип`: Int `Длина`: 10 |
| Валюта для обработки | Валюта, используемая для транзакции. | `Тип`: Varchar `Длина`: 3 |
| Сумма в валюте для обработки | Сумма в валюте, используемой для транзакции. | `Тип`: Decimal `Length`: 15,3 |
| Сумма Capture в валюте для обработки | Сумма Capture в валюте, используемой для транзакции. | `Тип`: Decimal `Length`: 15,3 |
| Сумма Reversal в валюте для обработки | Сумма Reversal в валюте, используемой для транзакции. | `Тип`: Decimal `Length`: 15,3 |
| Курс валюты для обработки | Курс валюты, используемый для транзакции. | `Тип`: Decimal `Length`: 15,3 |
| Курс валюты поставщика | Название поставщика курса для конвертации. | `Тип`: Decimal `Length`: 15,3 |
| Комиссия в валюте для обработки | Комиссия в валюте, используемой для транзакции. | `Тип`: Decimal `Length`: 15,3 |
| Параметр Transaction ID | Внутренний ID в Payneteasy, который помогает различать несколько попыток обработки в рамках одной транзакции (Txid). | `Тип`: Varchar `Длина`: 128 |
| Комиссия реселлера | Комиссия за транзакцию реселлера. | `Тип`: Decimal `Length`: 15,3 |
| Комиссия менеджера | Комиссия за транзакцию менеджера. | `Тип`: Decimal `Length`: 15,3 |
| Комиссия дилера | Комиссия за транзакцию дилера. | `Тип`: Decimal `Length`: 15,3 |
| Комиссия Процессора | Комиссия Процессора за транзакцию. | `Тип`: Decimal `Length`: 15,3 |
| Дата истечения срока действия карты | Дата истечения срока действия карты источника. | `Тип`: Varchar `Длина`: 10 |
| Дата истечения срока действия карты получателя | Дата истечения срока действия карты получателя. | `Тип`: Varchar `Длина`: 10 |
| Тип последней маршрутизации | Последний тип маршрутизации, использованный в балансировке для этой транзакции. | `Тип`: Varchar `Длина`: 128 |
| Значение последней маршрутизации | Последнее значение маршрутизации, использованное в балансировке для этой транзакции. | `Тип`: Varchar `Длина`: 128 |
| Параметр IPs region | Регион Присоединяющейся стороны относительно региона BIN карты. Для Master Card возможны значения: Domestic, European (EEA), European (SEPA NON EEA), European (NON SEPA NON EEA), Interregional (Inter-European), Interregional. Для Visa возможны значения: Domestic, European (EEA), European (Non-EEA GB, GI), European (Non-EEA CH), European (Non-EEA AD, MC, SM, VA), Interregional (Non-EEA IL, TR), Interregional. Если страну BIN определить невозможно, значением региона Процессора будет Unknown. | `Тип`: Varchar `Длина`: 128 |
| Регион Процессора | Регион BIN карты. Возможные значения: EU, NON EU. Если страну BIN определить невозможно, значение региона процессора будет: Unknown. | `Тип`: Varchar `Длина`: 128 |
| Параметр Manager ID | Manager ID. | `Тип`: Int `Длина`: 10 |
| Параметр Manager name | Описание: Manager name. | `Тип`: Varchar `Длина`: 128 |
| Параметр Creation time | Время создания транзакции в системе. | `Type`: Datetime `Длина`: - |
| Параметр Customer level | Описание: Customer level in CMS. | `Тип`: Varchar `Длина`: 128 |
| Страна IP-адреса клиента | Страна клиента, определённая по IP. | `Тип`: Varchar `Длина`: 2 |
| Параметр Company ID | Company ID. | `Тип`: Int `Длина`: 2 |
| Параметр Company Name | Описание: Company name. | `Тип`: Varchar `Длина`: 10 |

> **Note:** Порядок параметров в отчёте по транзакциям может измениться в будущих версиях. Могут быть добавлены новые параметры. Реализуйте обработку ответа на основе названий параметров, а не их порядка.

#### Пример запроса

```text
GET /paynet-ui/services/transaction-report?createdFromDate=2023-01-01%2000%3A00%3A00&createdToDate=2023-02-30%2000%3A00%3A00&oauth_consumer_key=logic&oauth_nonce=3gbXZFl3uAn&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1690546956&oauth_version=1.0 HTTP/1.1
Host: sandbox.doc2.com
User-Agent: curl/7.88.1
Accept: */*
Authorization: OAuth realm="",oauth_version="1.0",oauth_consumer_key="logic",oauth_timestamp="1690546956",oauth_nonce="3gbXZFl3uAn",oauth_signature_method="HMAC-SHA1",oauth_signature="G46r4h99dwB9opEYSfUsgHlJeGg%3D"
Connection: close
```

#### Пример успешного ответа

```text
Txid;Created Date (Server TZ);Created Date (User TZ);Created Date (Server TZ, no time);Bank Date (Server TZ);Bank Date (User TZ);Merchant;End-Point ID;Project ID;Project Name;Currency;Site URL;Card type;Ip;Type;Status;Error Number;Error Описание;Reason code;Reason;Comment;Amount;Processor tx ID;Card No;Name;Routing Number;Account Number;Email;Phone;Address;Zip;City;State;Country;First Name;Last Name;Order Описание;Merchant OID;Auxiliary transaction merchant OID;Reversal Amount;Capture amount;Approval Code;Auth Credit Code;Auth Verification Значение;Transaction XID;Transaction RRN;Transaction ARN;Card MPI Status;Electronic Commerce Indicator;Is 3D;Is Enrolled;Support doc Cb reason code;Support doc Cb reason;Described services/merchandise;What is not as described;Merchant response;Tried to resolve with merchant;Last contact date;Contact name;Contact method;Cb Comments;Cb Documents;Cb additional files;Gate ID;Gate Name;Gate Descriptor;Gate Method;Gate Method 2;Gate Business type;Gate MID;View Receipt URL;Destination;Client commission;Destination Card No;Destination bank name;Bank name;DAPI IMEI;BIN country code;BIN country;Destination BIN country code;Destination BIN country;Processor;Processor Error Code;CardRefId;Initial tx bank date (Server TZ);Initial tx bank date (User TZ);Initial tx Amount;External merchant identifier;Manager rate plan;Bank name attr;Bank branch;Account name;Status change date;Manager rate plan id;Currency for processing;Amount in currency for processing;Capture amount in currency for processing;Reversal amount in currency for processing;Currency rate for processing;Provider currency rate;Fee in currency for processing;Transaction id;Reseller commission;Manager commission;Dealer commission;Processor commission;Card expiration date;Destination card expirationDate;Last routing type;Last routing value;IPs region;Processor region;Manager ID;Manager name;Creation time;Customer level
1810032;2023-05-01T17:38:43.00;2023-05-01T17:38:43.00;01.05.2023;;;Demo merchant A;7829;2251;Test Rub Project;RUB;;MasterCard;85.132.102.1;sale;filtered;10137;Billing country blacklisted for merchant;;;;100.000;;555544XXXXXX1111;TEST HOLDER;;;j***b@brown.demo;8***01122;Red*** 1;***;***;;RUS;Jacob;Brown;Test payment;ylT2sut-hqXHxTFspRVUd9Uvcsg;ylT2sut-hqXHxTFspRVUd9Uvcsg;;;;;;;;;;;No;;;;;;;;;;;;;;3197;Test RUB;DEMO2;;;;;https://sandbox.payneteasy.ru/paynet/view-receipt/7829/b6123559-fc64-32fd-9c91-af49a92aa2b9;purpose?;0.000;;;NATIONAL BANK OF RAS AL-KHAIMAH (RAKBANK);;AE;United Arab Emirates;;;Test processor;;;2023-05-01T17:38:43.00;2023-05-01T17:38:43.00;100.000;;zrt;;;;2023-05-01T17:38:43.00;398;RUB;100.000;;;;;;1537212;0.000;0.000;0.000;0.000;203604;;route by Source Credit Card Issuer Country;OTHERS;Unknown;Unknown;76;test_manager;;
1812039;2023-05-04T19:11:29.00;2023-05-04T19:11:29.00;04.05.2023;;;Demo merchant A;6655;1712;Demo Ams EUR;EUR;;Visa;34.129.65.121;preauth;declined;1015;SECURE_3D_TIMEOUT;;;;5.000;;444455XXXXXX1111;TEST HOLDER;;;a***v@example.com;+3***12233;Wes***HX;***;Ams***en;;NLD;Firstname;Lastname;Test payment;902B4FF5;902B4FF5;;;;;;;3,1244E+11;;;;Yes;;;;;;;;;;;;;;2470;A VISA CC Ams EUR;DEMO1;;;;test1;https://sandbox.payneteasy.ru/paynet/view-receipt/6655/a4b048ad-47ce-33ed-af73-68c7646cee0c;;0.000;;;UNKNOWN;;US;United States;;;Test processor;timeout;;2023-05-04T19:11:29.00;2023-05-04T19:11:29.00;5.000;;2% cyprus;;;;2023-05-04T19:11:29.00;582;USD;5.500;;;1.099663612901000;1.099663612901000;;1539210;0.000;0.000;0.000;0.000;202401;;route by Customer Loyalty;OTHERS;Unknown;Unknown;76;test_manager;;
1812040;2023-05-04T19:11:29.00;2023-05-04T19:11:29.00;04.05.2023;;;Demo merchant A;6655;1712;Demo Ams EUR;EUR;;Visa;34.129.65.121;preauth;declined;1015;SECURE_3D_TIMEOUT;;;;5.000;;444455XXXXXX1111;TEST HOLDER;;;a***v@example.com;+3***12233;Wes***HX;***;Ams***en;;NLD;Firstname;Lastname;Test payment;902B4FF5;902B4FF5;;;;;;;3,12424E+11;;;;Yes;;;;;;;;;;;;;;2470;A VISA CC Ams EUR;DEMO1;;;;test1;https://sandbox.payneteasy.ru/paynet/view-receipt/6655/270932f6-6687-3127-a32a-2baa6eb1b3f6;;0.000;;;UNKNOWN;;US;United States;;;Test processor;timeout;;2023-05-04T19:11:29.00;2023-05-04T19:11:29.00;5.000;;2% cyprus;;;;2023-05-04T19:11:29.00;582;USD;5.500;;;1.099663612901000;1.099663612901000;;1539211;0.000;0.000;0.000;0.000;202401;;route by Customer Loyalty;OTHERS;Unknown;Unknown;76;test_manager;;
1812037;2023-05-04T19:11:30.00;2023-05-04T19:11:30.00;04.05.2023;;;Demo merchant A;6655;1712;Demo Ams EUR;EUR;;Visa;34.129.65.121;sale;declined;1015;SECURE_3D_TIMEOUT;;;;5.000;;444455XXXXXX1111;TEST HOLDER;;;a***v@example.com;+3***12233;Wes***HX;***;Ams***en;;NLD;Firstname;Lastname;Rebill order description;902B4FF5;902B4FF5;;;;;;;3,12425E+11;;;;Yes;;;;;;;;;;;;;;2470;A VISA CC Ams EUR;DEMO1;;;;test1;https://sandbox.payneteasy.ru/paynet/view-receipt/6655/711a99be-e32f-3abe-9740-e4bda0c2d372;;0.000;;;UNKNOWN;;US;United States;;;Test processor;timeout;;2023-05-04T19:11:30.00;2023-05-04T19:11:30.00;5.000;;2% cyprus;;;;2023-05-04T19:11:30.00;582;USD;5.500;;;1.099663612901000;1.099663612901000;;1539212;0.000;0.000;0.000;0.000;202401;;route by Customer Loyalty;OTHERS;Unknown;Unknown;76;test_manager;;
1812038;2023-05-04T19:11:30.00;2023-05-04T19:11:30.00;04.05.2023;;;Demo merchant A;6655;1712;Demo Ams EUR;EUR;;Visa;34.129.65.121;sale;declined;1015;SECURE_3D_TIMEOUT;;;;5.000;;444455XXXXXX1111;TEST HOLDER;;;a***v@example.com;+3***12233;Wes***HX;***;Ams***en;;NLD;Firstname;Lastname;Rebill order description;902B4FF5;902B4FF5;;;;;;;3,12454E+11;;;;Yes;;;;;;;;;;;;;;2470;A VISA CC Ams EUR;DEMO1;;;;test1;https://sandbox.payneteasy.ru/paynet/view-receipt/6655/52e5301a-55a7-3939-9f9c-6a0114e32c15;;0.000;;;UNKNOWN;;US;United States;;;Test processor;timeout;;2023-05-04T19:11:30.00;2023-05-04T19:11:30.00;5.000;;2% cyprus;;;;2023-05-04T19:11:30.00;582;USD;5.500;;;1.099663612901000;1.099663612901000;;1539213;0.000;0.000;0.000;0.000;202401;;route by Customer Loyalty;OTHERS;Unknown;Unknown;76;test_manager;;
1812041;2023-05-04T19:16:26.00;2023-05-04T19:16:26.00;04.05.2023;;;Demo merchant A;6655;1712;Demo Ams EUR;EUR;;Visa;65.153.12.213;sale;declined;1015;SECURE_3D_TIMEOUT;;;;10.420;;444455XXXXXX1111;TEST HOLDER;;;j***h@gmail.com;1***82043;Wes***HX;***;Ams***en;;NLD;Firstname;Lastname;Test Order Описание;902B4FF5;902B4FF5;;;;;;;3,1243E+11;;;;Yes;;;;;;;;;;;;;;2470;A VISA CC Ams EUR;DEMO1;;;;test1;https://sandbox.payneteasy.ru/paynet/view-receipt/6655/06636793-308d-33eb-8a21-77f92b00cd5d;;0.000;;;UNKNOWN;;US;United States;;;Test processor;timeout;190926;2023-05-04T19:16:26.00;2023-05-04T19:16:26.00;10.420;;2% cyprus;;;;2023-05-04T19:16:26.00;582;USD;11.460;;;1.099663612901000;1.099663612901000;;1539214;0.000;0.000;0.000;0.000;202401;;route by Customer Loyalty;OTHERS;Unknown;Unknown;76;test_manager;;
1812042;2023-05-04T19:16:26.00;2023-05-04T19:16:26.00;04.05.2023;;;Demo merchant A;6655;1712;Demo Ams EUR;EUR;;Visa;65.153.12.213;sale;declined;1015;SECURE_3D_TIMEOUT;;;;10.420;;444455XXXXXX1111;TEST HOLDER;;;j***h@gmail.com;1***82043;Wes***HX;***;Ams***en;;NLD;Firstname;Lastname;Test Order Описание;902B4FF5;902B4FF5;;;;;;;3,12453E+11;;;;Yes;;;;;;;;;;;;;;2470;A VISA CC Ams EUR;DEMO1;;;;test1;https://sandbox.payneteasy.ru/paynet/view-receipt/6655/d9a800f3-d915-3099-a769-01f9fcb7d356;;0.000;;;UNKNOWN;;US;United States;;;Test processor;timeout;;2023-05-04T19:16:26.00;2023-05-04T19:16:26.00;10.420;;2% cyprus;;;;2023-05-04T19:16:26.00;582;USD;11.460;;;1.099663612901000;1.099663612901000;;1539215;0.000;0.000;0.000;0.000;202401;;route by Customer Loyalty;OTHERS;Unknown;Unknown;76;test_manager;;
1812688;2023-05-05T17:18:52.00;2023-05-05T17:18:52.00;05.05.2023;;;Demo merchant A;6655;1712;Demo Ams EUR;EUR;;Visa;89.147.253.161;transfer;filtered;10204;Customer data validation failed (firstname, lastname, cardholder, email, phone);;;;10.420;;421070XXXXXX5721;John Doe;;;;;;;;;;;;Your order description;1;1;;;;;;;;;;;No;;;;;;;;;;;;;;2470;A VISA CC Ams EUR;DEMO1;;;;test1;https://sandbox.payneteasy.ru/paynet/view-receipt/6655/402efad3-7e4a-3497-8bd4-792a11074f7f;;0.000;423261XXXXXX1636;JPMORGAN CHASE BANK N.A.;DEMIRBANK OJSC;;AZ;Azerbaijan;US;United States;Test processor;;190924;2023-05-05T17:18:52.00;2023-05-05T17:18:52.00;10.420;;2% cyprus;;;;2023-05-05T17:18:52.00;582;EUR;10.420;;;;;;1539816;0.000;0.000;0.000;0.000;209912;;route by Customer Loyalty;NEW FOR MERCHANT;Unknown;Unknown;76;test_manager;;
1817526;2023-05-16T16:15:13.00;2023-05-16T16:15:13.00;16.05.2023;;;Demo merchant A;6655;1712;Demo Ams EUR;EUR;;Visa;85.132.52.251;sale;approved;;;;;;100.000;PNTEST-1817526;444455XXXXXX1111;TEST HOLDER;;;a***v@example.com;+3***12233;Wes***HX;***;Ams***en;;NLD;Firstname;Lastname;Test payment;test;1817525;100.000;;504362;502894;;;3,1367E+11;179416949;;;Yes;;;;;;;;;;;;;;2470;A VISA CC Ams EUR;DEMO1;;;;test1;https://sandbox.payneteasy.ru/paynet/view-receipt/6655/fdf7267b-876b-36b8-84a7-2fea7a3685e4;;2.200;;;UNKNOWN;;US;United States;;;Test processor;;;2023-05-16T16:15:13.00;2023-05-16T16:15:13.00;100.000;;2% cyprus;;;;2023-05-16T16:16:11.00;582;USD;108.740;;;1.087320537745000;1.087320537745000;;1544050;0.000;2.200;0.000;1.000;202701;;route by Customer Loyalty;OTHERS;Unknown;Unknown;76;test_manager;;
1817526;2023-05-16T16:15:16.00;2023-05-16T16:15:16.00;16.05.2023;;;Demo merchant A;6655;1712;Demo Ams EUR;EUR;;Visa;85.132.52.251;reversal;approved;;;;;Auto-return;100.000;1,68424E+12;444455XXXXXX1111;TEST HOLDER;;;a***v@example.com;+3***12233;Wes***HX;***;Ams***en;;NLD;Firstname;Lastname;Test payment;test;1817525;100.000;;504362;502894;;;3,13665E+11;179416949;;;Yes;;;;;;;;;;;;;;2470;A VISA CC Ams EUR;DEMO1;;;;test1;https://sandbox.payneteasy.ru/paynet/view-receipt/6655/fdf7267b-876b-36b8-84a7-2fea7a3685e4;;0.000;;;UNKNOWN;;US;United States;;;Test processor;;;2023-05-16T16:15:13.00;2023-05-16T16:15:13.00;100.000;;2% cyprus;;;;2023-05-16T16:16:11.00;582;USD;108.740;;;1.087320537745000;1.087320537745000;;1544051;0.000;0.000;0.000;0.000;202701;;route by Customer Loyalty;OTHERS;Unknown;Unknown;76;test_manager;;
1817526;2023-05-16T16:16:11.00;2023-05-16T16:16:11.00;16.05.2023;2023-05-16T00:00:00.00;2023-05-16T00:00:00.00;Demo merchant A;6655;1712;Demo Ams EUR;EUR;;Visa;85.132.52.251;chargeback;approved;;;11,1;Card Recovery Bulletin;manual;100.000;1,68424E+12;444455XXXXXX1111;TEST HOLDER;;;a***v@example.com;+3***12233;Wes***HX;***;Ams***en;;NLD;Firstname;Lastname;Test payment;test;1817525;100.000;;504362;502894;;;3,13665E+11;179416949;;;Yes;;;;;;;;;;;;;;2470;A VISA CC Ams EUR;DEMO1;;;;test1;https://sandbox.payneteasy.ru/paynet/view-receipt/6655/fdf7267b-876b-36b8-84a7-2fea7a3685e4;;0.000;;;UNKNOWN;;US;United States;;;Test processor;;;2023-05-16T16:15:13.00;2023-05-16T16:15:13.00;100.000;;2% cyprus;;;;2023-05-16T16:16:11.00;582;USD;108.740;;;1.087320537745000;1.087320537745000;;1544053;0.000;0.000;0.000;0.000;202701;;route by Customer Loyalty;OTHERS;Unknown;Unknown;76;test_manager;;
1817507;2023-05-16T16:17:24.00;2023-05-16T16:17:24.00;16.05.2023;;;Demo merchant A;9068;1712;Demo Ams EUR;EUR;;Any;85.132.52.251;sale;declined;920084;Request failed: Timer expired. User not paid. Request failed: Timer expired. User not paid.;;;;100.000;;999999XXXXXX9999;Unknown holder;;;a***v@example.com;+3***12233;Wes***HX;***;Ams***en;;NLD;Firstname;Lastname;Test payment;test;1817503;;;;;;;;;;;No;;;;;;;;;;;;;;4441;Test demo EUR;DEMO3;;;;;https://sandbox.payneteasy.ru/paynet/view-receipt/9068/7f44aae1-10fe-3f05-8271-d94f539fdf6a;;0.000;;;;;;;;;Test processor;920084;;2023-05-16T16:17:24.00;2023-05-16T16:17:24.00;100.000;;2% cyprus;;;;2023-05-16T16:17:24.00;582;EUR;100.000;;;;;;1544054;0.000;0.000;0.000;0.000;202412;;route by Source Credit Card Type;ANY_CREDIT_CARD;Unknown;Unknown;76;test_manager;;
1817527;2023-05-16T16:28:20.00;2023-05-16T16:28:20.00;16.05.2023;;;Demo merchant A;9068;1712;Demo Ams EUR;EUR;;Any;85.132.52.251;sale;declined;920084;Request failed: Timer expired. User not paid. Request failed: Timer expired. User not paid.;;;;100.000;;999999XXXXXX9999;Unknown holder;;;a***v@example.com;+3***12233;Wes***HX;***;Ams***en;;NLD;Firstname;Lastname;Test payment;test;1817525;;;;;;;;;;;No;;;;;;;;;;;;;;4441;Test demo EUR;DEMO3;;;;;https://sandbox.payneteasy.ru/paynet/view-receipt/9068/33e28fb1-6443-30a1-bac2-d5d1648e38cd;;0.000;;;;;;;;;Test processor;920084;;2023-05-16T16:28:20.00;2023-05-16T16:28:20.00;100.000;;2% cyprus;;;;2023-05-16T16:28:20.00;582;EUR;100.000;;;;;;1544078;0.000;0.000;0.000;0.000;202412;;route by Source Credit Card Type;ANY_CREDIT_CARD;Unknown;Unknown;76;test_manager;;
1824084;2023-05-26T14:44:38.00;2023-05-26T14:44:38.00;26.05.2023;;;Demo merchant A;6655;1712;Demo Ams EUR;EUR;;BANK WIRE;85.132.52.251;transfer;approved;;;;;;55.550;1,6851E+12;;Test full name;7812013775;4,096E+19;j***h@gmail.com;7***29876;;;;;;;;Test payment;inv9157586;inv9157586;;;829695;;;;;;;;No;;;;;;;;;;;;;;2471;B MC CC Ams EUR;AMSTERDAM;;;;;https://sandbox.payneteasy.ru/paynet/view-receipt/6655/43b0c106-0f10-307a-99f8-b3df4823337d;;0.000;;;;;;;;;Test processor;;;2023-05-26T14:44:38.00;2023-05-26T14:44:38.00;55.550;;2% cyprus;;;;2023-05-26T14:44:38.00;582;USD;59.580;;;1.072435511772000;1.072435511772000;;1549073;0.000;0.000;0.000;0.000;0;;route by Purpose;OTHERS;Unknown;Unknown;76;test_manager;2023-05-26T14:44:12.00;
1824082;2023-05-26T15:31:23.00;2023-05-26T15:31:23.00;26.05.2023;;;Demo merchant A;6655;1712;Demo Ams EUR;EUR;;BANK WIRE;85.132.52.251;transfer;declined;1015;SECURE_3D_TIMEOUT;;;;55.550;;;Test ful name;7812013775;4,096E+19;j***h@gmail.com;7***29876;;;;;;;;Test payment;inv9157586;inv9157586;;;;;;;3,14622E+11;;;;Yes;;;;;;;;;;;;;;2471;B MC CC Ams EUR;AMSTERDAM;;;;;https://sandbox.payneteasy.ru/paynet/view-receipt/6655/e5b22b51-c51a-37e3-be9c-3ea581ccf583;;0.000;;;;;;;;;Test processor;timeout;;2023-05-26T15:31:23.00;2023-05-26T15:31:23.00;55.550;;2% cyprus;;;;2023-05-26T15:31:23.00;582;USD;59.580;;;1.072435511772000;1.072435511772000;;1549088;0.000;0.000;0.000;0.000;0;;route by Purpose;OTHERS;Unknown;Unknown;76;test_manager;2023-05-26T14:42:49.00;
1824083;2023-05-26T15:31:23.00;2023-05-26T15:31:23.00;26.05.2023;;;Demo merchant A;6655;1712;Demo Ams EUR;EUR;;BANK WIRE;85.132.52.251;transfer;declined;1015;SECURE_3D_TIMEOUT;;;;500.000;;;Test;7812013775;4,096E+19;j***h@gmail.com;7***29876;;;;;;;;;34T43R77N;34T43R77N;;;;;;;3,14692E+11;;;;Yes;;;;;;;;;;;;;;2471;B MC CC Ams EUR;AMSTERDAM;;;;;https://sandbox.payneteasy.ru/paynet/view-receipt/6655/b580d3c7-8ff1-3cb3-8292-87486edd18c0;;0.000;;;;;;;;;Test processor;timeout;;2023-05-26T15:31:23.00;2023-05-26T15:31:23.00;500.000;;2% cyprus;;;;2023-05-26T15:31:23.00;582;USD;536.220;;;1.072435511772000;1.072435511772000;;1549089;0.000;0.000;0.000;0.000;0;;route by Purpose;OTHERS;Unknown;Unknown;76;test_manager;2023-05-26T14:44:10.00;
1824985;2023-05-29T14:45:00.00;2023-05-29T14:45:00.00;29.05.2023;;;Demo merchant A;6655;1712;Demo Ams EUR;EUR;;Visa;188.253.224.81;sale;approved;;;;;;100.000;PNTEST-1824985;444455XXXXXX1111;TEST HOLDER;;;a***v@example.com;+3***12233;Wes***HX;***;Ams***en;;NLD;Firstname;Lastname;Test payment;test;1824984;;;115524;407275;;;3,1496E+11;647547344;;;Yes;;;;;;;;;;;;;;2470;A VISA CC Ams EUR;DEMO1;;;;test1;https://sandbox.payneteasy.ru/paynet/view-receipt/6655/3317093d-b5b3-3d09-aa9b-28e1c80166d8;;2.200;;;UNKNOWN;;US;United States;;;Test processor;;;2023-05-29T14:45:00.00;2023-05-29T14:45:00.00;100.000;;2% cyprus;;;;2023-05-29T15:07:30.00;582;USD;107.320;;;1.072435511772000;1.072435511772000;;1550036;0.000;2.200;0.000;1.000;202701;;route by Customer Loyalty;OTHERS;Unknown;Unknown;76;test_manager;2023-05-29T14:40:11.00;
1824987;2023-05-29T14:56:48.00;2023-05-29T14:56:48.00;29.05.2023;;;Demo merchant A;9068;1712;Demo Ams EUR;EUR;;Any;188.253.224.81;sale;declined;920084;Request failed: Timer expired. User not paid. Request failed: Timer expired. User not paid.;;;;100.000;;999999XXXXXX9999;Unknown holder;;;a***v@example.com;+3***12233;Wes***HX;***;Ams***en;;NLD;Firstname;Lastname;Test payment;test;1824984;;;;;;;;;;;No;;;;;;;;;;;;;;4441;Test demo EUR;DEMO3;;;;;https://sandbox.payneteasy.ru/paynet/view-receipt/9068/e626abe4-52eb-3a25-ae93-19de6ca44023;;0.000;;;;;;;;;Test processor;920084;;2023-05-29T14:56:48.00;2023-05-29T14:56:48.00;100.000;;2% cyprus;;;;2023-05-29T14:56:48.00;582;EUR;100.000;;;;;;1550041;0.000;0.000;0.000;0.000;202412;;route by Source Credit Card Type;ANY_CREDIT_CARD;Unknown;Unknown;76;test_manager;2023-05-29T14:41:45.00;
1824985;2023-05-29T15:07:30.00;2023-05-29T15:07:30.00;29.05.2023;2023-05-29T00:00:00.00;2023-05-29T00:00:00.00;Demo merchant A;6655;1712;Demo Ams EUR;EUR;;Visa;188.253.224.81;retrieval;approved;;;;;manual;100.000;PNTEST-1824985;444455XXXXXX1111;TEST HOLDER;;;a***v@example.com;+3***12233;Wes***HX;***;Ams***en;;NLD;Firstname;Lastname;Test payment;test;1824984;;;115524;407275;;;3,1496E+11;647547344;;;Yes;;;;;;;;;;;;;;2470;A VISA CC Ams EUR;DEMO1;;;;test1;https://sandbox.payneteasy.ru/paynet/view-receipt/6655/3317093d-b5b3-3d09-aa9b-28e1c80166d8;;0.000;;;UNKNOWN;;US;United States;;;Test processor;;;2023-05-29T14:45:00.00;2023-05-29T14:45:00.00;100.000;;2% cyprus;;;;2023-05-29T15:07:30.00;582;USD;107.320;;;1.073134088104000;1.073134088104000;;1550043;0.000;0.000;0.000;0.000;202701;;route by Customer Loyalty;OTHERS;Unknown;Unknown;76;test_manager;2023-05-29T14:40:11.00;
1826965;2023-05-31T16:42:20.00;2023-05-31T16:42:20.00;31.05.2023;;;Demo merchant A;6655;1712;Demo Ams EUR;EUR;;Visa;188.253.237.101;sale;approved;;;;;;100.000;PNTEST-1826965;444455XXXXXX1111;TEST HOLDER;;;a***v@example.com;+3***12233;Wes***HX;***;Ams***en;;NLD;Firstname;Lastname;Test payment;test;1826964;;;432862;200594;;;3,15182E+11;302446749;;;Yes;;;;;;;;;;;;;;2470;A VISA CC Ams EUR;DEMO1;;;;test1;https://sandbox.payneteasy.ru/paynet/view-receipt/6655/861f0fd1-9f2e-3acf-9a05-b7f8c927eae3;;2.200;;;UNKNOWN;;US;United States;;;Test processor;;;2023-05-31T16:42:20.00;2023-05-31T16:42:20.00;100.000;;2% cyprus;;;;2023-05-31T16:42:20.00;582;USD;107.220;;;1.072140012909000;1.072140012909000;;1551928;0.000;2.200;0.000;1.000;202601;;route by Customer Loyalty;OTHERS;Unknown;Unknown;76;test_manager;2023-05-31T16:37:25.00;
1826966;2023-05-31T16:53:50.00;2023-05-31T16:53:50.00;31.05.2023;;;Demo merchant A;9068;1712;Demo Ams EUR;EUR;;Any;188.253.237.101;sale;declined;920084;Request failed: Timer expired. User not paid. Request failed: Timer expired. User not paid.;;;;100.000;;999999XXXXXX9999;Unknown holder;;;a***v@example.com;+3***12233;Wes***HX;***;Ams***en;;NLD;Firstname;Lastname;Test payment;test;1826964;;;;;;;;;;;No;;;;;;;;;;;;;;4441;Test demo EUR;DEMO3;;;;;https://sandbox.payneteasy.ru/paynet/view-receipt/9068/4e6c1674-aeb1-3d5e-bbe4-0af9c37fd95d;;0.000;;;;;;;;;Test processor;920084;;2023-05-31T16:53:50.00;2023-05-31T16:53:50.00;100.000;;2% cyprus;;;;2023-05-31T16:53:50.00;582;EUR;100.000;;;;;;1551934;0.000;0.000;0.000;0.000;202412;;route by Source Credit Card Type;ANY_CREDIT_CARD;Unknown;Unknown;76;test_manager;2023-05-31T16:38:47.00;
```

#### Пример неуспешного ответа

```text
HTTP/1.1 403
Server: server
Date: Fri, 28 Jul 2023 12:44:12 GMT
Content-Type: text/html
Content-Length: 735
Connection: close

...
<body>
    <p>Access is denied</p>
</body>
```

#### Коллекция Postman

<div class="postman-run-button"
 data-postman-action="collection/fork"
 data-postman-var-1="23519287-0c2ff3bc-23a7-448a-82fd-a505fdbcedb7"
 data-postman-collection-url="entity Id=23519287-0c2ff3bc-23a7-448a-82fd-a505fdbcedb7&entity Type=collection&workspace Id=601cafde-2ccd-435a-98a4-799ec34bfd7e"
 data-postman-param="env%5BPayment%20gateway%20ENV%5D=W3sia2V5IjoiVVJMIiwidm FsdWUi Oi IiLCJlbm FibGVk Ijp0cn VlLCJ0eXBl IjoiZGVmYXVsdCIs In Nlc3Npb25WYWx1ZSI6Ii Is In Nlc3Npb25Jbm RleCI6MH1d"></div>
<script type="text/javascript">
 (function (p,o,s,t,m,a,n) {
 !p[s] && (p[s] = function () { (p[t] || (p[t] = [])).push (arguments); });
 !o.get Element By Id (s+t) && o.get Elements By Tag Name("head")[0].append Child((
 (n = o.create Element("script")),
 (n.id = s+t), (n.async = 1), (n.src = m), n
 ));
 }(window, document, "_pm", "Postman Run Object", "https://run.pstmn.io/button.js"));

 var env Name = "Payment gateway ENV";
	 var env Data = {
 URL: 'sandbox.payneteasy.ru'
 };
 \_pm('env.replace', env Name, env Data);

</script>

#### Конструктор запросов

<meta http-equiv="Cache-Control" content="no-cache">
<script src="../_static/js/oauth/sha1.js"></script>
<script src="../_static/js/oauth/oauth.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="../_static/js/highlight/styles/default.css">
<script src="../_static/js/highlight/highlight.pack.js"></script>

<script>
$(document).ready (function(){ 
 $("#remote Tab a").click (function (e){
 	e.prevent Default();
 	$(this).tab('show');
 });
});
</script>

<script type="text/javascript">
		var curl Remote Text = "";
 
		var php Remote Text = "";
		
		var ruby Remote Text = "";
 function sign (form) {
	 var url = "";
		var sandbox = "";
		var params = "";
		
		var xhttp = new XMLHttp Request();
		xhttp.onreadystatechange = function() {
		if (xhttp.ready State == 4 && xhttp.status == 200) {
			if (url == "../_static/examples/PHP/params_with_header_get_PHP.txt"){
				php Remote Text = xhttp.response Text;}
			else {
				ruby Remote Text = xhttp.response Text;}
			}
		}
	
		url = "../_static/examples/PHP/params_with_header_get_PHP.txt";
		xhttp.open("GET", url, false);
		xhttp.send();
		url = "../_static/examples/Ruby/params_with_header_get_Ruby.txt";
		xhttp.open("GET", url, false);
		xhttp.send();
	
 var accessor = { consumer Secret: form.consumer Secret.value
 , token Secret : form.token Secret.value};
 var message = { method: form.http Method.value
 , action: form. URL.value
 , parameters: OAuth.decode Form (form.parameters.value)
 };
 for (var e = 0; e < form.elements.length; ++e) {
 var input = form.elements[e];
 if (input.name != null) 
 if (input.name.substring(0, 6) == "oauth_"){ 
 if (input.value != null) 
 if (input.value != "") 
 if (!(input.type == "checkbox" || input.type == "radio") || input.checked)
 {
 message.parameters.push([input.name, input.value]);
 params += " '" + input.name + "' => '" + input.value + "', \\n";
 }
			}else if (input.name.substring(0, 10) == "parameters"){
						
						var example = input.value.split('&');
 for (var i = 0; i < example.length; i++){
					 var split = example[i].split('=');
						params += " '" + split[0] + "' => '" + split[1] + "', \\n";
						}
					}
 }
 OAuth. Signature Method.sign (message, accessor);
 show Text("normalized Parameters", OAuth. Signature Method.normalize Parameters (message.parameters));
 show Text("signature Base String" , OAuth. Signature Method.get Base String (message));
 show Text("signature" , OAuth.get Parameter (message.parameters, "oauth_signature"));
 show Text("authorization Header" , OAuth.get Authorization Header("", message.parameters));

	curl Remote Text = "curl -H 'Authorization: " + OAuth.get Authorization Header("", message.parameters) + "' '" + form. URL.value + "?" + OAuth. Signature Method.normalize Parameters (message.parameters) + "'";
	
 show Text("curl Request" , curl Remote Text);
 	
	php Remote Text = php Remote Text.replace('{$Authorization}', OAuth.get Authorization Header("", message.parameters));
	php Remote Text = php Remote Text.replace('{$sandbox}', form. URL.value );
	php Remote Text = php Remote Text.replace("{$generated parameters with values code}", params);

	ruby Remote Text = ruby Remote Text.replace("{$generated parameters with values code}", params);
 ruby Remote Text = ruby Remote Text.replace('{$Authorization}', OAuth.get Authorization Header("", message.parameters));
	ruby Remote Text = ruby Remote Text.replace('{$sandbox}', form. URL.value);
	
	show Text("php Request" , php Remote Text);
	show Text("ruby Request" , ruby Remote Text);
	
 	$(document).ready (function() {
 $('pre code').each (function (i, block) {
 hljs.highlight Block (block);
 });
 }); 
	return false;
 }
 function show Text (element Id, text) {
 var child = document.create Text Node (text);
 var element = document.get Element By Id (element Id);
				element.innerHTML ="";
 if (element.has Child Nodes()) {
 element.replace Child (child, element.first Child);
 } else {
 element.append Child (child);
 }
 }
 function fresh Timestamp() {
 document.request.oauth_timestamp.value = OAuth.timestamp();
 }
 function fresh Nonce() {
 document.request.oauth_nonce.value = OAuth.nonce(11);
 }
		 function copy To Clipboard (text) {
 var text Area = document.create Element("textarea");

 // Place in top-left corner of screen regardless of scroll position.
 text Area.style.position = 'fixed';
 text Area.style.top = 0;
 text Area.style.left = 0;

 // Ensure it has a small width and height. Setting to 1px / 1em
 // doesn't work as this gives a negative w/h on some browsers.
 text Area.style.width = '2em';
 text Area.style.height = '2em';

 // We don't need padding, reducing the size if it does flash render.
 text Area.style.padding = 0;

 // Clean up any borders.
 text Area.style.border = 'none';
 text Area.style.outline = 'none';
 text Area.style.box Shadow = 'none';

 // Avoid flash of white box if rendered for any reason.
 text Area.style.background = 'transparent';

 if (text == 'curl'){
	text Area.value = curl Remote Text;
 } else if ( text =='php'){
	text Area.value = php Remote Text;
 } else {
 text Area.value = ruby Remote Text;
 }
 document.body.append Child (text Area);

 text Area.select();

 try {
 var successful = document.exec Command('copy');
 var msg = successful ? 'successful' : 'unsuccessful';
 console.log('Copying text command was ' + msg);
 } catch (err) {
 console.log('Oops, unable to copy');
 }

 document.body.remove Child (text Area);

 
 }
</script>
</script>

<form name="request">

 
 <p></p>
 <input type="button" class="doc-button" style="font-size: 100%; padding: 2px 6px 3px 6px;" value="Sign" on Click="sign (document.request)"/>
 <p></p>
</form>

<ul class="nav nav-tabs" id="remote Tab">
 <li class="active">[CURL](#remoteCURL)</li>
 <li>[PHP](#remotePHP)</li>
 <li>[Ruby](#remote Ruby)</li>
 </ul>

 <button class="doc-button" onclick="copy To Clipboard('php')">Copy to clipboard</button>					
 <pre>
 <code class="php" id="php Request"></code>
 </pre>

 <button class="doc-button" onclick="copy To Clipboard('ruby')">Copy to clipboard</button>					
 <pre>
 <code class="language-ruby" id="ruby Request"></code>
 </pre>

### /services/v2/rpt-engine

#### Введение

Пользовательский отчёт по транзакциям предоставляет возможность получить настраиваемую информацию о транзакциях с их статусами для проверки и дальнейшего анализа.
 
 
Пользовательский отчёт по транзакциям инициируется посредством запроса HTTPS POST с использованием указанных ниже [URL](https://doc.payneteasy.ru/integration/services_transaction-report.html.md) и [параметров](#services-v2-rpt-engine-parameters). Для аутентификации используйте [HMAC-SHA1](https://doc.payneteasy.ru/integration/general_api_usage/request_authentication_methods/oauth.html.md). Параметры отчёта передаются через JSON.
 

#### API URL

> **Note:** Путь API URL не должен быть задан фиксированным значением, т.к. он может быть изменён позднее.

| Интеграционная среда | Производственная среда |
|----------------------------------------------------------------|-------------------------------------------------------------|
| https://sandbox.payneteasy.ru/paynet-ui/services/v2/rpt-engine | https://gate.payneteasy.ru/paynet-ui/services/v2/rpt-engine |

#### Параметры запроса

Каждый пользовательский отчёт имеет разные параметры тела JSON. Шаблоны JSON и поддерживаемые форматы требуемых пользовательских отчётов могут быть предоставлены менеджерами поддержки по запросу.
 

Описание: Request body example:

```text
{
    "reportIdentifier": "exampleReport",
    "reportEncode": "UTF-8",
    "reportName": "example",
    "reportCsvDelimiter": ",",
    "reportFormat": "CSV",
    "configurationReportParameters": [],
    "inputReportParameters": [
        {
            "type": "INPUT_TEXT",
            "name": "example",
            "value": "example"
        }
    ],
    "outputReportParameters": [],
    "filters": {
        "gates": [],
        "companies": [],
        "projects": [],
        "endpoints": [],
        "merchants": [],
        "processors": [],
        "managers": [],
        "resellers": [],
        "currencies": []
    }
}
```

#### Параметры ответа

Каждый пользовательский отчёт имеет разные параметры тела ответа. Обычно он предоставляется в формате CSV или PDF.
 
 

> **Note:** Сформированный отчет имеет правильно сформированный формат (well-formed) CSV. В соответствии с поля [RFC 4180](https://datatracker.ietf.org/doc/html/rfc4180), содержащие переносы строк (CRLF, CR, LF), двойные кавычки и запятые заключаются в двойные кавычки.

#### Пример запроса

```text
POST /paynet-ui/services/v2/rpt-engine HTTP/1.1
Host: gate.doc2.com
User-Agent: curl/7.88.1
Accept: */*
Authorization: OAuth realm="",oauth_version="1.0",oauth_consumer_key="login",oauth_timestamp="1690553049",oauth_nonce="2lrRWDbfOoq",oauth_signature_method="HMAC-SHA1",oauth_signature="ZAi2xFUlh35DAzDYKnSbyUUGGIA%3D"
Content-Type: application/json
Content-Length: 417
Connection: close

{"reportIdentifier":"exampleReport","reportEncode":"UTF-8","reportName":"example","reportCsvDelimiter":",","reportFormat":"CSV","configurationReportParameters":[],"inputReportParameters":[{"type":"INPUT_TEXT","name":"example","value":"example"}],"outputReportParameters":[],"filters":{"gates":[],"companies":[],"projects":[],"endpoints":[],"merchants":[],"processors":[],"managers":[],"resellers":[],"currencies":[]}}
```

#### Пример успешного ответа

```text
"Merchant_Name","Transaction_id","Merchant_OID","Created_date","Amount","Currency","Transaction_type","Order_description","Date_of_report"
"TestMerchant3","6891747","902B4FF5","2023-07-27 16:37:21","90.000","USD","Sale","Order #293927","28.07.2023"
```

#### Пример неуспешного ответа

```text
HTTP/1.1 200
Server: server
Date: Mon, 31 Jul 2023 09:49:07 GMT
Content-Type: text/plain
Content-Length: 46
Connection: close
Strict-Transport-Security: max-age=31536000

You are not authorised to perform such request
```

#### Коллекция Postman

<div class="postman-run-button"
 data-postman-action="collection/fork"
 data-postman-var-1="23519287-646c47d7-3051-49bf-bdd3-161df2eda44f"
 data-postman-collection-url="entity Id=23519287-646c47d7-3051-49bf-bdd3-161df2eda44f&entity Type=collection&workspace Id=7be78bd7-9f10-4be9-a60e-bd36ff1b6783"
 data-postman-param="env%5BPayment%20gateway%20ENV%5D=W3sia2V5IjoiVVJMIiwidm FsdWUi Oi IiLCJlbm FibGVk Ijp0cn VlLCJ0eXBl IjoiZGVmYXVsdCJ9XQ=="></div>
<script type="text/javascript">
 (function (p,o,s,t,m,a,n) {
 !p[s] && (p[s] = function () { (p[t] || (p[t] = [])).push (arguments); });
 !o.get Element By Id (s+t) && o.get Elements By Tag Name("head")[0].append Child((
 (n = o.create Element("script")),
 (n.id = s+t), (n.async = 1), (n.src = m), n
 ));
 }(window, document, "_pm", "Postman Run Object", "https://run.pstmn.io/button.js"));
 var env Name = "Payment gateway ENV";
 var env Data = {
 URL:'sandbox.payneteasy.ru' + "/" + 'paynet'
 };
 \_pm('env.replace', env Name, env Data);
</script>

#### Конструктор запросов

<script src="../_static/js/oauth/sha1.js"></script>
<script src="../_static/js/oauth/oauth.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="../_static/js/highlight/styles/default.css">
<script src="../_static/js/highlight/highlight.pack.js"></script>

<script type="text/javascript">

 function report_engine (form) {
 var accessor = {
 consumer Secret: form.secretkey.value,
 token Secret: form.token Secretrpt.value
 };
 var message = {
 method: form.rpthttp Method.value,
 action: form.targetURL.value,
 parameters: OAuth.decode Form("")
 };
 for (var e = 0; e < form.elements.length; ++e) {
 var input = form.elements[e];
 if (input.name != null)
 if (input.name.substring(0, 6) == "oauth_")
 if (input.value != null)
 if (input.value != "")
 if (!(input.type == "checkbox" || input.type == "radio") || input.checked) {
 message.parameters.push([input.name, input.value]);
 }
 }

 OAuth. Signature Method.sign (message, accessor);
 show Text("rptengine_signature Base String", OAuth. Signature Method.get Base String (message));
 show Text("rptengine_signature", OAuth.get Parameter (message.parameters, "oauth_signature"));
 show Text("rptengine_authorization Header", OAuth.get Authorization Header("", message.parameters));

 var user Data
 try {
 user Data = JSON.stringify (JSON.parse (form.user Data.value))
 } catch {
 alert('Invalid json in "User data"')
 }

 var curl = 'curl -o "' + form.filename.value + '" -v -L -X POST ' + '\\'' + form.targetURL.value + '\\''
 + ' -H \\'Authorization:' + OAuth.get Authorization Header("", message.parameters) + '\\''
 + ' -H \\'Content-Type: application/json\\''
 + ' --data-raw \\'' + user Data + '\\''

 show Text("rptengine", curl);

 $(document).ready (function () {
 $('pre code').each (function (i, block) {
 hljs.highlight Block (block);
 });
 });

 return false;
 }
 function show Text (element Id, text) {
 var child = document.create Text Node (text);
 var element = document.get Element By Id (element Id);
 element.innerHTML = "";
 if (element.has Child Nodes()) {
 element.replace Child (child, element.first Child);
 } else {
 element.append Child (child);
 }
 }
 function rpt Engine Fresh Timestamp Engine() {
 document.requestrpt.oauth_timestamp.value = OAuth.timestamp();
 }
 function rpt Engine Fresh Nonce Engine() {
 document.requestrpt.oauth_nonce.value = OAuth.nonce(11);
 }
 function rpt Engine Copy To Clipboardo Auth (text Element Id) {
 var text Area = document.create Element("textarea");

 // Place in top-left corner of screen regardless of scroll position.
 text Area.style.position = 'fixed';
 text Area.style.top = 0;
 text Area.style.left = 0;

 // Ensure it has a small width and height. Setting to 1px / 1em
 // doesn't work as this gives a negative w/h on some browsers.
 text Area.style.width = '2em';
 text Area.style.height = '2em';

 // We don't need padding, reducing the size if it does flash render.
 text Area.style.padding = 0;

 // Clean up any borders.
 text Area.style.border = 'none';
 text Area.style.outline = 'none';
 text Area.style.box Shadow = 'none';

 // Avoid flash of white box if rendered for any reason.
 text Area.style.background = 'transparent';
 text Area.value = document.get Element By Id (text Element Id).inner Text;
 document.body.append Child (text Area);

 text Area.select();

 try {
 var successful = document.exec Command('copy');
 var msg = successful ? 'successful' : 'unsuccessful';
 console.log('Copying text command was ' + msg);
 } catch (err) {
 console.log('Oops, unable to copy');
 }

 document.body.remove Child (text Area);

 }
</script>

<form name="requestrpt" id="rpt-engine-form">

 
 <p></p>
 <input type="button" class="doc-button" style="font-size: 100%; padding: 2px 6px 3px 6px;" value="Sign request"
 on Click="report_engine (document.requestrpt)" />
 <p></p>
</form>

<ul class="nav nav-tabs" id="rptengine Out Tab">
 <li class="active">[CURL](#rptengine-curl)</li>
 
</ul>

### Метод аутентификации запросов SHA-1

Для формирования запроса с аутентификацией SHA-1 необходимо:

1. [Сформировать подпись](#sha1-signature-generation),
2. [Сформировать запрос](#sha1-request-generation).

#### Формирование подписи SHA1

1. Провести конкатенацию необходимых параметров в единую строку (также упоминается как “строка для подписи” и “базовая строка для подписи”). Каждая команда API может содержать собственный список и порядок включения параметров в конкатенацию для формирования строки для подписи. Этот список содержится в описании параметра `control` для каждой соответствующей API команды с аутентификацией с помощью SHA1.

> **Note:** Необходимо использовать минимальные денежные единицы для значения amount в строке для подписи (копейки, центы и т.д.). Для суммы 0.94 USD значение в строке для подписи должно быть 94, для 10.15 USD значение в строке для подписи должно быть 1015.

 Пример параметров:
   ```text
   endpointid=1111
   client_orderid=902B4FF5
   amount=10.42
   email=john.smith@gmail.com
   merchant_control=B17F59B4-A7DC-41B4-8FF9-37D986B43D20
   ```

 Пример базовой строки для подписи после конкатенации:
   ```text
   1111902B4FF51042john.smith@gmail.comB17F59B4-A7DC-41B4-8FF9-37D986B43D20
   ```
2. Подписать полученную строку для подписи с помощью SHA-1:

 Пример формирования подписи SHA-1 на Java:
   ```java
   package com.Payneteasy;

   import java.nio.charset.StandardCharsets;
   import java.security.MessageDigest;
   import java.security.NoSuchAlgorithmException;

   public class HashTextTest {

   /**
   * @param args
   * @throws NoSuchAlgorithmException
   */

      public static void main(String[] args) throws NoSuchAlgorithmException {
         System.out.println(sha1("test string to sha1"));
      }

      static String sha1(String input) throws NoSuchAlgorithmException {
         MessageDigest mDigest = MessageDigest.getInstance("SHA1");
         byte[] result = mDigest.digest(input.getBytes(StandardCharsets.UTF_8));
         StringBuilder sb = new StringBuilder();
         for (byte b : result) {
            sb.append(Integer.toString((b & 0xff) + 0x100, 16).substring(1));
         }
         return sb.toString();
      }
   }
   ```

 Пример формирования подписи SHA-1 на Java
   ```html
   <script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/sha1.js"></script>
   <script type="text/javascript">
      var sha1value = CryptoJS.SHA1("test string to sha1");
   </script>
   ```

 Пример формирования подписи SHA-1 на Bash + openssl
   ```bash
   echo -n "test string to sha1" | openssl dgst -sha1
   ```

 Готовая подgись будет выглядеть следующим образом:
   ```text
   c6bdd88a78834ef4b863b088827a459f039e8257
   ```

#### Формирование запроса SHA1

Для совершения запроса необходимо использовать значение полученной подписи в параметре `control` в теле запроса.

Чтобы сформировать запрос:

```text
Request method: POST
Request URI: https://gate.payneteasy.ru/paynet/api/v2/sale/1111
Body: client_orderid=902B4FF5&order_desc=Test Order Description&first_name=John&last_name=Smith&ssn=1267&birthday=19820115&address1=100 Main st&city=Seattle&state=WA&zip_code=98102&country=US&phone=+12063582043&cell_phone=+19023384543&amount=10.42&email=john.smith@gmail.com&currency=USD&ipaddress=65.153.12.232&site_url=https://doc.payneteasy.ru&credit_card_number=4538977399606732&card_printed_name=CARD HOLDER&expire_month=12&expire_year=2099&cvv2=123&purpose=user_account1&control=c6bdd88a78834ef4b863b088827a459f039e8257
```

Чтобы сформировать CURL запрос:

```text
curl --data "
   client_orderid=902B4FF5
   &order_desc=Test Order Description
   &first_name=John
   &last_name=Smith
   &ssn=1267
   &birthday=19820115
   &address1=100 Main st
   &city=Seattle
   &state=WA
   &zip_code=98102
   &country=US
   &phone=+12063582043
   &cell_phone=+19023384543
   &amount=10.42
   &email=john.smith@gmail.com
   &currency=USD
   &ipaddress=65.153.12.232
   &site_url=https://doc.payneteasy.ru
   &credit_card_number=4538977399606732
   &card_printed_name=CARD HOLDER
   &expire_month=12
   &expire_year=2099
   &cvv2=123
   &purpose=user_account1
   &control=c6bdd88a78834ef4b863b088827a459f039e8257
" https://gate.payneteasy.ru/paynet/api/v2/sale/1111
```

#### Формирование подписи SHA1

<script src="../../_static/js/generate_card_number.js"></script>
<script src="../../_static/js/crypto-js/sha1.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="../../_static/js/highlight/styles/default.css">
<script src="../../_static/js/highlight/highlight.pack.js"></script>

<script>hljs.init Highlighting On Load();</script>

<script type="text/javascript">
 $(document).ready (function(){
 $("#sha1Tab a").click (function (e){
 e.prevent Default();
 $(this).tab('show');
 });
 });
</script>

<script type="text/javascript">
 function signstatus (form) {
 var signed Text = "";
 for (var e = 0; e < form.elements.length; ++e) {
 var input = form.elements[e];
 if (input.name != null)
 if (input.name.substring(0, 5) == "sha1_")
 if (input.value != null)
 if (input.value != "")
 if (!(input.type == "checkbox" || input.type == "radio") || input.checked)
 {
 signed Text = signed Text + input.value;
 }
 }
 show Text("statussignedvalue" , signed Text);
 show Text("sha1statusvalue" , CryptoJS.SHA1 (signed Text));

 return false;
 }

 function show Text (element Id, text) {
 var child = document.create Text Node (text);
 var element = document.get Element By Id (element Id);
 if (element.has Child Nodes()) {
 element.replace Child (child, element.first Child);
 } else {
 element.append Child (child);
 }
 }
</script>

<form name="status">

 
 <p></p>
 <input type="button" class="doc-button" style="font-size: 100%; padding: 2px 6px 3px 6px;" value="Sign status Request" on Click="signstatus (document.status)"/>
 <p></p>
</form>

#### Формирование подписи SHA1

<script src="../../_static/js/generate_card_number.js"></script>
<script src="../../_static/js/crypto-js/sha1.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="../../_static/js/highlight/styles/default.css">
<script src="../../_static/js/highlight/highlight.pack.js"></script>

<script>hljs.init Highlighting On Load();</script>

<script type="text/javascript">
 $(document).ready (function(){
 $("#sha1Tab a").click (function (e){
 e.prevent Default();
 $(this).tab('show');
 });
 });
</script>

<script type="text/javascript">
 function signsale (form) {
 var amount Info = document.get Element By Id("amount Warning");
 var signed Text = "";
 for (var e = 0; e < form.elements.length; ++e) {
 var input = form.elements[e];
 if (input.name != null)
 if (input.name.substring(0, 5) == "sha1_")
 if (input.value != null)
 if (input.value != "")
 if (!(input.type == "checkbox" || input.type == "radio") || input.checked)
 {
 if (input.name == "sha1_amount"){
									 var amount To Fix = input.value \* 100;
 var fixed Amount = amount To Fix.to Fixed(0);
 if (fixed Amount != amount To Fix)
 { amount Info.innerHTML = amount Info.innerHTML.replace("​", "Possible floating point imprecision (for more information check Floating Point Math)");}
 else {amount Info.innerHTML = amount Info.innerHTML.replace("Possible floating point imprecision (for more information check Floating Point Math)", "​");}
 signed Text = signed Text + fixed Amount;}
 else
 {signed Text = signed Text + input.value;}
 }
 }
 show Text("salesignedvalue" , signed Text);
 show Text("sha1salevalue" , CryptoJS.SHA1 (signed Text));

 return false;
 }

 function show Text (element Id, text) {
 var child = document.create Text Node (text);
 var element = document.get Element By Id (element Id);
 if (element.has Child Nodes()) {
 element.replace Child (child, element.first Child);
 } else {
 element.append Child (child);
 }
 }
</script>

<form name="sale">

 
 <p></p>
 <input type="button" class="doc-button" style="font-size: 100%; padding: 2px 6px 3px 6px;" value="Sign sale Request" on Click="signsale (document.sale)"/>
 <p></p>
</form>

#### Подпись обратного вызова SHA1

<script src="../../_static/js/generate_card_number.js"></script>
<script src="../../_static/js/crypto-js/sha1.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="../../_static/js/highlight/styles/default.css">
<script src="../../_static/js/highlight/highlight.pack.js"></script>

<script>hljs.init Highlighting On Load();</script>

<script type="text/javascript">
 $(document).ready (function(){
 $("#sha1Tab a").click (function (e){
 e.prevent Default();
 $(this).tab('show');
 });
 });
</script>

<script type="text/javascript">
 function signcallback (form) {
 var signed Text = "";
 for (var e = 0; e < form.elements.length; ++e) {
 var input = form.elements[e];
 if (input.name != null)
 if (input.name.substring(0, 5) == "sha1_")
 if (input.value != null)
 if (input.value != "")
 if (!(input.type == "checkbox" || input.type == "radio") || input.checked)
 {
 signed Text = signed Text + input.value;
 }
 }
 show Text("callbacksignedvalue" , signed Text);
 show Text("sha1callbackvalue" , CryptoJS.SHA1 (signed Text));

 return false;
 }

 function show Text (element Id, text) {
 var child = document.create Text Node (text);
 var element = document.get Element By Id (element Id);
 if (element.has Child Nodes()) {
 element.replace Child (child, element.first Child);
 } else {
 element.append Child (child);
 }
 }
</script>

<form name="callback">

 
 <p></p>
 <input type="button" class="doc-button" style="font-size: 100%; padding: 2px 6px 3px 6px;" value="Verify callback Signature" on Click="signcallback (document.callback)"/>
 <p></p>
</form>

### Spire Manual

#### Руководство пользователя

##### Подключение терминала по Bluetooth к IOS

Для создания пары mPOS терминала и IOS-устройства необходимо выполнить следующие действия:

1. Нажать желтую кнопку на терминале.
2. В появившемся меню выбрать пункт №1.

* Перевод: В случае запроса терминалом кода супервайзера, необходимо ввести 8497 и подтвердить код, нажав зеленую кнопку на терминале.
* В случае отображения сообщения Идет спаривание, необходимо ожидание обнаружения iOS-устройством терминала по Bluetooth.

1. Перевод: Проверить отображение iOS-устройства в разделе Bluetooth (устройство “Post Mate” или “SPххх”, где х - любая цифра).
2. В случае отображения устройства в доступных для подключения устройств Bluetooth, выбрать его и подключиться.
3. На дисплее IOS-устройства отобразится шестизначный код, который необходимо набрать на терминале и подтвердить зеленой кнопкой.
4. После этого будет создана пара mPOS-терминала с iOS-устройством.

##### Настройка терминала

Терминалы Spire настраиваются удаленно. В них заливаются следующие файлы:

* Перевод: cakeys.cfg - CA ключи
* Перевод: contactless.cfg - настройки бесконтакта
* Перевод: currency_rub.cfg - настройки валют (Рубли)

В 99% случаев эти файлы загружаются беспроблемно, однако иногда:

1. Терминал сбрасывает настройки (производитель).
2. Проблемы с Bluetooth.

Перевод: Также в терминалы загружаются два файла firmware: boot и masterfile. Они весят 300KB и 150KB соответственно. При заливке по Bluetooth через iPAD возникают ошибки при передаче файлов. В этом случае рекомендуется проверить версию firmware после заливки. Если не получилось залить, то нужно найти место, где нет других устройств с Bluetooth и повторить попытку, заново зайдя на страницу “Spire Terminals” и нажав на кнопку “Upload Firmware”.

##### Сброс настроек Bluetooth

<iframe width="871" height="490" src="https://www.youtube.com/embed/PX50c4XST6I" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

##### Настройка Bluetooth

<iframe width="871" height="490" src="https://www.youtube.com/embed/j24JViHGPXE" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

#### FAQ

##### Бесконтактные платежи картами МИР на Spire SPm2 не проходят

Бесконтактные платежи картами МИР на Spire SPm2 НЕ работают.
 

##### Бесконтактные платежи на Spire SPm2 работают через раз

Подключить терминал по USB, чтобы он питался от сети перманентно.
 
В случае, если проблемы не устранились, обновить конфигурацию терминала.
 
В случае, если проблемы не устранились, отправить терминал производителю по гарантии.

### Статусы

#### Список статусов

| Статус | Описание |
|----------------|---------------------------------------------------------------------------------------------------------------|
| approved | Транзакция одобрена, окончательный статус. |
| declined | Транзакция отклонена, окончательный статус. |
| error | Транзакция declined, но что-то пошло не так, пожалуйста, сообщите вашему аккаунт-менеджеру, финальный статус. |
| filtered | Транзакция отклонена внутренней или внешней системой контроля мошенничества, окончательный статус. |
| processing | Транзакция обрабатывается, продолжайте опрос; нефинальный статус. |
| unknown | Статус транзакции unknown, пожалуйста, сообщите вашему аккаунт-менеджеру, нефинальный статус. |
| chain_declined | Транзакция отклонена в каскадной цепочке, нефинальный статус. |
\* после сверки статус транзакции может быть изменён, даже если он окончательный.
 
\*\* если транзакция не получает финальный статус в течение часа, необходимо прекратить запросы статуса и обратиться в отдел поддержки.
 
\*\*\* некоторые API поддерживают дополнительные виды статусов транзакций. Если по транзакции получен неожиданный статус, необходимо обратиться в отдел поддержки.
 

#### Список статусов 3D Secure

| Значение | Описание |
|-------------------|--------------------------------|
| AUTHENTICATED | Статус Card MPI Y или A. |
| NOT_AUTHENTICATED | Статус Card MPI N. |
| UNSUPPORTED | Статус Card MPI U. |
| UNKNOWN | Верификация не была проведена. |

#### Список статусов проверки случайной суммы

| Значение | Описание |
|-------------------|-----------------------------------------------|
| AUTHENTICATED | Плательщик ввёл корректную случайную сумму. |
| NOT_AUTHENTICATED | Плательщик ввёл некорректную случайную сумму. |
| UNSUPPORTED | Плательщик не ввёл случайную сумму. |
| UNKNOWN | Верификация не была проведена. |

### Сценарии тестирования Payneteasy

<script src="../_static/js/generate_card_number.js"></script>

#### Сценарии проверки статуса транзакции

Система Payneteasy не предоставляет специальных номеров карт для прохождения тестовых транзакций. Вместо этого вы можете использовать любой действующий номер кредитной карты и указать коды проверки карты из списка, чтобы получить желаемый результат.

Обратите внимание, что указанные номера кредитных карт и коды CVV2 работают только в среде sandbox и не могут использоваться в продакшн-среде.

Следующие коды CVV2 можно использовать в среде sandbox для получения различных ответов от системы:

* 123 или 1234 для получения одобренной транзакции;
* 321 только для 3DS-шлюзов, показывает форму валидации 3-D Secure (hint — это правильный пароль 3-D Secure для получения approved транзакции);
* 111 только для шлюзов 3DS немедленно одобряет транзакции без проверки 3-D Secure — эмулирует поток без 3DS для карты, не поддерживающей технологию 3-D Secure;
* 217 для получения транзакции со статусом неизвестно (эмуляция проблемы сети эквайера).
* 101 для получения транзакции со статусом отклонено (просроченная карта).
* 116 для получения транзакции со статусом отклонено (недостаточно средств).
* 119 для получения транзакции со статусом отклонено (транзакция не разрешена держателю карты).
* 209 для получения транзакции со статусом отклонено (изъять карту, украденная карта).
* Другие коды CVV2 могут использоваться для получения отклонения.

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

 
На sandbox.payneteasy.ru можно использовать перечисленные ниже тестовые карты и суммы.
 

#### Сценарии проверки 3DS 1.0.2

##### Тестовые карты 3DS 1.0.2

| Номер карты | 3ds Метод |
|------------------------------|-------------------------|
| Параметр 4444 0000 2222 4444 | Присутствует на сервере |
| Параметр 4444 0000 1111 8888 | Отсутствует на сервере |

##### Суммы для тестирования 3ds 1.0.2

| Сумма | Статус | ECI | Описание |
|---------|----------|-------|--------------------------------------------------|
| 1.00 | Y | 00 | Запрос успешно обработан |
| 1.01 | Y | 02 | Запрос успешно обработан |
| 1.02 | Y | 05 | Запрос успешно обработан |
| 1.03 | Y | 07 | Запрос успешно обработан |
| 2.00 | A | 01 | Пользователь не зарегистрирован |
| 2.01 | A | 06 | Аутенфикация была не доступна |
| 3.00 | N | 05 | Платеж отклонен системой авторизации |
| 3.01 | N | 07 | Не удалось выполнить аутентификацию пользователя |
| 4.00 | U | 05 | Ошибка валидации |
| 4.01 | U | 07 | Техническая ошибка в системе 3D |
| Другая | | | Вы можете выбрать поведение в форме запроса |

#### Сценарии проверки 3DS 2.x.0

##### Тестовые карты 3DS 2.x.0

| Номер карты | 3ds Метод |
|------------------------------|--------------------------------------------|
| Параметр 4444 5555 6666 1111 | Успешный 3DS метод |
| Параметр 4444 2222 3333 9999 | Успешный 3DS метод с задержкой в 3 секунды |
| Параметр 4444 1111 2222 3333 | 3DS метод с задержкой в 15 секунд |
| Параметр 4444 3333 1111 2222 | Отсутствие URL-адреса ACS метода 3DS |

##### Суммы для тестирования 3ds 2.x.0

| Сумма | Проверка | Статус | Данные о методе | ECI | Компонент | Описание |
|---------|------------|----------|-------------------|-------|-------------|-----------------------------------------------------------------------------------------------------|
| 0.02 | Упрощенная | | С условием | | ARes | Недействительная карта |
| 0.03 | Полная | | С условием | | ARes | Успех |
| 0.04 | Упрощенная | | С условием | | ARes | Доступ запрещен,недопустимый терминал Доступ запрещен,недопустимый терминал |
| 0.05 | Полная | | С условием | | RReq | Пользователь нажал кнопку Отмены в ACS |
| 0.06 | Полная | | С условием | | CRes | Wrong threeDSServer TransID Описание: and acs TransID |
| 0.07 | Полная | | С условием | | RReq | RReq = Успех, CRes = Неудача CRes = Fail |
| 0.08 | Полная | | С условием | | RReq | RReq = Fail RReq = Неудача, CRes = Успех |
| 1.01 | Упрощенная | Y | Y | 05 | ARes | Успешная упрощенная аутентификация |
| 1.02 | Упрощенная | Y | Y | 02 | ARes | Успешная упрощенная аутентификация |
| 1.03 | Упрощенная | A | Y | 06 | ARes | Попытка |
| 1.04 | Упрощенная | A | Y | 01 | ARes | Попытка |
| 1.05 | Упрощенная | Y | N | 05 | ARes | Успешная упрощенная аутентификация |
| 1.06 | Упрощенная | Y | N | 02 | ARes | Успешная упрощенная аутентификация |
| 1.07 | Упрощенная | A | N | 06 | ARes | Попытка |
| 1.08 | Упрощенная | A | N | 01 | ARes | Попытка |
| 2.03 | Упрощенная | N | N | 01 | ARes | Пользователь не зарегистрирован |
| 2.04 | Ошибка | | | | | Карта не участвует |
| 3.01 | Полная | C | Y | | RReq | Полная |
| 3.02 | Полная | C | N | | RReq | Полная |
| 2.01 | Упрощенная | U | N | | ARes | Техническая ошибка |
| 2.02 | Упрощенная | N | N | 06 | ARes | Пользователь не зарегистрирован |
| 11.11 | Полная | Y | С условием | 02 | RReq | Успех |
| Другая | Полная | | С условием | | RReq | Вы можете выбрать поведение в форме запроса |

> **Note:** С Условием – в зависимости от тестовых карт для 3DS метода

### /api/3ds/v1/upload-cres-result

После получения значения c Res по адресу notificationURL загрузите результаты запросом HTTP POST на указанные ниже [URL](#api-3ds-v1-upload-cres-result-url) и [параметры](#api-3ds-v1-upload-cres-result-parameters).

#### API URL

> **Note:** Путь API URL не должен быть задан фиксированным значением, т.к. он может быть изменён позднее.

| Интеграционная среда | Производственная среда |
|------------------------------------------------------------------------------------|---------------------------------------------------------------------------------|
| https://sandbox.payneteasy.ru/paynet/api/3ds/v1/upload-cres-result/ENDPOINTID | https://gate.payneteasy.ru/paynet/api/3ds/v1/upload-cres-result/ENDPOINTID |
| https://sandbox.payneteasy.ru/paynet/api/3ds/v1/upload-cres-result/ENDPOINTGROUPID | https://gate.payneteasy.ru/paynet/api/3ds/v1/upload-cres-result/ENDPOINTGROUPID |

#### Параметры запроса

| Название параметра | Max Length | Описание |
|----------------------|--------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| c Res | 4096 | Сообщение CRes — это ответ ACS на сообщение CReq. Оно указывает результат аутентификации держателя карты. |
| orderid | 128 | Идентификатор заказа, присвоенный Payneteasy. |
| login | 20 | Логин Присоединяющейся Стороны в Платёжном Шлюзе. |
| client-order-id | 128 | Идентификатор Merchant order. |
| control | 40 | Контрольная сумма, сгенерированная [SHA-1](https://doc.payneteasy.ru/integration/general_api_usage/request_authentication_methods/sha.html.md). Строка для подписи представляет собой объединение следующих параметров: 1. Параметр login 2. client_orderid 3. Параметр orderid 4. merchant_control (контрольный ключ, назначенный учётной записи Торговца в системе Платёжного Шлюза Payneteasy) |

#### Параметры ответа

| Название параметра | Описание |
|----------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| type | Тип ответа. Может быть async-response, validation-error, error. Если тип равен validation-error или error, параметры error-message и error-code содержат сведения об ошибке. |
| paynet-order-id | Идентификатор заказа, присвоенный Payneteasy. |
| merchant-order-id | Торговец order id. |
| serial-number | Уникальный номер, присвоенный сервером Payneteasy конкретному запросу от торговца. |
| error-message | Для транзакций в статусе error этот параметр будет содержать причину отклонения или сведения об ошибке. |
| error-code | Код ошибки в случае статуса error. |

#### Пример запроса

```http
POST /paynet/api/3ds/v1/upload-cres-result/39529 HTTP/1.1
User-Agent: curl/7.83.0
Accept: */*
Content-Length: 495
Content-Type: application/x-www-form-urlencoded
Connection: close

cres=ewogICJtZXNzYWdlVHlwZSIgICAgOiAiQ1JlcyIsCiAgIm1lc3NhZ2VWZXJzaW9uIiA6ICIyLjEuMCIsCgogICJ0aHJlZURTU2VydmVyVHJhbnNJRCIgOiAiZDAwYTdhZmUtMmE0ZC00NmI0LThmN2YtZjRlZmFkZjE0MmIzIiwKICAiYWNzVHJhbnNJRCIgICAgICAgICAgIDogImFjYWMwMzAxLTVlMWItNDk3Yy04NzA0LTZkNTU5NTc1YTRmZSIsCgogICJjaGFsbGVuZ2VDb21wbGV0aW9uSW5kIiA6ICJZIiwKICAidHJhbnNTdGF0dXMiICAgICAgICAgICAgOiAiWSIKfQ==
&orderid=6684126
&control=d0539beedb9a7266547530c8d2027f2b14503a61
&login=test1
&client-order-id=1e21f041-871d-4642-a6d9-968457df47a0
```

#### Пример успешного ответа

```http
HTTP/1.1 200
Server: server
Date: Wed, 17 Nov 2021 11:03:17 GMT
Content-Type: text/html;charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
Keep-Alive: timeout=60
Vary: Accept-Encoding
X-XSS-Protection: 1
Strict-Transport-Security: max-age=31536000
Content-Language: ru-RU
P3P: CP="NOI ADM DEV COM NAV OUR STP"
Content-Encoding: gzip

type=async-response
&serial-number=00000000-0000-0000-0000-000002d6202d
&merchant-order-id=1e21f041-871d-4642-a6d9-968457df47a0
&paynet-order-id=6684126
```

#### Пример неуспешного ответа

```http
HTTP/1.1 200
Server: server
Date: Wed, 17 Nov 2021 11:03:17 GMT
Content-Type: text/html;charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
Keep-Alive: timeout=60
Vary: Accept-Encoding
X-XSS-Protection: 1
Strict-Transport-Security: max-age=31536000
Content-Language: ru-RU
P3P: CP="NOI ADM DEV COM NAV OUR STP"
Content-Encoding: gzip

type=validation-error
&serial-number=00000000-0000-0000-0000-000002b36f64
&merchant-order-id=inv4097763
&error-message=End+point+with+id+22903+not+found
&error-code=3
```

#### Open API Collection

Open this method in the OpenAPI Reference

<a class="openapi-reference-button" href="/openapi-doc/#POST/api/3ds/v1/upload-cres-result/{endpoint Id}" target="_blank" rel="noopener">View in OpenAPI <svg xmlns="http://www.w3.org/2000/svg" view Box="0 0 24 24" fill="none" stroke="current Color" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg></a>

#### Коллекция Postman

<div class="postman-run-button"
data-postman-action="collection/fork"
data-postman-var-1="23519287-3975d703-0315-406f-b3e3-725b3e7bc9ea"
data-postman-collection-url="entity Id=23519287-3975d703-0315-406f-b3e3-725b3e7bc9ea&entity Type=collection&workspace Id=7be78bd7-9f10-4be9-a60e-bd36ff1b6783"
data-postman-param="env%5BPayment%20gateway%20ENV%5D=W3sia2V5IjoiVVJMIiwidm FsdWUi Oi IiLCJlbm FibGVk Ijp0cn VlLCJ0eXBl IjoiZGVmYXVsdCJ9XQ=="></div>
<script type="text/javascript">
 (function (p,o,s,t,m,a,n) {
 !p[s] && (p[s] = function () { (p[t] || (p[t] = [])).push (arguments); });
 !o.get Element By Id (s+t) && o.get Elements By Tag Name("head")[0].append Child((
 (n = o.create Element("script")),
 (n.id = s+t), (n.async = 1), (n.src = m), n
 ));
 }(window, document, "_pm", "Postman Run Object", "https://run.pstmn.io/button.js"));
 var env Name = "Payment gateway ENV";
	 var env Data = {
 URL:'sandbox.payneteasy.ru' + "/" + 'paynet'
 };
 \_pm('env.replace', env Name, env Data);
</script>

#### Конструктор запросов

<meta http-equiv="Cache-Control" content="no-cache">
<script src="../_static/js/generate_card_number.js"></script>
<script src="../_static/js/crypto-js/sha1.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="../_static/js/highlight/styles/default.css">
<script src="../_static/js/highlight/highlight.pack.js"></script>

<script type="text/javascript">
$(document).ready (function(){ 
 $("#cres Result Tab a").click (function (e){
 	e.prevent Default();
 	$(this).tab('show');
 });
});
</script>

<script type="text/javascript">
		var curl Cres Result Text = "";
 
		//var php Cres Result Text = "";

		//var ruby Cres Result Text = "";

		//var java Cres Result Text = "";

 function sign_cres_result (form) {
 var signed Text = "";

		var curl Text = "";

		var sandbox = "";
		var params = "";
		var control = "";

	 var url = "";
		var encodedCRes;

	//var xhttp = new XMLHttp Request();
 //xhttp.onreadystatechange = function() {
 //if (xhttp.ready State == 4 && xhttp.status == 200) {
	// if (url == "../_static/examples/PHP/params_no_header_PHP_new.txt"){
 // php Cres Result Text = xhttp.response Text;}
	//	else if (url == "../_static/examples/Ruby/params_no_header_Ruby (for new version).txt"){
	//	 ruby Cres Result Text = xhttp.response Text;}
	//	else{
	//	java Cres Result Text = xhttp.response Text;}
 //}
 //}

	//url = "../_static/examples/PHP/params_no_header_PHP_new.txt";
 //xhttp.open("GET", url, false);
 //xhttp.send();
	//url = "../_static/examples/Ruby/params_no_header_Ruby (for new version).txt";
 //xhttp.open("GET", url, false);
 //xhttp.send();
 //url = "../_static/examples/Java/params_java.txt";
 //xhttp.open("GET", url, false);
 //xhttp.send();

 for (var e = 0; e < form.elements.length; ++e) {
 var input = form.elements[e];
 if (input.name != null && input.name != "URL")
 {
 if (input.name.substring(0, 5) == "sha1_")
 if (input.value != null)
 if (input.value != "")
 if (!(input.type == "checkbox" || input.type == "radio") || input.checked)
 {
 signed Text = signed Text + input.value;
 }
 if (input.value != null && input.name != null)
 if (input.value != "" && input.name != "")
 if (input.name.substring(0, 5) == "sha1_")
 {
 if (input.name != "sha1_merchant_control" && input.name != "sha1_endpointid")
 {
 curl Text = curl Text + input.name.substring(5) + "=" + input.value + "&";

								 params += " '" + input.name.substring(5) + "' => '" + input.value + "', \\n";
 }
 }
 else
 {

							 encodedCRes = encodeURIComponent (input.value);
 curl Text = curl Text + input.name + "=" + encodedCRes + "&";

							 params += " '" + input.name + "' => '" + input.value + "', \\n";
 }
 }
 }

		//sandbox = 'https://sandbox.payneteasy.com/paynet/api/3ds/v1/' + document.cres_result.operationname.value + '/' + document.cres_result.sha1_endpointid.value;

		//php Cres Result Text = php Cres Result Text.replace("{$generated parameters with values code}", params);
		//php Cres Result Text = php Cres Result Text.replace(/{\\$identifier Type Name}/g, document.cres_result.operationname.value.match(/\\/group/) ? 'group Id' : 'endpoint Id');
		//php Cres Result Text = php Cres Result Text.replace("{$endpoint Or Group Id}", document.cres_result.sha1_endpointid.value);
		//php Cres Result Text = php Cres Result Text.replace("{$merchant Control}", document.cres_result.sha1_merchant_control.value);
		//php Cres Result Text = php Cres Result Text.replace("{$additional vars}", '');
		//php Cres Result Text = php Cres Result Text.replace("{$sign Function Call}", 'sign Payment Request($request Fields, $' + (document.cres_result.operationname.value.match(/\\/group/) ? 'group Id' : 'endpoint Id') + ', $merchant Control)');
		//php Cres Result Text = php Cres Result Text.replace("{$sandbox}", sandbox);

		//ruby Cres Result Text = ruby Cres Result Text.replace("{$generated parameters with values code}", params);
		//ruby Cres Result Text = ruby Cres Result Text.replace("{$sandbox}", sandbox);
		//java Cres Result Text = java Cres Result Text.replace("{$targetURL}", sandbox);
		//java Cres Result Text = java Cres Result Text.replace("{$has Headers}", "false");
	 control = " 'control' => '" + CryptoJS.SHA1 (signed Text) + "'";

	 //java Cres Result Text = java Cres Result Text.replace("{$url Parameters}", curl Text);
	 //java Cres Result Text = java Cres Result Text.replace("{$control Parameters}", signed Text);

		//php Cres Result Text = php Cres Result Text.replace("{$control}", control);
		//ruby Cres Result Text = ruby Cres Result Text.replace("{$control}", control);

		//show Text("cresresultphpvalue" , php Cres Result Text);

		//show Text("cresresultrubyvalue" , ruby Cres Result Text);

		curl Cres Result Text = 'curl --data "' +
 curl Text +
 "control=" + CryptoJS.SHA1 (signed Text) +
 '" ' + form. URL.value;

 show Text("cresresultsignedvalue" , signed Text);
 show Text("cresresultsha1value" , CryptoJS.SHA1 (signed Text));
 show Text("cresresultcurlvalue" , curl Cres Result Text);
 //show Text("cresresultjavavalue" , java Cres Result Text);

 $(document).ready (function() {
 $('pre code').each (function (i, block) {
 hljs.highlight Block (block);
 });
 });

 return false;
 }

 function show Text (element Id, text) {
 var child = document.create Text Node (text);
 var element = document.get Element By Id (element Id);
		element.innerHTML ="";
 if (element.has Child Nodes()) {
 element.replace Child (child, element.first Child);
 } else {
 element.append Child (child);
 }
 }

 //function rand Inv (c) {
 // document.get Element By Id (c).value = "inv" + Math.floor (Math.random()\*10000000);
 //}

 function copy To Clipboard Cres Result (text) {
 var text Area = document.create Element("textarea");

 // Place in top-left corner of screen regardless of scroll position.
 text Area.style.position = 'fixed';
 text Area.style.top = 0;
 text Area.style.left = 0;

 // Ensure it has a small width and height. Setting to 1px / 1em
 // doesn't work as this gives a negative w/h on some browsers.
 text Area.style.width = '2em';
 text Area.style.height = '2em';

 // We don't need padding, reducing the size if it does flash render.
 text Area.style.padding = 0;

 // Clean up any borders.
 text Area.style.border = 'none';
 text Area.style.outline = 'none';
 text Area.style.box Shadow = 'none';

 // Avoid flash of white box if rendered for any reason.
 text Area.style.background = 'transparent';

 if (text == 'curl'){
	text Area.value = curl Cres Result Text;
 //} else if ( text =='php'){
	//text Area.value = php Cres Result Text;
 //} else if( text == 'ruby'){
 	//text Area.value = ruby Cres Result Text;
 //} else {
 //text Area.value = java Cres Result Text;
 }
 document.body.append Child (text Area);

 text Area.select();

 try {
 var successful = document.exec Command('copy');
 var msg = successful ? 'successful' : 'unsuccessful';
 console.log('Copying text command was ' + msg);
 } catch (err) {
 console.log('Oops, unable to copy');
 }

 document.body.remove Child (text Area);

 }
</script>

<form name="cres_result">

 
 <p></p>
 <input type="button" class="doc-button" style="font-size: 100%; padding: 2px 6px 3px 6px;" value="Sign CRes Result" on Click="sign_cres_result (document.cres_result)"/>
 <p></p>
</form>

<ul class="nav nav-tabs" id="cres Result Tab">
 <li class="active">[CURL](#cres ResultCURL)</li>
</ul>

### /api/3ds/v1/upload-method-url-result

После завершения 3DS Method и сбора цифрового отпечатка браузера клиента загрузите результаты запросом HTTP POST на указанные ниже [URL](#api-3ds-v1-upload-method-url-result-url) и [параметры](#api-3ds-v1-upload-method-url-result-parameters).

#### API URL

> **Note:** Путь API URL не должен быть задан фиксированным значением, т.к. он может быть изменён позднее.

| Интеграционная среда | Производственная среда |
|------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|
| https://sandbox.payneteasy.ru/paynet/api/3ds/v1/upload-method-url-result/ENDPOINTID | https://gate.payneteasy.ru/paynet/api/3ds/v1/upload-method-url-result/ENDPOINTID |
| https://sandbox.payneteasy.ru/paynet/api/3ds/v1/upload-method-url-result/ENDPOINTGROUPID | https://gate.payneteasy.ru/paynet/api/3ds/v1/upload-method-url-result/ENDPOINTGROUPID |

#### Параметры запроса

| Название параметра | Length | Описание |
|--------------------------|--------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| orderid | макс. 128 | Идентификатор заказа, присвоенный Payneteasy. |
| login | макс. 20 | Логин Присоединяющейся Стороны в Платёжном Шлюзе. |
| client-order-id | макс. 128 | Идентификатор Merchant order. |
| control | макс. 40 | Контрольная сумма, сгенерированная [SHA-1](https://doc.payneteasy.ru/integration/general_api_usage/request_authentication_methods/sha.html.md). Строка для подписи представляет собой объединение следующих параметров: 1. Параметр login 2. client_orderid 3. Параметр orderid 4. merchant_control (контрольный ключ, назначенный учётной записи Торговца в системе Платёжного Шлюза Payneteasy) |
| threeDSServer TransID | макс. 36 | 3DS Server Transaction ID. Универсальный уникальный идентификатор транзакции, присваиваемый 3DS Server для идентификации отдельной транзакции. |
| browser Accept Header | макс. 2048 | Заголовки Accept браузера. Точное содержимое HTTP-заголовков accept, отправленных 3DS Requestor из браузера держателя карты. |
| browserIP | макс. 45 | Browser IP Address.\* |
| browser Java Enabled | Описание: min 4, макс. 5 | true/false: Java включён в браузере. Логическое значение, отражающее способность браузера держателя карты выполнять Java. Значение возвращается из свойства navigator.java Enabled. |
| browser Javascript Enabled | Описание: min 4, макс. 5 | true/false Включён ли Java Script в браузере. Логическое значение, отражающее способность браузера держателя карты выполнять javascript. |
| browser Language | макс. 8 | Значение, представляющее язык браузера согласно IETF BCP47. Возвращается из свойства navigator.language. |
| browser Color Depth | макс. 2 | Глубина цвета экрана браузера. Значение, представляющее битовую глубину цветовой палитры для отображения изображений в битах на пиксель. Получается из браузера держателя карты с помощью свойства screen.color Depth. |
| browser Screen Height | макс. 6 | Высота экрана браузера. Общая высота экрана держателя карты в пикселях. Значение возвращается из свойства screen.height. |
| browser Screen Width | макс. 6 | Ширина экрана браузера. Общая ширина экрана держателя карты в пикселях. Значение возвращается из свойства screen.width. |
| browserTZ | макс. 5 | Часовой пояс браузера. Разница во времени между временем UTC и локальным временем браузера держателя карты, в минутах. Значение возвращается методом get Timezone Offset(). |
| browser User Agent | макс. 2048 | User-Agent браузера. Точное содержимое заголовка HTTP user-agent. Примечание: если общая длина User-Agent, отправленного браузером, превышает 2048 символов, сервер 3DS усекает лишнюю часть. |
| threeDSComp Ind | макс. 1 | Завершение метода 3DS. Указывает, был ли метод 3DS успешно завершён. Описание: Values accepted: `Y` = успешно завершено `N` = не завершено успешно. Метод 3DS не был завершён в течение 10 секунд. `U` = Unavailable — tds-method-url-frame-3ds-method-url отсутствовал в ответе Status. |
| notificationURL | макс. 256 | Полный URL-адрес системы торговца, которая получит сообщение CRes или сообщение об ошибке. Сообщение CRes отправляется ACS через браузер держателя карты в конце проверки. |

> **Note:** \\\* IP-адрес браузера, возвращаемый HTTP-заголовками в адрес запроса 3DS IPv4, представлен в десятичном формате с точками: четыре группы десятичных чисел, разделённые точками.

Десятичное число в каждом наборе находится в диапазоне от 0 до 255.
 
Описание: Example IPv4 address: 1.12.123.255
 
 
Адрес IPv6 представляется в виде восьми групп по четыре шестнадцатеричных цифры, каждая группа представляет 16 бит (два октета). Группы разделяются двоеточиями (:).
 
Пример адреса IPv6: 2011:0db8:85a3:0101:0101:8a2e:0370:7334
 

#### Параметры ответа

| Название параметра | Описание |
|----------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| type | Тип ответа. Может принимать такие значения как: async-response, validation-error, error и т.д. Если тип ответа validation-error или error, параметры error-message и error-code будут содержать детали ошибки. |
| paynet-order-id | Идентификатор заказа, присвоенный Payneteasy. |
| merchant-order-id | Торговец order id. |
| serial-number | Уникальный номер, присвоенный сервером Payneteasy конкретному запросу от торговца. |
| error-message | Для транзакций в статусе error этот параметр будет содержать причину отклонения или сведения об ошибке. |
| error-code | Код ошибки для транзакций в статусе error. |
| end-point-id | Идентификатор терминала, используемый для транзакции. |

#### Пример запроса

```http
POST /paynet/api/3ds/v1/upload-method-url-result/39529 HTTP/1.1
User-Agent: curl/7.83.0
Accept: */*
Content-Length: 721
Content-Type: application/x-www-form-urlencoded
Connection: close

notificationURL=https://merchant.com/shop/notification/1e21f041-871d-4642-a6d9-968457df47a0
&browserLanguage=en-us
&orderid=6684126
&browserColorDepth=24
&browserJavaEnabled=false
&control=24dc828de77bae41b9c4bf4dcbdb5c80158eb2db
&login=test_merchant
&browserIP=10.25.8.19
&browserUserAgent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Safari/605.1.15
&browserAcceptHeader=text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
&browserTZ=-180
&browserScreenHeight=900
&browserJavascriptEnabled=true
&threeDSCompInd=Y
&browserScreenWidth=1440
&client-order-id=1e21f041-871d-4642-a6d9-968457df47a0
&threeDSServerTransID=d00a7afe-2a4d-46b4-8f7f-f4efadf142b3
```

#### Пример успешного ответа

```http
HTTP/1.1 200
Server: server
Date: Wed, 17 Nov 2021 11:03:17 GMT
Content-Type: text/html;charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
Keep-Alive: timeout=60
Vary: Accept-Encoding
X-XSS-Protection: 1
Strict-Transport-Security: max-age=31536000
Content-Language: ru-RU
P3P: CP="NOI ADM DEV COM NAV OUR STP"
Content-Encoding: gzip

type=async-response
&serial-number=00000000-0000-0000-0000-000002d62029
&merchant-order-id=1e21f041-871d-4642-a6d9-968457df47a0
&paynet-order-id=6684126
```

#### Пример неуспешного ответа

```http
HTTP/1.1 200
Server: server
Date: Wed, 17 Nov 2021 11:03:17 GMT
Content-Type: text/html;charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
Keep-Alive: timeout=60
Vary: Accept-Encoding
X-XSS-Protection: 1
Strict-Transport-Security: max-age=31536000
Content-Language: ru-RU
P3P: CP="NOI ADM DEV COM NAV OUR STP"
Content-Encoding: gzip

type=validation-error
&serial-number=00000000-0000-0000-0000-000002b36f64
&merchant-order-id=inv4097763
&error-message=End+point+with+id+22903+not+found
&error-code=3
```

#### Open API Collection

Open this method in the OpenAPI Reference

<a class="openapi-reference-button" href="/openapi-doc/#POST/api/3ds/v1/upload-method-url-result/{endpoint Id}" target="_blank" rel="noopener">View in OpenAPI <svg xmlns="http://www.w3.org/2000/svg" view Box="0 0 24 24" fill="none" stroke="current Color" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg></a>

#### Коллекция Postman

<div class="postman-run-button"
data-postman-action="collection/fork"
data-postman-var-1="23519287-3975d703-0315-406f-b3e3-725b3e7bc9ea"
data-postman-collection-url="entity Id=23519287-3975d703-0315-406f-b3e3-725b3e7bc9ea&entity Type=collection&workspace Id=7be78bd7-9f10-4be9-a60e-bd36ff1b6783"
data-postman-param="env%5BPayment%20gateway%20ENV%5D=W3sia2V5IjoiVVJMIiwidm FsdWUi Oi IiLCJlbm FibGVk Ijp0cn VlLCJ0eXBl IjoiZGVmYXVsdCJ9XQ=="></div>
<script type="text/javascript">
 (function (p,o,s,t,m,a,n) {
 !p[s] && (p[s] = function () { (p[t] || (p[t] = [])).push (arguments); });
 !o.get Element By Id (s+t) && o.get Elements By Tag Name("head")[0].append Child((
 (n = o.create Element("script")),
 (n.id = s+t), (n.async = 1), (n.src = m), n
 ));
 }(window, document, "_pm", "Postman Run Object", "https://run.pstmn.io/button.js"));
 var env Name = "Payment gateway ENV";
	 var env Data = {
 URL:'sandbox.payneteasy.ru' + "/" + 'paynet'
 };
 \_pm('env.replace', env Name, env Data);
</script>

#### Конструктор запросов

<meta http-equiv="Cache-Control" content="no-cache">
<script src="../_static/js/generate_card_number.js"></script>
<script src="../_static/js/crypto-js/sha1.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="../_static/js/highlight/styles/default.css">
<script src="../_static/js/highlight/highlight.pack.js"></script>

<script type="text/javascript">
$(document).ready (function(){ 
 $("#methodURLResult Tab a").click (function (e){
 	e.prevent Default();
 	$(this).tab('show');
 });
});
</script>

<script type="text/javascript">
		var curl MethodURLResult Text = "";
 
		//var php MethodURLResult Text = "";

		//var ruby MethodURLResult Text = "";

		//var java MethodURLResult Text = "";

 function sign_method_url_result (form) {
 var signed Text = "";

		var curl Text = "";

		var sandbox = "";
		var params = "";
		var control = "";

	 var url = "";

 var encoded Browser User Agent;

	//var xhttp = new XMLHttp Request();
 //xhttp.onreadystatechange = function() {
 //if (xhttp.ready State == 4 && xhttp.status == 200) {
	// if (url == "../_static/examples/PHP/params_no_header_PHP_new.txt"){
 // php MethodURLResult Text = xhttp.response Text;}
	//	else if (url == "../_static/examples/Ruby/params_no_header_Ruby (for new version).txt"){
	//	 ruby MethodURLResult Text = xhttp.response Text;}
	//	else{
	//	java MethodURLResult Text = xhttp.response Text;}
 //}
 //}

	//url = "../_static/examples/PHP/params_no_header_PHP_new.txt";
 //xhttp.open("GET", url, false);
 //xhttp.send();
	//url = "../_static/examples/Ruby/params_no_header_Ruby (for new version).txt";
 //xhttp.open("GET", url, false);
 //xhttp.send();
 //url = "../_static/examples/Java/params_java.txt";
 //xhttp.open("GET", url, false);
 //xhttp.send();

 for (var e = 0; e < form.elements.length; ++e) {
 var input = form.elements[e];
 if (input.name != null )
 {
 if (input.name.substring(0, 5) == "sha1_")
 if (input.value != null && input.name != "URL")
 if (input.value != "")
 if (!(input.type == "checkbox" || input.type == "radio") || input.checked)
 {
 signed Text = signed Text + input.value;
 }
 if (input.value != null && input.name != null)
 if (input.value != "" && input.name != "")
 if (input.name.substring(0, 5) == "sha1_")
 {
 if (input.name != "sha1_merchant_control" && input.name != "sha1_endpointid")
 {
 curl Text = curl Text + input.name.substring(5) + "=" + input.value + "&";

								 params += " '" + input.name.substring(5) + "' => '" + input.value + "', \\n";
 }
 }
 else
 {
 if (input.name != "browser User Agent")
 {
 curl Text = curl Text + input.name + "=" + input.value + "&";

							 params += " '" + input.name + "' => '" + input.value + "', \\n";

 } else {
 encoded Browser User Agent = encodeURIComponent (input.value);

 curl Text = curl Text + input.name + "=" + encoded Browser User Agent + "&";

							 params += " '" + input.name + "' => '" + input.value + "', \\n";

 }
 }
 }
 }

		//sandbox = 'https://sandbox.payneteasy.com/paynet/api/3ds/v1/' + document.method_url_result.operationname.value + '/' + document.method_url_result.sha1_endpointid.value;

		//php MethodURLResult Text = php MethodURLResult Text.replace("{$generated parameters with values code}", params);
		//php MethodURLResult Text = php MethodURLResult Text.replace(/{\\$identifier Type Name}/g, document.method_url_result.operationname.value.match(/\\/group/) ? 'group Id' : 'endpoint Id');
		//php MethodURLResult Text = php MethodURLResult Text.replace("{$endpoint Or Group Id}", document.method_url_result.sha1_endpointid.value);
		//php MethodURLResult Text = php MethodURLResult Text.replace("{$merchant Control}", document.method_url_result.sha1_merchant_control.value);
		//php MethodURLResult Text = php MethodURLResult Text.replace("{$additional vars}", '');
		//php MethodURLResult Text = php MethodURLResult Text.replace("{$sign Function Call}", 'sign Payment Request($request Fields, $' + (document.method_url_result.operationname.value.match(/\\/group/) ? 'group Id' : 'endpoint Id') + ', $merchant Control)');
		//php MethodURLResult Text = php MethodURLResult Text.replace("{$sandbox}", sandbox);

		//ruby MethodURLResult Text = ruby MethodURLResult Text.replace("{$generated parameters with values code}", params);
		//ruby MethodURLResult Text = ruby MethodURLResult Text.replace("{$sandbox}", sandbox);
		//java MethodURLResult Text = java MethodURLResult Text.replace("{$targetURL}", sandbox);
		//java MethodURLResult Text = java MethodURLResult Text.replace("{$has Headers}", "false");
	 control = " 'control' => '" + CryptoJS.SHA1 (signed Text) + "'";

	 //java MethodURLResult Text = java MethodURLResult Text.replace("{$url Parameters}", curl Text);
	 //java MethodURLResult Text = java MethodURLResult Text.replace("{$control Parameters}", signed Text);

		//php MethodURLResult Text = php MethodURLResult Text.replace("{$control}", control);
		//ruby MethodURLResult Text = ruby MethodURLResult Text.replace("{$control}", control);

		//show Text("methodurlresultphpvalue" , php MethodURLResult Text);

		//show Text("methodurlresultrubyvalue" , ruby MethodURLResult Text);

		curl MethodURLResult Text = 'curl --data "' +
 curl Text +
 "control=" + CryptoJS.SHA1 (signed Text) +
 '" ' + form. URL.value;

 show Text("methodurlresultsignedvalue" , signed Text);
 show Text("methodurlresultsha1value" , CryptoJS.SHA1 (signed Text));
 show Text("methodurlresultcurlvalue" , curl MethodURLResult Text);
 //show Text("methodurlresultjavavalue" , java MethodURLResult Text);

 $(document).ready (function() {
 $('pre code').each (function (i, block) {
 hljs.highlight Block (block);
 });
 });

 return false;
 }

 function show Text (element Id, text) {
 var child = document.create Text Node (text);
 var element = document.get Element By Id (element Id);
		element.innerHTML ="";
 if (element.has Child Nodes()) {
 element.replace Child (child, element.first Child);
 } else {
 element.append Child (child);
 }
 }

 //function rand Inv (c) {
 // document.get Element By Id (c).value = "inv" + Math.floor (Math.random()\*10000000);
 //}

 function copy To Clipboard MethodURLResult (text) {
 var text Area = document.create Element("textarea");

 // Place in top-left corner of screen regardless of scroll position.
 text Area.style.position = 'fixed';
 text Area.style.top = 0;
 text Area.style.left = 0;

 // Ensure it has a small width and height. Setting to 1px / 1em
 // doesn't work as this gives a negative w/h on some browsers.
 text Area.style.width = '2em';
 text Area.style.height = '2em';

 // We don't need padding, reducing the size if it does flash render.
 text Area.style.padding = 0;

 // Clean up any borders.
 text Area.style.border = 'none';
 text Area.style.outline = 'none';
 text Area.style.box Shadow = 'none';

 // Avoid flash of white box if rendered for any reason.
 text Area.style.background = 'transparent';

 if (text == 'curl'){
	text Area.value = curl MethodURLResult Text;
 //} else if ( text =='php'){
	//text Area.value = php MethodURLResult Text;
 //} else if( text == 'ruby'){
 	//text Area.value = ruby MethodURLResult Text;
 //} else {
 //text Area.value = java MethodURLResult Text;
 }
 document.body.append Child (text Area);

 text Area.select();

 try {
 var successful = document.exec Command('copy');
 var msg = successful ? 'successful' : 'unsuccessful';
 console.log('Copying text command was ' + msg);
 } catch (err) {
 console.log('Oops, unable to copy');
 }

 document.body.remove Child (text Area);

 }
</script>

<form name="method_url_result">

 
 <p></p>
 <input type="button" class="doc-button" style="font-size: 100%; padding: 2px 6px 3px 6px;" value="Sign method URL Result" on Click="sign_method_url_result (document.method_url_result)"/>
 <p></p>
</form>

<ul class="nav nav-tabs" id="methodURLResult Tab">
 <li class="active">[CURL](#methodURLResultCURL)</li>
</ul>

### /api/3ds/v1/upload-pares-result

#### Upload Pa Res Result

После получения значения pa Res на Term Url загрузите результаты запросом HTTP POST, используя указанные ниже [URL-адреса](#api-3ds-v1-upload-pares-result-url) и [параметры](#api-3ds-v1-upload-pares-result-parameters).

#### API URL

> **Note:** Путь API URL не должен быть задан фиксированным значением, т.к. он может быть изменён позднее.

| Интеграционная среда | Производственная среда |
|-------------------------------------------------------------------------------------|----------------------------------------------------------------------------------|
| https://sandbox.payneteasy.ru/paynet/api/3ds/v1/upload-pares-result/ENDPOINTID | https://gate.payneteasy.ru/paynet/api/3ds/v1/upload-pares-result/ENDPOINTID |
| https://sandbox.payneteasy.ru/paynet/api/3ds/v1/upload-pares-result/ENDPOINTGROUPID | https://gate.payneteasy.ru/paynet/api/3ds/v1/upload-pares-result/ENDPOINTGROUPID |

#### Параметры запроса

| Название параметра | Max Length | Описание |
|----------------------|--------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| pa Res | 10240 | Сообщение Payer Authentication Response возвращается ACS с результатом аутентификации платежа держателя карты. |
| orderid | 128 | Идентификатор заказа, присвоенный Payneteasy. |
| login | 20 | Логин Присоединяющейся Стороны в Платёжном Шлюзе. |
| client-order-id | 128 | Идентификатор Merchant order. |
| control | 40 | Контрольная сумма, сгенерированная [SHA-1](https://doc.payneteasy.ru/integration/general_api_usage/request_authentication_methods/sha.html.md). Строка для подписи представляет собой объединение следующих параметров: 1. Параметр login 2. client_orderid 3. Параметр orderid 4. merchant_control (контрольный ключ, назначенный учётной записи Торговца в системе Платёжного Шлюза Payneteasy) |

#### Параметры ответа

| Название параметра | Описание |
|----------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| type | Тип ответа. Может быть async-response, validation-error, error. Если тип равен validation-error или error, параметры error-message и error-code содержат сведения об ошибке. |
| paynet-order-id | Номер заказа в системе Payneteasy |
| merchant-order-id | Торговец order id |
| serial-number | Уникальный номер, присваиваемый сервером Payneteasy конкретному запросу от Торговца |
| error-message | Если статус error, этот параметр содержит причину отклонения или сведения об ошибке |
| error-code | Код ошибки в случае статуса error |

#### Пример запроса

```http
POST /paynet/api/3ds/v1/upload-pares-result/39529 HTTP/1.1
User-Agent: curl/7.83.0
Accept: */*
Content-Length: 2631
Content-Type: application/x-www-form-urlencoded
Connection: close

orderid=6684127
&md=BB4A517A42736975764E3453302B303144794D754B7A4F697A7953765930784259503870546A79416F6542646F4E4A69534F3243317431726A6352702B68565271
&paRes=eJydlluTokgThu/nVxhOxN4YPZwV5rPdKI6CgHIQxTsaEDnIWUB//aL09Ngdc7HfcgFFkvnwZmVWRc3/7s7JqPHLKszS1zHyAx6P/NTNvDANXsdbk38hx6OqdlLPSbLUfx2n2fjvxdw8lb7PGr57Kf3Ft9FoNFf8qnICfxR6r2P4/Xr5dUM+Rv01JY6edxw/wu6RG6D71f8fdw99173oZf9A59Cv1ycPxS/dk5PWT7a72XELWlQXOIJMCXIOvb9+9jn7pcguEBTDiemMpOA5NFie6NAf8PPN5W6r/C+4LvQWamTjKstdVZhRuPwk8vvOkKPDbt2A1zl09/gc4zm1v0BhFEFgdDaC0Z8I/BPvE33YP7v2lSj7wl0XUxybQx9vn538Lu+L2MvtGR/jzy75XT04Z5f+C3Kf9jn0bHpO/g+JznMnXcxQjIBRlJgRBIGi6Gw6JQmSmvU2pJ/ru8dTgLn/IqAOz59zxqmfBDGHHvbPrn1f1pdqYc+h99GXbN1wAfeR9+ez7t+/7HO4N9/QwUYYpD2l9Ef9kkir1/GprvOfENS27Y8W+5GVAYT28wHBFNQ7eFUYfB8vHlG+J6bHbDFnnDRLQ9dJwptT942o+PUp80YgCbIyrE/nPyFN/U5FIJ1jXnrsi4vg6cvdAmMIMYYWv2X9G9pXgWXlvFQnB7mDdP/o35vCH2118XX8/d+ttjkbBn5V/5ef//rxQLCc5OIvVLFd0tZGl5PaWkMNtmqIDYDqdQnh/Qp49pxDH4L78fM0f8zI4ChXgtEZhyIt0K6WdJy5vhUC2dnwKScKue1cfDNt8ZlKzFaheInrfQNtd44xWZaSiTh2q+mWZ6gTqN0I7F/fEex/31QZhlr2sgOIutoh2tlvOKiBsCyuaDTx1ifdz72tLNgXrcJ8xvBpouWza+G0+DJwILpyCkrN+Qll5idnIIoYvK3WmLDCzukJmxWQkjmkncm0S7jN7AbsSA9xDGwm1ZbxogMeHwywYgpR32FwNUHla0rGF5ZChN2qGIjsmfYPqJQIlGKqWcLoYMXVuupPJrk+ESZhh+5YCIrVYi1NCDoPpWXrOuky80TBzLRbmsxcoKAcRs6C/UAs5KVhozuIn/oB7iH224yPfBviFW7Ke911RebqRQleX4diPBVgvvKvQ2X2BEyxTu0MI8Yv6/DYr4d+s1JEkd2yDAOigGE05mY62yk6YW+HG1DpIC5OcShQLUwDreIBSxeKVrWMZrOWpglcK9k7lpMVEAsA2XKDXAa0zI4POs4EGzpQLRq4CsPriYvpkbPXCUXXWi54EFYsqLeHvQprKFW7An/xTU5XAPmgMW0rDkRLsG4eb12cvdZxEdAGqqIw1oNK25jSKibw+Ra+9k9CYeNOMblbXwDnYYt+2wbi/YsiZB1zA9JAs02QnOyn7EQWPLL70EP3eh5KBDX3lnHHs8C4xw5EGmQKgzz0sG8o0to7os+Ua9n2QZNZcHpkau2I3GM5Q6HBgwraVnpQOT5yb6Dr60G/t2b0tQIcD8CaARoJ7l5MsOrHHECQws5DYVJaBy5MOjzbe3GL+JjH0NaK4Fy53xoGorGKpfqYi2wDgSu8v8UJFC831Zt8pRhCQmK3K0wYz3QxMLeacHEsam0Gld1SwnIWQKR6EN84ZT2N6F2yG4gJqabAXreFaDh2pcrbyJZo/GAdaCWIeaXgSpFgGdN0Qbd+Q69YZbilJEWWVfjTc3EKOXrvULeio4woHojt4TpDqBPxpsrTmshXpLnd8Yl7zWaYpdRtgFsk1pDAMugusQBIrJp3G9DYcllPrh2JGLGVLtE9pl4kZiCetLXfyDY8WW4beD/btHbphr2inYQRgqhY0Cw/LI03wfCCIxxCFdvcWKEHZJ2A7+ibdlsXtIGtnOzW5QMRa/vm0ACtAFhgjEIwxDeM1TiaabcA4GJfKZpIG87BcaqY6da6ZByDu1x1WyHI2yTh4BsxwQz5LYowfiBGhcupZ4/zk9UVeGQLKzB3nZS7xGFX2rrOupaLkq00QSZr0loiql4yjeBsjpJtxlvnyGIrfyn1fYutdu8dnjNxkqCqvAq3pmDlR+QApwpWoUZsg6iaIC61OU6yvTpLwgt0FVW2wVXytJajOF+SmL3ZSxRqvWktdbm+d3hE+RtJ2/gGdswlzoeJGK0tqk21NaVFbkfthLUCkfLyIBy8oyi1K2epL/GqPbrttVQamLLcDWSk28Su39d1UyRkgxZ2sybgTC+9DK4PRiNLOyKZGmZ18qMqv+jQ8lozEKVHDELWuJpSvHWeuSzC9eekmaqJq3oOfd3VBsuw40Efu+Dv/XFxPyE+zsWLb/254/nQ/A8pzm2f
&control=987e7aa6630a862805c65eee02392d7a769cadbe
&login=test_merchant
&client-order-id=e690bf9f-0c90-4073-a30a-604d13ae9fb9
```

#### Пример успешного ответа

```http
HTTP/1.1 200
Server: server
Date: Wed, 17 Nov 2021 11:03:17 GMT
Content-Type: text/html;charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
Keep-Alive: timeout=60
Vary: Accept-Encoding
X-XSS-Protection: 1
Strict-Transport-Security: max-age=31536000
Content-Language: ru-RU
P3P: CP="NOI ADM DEV COM NAV OUR STP"
Content-Encoding: gzip

type=async-response
&serial-number=00000000-0000-0000-0000-000002d62036
&merchant-order-id=e690bf9f-0c90-4073-a30a-604d13ae9fb9
&paynet-order-id=6684127
```

#### Пример неуспешного ответа

```http
HTTP/1.1 200
Server: server
Date: Wed, 17 Nov 2021 11:03:17 GMT
Content-Type: text/html;charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
Keep-Alive: timeout=60
Vary: Accept-Encoding
X-XSS-Protection: 1
Strict-Transport-Security: max-age=31536000
Content-Language: ru-RU
P3P: CP="NOI ADM DEV COM NAV OUR STP"
Content-Encoding: gzip

type=validation-error
&serial-number=00000000-0000-0000-0000-000002b36f64
&merchant-order-id=inv4097763
&error-message=End+point+with+id+22903+not+found
&error-code=3
```

#### Open API Collection

Open this method in the OpenAPI Reference

<a class="openapi-reference-button" href="/openapi-doc/#POST/api/3ds/v1/upload-pares-result/{endpoint Id}" target="_blank" rel="noopener">View in OpenAPI <svg xmlns="http://www.w3.org/2000/svg" view Box="0 0 24 24" fill="none" stroke="current Color" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg></a>

#### Коллекция Postman

<div class="postman-run-button"
data-postman-action="collection/fork"
data-postman-var-1="23519287-3975d703-0315-406f-b3e3-725b3e7bc9ea"
data-postman-collection-url="entity Id=23519287-3975d703-0315-406f-b3e3-725b3e7bc9ea&entity Type=collection&workspace Id=7be78bd7-9f10-4be9-a60e-bd36ff1b6783"
data-postman-param="env%5BPayment%20gateway%20ENV%5D=W3sia2V5IjoiVVJMIiwidm FsdWUi Oi IiLCJlbm FibGVk Ijp0cn VlLCJ0eXBl IjoiZGVmYXVsdCJ9XQ=="></div>
<script type="text/javascript">
 (function (p,o,s,t,m,a,n) {
 !p[s] && (p[s] = function () { (p[t] || (p[t] = [])).push (arguments); });
 !o.get Element By Id (s+t) && o.get Elements By Tag Name("head")[0].append Child((
 (n = o.create Element("script")),
 (n.id = s+t), (n.async = 1), (n.src = m), n
 ));
 }(window, document, "_pm", "Postman Run Object", "https://run.pstmn.io/button.js"));
 var env Name = "Payment gateway ENV";
	 var env Data = {
 URL:'sandbox.payneteasy.ru' + "/" + 'paynet'
 };
 \_pm('env.replace', env Name, env Data);
</script>

#### Конструктор запросов

<meta http-equiv="Cache-Control" content="no-cache">
<script src="../_static/js/generate_card_number.js"></script>
<script src="../_static/js/crypto-js/sha1.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="../_static/js/highlight/styles/default.css">
<script src="../_static/js/highlight/highlight.pack.js"></script>

<script type="text/javascript">
$(document).ready (function(){ 
 $("#pares Result Tab a").click (function (e){
 	e.prevent Default();
 	$(this).tab('show');
 });
});
</script>

<script type="text/javascript">
		var curl Pares Result Text = "";
 
		//var php Pares Result Text = "";
		
		//var ruby Pares Result Text = "";

		//var java Pares Result Text = "";

 function sign_pares_result (form) {
 var signed Text = "";

		var curl Text = "";
		
		var sandbox = "";
		var params = "";
		var control = "";

	 var url = "";
		var encoded Pa Res;

	//var xhttp = new XMLHttp Request();
 //xhttp.onreadystatechange = function() {
 //if (xhttp.ready State == 4 && xhttp.status == 200) {
	// if (url == "../_static/examples/PHP/params_no_header_PHP_new.txt"){
 // php Pares Result Text = xhttp.response Text;}
	//	else if (url == "../_static/examples/Ruby/params_no_header_Ruby (for new version).txt"){
	//	 ruby Pares Result Text = xhttp.response Text;}
	//	else{
	//	java Pares Result Text = xhttp.response Text;}
 //}
 //}

	//url = "../_static/examples/PHP/params_no_header_PHP_new.txt";
 //xhttp.open("GET", url, false);
 //xhttp.send();
	//url = "../_static/examples/Ruby/params_no_header_Ruby (for new version).txt";
 //xhttp.open("GET", url, false);
 //xhttp.send();
 //url = "../_static/examples/Java/params_java.txt";
 //xhttp.open("GET", url, false);
 //xhttp.send();

 for (var e = 0; e < form.elements.length; ++e) {
 var input = form.elements[e];
 if (input.name != null && input.name != "URL")
 {
 if (input.name.substring(0, 5) == "sha1_")
 if (input.value != null)
 if (input.value != "")
 if (!(input.type == "checkbox" || input.type == "radio") || input.checked)
 {
 //if (input.name == "pa Res")
 //{
 //encoded Pa Res = encodeURI (input.value);
 //signed Text = signed Text + encoded Pa Res;

 //} else
 //{
 signed Text = signed Text + input.value;
 //}
 }
 if (input.value != null && input.name != null)
 if (input.value != "" && input.name != "")
 if (input.name.substring(0, 5) == "sha1_")
 {
 if (input.name != "sha1_merchant_control" && input.name != "sha1_endpointid")
 {
 curl Text = curl Text + input.name.substring(5) + "=" + input.value + "&";

								 params += " '" + input.name.substring(5) + "' => '" + input.value + "', \\n";
 }
 }
 else
 {
							 encoded Pa Res = encodeURIComponent (input.value);
 curl Text = curl Text + input.name + "=" + encoded Pa Res + "&";

							 params += " '" + input.name + "' => '" + input.value + "', \\n";
 }
 }
 }

		//sandbox = 'https://sandbox.payneteasy.com/paynet/api/3ds/v1/' + document.pares_result.operationname.value + '/' + document.pares_result.sha1_endpointid.value;

		//php Pares Result Text = php Pares Result Text.replace("{$generated parameters with values code}", params);
		//php Pares Result Text = php Pares Result Text.replace(/{\\$identifier Type Name}/g, document.pares_result.operationname.value.match(/\\/group/) ? 'group Id' : 'endpoint Id');
		//php Pares Result Text = php Pares Result Text.replace("{$endpoint Or Group Id}", document.pares_result.sha1_endpointid.value);
		//php Pares Result Text = php Pares Result Text.replace("{$merchant Control}", document.pares_result.sha1_merchant_control.value);
		//php Pares Result Text = php Pares Result Text.replace("{$additional vars}", '');
		//php Pares Result Text = php Pares Result Text.replace("{$sign Function Call}", 'sign Payment Request($request Fields, $' + (document.pares_result.operationname.value.match(/\\/group/) ? 'group Id' : 'endpoint Id') + ', $merchant Control)');
		//php Pares Result Text = php Pares Result Text.replace("{$sandbox}", sandbox);

		//ruby Pares Result Text = ruby Pares Result Text.replace("{$generated parameters with values code}", params);
		//ruby Pares Result Text = ruby Pares Result Text.replace("{$sandbox}", sandbox);
		//java Pares Result Text = java Pares Result Text.replace("{$targetURL}", sandbox);
		//java Pares Result Text = java Pares Result Text.replace("{$has Headers}", "false");
	 control = " 'control' => '" + CryptoJS.SHA1 (signed Text) + "'";

	 //java Pares Result Text = java Pares Result Text.replace("{$url Parameters}", curl Text);
	 //java Pares Result Text = java Pares Result Text.replace("{$control Parameters}", signed Text);

		//php Pares Result Text = php Pares Result Text.replace("{$control}", control);
		//ruby Pares Result Text = ruby Pares Result Text.replace("{$control}", control);

		//show Text("paresresultphpvalue" , php Pares Result Text);

		//show Text("paresresultrubyvalue" , ruby Pares Result Text);

		curl Pares Result Text = 'curl --data "' +
 curl Text +
 "control=" + CryptoJS.SHA1 (signed Text) +
 '" ' + form. URL.value;

 show Text("paresresultsignedvalue" , signed Text);
 show Text("paresresultsha1value" , CryptoJS.SHA1 (signed Text));
 show Text("paresresultcurlvalue" , curl Pares Result Text);
 //show Text("paresresultjavavalue" , java Pares Result Text);

 $(document).ready (function() {
 $('pre code').each (function (i, block) {
 hljs.highlight Block (block);
 });
 });

 return false;
 }

 function show Text (element Id, text) {
 var child = document.create Text Node (text);
 var element = document.get Element By Id (element Id);
		element.innerHTML ="";
 if (element.has Child Nodes()) {
 element.replace Child (child, element.first Child);
 } else {
 element.append Child (child);
 }
 }

 //function rand Inv (c) {
 // document.get Element By Id (c).value = "inv" + Math.floor (Math.random()\*10000000);
 //}

 function copy To Clipboard Pares Result (text) {
 var text Area = document.create Element("textarea");

 // Place in top-left corner of screen regardless of scroll position.
 text Area.style.position = 'fixed';
 text Area.style.top = 0;
 text Area.style.left = 0;

 // Ensure it has a small width and height. Setting to 1px / 1em
 // doesn't work as this gives a negative w/h on some browsers.
 text Area.style.width = '2em';
 text Area.style.height = '2em';

 // We don't need padding, reducing the size if it does flash render.
 text Area.style.padding = 0;

 // Clean up any borders.
 text Area.style.border = 'none';
 text Area.style.outline = 'none';
 text Area.style.box Shadow = 'none';

 // Avoid flash of white box if rendered for any reason.
 text Area.style.background = 'transparent';

 if (text == 'curl'){
	text Area.value = curl Pares Result Text;
 //} else if ( text =='php'){
	//text Area.value = php Pares Result Text;
 //} else if( text == 'ruby'){
 	//text Area.value = ruby Pares Result Text;
 //} else {
 //text Area.value = java Pares Result Text;
 }
 document.body.append Child (text Area);

 text Area.select();

 try {
 var successful = document.exec Command('copy');
 var msg = successful ? 'successful' : 'unsuccessful';
 console.log('Copying text command was ' + msg);
 } catch (err) {
 console.log('Oops, unable to copy');
 }

 document.body.remove Child (text Area);

 }
</script>

<form name="pares_result">

 
 <p></p>
 <input type="button" class="doc-button" style="font-size: 100%; padding: 2px 6px 3px 6px;" value="Sign Pa Res Result" on Click="sign_pares_result (document.pares_result)"/>
 <p></p>
</form>

<ul class="nav nav-tabs" id="pares Result Tab">
 <li class="active">[CURL](#pares ResultCURL)</li>
</ul>

### Verifone Manual

#### Руководство администратора

##### Перевод терминала Verifone в режим работы через USB-порт

1. Войти в меню администратора, см. ниже.
2. Установить следующие параметры:

* Параметры / Редактирование / Smart Sale / Связь с банком / Через кассу
* Параметры / Редактирование / Smart Sale / Порт терминала / USB
* Параметры / Редактирование / Smart Sale / SSL без ККМ / Да

<iframe width="871" height="490" src="https://www.youtube.com/embed/S_QGNcmR2tU" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

##### Переключение терминала в режим работы с USB порта на Ethernet

1. Войти в меню администратора, см. ниже.
2. Установить следующие параметры:

* Параметры / Редактирование / Smart Sale / Связь с банком / Через терминал
* Параметры / Редактирование / Smart Sale / Порт терминала / Ethernet

<iframe width="871" height="490" src="https://www.youtube.com/embed/x Dm Av Zl YfEU" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

##### Настройка терминала на работу без кассы

1. Войти в меню администратора, см. ниже.
2. Установить следующие параметры:

* Параметры / Редактирование / Smart Sale / Режим ККМ / Касса или Терминал (по умолчанию - Касса)

1. После установки параметра терминал перезагрузится и в меню появится иконка для инициации платежа.

> **Note:** В этом режиме терминала Verifone печать слипов (чеков платежной системы) невозможна, т.к. принтер отсутствует.

##### Создание нового кассира

1. Войти в меню администратора, см. ниже.
2. Установить следующие параметры:

* Параметры / Управление доступом / Управление правами / Новый оператор - создать нового оператора в группу “Кассиры” и установить пароль (на этапе “Введите карту доступа” нажать Enter).
* Параметры / Управление доступом / Авто логин - выбрать нужного оператора (в случае необходимости).

##### Вход меню Администратора

1. Дождаться логотипа или надписи Ожидание команды от ККМ, затем нажать ENTER.
2. Введите пароль 1234, затем нажмите ENTER.
3. Выбрать пункт меню “Блокировка терм.” и нажать ENTER.
4. Выбрать пункт “Администратор”, ввести пароль Администратора, затем нажать ENTER.

##### Загрузка модуля CTLS на терминал Verifone

1. Загрузите USB Driver, POS Loader и OS_Remote Update Pkg.zip [по ссылке](https://inpas.ru/content/svobodno-rasprostranyaemoe-po).
2. Установить USB Driver и POS Loader.
3. Перевод: Запустить POS Loader, нажать Терминал, выбрать Verifone.
4. Подключить терминал к USB и к Ethernet-сети.
5. В POS Loader нажать “Файл” > “COM порт”, затем выбрать порт.
6. На терминале зажать клавиши 7 и ENTER одновременно.
7. Ввести пароль для входа в инженерное меню.
8. Выберите Download (3) – Enter – 166831 – Single-app (1) – Partial dnld (2) – USB Dev (7).

> **Warning:** Перевод: Пункт Full download не должен быть выбран.

1. Перевод: Выбрать Загрузить CTLS, выбрать Нет. Дождаться завершения загрузки на терминале.

> **Warning:** Перевод: Обязательно выбирать в диалоге НЕТ.

1. Провести тестовую оплату с помощью бесконтактной карты (не Apple/Google Pay).

##### Изменить идентификатор терминала

1. Перевод: Выбрать пункт меню Параметры.
2. Перевод: Выбрать Редактирование.
3. Перевод: Выбрать Настройка агента.
4. Перевод: Для входа в меню Параметры приложения, нажать 1.
5. Стереть неправильный номер терминала и ввести новый. Правильный номер терминала вводится исходя из его серийного номера. Серийный номер находится на нижней части терминала. Идентификатор терминала должен состоять из восьми цифр.

> **Note:** Перевод: Для Verifone не вводить первую цифру и знак тире. Например, если серийный номер терминала 123-456-789, то нужно ввести 23456789.

##### Настройка Wi-Fi

<iframe width="871" height="490" src="https://www.youtube.com/embed/fYEBXHpnT8E" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

#### Руководство пользователя

##### Подключение терминала к сети Ethernet

1. Подключить кабель к разъему с надписью ETH.
2. Дождаться смены цвета иконки ETH с красной на зеленую в статусной строке экрана.
3. На роутере найти IP-адрес терминала по его MAC-адресу и закрепить его на DHCP-сервере роутера за терминалом. MAC-адрес терминала написан на желтой этикетке на нижней панели терминала.
4. При включении терминал должен успешно установить соединение с сервером.

##### Нахождение IP-адреса терминала в сети

Поиск IP-адреса Pax/Verifone в сети производится самостоятельно. Указание диапазона не обязательно.

Ограничения:

* Маска сети не должна выдавать больше 500 IP адресов.
* При нахождении больше одного терминала отобразится ошибка.

> **Note:** Описание: В случае присутствия больше одного терминала в сети, может быть указан его идентификатор (например, terminal_id=12345678) после чего терминал может быть проверен.

Правила для заполнения поля адрес:

* В случае присутствия в сети одного терминала и количество IP-адресов меньше 500, нет необходимости вводить данные.
* Описание: В случае присутствия в сети больше одного терминала и количество IP-адресов меньше 500, необходимо ввести идентификатор терминала (например, terminal_id=12345678).
* Описание: В случае присутствия в сети одного терминала и количество IP-адресов больше 500 IP-адресов, необходимо указать диапазон поиска IP-range (например, range=192.168.0.1-192.168.0.254).
* Перевод: В случае присутствия в сети больше одного терминала и количество IP-адресов больше 500, необходимо ввести идентификатор терминала или диапазон поиска IP-range на выбор.

> **Note:** Перевод: Установка программы для поиска терминала на [iOS](https://mpos.pne.io/scanner/ios/install.html) и [Android](https://mpos.pne.io/verifone/scanner/scanner.apk).

##### Автоматический поиск терминала (только для IOS)

* Описание: В настройках терминала прописать диапазон, в котором будет находится терминал (например, range=10.45.69.1-10.45.69.254:27015).

##### Обновление конфигурации

###### Способ №1

1. Дождаться логотипа или надписи Ожидание команды от ККМ, затем зажать клавиши 3 и ENTER одновременно.
2. Введите пароль 1234, затем нажмите ENTER.
3. После отображения сообщения Журнал содержит операции, возможны финансовые потери. Продолжить? нажать ENTER.

* В случае подключения терминала по USB, после отображения сообщения Загрузка параметров будет отложена нажать ENTER. Затем необходимо провести оплату, во время которой будет произведено обновление конфигурации.
* В случае подключения терминала по Ethernet, подключение к сети и загрузка программ пройдет автоматически.

<iframe width="871" height="490" src="https://www.youtube.com/embed/MSlpEIaO0B0" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

###### Способ №2

1. Дождаться логотипа или надписи Ожидание команды от ККМ, затем нажать ENTER.
2. Введите пароль 1234, затем нажмите ENTER.
3. Описание: Выбрать пункт Параметры, нажав кнопку 6, затем нажать ENTER.
4. Перевод: Нажимать на ENTER (курсор на пункте ЗАГРУЗКА ПАРАМ.).
5. После отображения сообщения Журнал содержит операции, возможны финансовые потери. Продолжить? нажать ENTER.

* В случае подключения терминала по USB, после отображения сообщения Загрузка параметров будет отложена нажать ENTER.
* В случае подключения терминала по Ethernet, подключение к сети и загрузка программ пройдет автоматически.

##### Отправка логов на сервер

###### Способ №1

1. Дождаться логотипа или надписи Ожидание команды от ККМ, затем зажать клавиши 2 и ENTER одновременно.
2. Ожидать отправки логов на сервер.

<iframe width="871" height="490" src="https://www.youtube.com/embed/RHGZGYRx64k" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

###### Способ №2

1. Дождаться логотипа или надписи Ожидание команды от ККМ, затем нажать ENTER.
2. Введите пароль 1234, затем нажмите ENTER.
3. Описание: Выбрать пункт Параметры, нажав кнопку 6, затем нажать ENTER.
4. Выберите пункт меню Логирование.
5. Выберите пункт Выгрузка лога.
6. В случае подключения терминала по USB, после отображения сообщения Выгрузка логов будет отложена нажать ENTER. Затем необходимо произвести оплату, во время которой будет произведено обновление конфигурации.

* В случае подключения терминала по Ethernet, подключение к сети и загрузка программ пройдет автоматически.

#### Руководство пользователя Verifone Vx680

Перевод: Руководство по установке может быть найдено по [ссылке](https://www.pos-shop.ru/upload/iblock/fac/verifone-vx680.pdf).

##### Включение

Нажать ENTER (зеленая кнопка). Если не включается, то зарядить.

<iframe width="871" height="490" src="https://www.youtube.com/embed/2zadW9ylou0" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

##### Выключение

Нажать на CANCEL (красная кнопка) и удерживать в течение 10 сенунд.

<iframe width="871" height="490" src="https://www.youtube.com/embed/BEGPgnAGW8Q" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

##### Вход в меню

Нажать клавиши 5 и ENTER (сначала 5, потом ENTER).

##### Оплата

> `Описание: sale-vx680 POS_m Pos`

##### Отмена платежа

> `Описание: cancel-vx680 POS_m Pos`

##### Сверка итогов

> `Сверка vx680 POS_m Pos`

##### Обновление конфигурации

###### Способ №1

1. Дождаться логотипа или надписи Ожидание команды от ККМ, затем зажать клавиши 3 и ENTER одновременно.
2. Введите пароль 1234, затем нажмите ENTER.

1. После отображения сообщения Журнал содержит операции, возможны финансовые потери. Продолжить? нажать ENTER.

<iframe width="871" height="490" src="https://www.youtube.com/embed/MSlpEIaO0B0" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

###### Способ №2

1. Дождаться логотипа или надписи Ожидание команды от ККМ, затем нажать ENTER.
2. Введите пароль 1234, затем нажмите ENTER.
3. Описание: Выбрать пункт Параметры, нажав кнопку 6, затем нажать ENTER.
4. Нажмите ENTER (курсор установлен на пункте ЗАГРУЗКА ПАРАМ.).
5. После отображения сообщения Журнал содержит операции, возможны финансовые потери. Продолжить? нажать ENTER.

##### Отправка логов на сервер

###### Способ №1

1. Дождаться логотипа или надписи Ожидание команды от ККМ, затем зажать клавиши 2 и ENTER одновременно.
2. Ожидать отправки логов на сервер.

<iframe width="871" height="490" src="https://www.youtube.com/embed/RHGZGYRx64k" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

###### Способ №2

1. Дождаться логотипа или надписи Ожидание команды от ККМ, затем нажать ENTER.
2. Введите пароль 1234, затем нажмите ENTER.
3. Описание: Выбрать пункт Параметры, нажав кнопку 6, затем нажать ENTER.
4. Выберите пункт меню Логирование.
5. Выберите пункт Выгрузка лога.

#### FAQ

##### При включении терминала постоянно просит ввести сумму.

Перевод: На терминале кто-то активировал режим работы с терминалов для ввода суммы. Зайти в меню настройки Smart Sale и включите режим работы терминала только с кассой.
 

> **Note:** Нажать 5 + ENTER (сначала 5, потом ENTER).

##### Перевод: Не получается провести сверку итогов: 3 + Enter завершается с ошибкой, 4+Enter и через программу mpos-mtips-advt не получается выполнить

Необходимо проверить на терминале в настройках, правильно ли введен 8-ми значный номер терминала (первая 9-ка и тире отбрасываются: s/n на корпусе - 902-692-123, то номер в настройках - 02692123).
 
Смена номера терминала описана в разделе “Руководство администратора” -> “Изменить идентификатор терминала”.
 

##### Поиск IP-адреса Verifone в сети

Перевод: Установить [программу поиска IP-адреса](https://dengisend.ru/demo-ios/Socket Scaner/install.html).
 

##### Восстановление терминала после ошибки -3158

Ошибка связана с повреждением базы данных, которая находится в файле UNIPOS.DBI. Для ее исправления необходимо обнулить файл UNIPOS.DBI.
 
Шаги для восстановления:
 
<iframe width="871" height="490" src="https://www.youtube.com/embed/zf87avgga-A" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
1. Включите терминал. Дождитесь, пока появится сообщение об ошибке.
2. Перевод: Подключите mini USB кабель к компьютеру и терминалу.
3. Перевод: Подключаем mini USB к терминалу в блок расширения, где подключен кабель ethernet к терминалу. Компьютер должен определить терминал как COM-порт. Если этого не произошло, то установите [драйвер](https://mpos.pne.io/verifone/Verifone Unified Driver Installer-5.0.4.0-B10.zip).
4. Перевод: Затем необходимо выяснить, к какому COM-порту подключен терминал. Для этого на иконке Компьютер нажав ПКМ и выбрать пункт Управление. Затем перейдите в раздел Диспетчер устройств. Раскройте в дереве устройств узел Порты (COM и LPT). Выяснить порт, к которому подключен Verifone.

Перевод терминала в инженерный режим.
 

На терминале:

1. Нажать на терминале клавиши 7 и ENTER одновременно.
2. Перевод: Ввести пароль 166831. Дождаться перехода терминала в специальный режим VERIX TERMINAL MGR.
3. Перевод: Выбрать пункт Download, нажав клавишу 3, затем нажать ENTER. При этом будет выбрана Group \_ID: 1.
4. Перевод: Ввести еще раз пароль 166831, затем нажать ENTER.
5. Перевод: Выбрать пункт Single-app, нажав клавишу 1.
6. Перевод: Выбрать пункт Partial dnld, нажав клавишу 2.
7. Перевод: Выбрать пункт USB Dev, нажав клавишу 7.
8. Терминал отобразит надпись WAITING FOR DOWNLOAD.

Запуск программы на компьютере
 

На компьютере:

1. Скачать файл [ddl.exe](https://mpos.pne.io/verifone/ddl.exe).
2. Перевод: Открыть командную стоку с помощью cmd.exe.
3. Перевод: Запустить ddl.exe в окне.

```text
c:\Users\Download\ddl.exe -p <port_number> -r UNIPOS.DBI
```

Где <port_number> - это номер COM-порта Verifone.

Перевод: c:Users Download- куда была скачана программа ddl.exe

1. Перезапустить терминал.
2. Нажать ENTER. (Пункт меню 1> Restart).

После этого терминал перегрузится и начнет работать в штатном режиме.
 

##### Первичная установка терминала

Если при включении Verifone показывает следующую надпись:

```text
DOWNLOAD NEEDED GO FILE NOT FOUND
```

 *Видео процесса установки*

С компьютера:
 
<iframe width="871" height="490" src="https://www.youtube.com/embed/NVqKFLc4hjU" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
С терминала:
 
<iframe width="871" height="490" src="https://www.youtube.com/embed/9axPZIBVN7k" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
Шаг 1: USB кабель
 
1. Перевод: Подключить mini USB кабель к компьютеру.
2. Перевод: Подключить mini USB к терминалу в блок расширения, где подключен кабель ethernet к терминалу.
3. Перевод: Компьютер должен определить терминал как COM-порт. Если этого не произошло, то установить [драйвер](http://mpos.pne.io/verifone/Verifone Unified Driver Installer-5.0.4.0-B10.zip).
4. Перевод: Затем необходимо выяснить, к какому COM-порту подключен терминал. Для этого на иконке Компьютер нажав ПКМ и выбрать пункт Управление. Затем перейдите в раздел Диспетчер устройств. Раскройте в дереве устройств узел Порты (COM и LPT). Выяснить порт, к которому подключен Verifone.

Шаг 2: Запуск программы на компьютере
 

Установка программы UNIPOS на терминал с помощью компьютера.

1. Перевод: Создать каталог c:verifone.
2. Загрузите файлы [ddl.exe](http://mpos.pne.io/verifone/ddl.exe), [OW_BASE.zip](https://mpos.pne.io/verifone/OW_BASE_2.0.13.014_RU.zip) и [Parameters.zip](https://mpos.pne.io/verifone/02692552_Parameters.zip), затем сохраните их в каталоге c:verifone.
3. Перевод: Открыть командную стоку с помощью cmd.exe и перейти в каталог c:verifone

```text
cd c:\verifone
```

1. Запустить следующую программу с параметрами:

```text
ddl.exe -p 3 -b115200 *UNZIP=OW_BASE_2.0.13.014_RU.zip -iOW_BASE_2.0.13.014_RU.zip CRYPTOTYPE=V
```

1. После окончания загрузки терминал перегрузится сам.

Шаг 3: отмена загрузки ключей
 
1. После первой загрузки терминал покажет меню загрузки ключей.
2. Перевод: Нажать CANCEL.
3. Терминал перезагрузится еще раз.

Шаг 4: Загрузка параметров
 
1. После загрузки отобразится сообщение Параметры не загружены. Перевести терминал в инженерный режим. Нажать на терминале клавиши 7 и ENTER одновременно.
2. Перевод: Ввести пароль 166831. Дождаться перехода терминала в специальный режим VERIX TERMINAL MGR.
3. Перевод: Выбрать пункт Download, нажав клавишу 3, затем нажать ENTER. При этом будет выбрана Group \_ID: 1.
4. Перевод: Ввести еще раз пароль 166831, затем нажать ENTER.
5. Перевод: Выбрать пункт Single-app, нажав клавишу 1.
6. Перевод: Выбрать пункт Partial dnld, нажав клавишу 2.
7. Перевод: Выбрать пункт USB Dev, нажав клавишу 7.
8. Терминал отобразит надпись WAITING FOR DOWNLOAD.

Шаг 5: Загрузка параметров
 
* Перевод: В командной строке в каталоге c:verifone выполнить следующую команду:

```text
ddl.exe -p3 -b115200 *UNZIP2=02692552_Parameters.zip -i02692552_Parameters.zip
```

Шаг 6: Создание администратора
 
1. После перезагрузки терминал может отобразить сообщение Создание администратора при первой загрузке.

<iframe width="871" height="490" src="https://www.youtube.com/embed/9axPZIBVN7k" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
1. Перевод: Для этого ввести имя пользователя ROOT.
2. Перевод: На предложение ввести смарт-карту нвжвть CANCEL.
3. Перевод: Пароль 1478.

Шаг 7: Настройка номера терминала
 
1. После загрузки нажать клавиши 3 и ENTER на терминале.
2. Перевод: Ввести номер терминала 02692552.

### /view-invoice-xml

#### Введение

Чтобы начать транзакцию Swift, используйте [/api/v2/auth-cash/](https://doc.payneteasy.ru/integration/api_v2_auth-cash.html.md) и получите receipt-id в [order status response](https://doc.payneteasy.ru/integration/api_v2_status.html.md). Счёт Swift в XML инициируется запросом HTTPS GET с использованием указанных ниже [URLs](#view-invoice-xml-url). Для аутентификации используйте [HMAC-SHA1](https://doc.payneteasy.ru/integration/general_api_usage/request_authentication_methods/oauth.html.md). См. [Статусы](https://doc.payneteasy.ru/integration/reference/statuses.html.md).

#### API URL

> **Note:** Путь API URL не должен быть задан фиксированным значением, т.к. он может быть изменён позднее.

| Интеграционная среда | Производственная среда |
|----------------------------------------------------------------------------|-------------------------------------------------------------------------|
| https://sandbox.payneteasy.ru/paynet/view-invoice-xml/ENDPOINTID/RECEIPTID | https://gate.payneteasy.ru/paynet/view-invoice-xml/ENDPOINTID/RECEIPTID |

#### Пример запроса

```http
POST /paynet/view-invoice-xml/6657/6d0442b3-f4f9-3264-8cfd-f811195b693a HTTP/1.1
Host: sandbox.payneteasy.ru
User-Agent: curl/7.83.0
Accept: */*
Authorization: OAuth realm="",oauth_version="1.0",oauth_consumer_key="test_merch",oauth_timestamp="1687422393",oauth_nonce="I4FlRMNDFfe",oauth_signature_method="HMAC-SHA1",oauth_signature="sW7XXVhkxXAwE61CLnwCpjxJpD0%3D"
Content-Length: 140
Content-Type: application/x-www-form-urlencoded
Connection: close

oauth_consumer_key=test_merch
&oauth_nonce=I4FlRMNDFfe
&oauth_signature_method=HMAC-SHA1
&oauth_timestamp=1687422393
&oauth_version=1.0
```

#### Пример успешного ответа

```http
HTTP/1.1 200
Server: server
Date: Thu, 22 Jun 2023 08:26:51 GMT
Content-Type: text/xml;charset=utf-8
Content-Length: 833
Connection: close
X-XSS-Protection: 1
Strict-Transport-Security: max-age=31536000
Strict-Transport-Security: max-age=31536000

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<root>
<pdf_template_name>swift_local.xslt</pdf_template_name>
<additional_params/>
<date>22.06.2023</date>
<bank_name>TestBank</bank_name>
<bank_address>Lima, Peru</bank_address>
<company_name>Company</company_name>
<company_address>P. Sherman 42 Wallaby way</company_address>
<iban>1122334455</iban>
<swift>123IAMS123</swift>
<customer>
<firstname>John</firstname>
<lastname>Smith</lastname>
<address>98102, United States, WA, Seattle, 100 Main st</address>
<phone>12063582043</phone>
<cell_phone>19023384543</cell_phone>
</customer>
<rate>1</rate>
<quantity>1</quantity>
<currency>EUR</currency>
<amount>10</amount>
<order_desc>Test Order Description</order_desc>
<invoice_no>6657-587</invoice_no>
<order_invoice_no>902B4FF5</order_invoice_no>
<reference_id>1</reference_id>
</root>
```

#### Пример неуспешного ответа

```http
HTTP/1.1 404
Server: server
Date: Thu, 22 Jun 2023 08:30:18 GMT
Content-Type: text/xml;charset=utf-8
Content-Length: 750
Connection: close
X-XSS-Protection: 1
Strict-Transport-Security: max-age=31536000

...
<body>
    <p>Sorry, that page doesn't exist!</p>
</body>
```

#### Коллекция Postman

<div class="postman-run-button"
 data-postman-action="collection/fork"
 data-postman-var-1="23519287-4c3c77c4-4d17-46d5-89f5-c0e03a9fd359"
 data-postman-collection-url="entity Id=23519287-4c3c77c4-4d17-46d5-89f5-c0e03a9fd359&entity Type=collection&workspace Id=7be78bd7-9f10-4be9-a60e-bd36ff1b6783"
 data-postman-param="env%5BPayment%20gateway%20ENV%5D=W3sia2V5IjoiVVJMIiwidm FsdWUi Oi IiLCJlbm FibGVk Ijp0cn VlLCJ0eXBl IjoiZGVmYXVsdCJ9XQ=="></div>
<script type="text/javascript">
 (function (p,o,s,t,m,a,n) {
 !p[s] && (p[s] = function () { (p[t] || (p[t] = [])).push (arguments); });
 !o.get Element By Id (s+t) && o.get Elements By Tag Name("head")[0].append Child((
 (n = o.create Element("script")),
 (n.id = s+t), (n.async = 1), (n.src = m), n
 ));
 }(window, document, "_pm", "Postman Run Object", "https://run.pstmn.io/button.js"));
 var env Name = "Payment gateway ENV";
 var env Data = {
 URL:'sandbox.payneteasy.ru' + "/" + 'paynet'
 };
 \_pm('env.replace', env Name, env Data);
</script>

#### Конструктор запросов

<script src="../_static/js/oauth/sha1.js"></script>
<script src="../_static/js/oauth/oauth.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>

<link rel="stylesheet" href="../_static/js/highlight/styles/default.css">
<script src="../_static/js/highlight/highlight.pack.js"></script>

<script type="text/javascript">
 var curl Text = ""; 
 
 function sign (form) {
	var requestURL = "";
	var stage = form.stage.value;
	
 switch (stage){
 case "sandbox":
 if (form.file.value == "xml"){
 requestURL = "https://sandbox.payneteasy.ru/paynet/view-invoice-xml/" + form.endpoint Id.value + "/" + form.receipt Id.value }
 break;
 case "gate":
 if (form.file.value == "pdf"){
 requestURL = "https://gate.payneteasy.ru/paynet/view-invoice-xml/" + form.endpoint Id.value + "/" + form.receipt Id.value }
	 break;
	}
	
 var accessor = { consumer Secret: form.consumer Secret.value
 , token Secret : form.token Secret.value};
 var message = { method: form.http Method.value
 , action: requestURL
 , parameters: []
 };
 for (var e = 0; e < form.elements.length; ++e) {
 var input = form.elements[e];
 if (input.name != null) 
 if (input.name.substring(0, 6) == "oauth_") 
 if (input.value != null) 
 if (input.value != "") 
 if (!(input.type == "checkbox" || input.type == "radio") || input.checked)
 {
 message.parameters.push([input.name, input.value]);
 }
 }
 OAuth. Signature Method.sign (message, accessor);
 show Text("normalized Parameters", OAuth. Signature Method.normalize Parameters (message.parameters));
 show Text("signature Base String" , OAuth. Signature Method.get Base String (message));
 show Text("signature" , OAuth.get Parameter (message.parameters, "oauth_signature"));
 show Text("authorization Header" , OAuth.get Authorization Header("", message.parameters));
	
	curl Text = "curl -H 'Authorization: " + OAuth.get Authorization Header("", message.parameters) + "' --data '" + OAuth. Signature Method.normalize Parameters (message.parameters) + "' '" + requestURL + "'" + " --output test." + form.file.value;
	
	show Text("curl", curl Text);
	 $(document).ready (function() {
 $('pre code').each (function (i, block) {
 hljs.highlight Block (block);
 });
 }); 
 return false;
 return false;
 }
 function show Text (element Id, text) {
 var child = document.create Text Node (text);
 var element = document.get Element By Id (element Id);
 element.innerHTML ="";
 if (element.has Child Nodes()) {
 element.replace Child (child, element.first Child);
 } else {
 element.append Child (child);
 }
 }
 function fresh Timestamp() {
 document.request.oauth_timestamp.value = OAuth.timestamp();
 }
 function fresh Nonce() {
 document.request.oauth_nonce.value = OAuth.nonce(11);
 }
 function copy To Clipboardo Auth (text) {
 var text Area = document.create Element("textarea");

 // Place in top-left corner of screen regardless of scroll position.
 text Area.style.position = 'fixed';
 text Area.style.top = 0;
 text Area.style.left = 0;

 // Ensure it has a small width and height. Setting to 1px / 1em
 // doesn't work as this gives a negative w/h on some browsers.
 text Area.style.width = '2em';
 text Area.style.height = '2em';

 // We don't need padding, reducing the size if it does flash render.
 text Area.style.padding = 0;

 // Clean up any borders.
 text Area.style.border = 'none';
 text Area.style.outline = 'none';
 text Area.style.box Shadow = 'none';

 // Avoid flash of white box if rendered for any reason.
 text Area.style.background = 'transparent';

 if (text == 'curl'){
	text Area.value = curl Text;
 }
 document.body.append Child (text Area);

 text Area.select();

 try {
 var successful = document.exec Command('copy');
 var msg = successful ? 'successful' : 'unsuccessful';
 console.log('Copying text command was ' + msg);
 } catch (err) {
 console.log('Oops, unable to copy');
 }

 document.body.remove Child (text Area);

 }
</script>
</script>

<form name="request">

 
 <p></p>
 <input type="button" class="doc-button" style="font-size: 100%; padding: 2px 6px 3px 6px;" value="Sign" on Click="sign (document.request)"/>
 <p></p>
</form>

<ul class="nav nav-tabs" id="view Invoice Tab">
 <li class="active">[CURL](#view InvoiceCURL)</li>
</ul>

### /view-invoice

#### Введение

Чтобы начать транзакцию Swift, используйте [/api/v2/auth-cash/](https://doc.payneteasy.ru/integration/api_v2_auth-cash.html.md) и получите receipt-id в [order status response](https://doc.payneteasy.ru/integration/api_v2_status.html.md). Счёт Swift в PDF инициируется запросом HTTPS GET с использованием указанных ниже [URLs](#view-invoice-url). Для аутентификации используйте [HMAC-SHA1](https://doc.payneteasy.ru/integration/general_api_usage/request_authentication_methods/oauth.html.md). См. [Статусы](https://doc.payneteasy.ru/integration/reference/statuses.html.md).

#### API URL

> **Note:** Путь API URL не должен быть задан фиксированным значением, т.к. он может быть изменён позднее.

| Интеграционная среда | Производственная среда |
|------------------------------------------------------------------------|---------------------------------------------------------------------|
| https://sandbox.payneteasy.ru/paynet/view-invoice/ENDPOINTID/RECEIPTID | https://gate.payneteasy.ru/paynet/view-invoice/ENDPOINTID/RECEIPTID |

#### Пример запроса

```http
POST /paynet/view-invoice/6657/a5e8f278-8936-3286-aabb-c8960a5d04f4 HTTP/1.1
Host: sandbox.payneteasy.ru
User-Agent: curl/7.83.0
Accept: */*
Authorization: OAuth realm="",oauth_version="1.0",oauth_consumer_key="test_merch",oauth_timestamp="1687518156",oauth_nonce="EozU8eCdyBO",oauth_signature_method="HMAC-SHA1",oauth_signature="bNQNq2CLuGoOrf5eji3ffj96bC0%3D"
Content-Length: 140
Content-Type: application/x-www-form-urlencoded
Connection: close

oauth_consumer_key=test_merch
&oauth_nonce=EozU8eCdyBO
&oauth_signature_method=HMAC-SHA1
&oauth_timestamp=1687518156
&oauth_version=1.0
```

#### Пример успешного ответа

```http
HTTP/1.1 200
Server: server
Date: Fri, 23 Jun 2023 11:03:05 GMT
Content-Type: application/pdf;charset=utf-8
Connection: close
X-XSS-Protection: 1
Strict-Transport-Security: max-age=31536000
Strict-Transport-Security: max-age=31536000
Content-Length: 34929

...
*PDF content*
```

#### Пример неуспешного ответа

```http
HTTP/1.1 200
Server: server
Date: Fri, 23 Jun 2023 12:23:15 GMT
Content-Type: application/pdf;charset=utf-8
Connection: close
X-XSS-Protection: 1
Strict-Transport-Security: max-age=31536000
Strict-Transport-Security: max-age=31536000
Content-Length: 34929

...
<body>
    <p>Sorry, that page doesn't exist!</p>
</body>
```

#### Коллекция Postman

<div class="postman-run-button"
 data-postman-action="collection/fork"
 data-postman-var-1="23519287-4c3c77c4-4d17-46d5-89f5-c0e03a9fd359"
 data-postman-collection-url="entity Id=23519287-4c3c77c4-4d17-46d5-89f5-c0e03a9fd359&entity Type=collection&workspace Id=7be78bd7-9f10-4be9-a60e-bd36ff1b6783"
 data-postman-param="env%5BPayment%20gateway%20ENV%5D=W3sia2V5IjoiVVJMIiwidm FsdWUi Oi IiLCJlbm FibGVk Ijp0cn VlLCJ0eXBl IjoiZGVmYXVsdCJ9XQ=="></div>
<script type="text/javascript">
 (function (p,o,s,t,m,a,n) {
 !p[s] && (p[s] = function () { (p[t] || (p[t] = [])).push (arguments); });
 !o.get Element By Id (s+t) && o.get Elements By Tag Name("head")[0].append Child((
 (n = o.create Element("script")),
 (n.id = s+t), (n.async = 1), (n.src = m), n
 ));
 }(window, document, "_pm", "Postman Run Object", "https://run.pstmn.io/button.js"));
 var env Name = "Payment gateway ENV";
 var env Data = {
 URL:'sandbox.payneteasy.ru' + "/" + 'paynet'
 };
 \_pm('env.replace', env Name, env Data);
</script>

#### Конструктор запросов

<script src="../_static/js/oauth/sha1.js"></script>
<script src="../_static/js/oauth/oauth.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>

<link rel="stylesheet" href="../_static/js/highlight/styles/default.css">
<script src="../_static/js/highlight/highlight.pack.js"></script>

<script type="text/javascript">
 var curl Text = "";

 function sign (form) {
	var requestURL = "";
	var stage = form.stage.value;

 switch (stage){
 case "sandbox":
 if (form.file.value == "pdf"){
 requestURL = "https://sandbox.payneteasy.ru/paynet/view-invoice/" + form.endpoint Id.value + "/" + form.receipt Id.value }
 break;
 case "gate":
 if (form.file.value == "pdf"){
 requestURL = "https://gate.payneteasy.ru/paynet/view-invoice/" + form.endpoint Id.value + "/" + form.receipt Id.value }
	 break;
	}

 var accessor = { consumer Secret: form.consumer Secret.value
 , token Secret : form.token Secret.value};
 var message = { method: form.http Method.value
 , action: requestURL
 , parameters: []
 };
 for (var e = 0; e < form.elements.length; ++e) {
 var input = form.elements[e];
 if (input.name != null)
 if (input.name.substring(0, 6) == "oauth_")
 if (input.value != null)
 if (input.value != "")
 if (!(input.type == "checkbox" || input.type == "radio") || input.checked)
 {
 message.parameters.push([input.name, input.value]);
 }
 }
 OAuth. Signature Method.sign (message, accessor);
 show Text("normalized Parameters", OAuth. Signature Method.normalize Parameters (message.parameters));
 show Text("signature Base String" , OAuth. Signature Method.get Base String (message));
 show Text("signature" , OAuth.get Parameter (message.parameters, "oauth_signature"));
 show Text("authorization Header" , OAuth.get Authorization Header("", message.parameters));

	curl Text = "curl -H 'Authorization: " + OAuth.get Authorization Header("", message.parameters) + "' --data '" + OAuth. Signature Method.normalize Parameters (message.parameters) + "' '" + requestURL + "'" + " --output test." + form.file.value;

	show Text("curl", curl Text);
	 $(document).ready (function() {
 $('pre code').each (function (i, block) {
 hljs.highlight Block (block);
 });
 });
 return false;
 return false;
 }
 function show Text (element Id, text) {
 var child = document.create Text Node (text);
 var element = document.get Element By Id (element Id);
 element.innerHTML ="";
 if (element.has Child Nodes()) {
 element.replace Child (child, element.first Child);
 } else {
 element.append Child (child);
 }
 }
 function fresh Timestamp() {
 document.request.oauth_timestamp.value = OAuth.timestamp();
 }
 function fresh Nonce() {
 document.request.oauth_nonce.value = OAuth.nonce(11);
 }
 function copy To Clipboardo Auth (text) {
 var text Area = document.create Element("textarea");

 // Place in top-left corner of screen regardless of scroll position.
 text Area.style.position = 'fixed';
 text Area.style.top = 0;
 text Area.style.left = 0;

 // Ensure it has a small width and height. Setting to 1px / 1em
 // doesn't work as this gives a negative w/h on some browsers.
 text Area.style.width = '2em';
 text Area.style.height = '2em';

 // We don't need padding, reducing the size if it does flash render.
 text Area.style.padding = 0;

 // Clean up any borders.
 text Area.style.border = 'none';
 text Area.style.outline = 'none';
 text Area.style.box Shadow = 'none';

 // Avoid flash of white box if rendered for any reason.
 text Area.style.background = 'transparent';

 if (text == 'curl'){
	text Area.value = curl Text;
 }
 document.body.append Child (text Area);

 text Area.select();

 try {
 var successful = document.exec Command('copy');
 var msg = successful ? 'successful' : 'unsuccessful';
 console.log('Copying text command was ' + msg);
 } catch (err) {
 console.log('Oops, unable to copy');
 }

 document.body.remove Child (text Area);

 }
</script>
</script>

<form name="request">

 
 <p></p>
 <input type="button" class="doc-button" style="font-size: 100%; padding: 2px 6px 3px 6px;" value="Sign" on Click="sign (document.request)"/>
 <p></p>
</form>

<ul class="nav nav-tabs" id="view Invoice Tab">
 <li class="active">[CURL](#view InvoiceCURL)</li>
</ul>

### Word Press / Woo Commerce

The Payneteasy Woo Commerce plugin adds Payneteasy as a payment gateway option to a
Word Press site running the Woo Commerce e-commerce plugin. Once installed and configured,
shoppers are able to pay by card during Woo Commerce checkout, with card details collected
either through an inline form on the checkout page or on a page hosted by
Payneteasy, depending on the integration mode chosen.

A live example shop running this plugin is available for reference at
[wp.codetime.net](https://wp.codetime.net/).

> **Note:** The plugin is published at [php-plugin-woocommerce](https://github.com/payneteasy/php-plugin-woocommerce), where the current release ships as an installable `wc-payneteasy.zip` package uploaded through the Word Press admin. The step-by-step walkthrough below describes the manual file-copy installation of an earlier build of the plugin; the concepts (prerequisites, credentials, sandbox testing) still apply, but the exact folder names and menu wording may differ between versions. Check the repository’s own README for the version you install.

#### Source code

The plugin source, installation guide and screenshots are maintained in the
[php-plugin-woocommerce](https://github.com/payneteasy/php-plugin-woocommerce)
repository on Git Hub.


## Merchant Documentation

### Мануал Торговца

#### Введение

Данное руководство предназначено для сотрудников компаний, реализующих товары и (или) услуги, либо выполняющих определенные работы и планирующих получать оплату с помощью банковских карт или других способов оплаты от своих Клиентов (далее - Плательщиков или Получателей). Такие компании далее именуются Торговцами (или Присоединяющейся стороной, представляющей Торговцев). Руководство описывает, как Торговец может использовать функциональные возможности программно-аппаратного комплекса Payneteasy, а также отслеживать финансовые потоки через систему управления платежным бизнесом Payneteasy.

Платежные посредники, представляющие Торговцев, могут получить отдельную учётную запись (также далее - аккаунт) для каждого Торговца или учётную запись Реселлера, подключенную к учётным записям каждого представленного Торговца. Обсудите наиболее подходящую модель настройки учётных записей Платежного шлюза с менеджером службы поддержки Payneteasy. Учетные записи Реселлеров имеют те же права доступа к просмотру в Платежном шлюзе, что и учётные записи Торговцев, со следующими отличиями:

- Могут просматривать несколько связанных Торговцев;
- Могут управлять тарифными планами Реселлеров;
- Не могут обрабатывать какие-либо транзакции;
- Не могут управлять черными, белыми списками и списками лояльности;
- Не могут создавать новые сущности и уведомления.

Руководство составлено в соответствии со структурой пользовательского интерфейса Платёжного шлюза и содержит подробную информацию о каждой часто используемой функции.

#### Быстрые ссылки

Для быстрого ознакомления собраны наиболее часто используемые функции:

- Все определения терминов содержатся в [Глоссарии](https://doc.payneteasy.ru/merchant/reference/glossary.html.md);
- Логин и профиль пользователя находятся на странице [Общей информации об аккаунте](https://doc.payneteasy.ru/merchant/account_information.html.md);
- Ускорьте интеграцию с Платёжным шлюзом благодаря полной регистрации запросов и ответов в [Интеграционной панели](https://doc.payneteasy.ru/merchant/tools/integration_panel.html.md);
- Создавайте и управляйте выделенными учетными записями для каждого члена команды на экране [Сотрудники](https://doc.payneteasy.ru/merchant/settings/employees.html.md);
- Сортируйте и находите транзакции на экране [Поиск заказов](https://doc.payneteasy.ru/merchant/merchant_orders.html.md), полную информацию о каждой транзакции смотрите на экране [Детали заказа](https://doc.payneteasy.ru/merchant/merchant_orders.html.md);
- Снижайте риски, используя возможности ограничения транзакций с помощью [Чёрных, Белых списков и списков Лояльности](https://doc.payneteasy.ru/merchant/tools/merchant_bwl.html.md);
- Получайте расширенную аналитику с [Панелью инструментов](https://doc.payneteasy.ru/merchant/dashboard.html.md) и [KPI](https://doc.payneteasy.ru/merchant/reference/kpi.html.md), а также скачивайте подробные [отчёты](https://doc.payneteasy.ru/merchant/reports_index.html.md) с необходимыми данными в один клик с помощью шаблонов;
- Собирайте данные во внешние системы для дальнейшего анализа или оповещений с помощью [дополнительных обратных вызовов](https://doc.payneteasy.ru/merchant/settings/endpoints.html.md) для каждой транзакции;
- Решайте текущие проблемы с оплатами с помощью [Онлайн мониторинга](https://doc.payneteasy.ru/merchant/tools/tasks.html.md) и [Уведомлений о маркерах транзакций](https://doc.payneteasy.ru/merchant/tools/transaction_marker_notification.html.md);
- Переотправляйте [несколько обратных вызовов](https://doc.payneteasy.ru/merchant/tools/batch_operations.html.md) в случае временных проблем обработки результатов транзакций на сервере Торговца;
- Узнавайте больше о поддерживаемых [типах транзакций и статусах](https://doc.payneteasy.ru/merchant/reference/merchant_transaction_statuses_and_types.html.md).

Дополнительные функции могут стать доступны по запросу:

- Инициируйте транзакции в пользовательском интерфейсе, используя [Виртуальный терминал](https://doc.payneteasy.ru/merchant/tools/virtual_terminal.html.md);
- [Списывайте и отменяйте](https://doc.payneteasy.ru/merchant/merchant_orders.html.md) предварительно авторизованные транзакции и производите [Возвраты](https://doc.payneteasy.ru/merchant/merchant_orders.html.md);
- Получайте актуальную информацию о [текущем балансе](https://doc.payneteasy.ru/merchant/settings/endpoints.html.md) и о ожидаемых выплатах;
- Уведомляйте клиентов с помощью [Электронной почты или СМС уведомлений](https://doc.payneteasy.ru/merchant/settings/endpoints.html.md) после совершения транзакций, отправленных с сервера сообщений Торговца.

### Общая информация об аккаунте

Сотрудники Торговца могут просматривать транзакции и скачивать различные отчёты через UI Payneteasy. Он доступен по [production environment](https://gate.payneteasy.ru/paynet-ui/) и [sandbox environment](https://sandbox.payneteasy.ru/paynet-ui/).

#### Первый вход

При первом доступе к пользовательскому интерфейсу Payneteasy после входа в систему сотруднику Торговца будет предложено создать и ввести новый пароль.

 

Минимальная длина пароля составляет 8 символов. Пароль должен содержать минимум один специальный символ, одну цифру, а также одну строчную и  одну заглавную буквы.

> **Warning:** Важно, чтобы пароль не состоял из значимых языковых конструкций. В целях безопасности настоятельно рекомендуется использовать случайные буквенно-цифровые значения и регулярно менять пароль.

#### Вход при помощи OTP

ЕСЛИ включен OTP (Одноразовый Пароль), всем пользователям будет отправлено электронное письмо с одноразовой ссылкой для создания второго фактора аутентификации.

Пример данного письма:

`Изображение letterexample merchant_faq`
 

Внутри письма содержится ссылка, перейдя по которой можно получить QR-код и секретный ключ:

`Изображение qrexample merchant_faq`

Для расчета второго фактора отсканируйте QR-код или введите секретный ключ в любом доступном приложении, поддерживающем HOTP (Google Authenticator, Protectimus Smart OTP, Free OTP Authenticator и другие):

`Изображение appexample merchant_faq`
 

Если для входа включена аутентификация по одноразовому паролю, введите этот пароль при входе в систему. Подробная информация о работе с OTP доступна по ссылке. При входе в систему укажите имя пользователя, пароль и сгенерированный код из приложения (при каждом входе будет запрашиваться новый пароль из приложения):

`Изображение loginexample merchant_faq`

#### Меню заголовка

Меню расположено в верхней части экрана. Слева направо расположены: имя учетной записи в пользовательском интерфейсе Payneteasy и ее роль в системе, текущая дата и время в системном часовом поясе, ссылка на документацию [https://doc.payneteasy.ru](https://doc.payneteasy.ru) с подробной информацией о пользовательском интерфейсе и API Payneteasy, язык меню и расчеты валют:
 

 

Чтобы изменить язык в меню заголовка, используйте раскрывающееся меню:

 

Чтобы изменить валюту для расчетов в мониторинге транзакций и на приборной панели, используйте раскрывающееся меню в меню заголовка. Обменный курс обновляется ежедневно.

#### Профиль пользователя

Нажав на имя Торговца в левом верхнем углу меню заголовка, вы будете перенаправлены в профиль пользователя с двумя вкладками конфигурации профиля в правой части страницы: “Общие” и “Настройки полного вида заказов”:

##### Общие настройки

Здесь вы можете изменить следующие параметры:

> - Название
> - Язык, на котором система будет автоматически отображаться (можно изменить в любое время из раскрывающегося списка в меню заголовка);
> - Адрес электронной почты, на который будут отправляться все настроенные уведомления;
> - Телефонный номер;
> - Валюта по умолчанию (можно изменить в любое время из раскрывающегося списка в меню заголовка);
> - Лимит предварительного просмотра выписок;
> - Ключ PGP;
> - Разделитель CSV - для импорта/экспорта отчетов и групповых операций;
> - Telegram Bot - регистрация в боте, на который будут отправляться все настроенные уведомления;
> - Мобильное приложение - ссылка на подключение приложения для уведомлений;

##### Настройки полного просмотра заказов

В этом разделе можно настроить видимые поля для детального просмотра на странице Поиска заказа:

### Групповые операции

Групповые операции — это набор инструментов, позволяющий обрабатывать несколько операций через пользовательский интерфейс системы. Ниже представлен список доступных групповых операций.

> **Note:** Дополнительные групповые операции могут быть предоставлены по запросу.

#### Повторная отправка обратных вызовов

Данная групповая операция может быть полезна, если информация о конечном статусе транзакций доступна в системе Payneteasy и по какой-то причине недоступна в системе Присоединяющейся Стороны. Соберите идентификаторы заказов, присвоенные системой Payneteasy, в CSV-файл и загрузите его для отправки новых обратных вызовов. Пример CSV-файла для загрузки доступен на этом же экране.

#### Обновление уведомлений Ethoca

Эта групповая операция может быть полезна для обновления статусов Ethoca. Соберите идентификаторы заказов, присвоенные системой Payneteasy, в CSV-файл и загрузите его для отправки статусов в систему Ethoca. Пример CSV-файла для загрузки доступен на этом же экране.

### Система управления клиентами

Customer Management — большой модуль, позволяющий создать пользовательский поток оплаты.

#### Параметры для CRM и PNE

customer_level - specifies level of customer for both systems.
merchant_customer_identifier - specifies customer ID in CRM.
customer_id - specifies ID in PNE.

#### Описание: Uses cases

##### CRM

| Parameters                                               | Описание                                                                                                                                                                                                                                                                                                                                   |
|----------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| customer_level                                           | Если отправлен только этот параметр — заполненный или пустой — транзакция не пройдёт через CRM                                                                                                                                                                                                                                             |
| merchant_customer_identifier                             | Если отправлен только этот параметр и такой Merchant Customer ID уже создан в системе, транзакция пройдёт через CRM, а информация будет прикреплена к этому Merchant Customer ID. Если такой Merchant Customer ID не зарегистрирован в системе, она пройдёт через CRM и будет создан новый Клиент со всей переданной информацией.          |
| customer_id                                              | Если были отправлены только эти параметры и такой Customer ID уже создан в системе, транзакция пройдёт через CRM, но к ней будет привязан только уровень клиента. Если такой Customer ID не зарегистрирован в системе, она не пройдёт через CRM.                                                                                           |
| Комбинация merchant_customer_identifier + customer_level | Если оба параметра зарегистрированы в системе, будут применены все существующие учётные данные. Если оба параметра ранее не зарегистрированы в системе, будет создан новый Клиент с переданными учётными данными. Если зарегистрирован только Customer Level, будет создан новый пользователь, и к нему будет применён переданный уровень. |

### Обзорная панель

#### Мониторинг транзакций

Мониторинг транзакций доступен в верхней части страницы общей статистики:

 

Мониторинг содержит следующие блоки:

| `Оборот`                                                                     | Сумма всех успешных операций продажи, списания, отмены (возврата) и перевода.   |
|------------------------------------------------------------------------------|---------------------------------------------------------------------------------|
| Описание: `Declined`,   `отфильтровано и подтверждено`   | Количество операций указанных типов с соответствующим статусом.                 |
| `Чарджбэки`                                                                  | Количество и сумма успешных операций чарджбэка и предарбитражных операций.      |
| `Мошенничество`                                                              | Количество и сумма успешных мошеннических операций.                             |
| `Возвраты`                                                                   | Количество и сумма успешных операций отмены и аннулирования.                    |

Для просмотра подробной аналитики по каждому способу оплаты, щелкните на указатель в правой части соответствующего блока:

 

#### Аналитика

##### Область данных

Для изменения диапазона статистики используйте переключатели:

 

Установите желаемый диапазон дат во всплывающем календаре:

 

Данные для графиков можно сортировать с помощью кнопки Критерии:

 

Для анализа можно указать валюты, способы оплаты, а также терминалы, проекты и другие данные. Вот пример выбора способа оплаты для построения диаграммы:

##### Описание: Charts bundle

 
Количество успешных, отклоненных и отфильтрованных системой транзакций отображено на графике Оборота:
 
 

Также нажатием кнопки  можно выбрать следующие графики: соотношение по объему транзакций или по сумме платежей, а также по типу транзакций (продажа, списание, перевод и т. д.). Платежный шлюз Payneteasy также отображает статистику по отрицательной активности и доходам.
 
Требуемый период времени задается переключателем (день, неделя, месяц):
 
 

 
Тип диаграммы (сумма, количество, все) можно изменить с помощью кнопки:
 
 

##### Коэффициент одобрения

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

##### Транзакции по странам

Обзор аналитики по странам отображает два типа региональной статистики: на основе IP-адресов клиентов и на основе BIN-кодов карт.
 
 

##### Причины отклонения транзакции

Этот экран статистики можно использовать для визуальной оценки наиболее частых причин отклонения платежей, а также причин чарджбэков и мошенничества.

### Статистика отказов

Данный отчет позволяет получить статистику по отклоненным транзакциям, которые делятся на следующие группы: отклоненные банком-Эквайером, отклоненные внутренней системой обнаружения мошенничества и отклоненные из-за внутренней ошибки.
 
Для загрузки необходимых данных используются следующие критерии: диапазон дат и типы карт. При необходимости можно добавить дополнительные критерии, нажав на кнопку Критерии: терминалы и проекты.
 
Возможно произвести предварительный просмотр отчета, нажав на кнопку Предварительный просмотр.
 
Отчет можно создать, нажав на кнопку Сгенерировать.
 
Пример полученного отчета показан ниже:

### Сотрудники

#### Создание аккаунтов для сотрудников

Создание новых учетных записей для доступа к системе сотрудников Торговцев возможно в разделе “Настройки” — “Сотрудники”.
 
Вкладка Сотрудники содержит список всех учетных записей сотрудников, созданных в системе для Торговца.
 
Новая учетная запись сотрудника может быть создана с помощью кнопки Добавить пользователя. Необходимо заполнить следующую форму:
 
 

 

Далее выберите одну из доступных ролей сотрудников в системе:

 

 

После создания личного кабинета сотрудник может сразу же войти в систему. Логин и пароль генерируются на этапе создания личного кабинета (не забудьте предварительно сохранить пароль). Если пароль не был сохранен, его можно сбросить на экране сведений о сотруднике.

 

 

При первом входе сотрудника в учетную запись система просит сменить временный пароль на постоянный:

 

#### Редактировать аккаунт сотрудника

Все созданные учётные записи видны на странице “Сотрудники”:

 

 
Аккаунт сотрудника активирован.
 
Аккаунт сотрудника деактивирован.
 
 
Нажмите на имя сотрудника, чтобы открыть редактируемые данные его учетной записи, нажав на кнопку Изменить. Все параметры аккаунта сотрудника, за исключением имени пользователя и логина, могут быть изменены.
 
Кнопка Cбросить под логином пользователя используется для сброса пароля пользователя. Система сгенерирует новый одноразовый пароль, который необходимо предоставить сотруднику. Затем сотруднику придется сменить временный пароль на постоянный при следующем входе в систему.
 
Строка поиска позволяет быстро найти нужного сотрудника по идентификатору, имени, логину или адресу электронной почты:
 
 

#### Привилегии пользователя

Все доступные роли для Торговца и Реселлера представлены в таблице ниже. Обратитесь к менеджеру службы поддержки Payneteasy для подбора наиболее подходящей роли для конкретных случаев или получения полного списка функциональности ролей.

##### Торговец

Основная учётная запись Торговца имеет доступ только к своему трафику и не может видеть других торговцев.
 

| Тип сотрудника            | Описание                                                                                                                                                                                                                                |
|---------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| merchant-support          | Данный сотрудник имеет такой же доступ, как и Торговец, но не может создавать сотрудников Торговца. Может отменять заказы со страницы заказов.                                                                                          |
| merchant-support-readonly | Данный сотрудник имеет ограниченную версию доступа merchant-support, не имеет доступа к изменению конфигурации. Может отменять заказы со страницы заказов.                                                                              |
| merchant-risk             | Данный сотрудник имеет доступ к сведениям о транзакциях и действиям над ними, просмотру и работе со списками BWL и опциями BWL со страницы сведений о заказе, отчетам и групповым операциям. Может отменять заказы со страницы заказов. |
| merchant-risk-readonly    | Данный сотрудник имеет доступ к сведениям о транзакциях, просмотру и работе со списками BWL и опциями BWL на странице сведений о заказе, не имеет доступа к отчетам и групповым операциям.                                              |
| merchant-finance          | Данный сотрудник имеет доступ к некоторым сущностям в системе, обзорной панели и сведениям о транзакциях.                                                                                                                               |
| merchant-finance-readonly | Данный сотрудник может видеть только сведения о транзакциях, групповые операции и отчеты.                                                                                                                                               |
| merchant-vt-only          | Данный сотрудник имеет доступ только к Виртуальному терминалу.                                                                                                                                                                          |
| merchant-vt-transaction   | Данный сотрудник имеет доступ только к Виртуальному терминалу и к сведениям о транзакциях.                                                                                                                                              |
| merchant-desc             | Данный сотрудник может видеть только обзорную панель и сведения о транзакциях.                                                                                                                                                          |
| merchant-loyalty          | Данный сотрудник может видеть только списки BWL и сведения о транзакциях.                                                                                                                                                               |
| merchant-client-support   | Данный сотрудник может видеть только сведения о транзакциях.                                                                                                                                                                            |
| merchant-transaction      | Данный сотрудник почти идентичен merchant-client-support.                                                                                                                                                                               |
| merchant-analyst          | Данный сотрудник почти идентичен merchant-transaction с доступом к обзорной панели, не может видеть Проекты.                                                                                                                            |

##### Реселлер

Основная учётная запись Реселлера имеет доступ только к просмотру трафика по проектам, связанным с этим реселлером.
 

| Тип сотрудника          | Описание                                                                                                                                                                                  |
|-------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| reseller-support        | Данный сотрудник имеет такой же доступ, как и аккаунт Реселлера, но не может создавать сотрудников Реселлера.                                                                             |
| reseller-finance        | Данный сотрудник имеет такой же доступ, как и reseller-support, но не умеет работать с тарифными планами.                                                                                 |
| reseller-no-finance     | Данный сотрудник имеет такой же доступ, как reseller-support, может создавать сотрудников, но не имеет никакого доступа к банковской информации.                                          |
| reseller-desc           | Данный сотрудник имеет такой же доступ, как reseller-support, имеет доступ к некоторым действиям с транзакциями и маркерам транзакций, но не имеет доступа к интеграционой панели.        |
| reseller-client-support | Данный сотрудник имеет такой же доступ, как и reseller-support, может видеть загруженные документы на странице сведений о заказе, но не имеет доступа к обзорной панели и корректировкам. |

### Группы терминалов

Группа терминалов — это сущность, объединяющая несколько Терминалов или Мастер терминалов с разными валютами. Группа терминалов упрощает интеграцию Торговца с Платежным Шлюзом Payneteasy при работе с несколькими валютами. Данный экран позволяет просматривать настроенные Группы терминалов и их идентификаторы.

 
Чтобы лучше понять разницу в интеграции с несколькими терминалами и группами терминалов, посмотрите на рисунок ниже:
 
```plantuml
title Options for multi-currency processing integration
package "Integration to Группы терминалов" {
  class "layoutHelper1" #ffe6cc;line:black;line.dotted
  class "Project\n currency A" #dae8fc;line:black;line.dotted
  class "Project\n currency B" #dae8fc;line:black;line.dotted
  class "Endpoint\n currency A" #ffe6cc;line:black;line.dotted
  class "Endpoint\n currency B" #ffe6cc;line:black;line.dotted
  class "Endpoint\nGroup" #ffe6cc;line:black;line.dotted
}
package "Integration to multiple Endpoints" {
class "layoutHelper2\n" #ffe6cc;line:black;line.dotted
  class "Project\n currency C" #dae8fc;line:black;line.dotted
  class "Project\n currency D" #dae8fc;line:black;line.dotted
  class "Endpoint\n currency C" #ffe6cc;line:black;line.dotted
  class "Endpoint\n currency D" #ffe6cc;line:black;line.dotted
}
class "layoutHelper3" #ffe6cc;line:black;line.dotted
class "Connecting Party\n (Merchant)" #e1d5e7;line:black;line.dotted

"Connecting Party\n (Merchant)" -left-> "Endpoint\nGroup"
"Connecting Party\n (Merchant)" -down-> "layoutHelper3"
"Connecting Party\n (Merchant)" -down-> "Endpoint\n currency C"
"Connecting Party\n (Merchant)" -down-> "Endpoint\n currency D"

"Endpoint\nGroup" -down- "Endpoint\n currency A"
"Endpoint\nGroup" -down- "Endpoint\n currency B"
"Endpoint\n currency C" -down- "Project\n currency C"
"Endpoint\n currency D" -down- "Project\n currency D"
"Endpoint\n currency A" -down- "Project\n currency A"
"Endpoint\n currency B" -down- "Project\n currency B"
"Connecting Party\n (Merchant)" -left[hidden]- "layoutHelper1"
"Connecting Party\n (Merchant)" -right[hidden]- "layoutHelper2\n"
"layoutHelper1" -[hidden]- "Endpoint\n currency A"
"layoutHelper1" -[hidden]- "Endpoint\n currency B"
"layoutHelper2\n" -[hidden]- "Endpoint\n currency C"
"layoutHelper2\n" -[hidden]- "Endpoint\n currency D"
hide members
hide circle
hide layoutHelper1
hide layoutHelper2\n
hide layoutHelper3
```

### Терминалы

Терминал — это уникально идентифицированный терминал в Платежном шлюзе, который назначается Торговцу и должен быть указан в API командах Платежного Шлюза.

#### Поиск терминалов и KPI

На этом экране отображаются все терминалы, созданные для торговца в системе:
 
 

 
The Endpoint is enabled.
 
The Endpoint is disabled.
 
 
В случае большого количества Терминалов можно использовать поиск:
 
 

 
Для мониторинга активности по Терминалу используются ключевые показатели эффективности (KPI), такие как заработок Торговца и другие.
 
Подменю KPI открывается при нажатии кнопки Детали на экране поиска Терминала. Подробнее см. в [Подробный просмотр KPI](https://doc.payneteasy.ru/merchant/reference/kpi.html.md).
 
Щелкните на название Терминала, чтобы открыть подробную информацию об этом Терминале.
 

#### Детали Терминалов

Экран сведений о Терминале содержит информацию о настроенных параметрах данного Терминала, его идентификаторе, лимитах и связанном проекте. Терминал наследует свою валюту от проекта, с которым он связан.
 
Важно отметить, что настройки Терминала (такие как лимиты, платёжные формы, определение Клиента и т. д.) переопределяют настройки Проекта.
 
Для просмотра фильтров, настроенных на Терминале, используйте вкладку “Фильтры фрод-защиты”.
 
Чтобы просмотреть необходимость дополнительных полей в платежной форме, воспользуйтесь вкладкой “API Поля”.
 
Для работы с другими параметрами конфигурации см. информацию ниже.
 

#### Шаблоны сообщений

Шаблоны сообщений можно использовать для отправки клиенту SMS-сообщений или сообщений по электронной почте после каждой успешной транзакции. Для отправки таких сообщений с адреса Торговца, Торговец должен предоставить менеджеру службы поддержки Payneteasy свои учетные данные сервера сообщений. Шаблоны создаются с помощью кнопки Шаблон. Пример заполнения формы:
 
 

 
Пример шаблона сообщения в форме:
 
 

 
Message sending is enabled.
 
Message sending is disabled.
 

#### Платёжная Форма

На Терминале или Мастер терминале зможно настроить пользовательские платёжные формы. Для настройки см. раздел [Настройка форм](https://doc.payneteasy.ru/integration/reference/forms_customization.html.md) в интеграционной документации. Предоставьте настроенные формы менеджеру службы поддержки Payneteasy для установки. Названия установленных форм будут видны на экране сведений о терминале.

#### Обратные вызовы

Обратный вызов настраивается на уровне Терминала с помощью утилиты Создания обратного вызова. Чтобы настроить новый обратный вызов, перейдите в нижнюю часть экрана сведений Терминала и нажмите кнопку “Добавить обратный вызов”.

* Тип транзакции.
* URL-адрес — это полностью определенный URL-адрес со всеми параметрами, которые потребуются целевой странице или скрипту Торговца. Пример: [https://www.merchant.com/sale_completed](https://www.merchant.com/sale_completed).
* Комментарий, если необходимо, .

 
`pic68 торговец_callback`
 

#### Кнопка Купить сейчас

Интеграция кнопки “Купить сейчас” актуальна для Торговцев, имеющих ограниченный ассортимент товаров для продажи. Это самый простой способ интеграции с Payneteasy. Такой способ интеграции не требует больших технических усилий. Интеграция кнопки Купить сейчас также позволяет Торговцу (или Присоеденяющейся стороне, представляющей Торговца) исключить себя из процесса хранения, обработки или передачи данных держателя карты Плательщика или других конфиденциальных платежных данных. Такие данные отправляются Плательщиком в форме сведений о клиенте, размещенной на Payneteasy, и в платёжной форме в сертифицированной среде PCI DSS.

##### Настройка кнопки Купить сейчас

Чтобы настроить кнопку Купить сейчас на сайте Торговца, следуйте этим инструкциям.

> • Найдите нужный Терминал;
> • Перейдите на вкладку Товары Купить сейчас;
> • Нажмите на Добавить товар;
> • Заполните обязательные поля.

##### Обязательные поля кнопки Купить сейчас

| Название параметра   | Описание                                                                                                                                                                                                                                                                                                                        | Значение                                                                                       |
|----------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------|
| Сумма                | Сумма к оплате. Сумма должна быть указана в наибольших единицах с разделителем .. Например, 10.5 для USD означает 10 долларов США и 50 центов.                                                                                                                                                                                  | `Необходимость`: Обязательно   `Тип`: Numeric   `Длина`: 10    |
| Описание             | Описание товара.                                                                                                                                                                                                                                                                                                                | `Необходимость`: Обязательно   `Тип`: String   `Длина`: 64k    |
| redirect_url         | URL-адрес страницы, на которую будет перенаправлен плательщик после завершения транзакции.                                                                                                                                                                                                                                      | `Необходимость`: Обязательно   `Тип`: String   `Длина`: 1024   |
| Пункт назначения     | Назначение платежа. Этот параметр полезен для торговцев, которые позволяют своим плательщикам пополнять свои счета с помощью банковской карты (счета мобильных телефонов, игровые счета и т. д.). Примеры значений: +9999999999; mail@example.com и т. д. Это значение может использоваться системой мониторинга мошенничества. | `Необходимость`: Опционально   `Тип`: String   `Длина`: 128    |
| Платежный инструмент | Методы оплаты.                                                                                                                                                                                                                                                                                                                  | `Необходимость`: Опционально   `Тип`: String   `Длина`: 128    |

##### Поля платёжной формы кнопки Купить сейчас

Чтобы настроить поля, которые будут отображаться в платежной форме, обратитесь к менеджеру службы поддержки Payneteasy: 1. Перейдите в API поля на соответствующем Терминале. 2. Отметьте каждое необходимое поле API как Видимое и/или Обязательное. 3. Сохраните API поля и просмотрите платёжную форму.

> **Warning:** Рекомендуется создавать отдельные Терминалы для кнопки “Купить сейчас”, поскольку активация этой опции может привести к некорретной работе других типов интеграции. Также:

1. Кнопки нельзя удалить, можно только отключить Терминал полностью, чтобы остановить транзакции с помощью кнопки Купить сейчас.
 
2. Изменение суммы транзакции в платежной форме не будет поддерживаться, если на данном Терминале настроена какая-либо кнопка “Купить сейчас”.
 

#### Баланс счёта

У каждой Присоеденяющейся Стороны есть учетная запись Торговца, созданная в Платежном Шлюзе. Текущие балансы счетов Торговцев можно проверить через вкладку Общие на Терминалах. Балансы также можно запросить через API [по Терминалу](https://doc.payneteasy.ru/integration/API_commands/api_v2_get_balance.html.md) или [по Торговцу](https://doc.payneteasy.ru/integration/API_commands/api_v2_get_balance_merchant.html.md).

> **Note:** Чтобы включить эту функцию, обратитесь в службу поддержки Payneteasy.

Ниже приведен пример окна Терминала с текущими счетами:

`balancesendpoint`

### Глоссарий

Для целей данного руководства используются следующие термины и их определения:

| Аппаратно-программный комплекс Payneteasy (Платёжный шлюз Payneteasy).   | Информационная система, предназначенная для автоматизированной и безопасной обработки платежных операций и их хранения.                                                                                                                                                    |
|--------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Система управления платежами Payneteasy (Payneteasy UI)                  | Пользовательский интерфейс управления платежами и аналитическая платформа Платежного шлюза Payneteasy.                                                                                                                                                                     |
| Торговец                                                                 | Компания, предоставляющая услуги, работы или реализующая товары через Электронную коммерцию, мобильную коммерцию или каналы mPOS.                                                                                                                                          |
| Менеджер                                                                 | Организация, предоставляющая услуги по обработке транзакций Торговцев в Процессорах с использованием платежного шлюза Payneteasy и учету транзакций в пользовательском интерфейсе Payneteasy.                                                                              |
| Процессор                                                                | Сущность системы, представляющая собой техническую интеграцию с конкретным банком-эквайером или другим поставщиком платежных услуг для обработки транзакций.                                                                                                               |
| Аккаунт                                                                  | Идентификационные данные в пользовательском интерфейсе Payneteasy, позволяющие пользователю взаимодействовать с системой от своего имени. То же, что учётная запись.                                                                                                       |
| Транзакция                                                               | Соглашение о проведении финансовой операции между покупателем и Торговцем по оплате услуг, работ или товаров, возврату денежных средств за ранее оплаченные услуги, работы или товары, переводу денег с карты на карту либо удержанию денежных средств для будущей оплаты. |
| Антифрод фильтры                                                         | Алгоритм технического анализа транзакций для выявления подозрительных и мошеннических транзакций, основанный на опыте сотрудников Payneteasy и международной практике мониторинга мошенничества.                                                                           |
| БИН                                                                      | Идентификатор банка, первые 6 цифр номера карты.                                                                                                                                                                                                                           |

### Интеграционая панель

Экран Интеграционной Панели находится в разделе Инструменты – Интеграционая Панель. Интеграционая Панель отображает отправленные в систему запросы и ответы системы на эти запросы, а также информацию о возможных ошибках в запросах. Это позволяет быстро устранять ошибки при интеграции. Панель также помогает просматривать инициированные запросы, по которым не были созданы заказы в результате ошибок.

В панели интеграции доступны следующие критерии поиска:

- по идентификатору Терминала или Группы Терминалов, на которые был отправлен запрос,
- по идентификатору заказа, назначенному транзакции системой Payneteasy,
- по серийному номеру запроса и ответа.

Для поиска также можно указать диапазон дат.

### Подробный просмотр KPI

#### Введение

Ключевые показатели эффективности (KPI) - это аналитический модуль, помогающий Пользователю быстро визуализировать подробную бизнес-информацию для каждого основного элемента системы - Терминал, Пользователь, Проект.
 

Чтобы просмотреть подробную информацию о соответствующем элементе, откройте общий экран соответствующего элемента и выберите KPI в раскрывающемся меню Подробности. Порядок отображения KPI в подробном представлении соответствует порядку выбора KPI в раскрывающемся списке. Первый выбранный KPI размещается слева, затем второй и т.д. Пользователь может выбрать до 5 KPI.
 
Критерии поиска (элемент 1 на рисунке выше) влияют только на список отображаемых элементов, а не на расчетное значение KPI.
 
Значение KPI может быть рассчитано за период времени (элементы управления 2\` на рисунке выше). Период времени игнорируется, когда смысл KPI противоречит выбранному диапазону дат или KPI находится вне цели.
 
По каждому KPI может быть применена сортировка для предоставления наиболее ценных данных. Пользователь может выбрать сортировку, нажав на KPI (элемент управления 3 на рисунке выше). Пожалуйста, имейте в виду, что если выбрана сортировка по KPI, а затем KPI удален, сортировка все равно останется применённой.
 

#### KPI

##### Оборот

Показывает: Общую сумму одобренных транзакций следующих типов: успешная оплата, списание, оспаривание и перевод.
 
Частота Обновления: В режиме реального времени с задержкой не более 10 секунд).
 
График: Показывает сумму оборота ежечасно в случае выбора диапазона дат — сегодняшний или вчерашний день; Показывает сумму оборота ежедневно в случае выбора диапазона дат — настоящий или прошлый месяц.
 

`grosstraff`

Пример оборота ежечасно за 7 Декабря.
 

`grosstraff2`

Пример оборота ежедневно за Ноябрь.
 

##### Заработок

Показывает: Доходы для Реселлера или Торговца без учета удержаний для любого типа транзакций в любом статусе.
 
Частота Обновления: В режиме реального времени с задержкой не более 10 секунд).
 
График: Показывает общий заработок ежечасно в случае выбора диапазона дат — сегодняшний или вчерашний день; Показывает сумму оборота ежедневно в случае выбора диапазона дат — настоящий или прошлый месяц.
 

`earing1`

Пример заработка Торговца ежечасно за 7 Декабря.
 

##### Переходящий остаток

Показывает: Значение переходящего остатка для данной даты вне зависимости от выбраного диапазона дат. Каждый тип Пользователя может видеть соответствующее значение переходящего остатка.
 
Частота обновления: Ежедневно в 00:00.
 
График: Показывает значение переходящего остатка за два месяца, начиная с выбранной даты; показывается как общий переходящий остаток, причитающийся Пользователю (положительный), так и общий переходящий остаток к удержанию с Пользователя (отрицательный). Также показывается баланс переходящего остатка, являющийся суммой двух значений выше.
 

`carryover`

##### Даты первой и последней транзакции

Показывает: Дату первой и последней совершенной транзакции  вне зависимости от выбраного диапазона дат. Позволяет быстро находить неактивные экземпляры элементов инфологической модели (Терминалы, Проекты).
 
Частота Обновления: В режиме реального времени с задержкой не более 10 секунд).
 
График: Н/Д
 

##### Средняя сумма транзакции

Показывает: Среднюю сумму транзакции: оплаты, списания, оспаривания и перевода с успешным статусом. Позволяет выявлять отклонения от нормы, когда Торговец меняет источник входящего платежного трафика или продаваемые товары.
 
Частота Обновления: В режиме реального времени с задержкой не более 10 секунд).
 
График: Минимальная, максимальная и средняя сумма транзакций ежечасно в случае выбора диапозона дат — сегодняшний или вчерашний день; Минимальная, максимальная и средняя сумма транзакции ежедневно в случае выбора диапазона дат - настоящий или прошлый месяц.
 

`average1`

Пример минимальной, максимальной и средней суммы транзакций ежечасно за 7 Декабря.
 

`average2`

Пример минимальной, максимальной и средней суммы транзакций ежедневно за Ноябрь.
 

##### Количество заказов на одного Клиента в месяц

Показывает: Среднее количество транзакций любого типа и в любом статусе за месяц, попадающий в выбранный диапазон дат. KPI рассчитывается только для Терминалов и Проектов. Определение Клиента задается на уровне Проекта, по умолчанию одна карточка означает одного Клиента. Клиент на Терминале отличается от Клиента на Проекте, что позволяет изучать источники платежного трафика.
 
Частота Обновления: В режиме реального времени с задержкой не более 10 секунд).
 
График: Количество заказов, произведенных клиентом за месяц, заканчивающийся выбранной датой и начинающийся с даты 12 месяцев назад.
 

`order`

Количество заказов, произведенных Клиентом за месяц. Разное количество заказов отмечено разными цветами. Клиенты с количеством заказов: 5-6, 7-10 и больше 10 объединяются в группы.
 

##### Конверсия постоянных клиентов

Показывает: Отношение повторных транзакций, совершенных конкретным Клиентом, к общему количеству транзакций, совершенных Клиентом за месяц, попадающих в выбранный диапазон дат. Транзакция считается повторной для выбранного месяца, если Клиент совершал транзакцию ранее в любое время. KPI расчитывается только для Терминалов и Проектов. Определение Клиента задается на уровне Проекта, по умолчанию одна карточка означает одного Клиента. Клиент на Терминале отличается от Клиента на Проекте тем, что позволяет изучать различные источники платежного трафика.
 
Частота Обновления: В режиме реального времени с задержкой не более 10 секунд).
 
График: Отношение повторных транзакций, совершенных конкретным Клиентом, к общему количеству транзакций, совершенных Клиентом за месяц, заканчивающийся выбранной датой и начинающийся с даты 12 месяцев назад.
 

`conversion`

Отношение повторных транзакций, совершенных конкретным Клиентом, к общему количеству транзакций, совершенных Клиентом в месяц за последний год.
 

##### Транзакции по стране IP-адреса Клиента

Показывает: Страну, определяемую по IP-адресу Клиента. Учитываются транзакции любого типа в любом статусе. Параметр не зависит от диапазона дат и рассчитывается за весь срок работы.
 
Частота Обновления: ежедневно в 00:45.
 
График: Количество транзакций любого типа с любым статусом по стране, которое выводится на основе IP-адреса Клиента за указанный диапазон дат и обновляется каждые 10 секунд.
 

`trans_by_country`

Количество транзакций для топ 10 стран, полученных с IP-адреса клиента
 

##### Транзакции по стране БИН

Показывает: Страну, определяюмую на основе БИН карты Клиента. Принимаются во внимание транзакции любого типа и в любом статусе. Параметр не зависит от диапазона дат и рассчитывается за весь срок работы.
 
Частота Обновления: ежедневно в 00:45.
 
График: Количество транзакций любого типа с любым статусом по стране, которое выводится на основе БИН карты Клиента за указанный диапазон дат и обновляется каждые 10 секунд.
 

`bin_country`

Количество транзакций для топ 10 стран, рассчитанное на основе БИН карты клиента.
 

##### Средний доход за транзакцию

Показывает: Средний доход за транзакцию для Реселлера или Торговца без учета удержаний для транзакций любого типа в любом статусе.
 
Частота Обновления: В режиме реального времени с задержкой не более 10 секунд).
 
График: Средний доход на транзакцию ежечасно в случае выбора диапазона дат — сегодняшний или вчерашний день; Средний доход на транзакцию ежедневно в случае выбора диапазона дат — настоящий или прошлый месяц.
 

`kpi_average_earing1`

Пример среднего дохода Торговца за транзакцию ежечасно на 7 Декабря.
 

##### Соотношение 3DS/non3DS

Показывает: Отношение 3DS/non3DS для транзакций продажи, предавторизации и переводов, в подтверждённом, отфильтрованном и отклоненном статусе за указанный диапазон дат.
 
Частота Обновления: В режиме реального времени с задержкой не более 10 секунд).
 
График: Отношение 3DS/non3DS для транзакций продажи, предавторизации и переводов, в подтверждённом, отфильтрованном и отклоненном статусе за указанный диапазон дат ежедневно, начиная с первого числа месяца до конечной даты указанного диапазона дат.
 
История:
 

`colors1`

`3d_1`

Пример соотношения количества транзакций в разных статусах для 3DS шлюза за Ноябрь.
 

`3d_2`

Пример соотношения количества транзакций в разных статусах для non3DS шлюза за Ноябрь.
 

`3d_3`

Пример соотношения количества транзакций в разных статусах за Ноябрь.
 

##### Cоотношение 3DS/non3DS для отклоненых транзакций

Показывает: Отношение числа отклонённых транзакций 3DS, обработанных с 3DS для зарегистрированных карт со статусом MPI Y или A, к общему числу транзакций Sale, Preauth или Transfer за указанный период.
 
Частота Обновления: В режиме реального времени с задержкой не более 10 секунд).
 
График: Соотношение количества транзакций 3DS/без 3DS со статусом declined за день для заданного диапазона дат, начиная с первого дня месяца и до конечной даты диапазона.
 
История:
 

`colors2`

`3d_approve_1`

The ratio of the номер of транзакцияs in declined статус with 3DS for November.
 

`3d_approve_2`

The ratio of the номер of транзакцияs in declined статус with non-3DS for November.
 

`3d_approve_3`

Соотношение количества транзакций со статусом declined для смешанного трафика за ноябрь
 

##### Соотношение 3DS/non3DS для подтвержденых транзакций

Показывает: Отношение числа одобренных транзакций 3DS, обработанных с 3DS для зарегистрированных карт со статусом MPI Y или A, к общему числу транзакций Sale, Preauth или Transfer за указанный период.
 
Частота Обновления: В режиме реального времени с задержкой не более 10 секунд).
 
График: Соотношение количества транзакций 3DS/без 3DS со статусом approved за день для заданного диапазона дат, начиная с первого дня месяца и до конечной даты диапазона.
 

`colors2`

`3d_decline_1`

The ratio of the номер of транзакцияs in approved статус with 3DS for November.
 

`3d_decline_2`

The ratio of the номер of транзакцияs in approved статус with non-3DS for November.
 

`3d_decline_3`

Пример соотношения количества транзакций для смешанного трафика за Ноябрь.
 

> **Warning:** Статус MPI и статус регистрации карты в программе 3DS могут быть определены только в случае использования плагина MPI Payneteasy или в случае правильного возврата процессором данных после проверки 3DS.

### Мастер терминалы

#### Детали мастер терминала

Мастер Терминал — это сущность, позволяющая настраивать параллельную форму, также известную как Payment Cashier. Payment Cashier, размещенный на стороне Платежного Шлюза, может отображать несколько способов оплаты на выбор Плательщику. Экран Мастер Терминала позволяет Торговцам настраивать такую форму и выбирать, какие способы оплаты и в каком порядке будут доступны каждому Плательщику в зависимости от его страны.
 
Каждый способ оплаты настраивается на отдельном Терминале, и эти специально настроенные Терминалы подключаются к Мастер Терминалу. Такие Терминалы называются вспомогательными Терминалами. Валюта Мастер Терминала наследуется от Проекта, с которым он связан, но вспомогательные Терминалы не обязательно должны быть в той же валюте, что и Мастер Терминал.
 

#### Конфигурация мастер терминала

Чтобы создать Мастер Терминал перейдите в раздел “Настройки” -> “Конфигурация” -> “Мастер-терминалы” и нажмите на кнопку “+Мастер-терминал”.
 
 

 
После выбора Мастер-терминала появится данное окно:
 
 

 
Нажмите на кнопку К деталям, чтобы просмотреть сам Мастер-терминал (фильтры, платёжную форму, название и т. д.).
 
Нажмите кнопку Изменить, для настройки:
 
• доступные способы оплаты и их порядок на форме (удалить, переместить и т. д.);
 
• инициированный тип транзакции для каждого способа оплаты (продажа или предавторизация с последующим списанием);
 
• список стран для каждого способа оплаты, который будет отображаться.
 
Чтобы скрыть или показать способ оплаты, используйте кнопку включить/выключить. Отключение способа оплаты отключит его только для текущего мастер-терминала.
 

#### Настройка параллельной формы

Можно настроить пользовательские платёжные формы для Мастер-терминала и каждому подключенному вспомогательному Терминалу. Для настройки см. раздел [Настройка форм](https://doc.payneteasy.ru/integration/reference/forms_customization.html.md) в интеграционой документации. Предоставьте настроенные формы менеджеру службы поддержки Payneteasy для установки.

### MCP-сервер Payneteasy

#### Введение

A step-by-step guide to connecting the Payneteasy stateless Streamable HTTP MCP
server to Claude Desktop, Claude Code and other AI agents, authenticated with a
restricted access token.

| Ключевые понятия    |                                     |
|---------------------|-------------------------------------|
| Эндпоинт production | `https://gate.payneteasy.ru/mcp-ui` |
| Authorization       | `Authorization: Bearer <token>`     |
| Транспорт           | `Streamable HTTP (stateless)`       |
| Права токена        | `MCP Read Only`                     |

> **Note:** The server is **read-only**. A `MCP Read Only` token cannot mutate platform state — every exposed tool is annotated `readOnlyHint: true`.

#### URL MCP-сервера

Pick the endpoint that matches your environment. The configuration examples
throughout this guide use the **production** URL — replace it with the sandbox
URL when needed.

| Среда          | Эндпоинт MCP                           | Назначение                           |
|----------------|----------------------------------------|--------------------------------------|
| **Production** | `https://gate.payneteasy.ru/mcp-ui`    | Реальный платёжный трафик            |
| **Sandbox**    | `https://sandbox.payneteasy.ru/mcp-ui` | Безопасное тестирование и интеграция |

> **Warning:** The restricted access token is issued **per environment**. Create the token in the profile of the same environment you intend to connect to. A token from one environment will not work on another.

#### Получение ограниченного токена доступа

Access to the MCP server uses a Bearer token. Payneteasy uses a **restricted access
token** — it grants rights only to a selected set of operations. The
`MCP Read Only` profile is enough to connect MCP.

##### Шаг 1 — Откройте профиль пользователя

Перейдите в раздел  *Ограниченные токены*: Профиль → Ограниченные токены.

`Профиль пользователя с разделом «Ограниченные токены»`

##### Шаг 2 — Нажмите «Создать токен»

Чтобы создать токен, нажмите кнопку Создать токен в правом верхнем углу страницы «Ограниченные токены».

`Страница «Ограниченные токены» с кнопкой «Создать токен»`

##### Шаг 3 — Заполните параметры токена

| Поле                 | Значение                                    |
|----------------------|---------------------------------------------|
| Название             | любое название токена, например `mcp-1` (1) |
| Срок действия в днях | до `180`                                    |
| Права доступа        | отметьте флажок `MCP Read Only` (2)         |
`Форма создания токена с названием, сроком действия и флажком MCP Read Only`

##### Шаг 4 — Создайте и скопируйте токен

Нажмите Создать токен (справа вверху формы), затем скопируйте значение токена и сохраните его.

`Окно с созданным токеном и кнопкой «Скопировать в буфер обмена»`

> **Warning:** The token is shown **only once**. Click Copy to clipboard and store it safely. The value cannot be viewed again. It is a long JWT string of the form `eyJ…`.

#### Claude Desktop

Чтобы подключение к MCP прошло успешно, сначала установите **Node.js**.

##### Установка Node.js

1. Скачайте LTS-установщик для вашей операционной системы с [nodejs.org](https://nodejs.org).
2. Запустите установщик, оставив параметры по умолчанию.
3. Перезапустите терминал (и Claude Desktop), чтобы подхватился новый `PATH`.
4. Проверьте установку:
   ```bash
   node -v
   npx -v
   ```

   Both commands should print a version number, e.g. `v20.11.0`. If
   `npx` is not found, reopen the terminal or restart the computer.

##### Настройка: через mcp-remote

**Расположение файла**

Claude Desktop connects to remote MCP servers through a configuration file. Since
Payneteasy server uses an HTTP transport, it is added to the `mcpServers` section.

| OS      | Путь                                                              |
|---------|-------------------------------------------------------------------|
| macOS   | `~/Library/Application Support/Claude/claude_desktop_config.json` |
| Windows | `%APPDATA%\Claude\claude_desktop_config.json`                     |
Его также можно открыть из приложения: Settings → Developer → Edit Config.
 
Затем **закройте приложение Claude**.
 

> **Note:** In every configuration below, replace `<ACCESS_TOKEN>` with the value you copied. The token is sent to the server in the `Authorization: Bearer <ACCESS_TOKEN>` header.

##### claude_desktop_config.json — mcp-remote

```json
{
  "mcpServers": {
    "Payneteasy": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://gate.payneteasy.ru/mcp-ui",
        "--header",
        "Authorization: Bearer <ACCESS_TOKEN>"
      ]
    }
  }
}
```

##### Windows: устранение проблемы с запуском

On Windows, launching `npx` by an absolute path often breaks because of the
space in `C:\Program Files\nodejs`. The fix is to run it through `cmd /c npx`
with a bare `npx` — it is picked up from `PATH`, so the space no longer breaks
argument parsing:

##### claude_desktop_config.json — Windows

```json
{
  "mcpServers": {
    "Payneteasy": {
      "command": "cmd",
      "args": [
        "/c",
        "npx",
        "-y",
        "mcp-remote",
        "https://gate.payneteasy.ru/mcp-ui",
        "--header",
        "Authorization: Bearer <ACCESS_TOKEN>"
      ]
    }
  }
}
```

That is, `command` = `cmd`, and `npx` becomes the first argument after
`/c`. The resulting command line is `cmd /c npx -y mcp-remote …`, and the
space in “Program Files” no longer matters.

> **Note:** If it still misbehaves, as a fallback specify the 8.3 short path: `"command": "C:\PROGRA~1\nodejs\npx.cmd"`. But the `cmd /c npx` variant is usually enough.

##### Настройка: через HTTP

Если версия Claude Desktop не поддерживает прямой HTTP-транспорт, используйте мост `mcp-remote`:

##### claude_desktop_config.json

```json
{
  "mcpServers": {
    "Payneteasy": {
      "type": "http",
      "url": "https://gate.payneteasy.ru/mcp-ui",
      "headers": {
        "Authorization": "Bearer <ACCESS_TOKEN>"
      }
    }
  }
}
```

> **Note:** After saving the file, **fully restart Claude Desktop**. The connected server appears in the tools menu (the “🔌 / Search and tools” icon).

#### Claude Code

In Claude Code, MCP servers are added with a single `claude mcp add` command or
via a `.mcp.json` file in the project root.

##### Через CLI

Быстрее всего добавить HTTP-сервер вместе с заголовком авторизации:

##### Терминал

```bash
# transport http, server name Payneteasy
claude mcp add --transport http Payneteasy \
  https://gate.payneteasy.ru/mcp-ui \
  --header "Authorization: Bearer <ACCESS_TOKEN>"
```

Видимость задаётся флагом `--scope`:

| Scope     | Описание                                        |
|-----------|-------------------------------------------------|
| `local`   | только для вас в текущем проекте (по умолчанию) |
| `project` | в `.mcp.json`, доступен команде через git       |
| `user`    | доступен во всех проектах                       |

##### Проверка подключения

##### Терминал

```bash
claude mcp list           # list servers and their status
claude mcp get Payneteasy # server details
```

Внутри сессии Claude Code статус проверяется командой `/mcp`.

##### Через файл проекта

To make the server available to the whole team, add a `.mcp.json` to the
repository root. It’s best not to commit the token — move it to an environment
variable:

##### .mcp.json

```json
{
  "mcpServers": {
    "Payneteasy": {
      "type": "http",
      "url": "https://gate.payneteasy.ru/mcp-ui",
      "headers": {
        "Authorization": "Bearer ${PAYNET_MCP_TOKEN}"
      }
    }
  }
}
```

##### Терминал

```bash
export PAYNET_MCP_TOKEN="<ACCESS_TOKEN>"
```

> **Note:** Claude Code expands `${VAR}` from the environment at startup. Commit `.mcp.json` to the repository, and keep the token itself in a local `.env` / secret manager.

#### Другие AI-агенты

The principle is the same for every client: point to the endpoint
`https://gate.payneteasy.ru/mcp-ui`, use the **Streamable HTTP** transport, and
the `Authorization: Bearer <ACCESS_TOKEN>` header. Below are concrete
configurations for popular agents.

##### Cursor

Файл: `~/.cursor/mcp.json` или `.cursor/mcp.json` в проекте.

##### .cursor/mcp.json

```json
{
  "mcpServers": {
    "Payneteasy": {
      "url": "https://gate.payneteasy.ru/mcp-ui",
      "headers": {
        "Authorization": "Bearer <ACCESS_TOKEN>"
      }
    }
  }
}
```

Затем: **Settings → MCP → Enable** для сервера `Payneteasy`.

##### VS Code (GitHub Copilot / Agent Mode)

Файл: `.vscode/mcp.json`.

##### .vscode/mcp.json

```json
{
  "servers": {
    "Payneteasy": {
      "type": "http",
      "url": "https://gate.payneteasy.ru/mcp-ui",
      "headers": {
        "Authorization": "Bearer <ACCESS_TOKEN>"
      }
    }
  }
}
```

Start the server via the *Start* button above the block in `mcp.json` or with
the `MCP: List Servers` command.

##### Cline · Windsurf · другие MCP-клиенты

Most clients use a single format. If a client only supports stdio, wrap the HTTP
server with `mcp-remote`:

##### настройки mcp (общий вид)

```json
{
  "mcpServers": {
    "Payneteasy": {
      "command": "npx",
      "args": [
        "-y", "mcp-remote",
        "https://gate.payneteasy.ru/mcp-ui",
        "--header",
        "Authorization: Bearer <ACCESS_TOKEN>"
      ]
    }
  }
}
```

##### Ручная проверка (curl)

Перед настройкой агента можно убедиться, что токен работает:

##### Терминал

```bash
curl https://gate.payneteasy.ru/mcp-ui \
  -H "Authorization: Bearer <ACCESS_TOKEN>" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
```

The response should contain the list of available tools — that means the server
and token are configured correctly.

#### Доменная модель

The server ships a domain model in its `instructions` field so an agent knows
how the entities relate before it calls any tool. The model is reproduced here.

##### Заказы и транзакции

* An **order** is a customer purchase attempt. It contains one or more
  **transactions**: pre-authorization, capture, refund, chargeback.
* Transaction statuses are **approved**, **declined** and **filtered**
  (*filtered* = blocked by fraud-prevention rules before processing).

##### Инструменты статистики

The `stats_*` tools return **aggregates** (counts and amounts) — never
individual orders. Use `orders_search` to find specific orders.

| Scope                            | Описание                                                                                                                                                                                                   |
|----------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| stats_get_transaction_timeseries | Возвращает количество и сумму по временным интервалам (день / неделя / месяц) с разбивкой по статусу транзакции.                                                                                           |
| stats_get_transaction_summary    | Возвращает продажи / отмены / чарджбэки / фроды / диспуты (количества, суммы и доли) за период с разбивкой по типу карты и общим итогом.                                                                   |
| stats_get_breakdown              | Разбивает метрику за период (столбчатая диаграмма) по статусу транзакции, стране банка-эмитента или IP, а также по причине отказа / чарджбэка / фрода. Фильтры те же, что и у инструмента временных рядов. |

##### Инструменты заказов

| Scope              | Описание                                                                                                                                                                                                                     |
|--------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| orders_get_details | Возвращает один заказ по идентификатору: сводку по заказу и транзакциям, метаданные карты и маскированные контакты клиента. Разделы отображаются только для тех API заказа, которые доступны токену.                         |
| orders_search      | Ищет заказы по периоду изменения с необязательными фильтрами по статусу и сущностям и с постраничной выдачей; возвращает безопасные сводки заказов. Для полной информации по одному заказу используйте `orders_get_details`. |

##### Разрешение идентификаторов

Идентификаторы валют и типов карт получайте через `refs_list_*`.

### Черные, белые и списки лояльности (BWL)

#### Введение

Существует 3 типа списков контроля доступа, которые работают как фильтры проверки в Платежном шлюзе. При обработке транзакции эти списки проверяются и применяется соответствующий фильтр. Экран BWL (Black, White, Loyalty) предназначен для управления белыми, черными и списками лояльности клиентов. Данный экран находится в разделе “Инструменты” -> BWL. Функциональность экрана ускоряет и упрощает процесс помещения атрибутов транзакций в соответствующие списки. Экран также содержит быстрый поиск, который помогает найти точный атрибут транзакции, добавленный ранее.
 

Чтобы выбрать записи из списка, укажите проект для соответствующих списков из раскрывающегося меню.

Можно отобразить любую конкретную категорию из определенного списка, щелкнув по ней в списке категорий справа.

> **Note:** Если необходимо выполнить миграцию со старой учётной записи Торговца на новую, попросите менеджера службы поддержки Payneteasy перенести существующие записи BWL.

##### Чёрные списки

Первый фильтр, проверяющий атрибуты транзакции (адрес электронной почты, IP-адрес, адрес и т. д.), — это “Черный список торговца”. Управлять этими атрибутами (за исключением BIN) также можно на экране Сведений о заказе. Атрибуты могут иметь следующие статусы:
 
 
> * атрибут в чёрном списке;
> * атрибут не в чёрном списке;
> * атрибут в чёрном списке Payneteasy.
 

 
Если какой-либо атрибут транзакции соответствует атрибуту в списках и соответствующий фильтр включён на уровне проекта, статус транзакции устанавливается в Filtered, а причина фильтрации сохраняется в данных транзакции (см. раздел [Коды ошибок в фильтрах транзакций](https://doc.payneteasy.ru/integration/reference/transaction_filters.html.md) в документации по интеграции).
 
При внесении IP-адресов в черный список важно отметить, что большинство клиентов имеют динамический IP-адрес, который может принадлежать разным клиентам одного и того же интернет-провайдера. Пользователи мобильного интернета меняют IP-адрес каждый раз при создании сеанса. Также известно, что клиенты, использующие сервисы сжатия трафика (например, Opera Mobile), заходят через IP-адрес прокси-сервера, предоставляемого сервисами, большинство из которых расположены в Европе. По статистике, если IP-адрес заблокирован более 10 часов, то в 80% случаев фильтрация будет ложноположительной. По этой причине не рекомендуется фильтровать транзакции по IP-адресу без должного контроля. Настоятельно рекомендуется перед добавлением IP-адреса в черный список уточнить у интернет-провайдера, какой максимальный срок блокировки IP-адреса может быть применен. Также важно проверить, присутствует ли данный IP-адрес в каких-либо сторонних антиспамовых системах.
 

##### Белые списки

Белый список позволяет пропустить дополнительные проверки фильтров для транзакций с атрибутами из этого списка. Единственными атрибутами для внесения в белый список являются: номер карты и цифровой отпечаток клиента.
 
 

> **Note:** Если атрибут обнаружен в каком-либо белом списке, то проверки сторонних систем контроля мошенничества также исключаются.

##### Списки лояльности

Список лояльности предназначен для Торговцев, работающих с определенным кругом клиентов. Базой данных клиента можно управлять на стороне Торговца с сертификацией PCI DSS или на стороне Payneteasy. Система позволяет управлять несколькими типами определенных списков клиентов, такими как имена, адреса электронной почты, мобильные номера и т. д.
 
Если какой-либо атрибут транзакции не соответствует атрибуту в списках и соответствующий фильтр включён на уровне проекта, статус транзакции устанавливается в Filtered, а причина фильтрации сохраняется в данных транзакции (см. раздел [Коды ошибок в фильтрах транзакций](https://doc.payneteasy.ru/integration/reference/transaction_filters.html.md) в документации по интеграции).
 
Флаг Однократно служит для автоматического удаления клиента из списка лояльности после его первой оплаты.
 

#### Добавление новых элементов в BWL

To add new elements, click on the ADD button. The type of the added criteria will be automatically identified. Ambiguous criteria type can be manually changed, as presented below. It is also possible to use `changebutton` button to switch between source and destination.

#### Загрузка списков

In order to add many attributes to one of the lists at once, use IMPORT list feature.
 

Например, чтобы добавить номер карты в список, для каждой строки необходимо использовать следующий порядок: (5555514066237247,12,2019) с разделителем ‘,’ между строками.
 
Для некоторых списков требуется код страны. Полный список [кодов стран и штатов](https://doc.payneteasy.ru/integration/reference/country_codes.html.md) для загрузки приведен в документации по интеграции.
 

> **Note:** В случае разрыва соединения или других технических проблем в процессе загрузки обратитесь в службу технической поддержки.

#### Выгрузка в файл

In order to export your data into CSV file, use EXPORT to file feature.
 

Данные будут проанализированы в соответствии с заданными параметрами.
 
Выгрузка будет содержать номера карты отправителя и номера карты получателя в формате 6+4. Для получения полных данных обратитесь в службу поддержки.
 

#### Доступные списки для каждой роли

#### Комментарии

Присутствует возможность прикрепления комментариев при добавлении новых записей в списки BWL по желанию.
 
При добавлении записей со страницы заказа автоматически будет добавлен комментарий с идентификатором транзакции.
 
Для отображения комментария наведите курсор на «…» рядом с записью в списке.
 

#### Подробности заказа: настройка списков BWL

Атрибуты также можно добавлять и удалять из списков BWL на экране сведений о заказе, как показано ниже:
 
- Нажмите ДОБАВИТЬ В СПИСОК и выберите один из показанных списков:

- После выбора любого списка выберите критерий, по которому будет занесена в список:

 
Карта, занесенная в черный список, будет отображаться черным цветом:
 
 

 
Карта, внесенная в белый список, будет отображаться зеленым цветом:
 
 

 
Карта, внесенная в список лояльности будет отображаться в цвете Payneteasy:
 
 

 
- Одновременно можно выбрать несколько критериев:

 

 
- Дополнительные критерии можно добавить через раздел, как показано ниже:

 

 
После добавления критериев через раздел, описанный выше, параметры будут иметь цвета в зависимости от выбранного списка:

### Отчет о движении денежных средств торговца

В этом отчете рассчитываются обороты по транзакциям: продажа, чарджбэк (возвратный платёж) и возврат средств. Показывается распределение оборота с комиссиями и примерная прибыль за выбранный период, а также ежедневная прибыль. Для загрузки необходимых данных используются следующие критерии: даты, проект, валюты.
 
При необходимости можно добавить дополнительные критерии, нажав на кнопку Критерии: терминалы, проекты.
 
Данные можно загрузить, нажав на кнопку Сгенерировать.
 
Пример полученного отчета показан ниже:

### Ежедневный отчёт о деятельности торговца

В этом отчёте отображается ежедневный финансовый поток за определенный период.
 
Для загрузки необходимых данных используются следующие критерии: дата, проекты, валюты, типы карт. При необходимости можно добавить дополнительные критерии, нажав на кнопку Критерии: терминалы и проекты.
 
Отчет можно загрузить, нажав на кнопку Сгенерировать.
 
Пример полученного отчета показан ниже:

### Заказы

#### Поиск заказов

На экране “Поиск Заказов” отображается информация по всем совершенным транзакциям Payneteasy. Экран расположен в разделе “Заказы” – “Поиск заказов”. Связанные транзакции сгруппированы в Заказы. Заказ имеет несколько идентификаторов: назначенный Payneteasy, присвоенный Торговцем или Присоединяющейся Стороной, а также присвоенный внешним процессором (в случае обработки транзакции внешним процессором).

##### Найти заказы

Базовый поиск осуществляется по дате и точным критериям:

 

Точные критерии могут быть использованы для поиска конкретного заказа:

| `Основные`          | • идентификатор счета Торговца   • идентификатор заказа в Payneteasy   • идентификатор заказа процессора   • назначение   • сумма   • токен сессии                                                                                                                                  |
|---------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `Клиент`            | • телефонный номер   • электронная почта   • IP адрес   • Страна IP адреса   • страна Плательщика                                                                                                                                                                                               |
| `Карта Отправителя` | • название банка   • страна   • карта с идентификатора заказа   • BIN   • Диапазон BIN из заказа   • последние 4 цифры   • 6+4   • код подтверждения   • ARN   • RRN   • держатель карты   • карта ref id   |
| `Карта Получателя`  | • название банка   • страна   • карта с идентификатора заказа   • BIN   • Диапазон BIN из заказа   • последние 4 цифры   • 6+4   • код подтверждения   • ARN   • RRN   • карта ref id                                   |
| `Wire`              | • номер счёта   • номер маршрута                                                                                                                                                                                                                                                                                                    |
| `Card Present API`  | • идентификатор ридера   • серийный номер ключа ридера   • серийный номер устройства ридера                                                                                                                                                                                                                             |
| `Мобильный API`     | • серийный номер устройства   • серийный номер телефона   • IMEI телефона                                                                                                                                                                                                                                               |

Наиболее удобными критериями для поиска точной транзакции являются:

* 6+4 - позволяет наиболее точно искать конкретную карту;
* код подтверждения и RRN (можно получить из банковской выписки или из квитанции о переводе);
* идентификатор транзакции.

Дополнительные критерии поиска используются для облегчения выбора списка соответствующих заказов.
 
Доступны следующие критерии:
 

| `Типы карт`         | Позволяет просматривать транзакции с определенным типом карт и способами оплаты.                     |
|---------------------|------------------------------------------------------------------------------------------------------|
| `Валюта`            | Позволяет выбрать одну или более валют.                                                              |
| `Типы транзакций`   | Позволяет отобразить все транзакции указанного типа.                                                 |
| `Статусы транзаций` | Позволяет отобразить все транзакции с указанным статусом.                                            |
| `Статус заказа`     | Если транзакцию не удается найти, данный критерий позволяет отслеживать её на всех этапах обработки. |
| `Терминал`          | Позволяет отобразить все транзакции на выбранных терминалах.                                         |
| `Проект`            | Позволяет отобразить все транзакции по конкретному проекту или по нескольким проектам.               |
| `Торговец`          | Позволяет отобразить все транзакции для конкретного торговца или для нескольких торговцев.           |
| `Код ошибки`        | Позволяет отобразить все транзакции с определённой ошибкой.                                          |
После выбора одного или нескольких критериев поиска нажмите Поиск.
 

##### Просмотр заказов

По умолчанию заказы в Платёжном Шлюзе отображаются следующим образом:
 
 

 
Заказы могут быть представлены в Кратком или Подробном виде. Вид можно переключить с помощью следующей кнопки:
 
 

 
В подробном виде заказы будут отображаться следующим образом:
 
 

 
Количество заказов, отображаемых на одной странице, можно изменить кнопками в столбце “Строки”:
 
 

 
Кнопка Дата выполняет сортировку по дате. По умолчанию последние транзакции отображаются сверху.
 

##### Загрузка отчета о выбранных транзакциях

Чтобы выгрузить список отсортированных транзакций, нажмите одну из следующих кнопок:
 
- скачать в Excel формате.
 
- скачать в CSV формате.
 
Для управления полями выгрузки можно использовать дополнительное меню:
 
 

 
В раскрывающемся окне выберите необходимые данные и сохраните список:
 
 

##### Экран деталей заказа

Экран сведений о заказе открывается нажатием на идентификатор заказа на экране поиска.
 
Подробная информация о заказе, такая как идентификаторы и время создания заказа, отображается в левой части данного экрана:
 
 

 
На карте отображаются первые шесть и последние четыре цифры номера карты, дата окончания срока действия карты и имя владельца карты. Также присутствует информация о стране, банке, типе карты и платежной системе карты.
 
 

 
Рядом с картами Отправителя и Получателя находятся кнопки для добавления данных карты в черные, белые и списки лояльности.
 
 

 
Дополнительные данные о Клиенте, отправленные Торговцем или предоставленные Клиентом на платёжной форме, отображаются под индикатором карты или индикатором другого способа оплаты. Клик по значению такого параметра вызовет поиск всех транзакций, содержащих такое же значение.Клик по значку + возле значения параметра (обведены красным на изображении ниже) добавит его в чёрный, белый список или список лояльности. Повторный клик по значку исключит значение из списка.
 
 
`search торговец faq`
 
Дополнительные данные о Клиенте, отправленные Торговцем или предоставленные Клиентом на платёжной форме, отображаются под индикатором карты или индикатором другого способа оплаты. Клик по значению такого параметра вызовет поиск всех транзакций, содержащих такое же значение.Клик по значку + возле значения параметра (обведены красным на изображении ниже) добавит его в чёрный, белый список или список лояльности. Повторный клик по значку исключит значение из списка.
 
 

 
Все транзакции внутри заказа группируются и рассчитывается комиссия за каждую операцию:
 
 

 
Данный экран имеет функцию добавления заметок. Например, заметки для документов по транзакции, контактов клиентов или любая другая информация, связанная с этим заказом.
 
 

 
Текущий статус транзакции находится в правой верхней части экрана заказа:
 
 

 
Общая информация обо всех транзакциях, связанных с предоставленными данными клиента, отображается на верхней панели:
 
Общая сумма всех транзакций, совершенных указанным держателем карты, и количество одобренных/отклоненных/отфильтрованных и т. д. транзакций:
 
 

 
Общая сумма транзакций и количество одобренных/отклоненных/отфильтрованных транзакций с указаной электронной почтой:
 
 

 
Общая сумма транзакций и количество одобренных/отклоненных/отфильтрованных транзакций с указаным IP адресом:
 
 

 
Общая сумма транзакций и количество одобренных/отклоненных/отфильтрованных транзакций с указаным номером карты (PAN):
 
 

##### Процедура Списания и Отмены из личного кабинета

Если у предварительной авторизации успешный конечный статус, Торговец может инициировать отмену, которая отменяет вычет и возвращает заблокированную сумму обратно на карту клиента. Вместо отмены, Торговец может инициировать списание, которое вычитает заблокированную сумму с карты клиента. Чтобы инициировать отмену или списание по транзакции, перейдите к деталям соответствующего заказа. На странице сведений о заказе нажмите кнопку Отменить заказ для отмены вычета и Подтвердить заказ для вычета заблокированной суммы.

##### Процедура Возврата из личного кабинета

Если заказ имеет успешный конечный статус, Торговец может вернуть деньги Клиенту по его запросу. Чтобы инициировать транзакцию возврата (отмены) на карту Клиента, перейдите в детали соответствующего заказа. На странице деталей заказа нажмите на кнопку Сделать реверсал.

 

Диалоговое окно откроется как показано ниже:

 

В этом диалоговом окне указывается сумма возврата. Она может быть указана как в полном размере, так и в частичном в том в случае, если Торговец возвращает оплату за определёные товары, являющимися частью заказа. В поле Коментарий можно добавить описание возврата.

> **Warning:** Торговцам следует быть предельно внимательными при возврате средств! Запросы на возврат немедленно отправляются в банк и отменить эту транзакцию  из системы Payneteasy будет невозможно.

##### Процедура Возврата из личного кабинета

If the order has final status and had server_callback_url in the initial request, the Merchant can re-send the final callback.
To send a callback to the Connecting Party, go to the details of the relevant order.
On the order details page, click the Callbacks button.

`pic52 Manager faq`

Диалоговое окно откроется как показано ниже:

`pic53 Manager faq`

In this dialog box click Send Again to resend the callback to the Connecting Party. If the
callback is not sent successfully, click Send Again to retry, or click Cancel to cancel the callback.

#### Рекуррентные платежи

Данный экран находится в “Заказы”.
 
На данном экране отображаются регулярные платежи (например, подписки).
 
Базовый поиск осуществляется по дате и точным критериям:
 
 

 
Кнопка Критерии сожержит дополнительные параметры поиска:
 
 

| `Статус рекуррента`   | Позволяет выбрать указанный статус повторения регулярной транзакции:   Failed - неудачная попытка;   Scheduled - запланированная попытка;   Stopped - временно приостановленная или отмененная попытка.                                                                                                   |
|-----------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `Тип рекуррента`      | Позволяет выбрать указанный тип повторения регулярной транзакции:   Manual - регулярные платежи инициируются вручную;   Auto - регулярные платежи инициируются автоматически в соответствии с установленным графиком;   Native - регулярные платежи используют специальную интеграцию в банке Эквайере.   |
| `Терминал`            | Позволяет выбрать конкретный терминал или несколько терминалов, если таковые имеются.                                                                                                                                                                                                                                                                 |
| `Проект`              | Позволяет выбрать конкретный проект или несколько проектов, если таковые имеются;   Выберите один или несколько критериев и нажмите Поиск чтобы найти нужную транзакцию.                                                                                                                                                          |

#### Оповещения Ethoca

Эта секция позволяет увидеть оповещения от Ethoca, которые помогают предотвратить чарджбэки:

#### ChargebackHelp

Эта секция позволяет увидеть оповещения от Verifi, которые помогают предотвратить чарджбэки:

### Статусы и типы транзакций

#### Типы транзакций

Платежный шлюз Payneteasy делит все транзакции на несколько типов, в зависимости от цели каждой транзакции. Каждая транзакция имеет определенный статус.

| `Продажа`                          | Прием оплаты за предоставленные товары или услуги за одну операцию.                                                                                                                                                                                                                                                                                                                                                                                                            |
|------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `Предавторизация`                  | Блокировка фиксированной суммы денег на карте для последующего снятия (финансовый залог). Держатель карты не сможет воспользоваться удержанными средствами, однако эти деньги не будут сняты с банковского счета до тех пор, пока от Торговца не поступит последующий запрос (списание). По истечении определенного периода времени, если от Торговца не поступит последующий запрос, удержание этой суммы средств отменяется, и она снова станет доступной для использования. |
| `Списание`                         | Снятие ранее удержанных денежных средств по транзакции “предавторизация” с банковского счета держателя карты.                                                                                                                                                                                                                                                                                                                                                                  |
| `Отмена`                           | Отмена удержания средств посредством транзакции “предавторизация”.                                                                                                                                                                                                                                                                                                                                                                                                             |
| `Возврат`                          | Операция возврата средств по ранее одобренной транзакции (“продажа” или “предавторизация” с выполненным последующим “списанием”). Например, отмена заказа Плательщиком или частичный возврат товаров в магазин.                                                                                                                                                                                                                                                                |
| `Перевод`                          | Транзакция перевода Peer-to-Peer (p2p) между 2 картами. В некоторых случаях эта транзакция может быть разделена на 2 отдельных шага - card2account и deposit2card.                                                                                                                                                                                                                                                                                                             |
| `Чарджбэк`                         | Принудительная операция возврата средств, инициированная держателем карты или банком-Эмитентом в случае мошенничества.                                                                                                                                                                                                                                                                                                                                                         |
| `Мошенничество`                    | Специальный маркер для мошеннических транзакций.                                                                                                                                                                                                                                                                                                                                                                                                                               |
| `Запрос подтверждающих документов` | Запрос дополнительных документов по спорному или подозрительному платежу. Документы могут быть запрошены у Торговца или у его агента (поставщика услуг).                                                                                                                                                                                                                                                                                                                       |
| `Верификация аккаунта`             | Валидация данных карточного счета Плательщика.                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| `Выплата`                          | Перевод средств со счета Торговца на банковский счет или цифровой кошелек Клиента (Получателя).                                                                                                                                                                                                                                                                                                                                                                                |

#### Статусы транзакций

Все транзакции отмечены в соответствии с их статусами:

|       | `Успешная транзакция`        | Транзакция была успешно обработана банком-Эквайером (оплата произведена в рамках транзакции). Конечный статус.                                                             |
|----------------------------------------------|------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|       | `Отклонённая транзакция`     | По какой-либо технической причине банк-Эквайер не может обработать транзакцию. Например, по причине недостатка средств на карте или счете Клиента. Конечный статус.        |
|       | `Отфильтрованная транзакция` | Транзакция была отфильтрована Платежным Шлюзом Payneteasy и не была обработана. Конечный статус.                                                                           |
|       | `Ошибка`                     | Обработка транзакции не удалась. Можно предпринять вторую попытку обработки транзакции. Если ошибка повторится, обратитесь в службу поддержки Payneteasy. Конечный статус. |
|     | `Неизвестно`                 | Платежный Шлюз не смог получить конечный статус транзакции. Обратитесь в службу поддержки Payneteasy для уточнения статуса транзакции. Не конечный статус.                 |
|      | `Сбой`                       | Внутренний статус системы. Означает, что в системе нет доступных настроек для маршрутизации транзакции из-за фильтров или других ограничений. Конечный статус.             |
|  | `Обработка`                  | Транзакция обрабатывается. Если статус транзакции не изменился в течение часа - что-то пошло не так, сообщите в службу поддержки Платёжного Шлюза. Не конечный статус.     |
 
 

> **Note:** После сверки статус транзакции может быть изменен, даже если транзакция находится в конечном статусе.

### Отчёт о производительности

В этом отчете отображается финансовый поток за указанный период. Он также позволяет просматривать количество успешных и неуспешных транзакций. Гибкая настройка критериев позволяет получить необходимые данные: диапазон и тип дат, валюты, типы карт, группировку данных. При необходимости можно добавить дополнительные критерии, нажав на кнопку Критерии: терминалы и проекты.
 
Возможно произвести предварительный просмотр отчета, нажав на кнопку Предварительный просмотр.
 
Отчет можно создать, нажав на кнопку Сгенерировать.
 
Пример полученного отчета показан ниже:

### Проекты

Проект — это сущность в Платежном шлюзе, определяющая условия получения платежного сообщения и его дальнейшую маршрутизацию к подключенному Процессору.

#### Поиск проекта и KPI

 

Даный экран позволяет просматривать все Проекты, созданные в системе. В случае возникновения большого количества Проектов, может быть полезно воспользоваться поиском:

 
Для мониторинга активности проекта используются ключевые показатели эффективности (KPI), например доходы Торговца, средняя стоимость заказа и другие. Подменю KPI открывается кнопкой Detailed на экране поиска проекта. Подробнее см. [Подробный просмотр KPI](https://doc.payneteasy.ru/merchant/reference/kpi.html.md).
 
Нажмите на название Проекта, чтобы открыть подробную информацию о нем.
 
Вкладка “Общие” позволяет просматривать характеристики Проекта и связанные с ним Терминалы.
 

#### Шаблоны сообщений

Шаблоны сообщений можно использовать для отправки Клиенту SMS-сообщений или оповещений по электронной почте после каждой успешной транзакции. Для отправки таких сообщений с адреса Торговца, Торговец должен предоставить менеджеру службы поддержки Payneteasy свои учетные данные сервера сообщений. Шаблоны создаются с помощью кнопки Шаблон. После нажатия откроется окно с данными нового шаблона:
 
 

 

Созданный шаблон появится в списке:

Message sending is enabled.
 
Message sending is disabled.

### Справочник

### Отчеты

Payneteasy имеет несколько форматов отчетов для просмотра движения денежных средств и эффективности, проведения сверки и использования во внешних системах, а также возможность гибкой настройки данных, отображаемых в отчетах. В данном разделе подробно рассматриваются функциональные возможности системы по отображению и выгрузке отчетов в форматах Excel и CSV.

Пользовательский интерфейс Payneteasy позволяет создавать следующие типы отчетов:

| [Транзакционный отчёт](https://doc.payneteasy.ru/merchant/reports/transaction_report.html.md)                                                   | Список транзакций за определенный период времени. Данный тип отчета наиболее удобен в случаях, когда необходимо провести сверку операций с банком.                                                                                                                                      |
|----------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [Отчет о движении денежных средств Торговца](https://doc.payneteasy.ru/merchant/reports/merchant_cashflow_report.html.md)                 | Рассчитывает обороты и прибыль торговца по датам.                                                                                                                                                                                                                                       |
| [Отчет о производительности](https://doc.payneteasy.ru/merchant/reports/performance_report.html.md)                                             | Рассчитывает количество и общий объем успешных и отклоненных транзакций, возвратов, чарджбеков, транзакций с маркером мошенничества, а также процент всех неуспешных финансовых транзакций (отклоненных, возвращёных, чарджбэков, мошенничества) по отношению к одобренным транзакциям. |
| [Ежедневный отчёт о деятельности Торговца](https://doc.payneteasy.ru/merchant/reports/merchant_daily_performance_report.html.md) | Данный отчет позволяет сформировать сводный список транзакций по датам следующих типов: продажа, возврат и чарджбэк.                                                                                                                                                                    |
| [Статистика отказов](https://doc.payneteasy.ru/merchant/reports/decline_statistics.html.md)                                                     | Отображает статистику отклоненных транзакций, разделенную на следующие группы: отклоненные банками-Эквайерами, отклоненные внутренней системой мошенничества Payneteasy и отклоненные из-за различных ошибок в обработке, если таковые возникли.                                        |

### Настройки

### Поиск настроек

Экран Поиска настроек предназначен для поиска проектов и терминалов, по их названию или идентификатору и находится в разделе “Настройки” — “Поиск настроек”.

 

Диапазон поиска можно указать по Терминалам или Проектам.

### Онлайн мониторинг

#### Введение

Экран Онлайн-мониторинга находится в разделе “Инструменты” — “Мониторинг”. Здесь отображается информация о различных ошибках, требующих незамедлительного реагирования. Также присутствует возможность подписки на уведомления о любых ошибках через Telegram, электронную почту или Push-уведомления.

#### Баланс на исходе

Это оповещение используется при необходимости получения уведомления, когда текущий баланс равен или меньше 1000$.
 
 
`отключеные запланированные корректировки`
 

#### Важные фильтры

Уведомления могут быть созданы для случаев, когда транзакции были отфильтрованы по одному из следующих фильтров:

1. Частота использования номера исходной кредитной карты для адреса электронной почты или IP-адреса
2. Интервал одобреных транзакций для номера исходной кредитной карты
3. Общая частота использования номера кредитной карты за последние 24 часа (дневной лимит)

| Название поля   | Описание                                                                                                                                        |
|-----------------|-------------------------------------------------------------------------------------------------------------------------------------------------|
| Дата            | Дата создания оповещения.                                                                                                                       |
| ID              | Идентификационный номер оповещения.                                                                                                             |
| Название        | Имя Торговца.                                                                                                                                   |
| ТорговецID      | Идентификационный номер Торговца.                                                                                                               |
| Описание ошибки | Описание ошибки фильтра проекта с кодом ошибки. Пример: [1033] Слишком много одобренных транзакций для одного и того же номера кредитной карты. |
 
`отключеные запланированные корректировки`

### Инструменты

### Уведомления о маркерах транзакций

#### Введение

Инструмент уведомления о маркерах транзакций используется для уведомления пользователей о конкретных проблемах, которые могут возникнуть с транзакциями и обычно требуют быстрого реагирования. Каждый раз при срабатывании указанного маркера транзакции на адрес электронной почты пользователя будет отправляться уведомление. Например, если включены уведомления о чарджбэках, пользователь будет получать новое уведомление по электронной почте для каждого чарджбэка, примененного к обработанной транзакции. Содержимое электронного письма можно настраивать.

На главном экране отображается список всех уведомлений, их статус, идентификатор, тема, язык, имя Торговца, тип сообщения и тип маркера.

#### Конфигурация

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

| Параметр      | Описание                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
|---------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Статус        | Enabled/Disabled                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| Тип маркера   | * Чарджбэк * Чарджбэк после возврата Ethoca * Чарджбэк после возврата * Дублированный чарджбэк * Неуспешная отмена * Неуспешное списание * Неуспешная проверка PAN * Неуспешная инициация сессии оплаты * Неуспешная инициация сессии выплаты * Неуспешный возврат * Неуспешная оценка риска * Мошенничество * Непоследовательный статус заказа * Неправильный код отклонения транзакции * Несколько мастер подтверждений * Проверка по телефону * Уведомление об обратном вызове от процессора * Отклонённая выплата * Отклонённый возрат * Запрос подтверждающих документов * Определяется пользователем |
| Торговец      | Чтобы выбрать Торговца, введите имя или идентификатор Торговца.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| Тема          | Все письма для этого маркера будут иметь эту тему.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| Тип сообщения | * Электронная почта — электронное письмо с обычным текстом. * Электронная почта (HTML) — электронная почта с поддержкой HTML.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| Сообщение     | Все электронные письма для этого маркера будут содержать это текстовое сообщение.   Уведомления о маркерах транзакций поддерживают [Шаблоны сообщений](https://doc.payneteasy.ru/integration/common_utilities/receipt_message.html.md).   Кроме того, поддерживается $!{MARKER_TYPE_NAME}.                                                                                                                                                                                                                                                                                                                                                                    |

### Маркеры Транзакций

Маркеры транзакций создаются для уведомления пользователей о конкретных проблемах, которые могут возникнуть с транзакциями и обычно требуют быстрого реагирования или дополнительных бизнес-процессов (например, ручного просмотра или общения с Клиентом). Этот экран позволяет просматривать все созданные маркеры транзакций и работать с ними, добавляя комментарии к маркерам и устанавливая их как “обработанные”, если проблема была решена. Уведомления о новых маркерах могут быть отправлены по электронной почте, эта функция настраивается на экране “Уведомления о маркерах транзакций”. Маркеры транзакций можно сортировать с помощью критериев поиска по типу маркера и статусу. Список маркеров содержит информацию о каждом типе маркера, статусе и связанном идентификаторе заказа:

### Транзакционный отчёт

В данном отчете содержится список транзакций за указанный период времени. Для выгрузки необходимых данных используются следующие критерии: дата, тип даты, типы транзакций, изменение статуса, идентификатор транзакции, рекуррентный фильтр, часовой пояс, кодировка CSV. Этот отчет также может быть загружен через API для автоматизированной сверки или анализа, см. [Удаленный Транзакционный Отчёт](https://doc.payneteasy.ru/integration/common_utilities/reports.html.md#remote-transactions-report) в интеграционной части документации. Дополнительные критерии можно добавить, нажав на кнопку Критерии: статус заказа, валюта, терминалы, проекты.
 
Максимальный период выгрузки отчета составляет 93 дня. Если требуется выгрузка данных за шесть месяцев и более, разделите требуемый период на части.
 

Чтобы изменить шаблон, воспользуйтесь инструментом управления шаблонами:

Выберите критерии для этого отчета во всплывающем окне:

После выбора необходимых параметров введите имя шаблона и нажмите кнопку Сохранить. Для выгрузки отчета нажмите на кнопку CSV.
 
Пример полученной таблицы показан ниже:
 
 

 

> **Note:** Сформированный отчет имеет правильно сформированный формат (well-formed) CSV. В соответствии с поля [RFC 4180](https://datatracker.ietf.org/doc/html/rfc4180), содержащие переносы строк (CRLF, CR, LF), двойные кавычки и запятые заключаются в двойные кавычки.

### Виртуальный терминал

#### Введение

Виртуальный терминал (ВТ) — это технологическое решение, позволяющее обрабатывать транзакции из личного кабинета Торговца в Пользовательском интерфейсе. Эта функция не требует интеграции API торговца с Payneteasy. ВТ сразу предоставляет полнофункциональное рабочее место менеджера по платежам. ВТ используется для удаленной обработки транзакций без присутствия клиента, например, если клиент оформляет заказ или оплачивает услуги, находясь в другом городе или стране. Рабочий процесс ВТ полностью настраивается в соответствии с потребностями бизнеса. Гибкие шаблоны помогут минимизировать время заполнения всех данных клиента. Виртуальный терминал поддерживает регулярные платежи (по рекуррентному идентификатору). Если клиент ранее предоставил данные о держателе карты в процессинговую систему Payneteasy, и Торговец зарегистрировал такой платеж для получения рекуррентного идентификатора, будущие платежи можно совершать с рекуррентным идентификатором, вместо данных о держателе карты. ВТ также позволяет сгенерировать ссылку, по которой клиент может отправить данные держателя карты в защищенной среде и, при необходимости, пройти проверку 3-D Secure.
 
 
ВТ обеспечивает безопасный способ обработки транзакций MOTO с поддержкой асимметричной криптографии. Для этого, пожалуйста, [Сгенерируйте пару публичного и приватного ключей](#public-private-keys-vt), передайте публичный ключ в службу поддержки Payneteasy и загрузите приватный ключ [в консоль браузера](#import-private-keys-to-bc-vt)) или [пользовательский интерфейс](#private-key-to-ui-vt)).
 
Доступные операции для ВТ:
 
 
• прием платежей от новых и от ранее зарегистрированных клиентов ([Продажа](#sale-vt));
 
• удержание средств новых и ранее зарегистрированных клиентов ([Предавторизация](#preauth-vt));
 
• перевод средств с карты на карту для новых и для ранее зарегистрированных клиентов ([Перевод между картами](#transfer-vt));
 
• выдача денежных средств на карты новых и ранее зарегистрированных клиентов ([Перевод на карту (D2C)](#d2c-vt));
 
• перевод средств с одного банковского счета на другой ([Перевод на счёт](#payout-vt)).
 
 
Экран ВТ находится в меню “Инструменты” – “Виртуальный терминал (ВТ)”.
 
 

#### Асимметричная криптография

Большим преимуществом нового виртуального терминала является использование системы асимметричной криптографии. Асимметричная криптография (криптография с публичным ключом) представляет собой криптографическую систему, использующую пары ключей: публичные ключи, которые могут быть свободно распространены, и приватные ключи, которые известны только владельцу. Генерация таких ключей основана на криптографических алгоритмах, использующих математические задачи по созданию односторонних функций. В результате, для безопасности требуется лишь сохранять конфиденциальность приватного ключа. Публичный ключ может распространяться открыто без ущерба для безопасности.
 
 
Виртуальный терминал персонализируется. Пользователь подписывает запрос на транзакцию своим приватным ключом, а система использует публичный ключ для проверки того, что запрос сделан владельцем соответствующего приватного ключа.
 

##### Генерация пары публичного и приватного ключей

Для авторизации запросов виртуальному терминалу требуется пара публичного и приватного ключей от пользователя. Для генерации ключей, перейдите на сайт [https://www.openssl.org/](https://www.openssl.org/) ( [https://slproweb.com/products/Win32OpenSSL.html](https://slproweb.com/products/Win32OpenSSL.html) ), загрузите последнюю версию openssl и выполните следующие команды:
 
 
openssl genpkey -algorithm RSA -out private_key_pkcs_8.pem -pkeyopt rsa_keygen_bits:4096
 
 
openssl rsa -pubout -in private_key_pkcs_8.pem -out public_key.pem
 
 
Пожалуйста, не передавайте никому свой приватный ключ, это конфиденциальная информация, предназначенная только для личного использования. Публичный ключ, напротив, должен быть передан Payneteasy для настройки терминала. Во избежание компрометации используйте разные ключи для производственной и тестовой сред.
 
 
Незашифрованный закрытый ключ PKCS #8 RSA в формате PEM начинается с текста —– BEGIN PRIVATE KEY —–. Этот ключ необходимо импортировать в консоль браузера или пользовательский интерфейс. Подробнее см. ниже.
 

##### Импорт приватного ключа в консоль браузера

Приватный ключ выгружается в IndexedDB браузера с помощью скрипта, связанного с текущей открытой страницей. Этот скрипт использует только простые API браузера (API WebCrypt, API IndexedDB) и не использует никаких внешних скриптов, чтобы избежать компрометации приватного ключа.
 
Последовательность импорта:
 
1. Откройте страницу [https://gate.payneteasy.ru/paynet-ui/login-step1](https://gate.payneteasy.ru/paynet-ui/login-step1) в браузере (не входите в систему).
 
2. Откройте консоль браузера. В Chrome это делается с помощью Ctrl+Shift+J. В Safari, это делается с помощью Ctrl+Shift+I, Ctrl+Alt+C. Для Mac - Cmd, вместо Ctrl.
 
3. Замените демо ключ реальным приватным ключом в формате PEM (он должен иметь префикс **—–BEGIN PRIVATE KEY—–** в начале).
 
```http
var privateKeyPem = `-----BEGIN PRIVATE KEY-----\
     MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDJzUVnqQhDWF2H
     pxAMcyo7f+ucIEJS3AQHG0ET/dxJ0qssGymIjdzelJ3XI+oTq2y9TTimQjtujoeh
     6zl44WrXCbJLCUDWsNjlh7hmBorpU6tJVhw1466CAxkktPJHkMqJYF0efegIfOwU
     otTzwY4tGlN6iWK0aMJ5ZWhWpZDbgap72vrRXKfCN6/JeTUdsOI7PAeZw0me04jZ
     8Lova9FVIbVzOJaFGwSUroMvXevIB8rOD57c3VCLTxE3aGNMz+9DLl6GCm8WZ1US
     HmiHybqgvGLyQswBPFcVzFgd7BpgZs+JAzYDh8ZGANvjA5F9u0b6Ynb3Mpm3+9Rl
     CtvSxKwpAgMBAAECggEAZ6+hro5KIZggjleHRm5Rz7p9S33DtiE3rJMTT/tKmV+1
     9XaLU49YYcDIjMb2OV8GAwnPRpWXRcnT5J0grXxc0do4kpdRij3ZY63lT/6ilxoX
     Uxn8aq/udPy0iYizR5QcjJNHpSgZ9WqCPmQfuJLFw2TYaYh3f6yn54n0Hzj4gd9l
     tsol4xeTKQ47c/vUF7kHfD8IYzL8jv3a3++IqzCwJ3jIpTENsBYAgrkbYN9f9GHD
     BvX3sz6tgFaYU2R8YbDvA0Yq9tVPwYrPvbhwoht6PsjE/R0UK6yqnKPEADdzWvP8
     frXmmtJ35rAymqUWfpqx9RdZ0NMR7J8ut8C5365PJQKBgQD+UidVWut7d9qvhZKq
     +T5qtasH5qkD34idFl4Ay8xsSntqTrXr7q1Ff+FQY6R+f/8IzB4ZqgnV58+8AEMc
     gJzNmkf9L119SCQDxRV/TgW2eHrUrI9XS2AI5tmyzaGY1xL4fCQQMvqNAGERT6sS
     XJRt8WjuGmE4zeqxNB0XY7u1OwKBgQDLIlnksOrPw00lWUbXHSHwdfBzjYU97KVu
     GnOl5fsCmlKanqHUfd/4StnRXpl3l56hig8mYsHV5EcfUEX98PaSbTAy8Lk5y5E9
     ye2ENOgl/IyMgHPtT6spFKm7jRmpulqG4FVCGxQl3n6/nSmztA3S1zLZzi0guI0E
     oxXCbG796wKBgC8NSgOrr5eHRClnIAyL0nVxqPPsQ+bYi3Dsu3WQPwDmAtFXQKcm
     4F3UW/5AgSV6Ttf007jR0cIGglN5BPGYBeqwGZOJGNXd6/PambCU4c+xmKASUO7I
     njrnYu2Gx9f8KqFYbl+k3uAJauwF/lOGV1vD5zLuJICa8Enap2s1Y3wTAoGBAKrx
     QnLISyIB+XbXtVyrYHdJ2Mp1Ks6cye5pBi9y5RQgqCkEG62FLCh3XOvrTvysNEs+
     slccPoBv9UYtuGjmEanRhwEnQMiZPaWgu2dJWp8081X9dxEavS/5+oghSpphf3MH
     b9gMj5z6qvE3IfPfLs7iWCGgdquVgt6HG3Wc6J53AoGAc+ZYE8kMj2p9rtu1uJgX
     +VMbbdLEUqz3BPC9Tzq+eglUlYmwUK1xynKZfkEMcu5PncaBaNLU+GmYKKgw6wZS
     soEF1KvbBB4o6nZdlGo0BirOQ0ijHDWUvtuiaaWAQoQAhQwgqqV2IOC4UfkZ6ORf
     A/UW43A9wZq9kaEgb0YWOes=\
     -----END PRIVATE KEY-----`;

// Algorithm Object
var algorithmKeyGen = {
  name: "RSASSA-PKCS1-v1_5",
  // RsaHashedKeyGenParams
  modulusLength: 2048,
  publicExponent: new Uint8Array([0x01, 0x00, 0x01]),  // Equivalent to 65537
  hash: {
    name: "SHA-256"
  }
};

function parsePem(pemString, type) {
    const expectedPrefix = "-----BEGIN " + type + "-----";
    const expectedPosftix = "-----END " + type + "-----";

    pemString = pemString.trim();
    if (!pemString.startsWith(expectedPrefix)) {
        throw "Expected PEM to start with " + expectedPrefix;
    }
    if (!pemString.endsWith(expectedPosftix)) {
        throw "Expected PEM to end with " + expectedPosftix;
    }
    const base64 = pemString.substring(expectedPrefix.length, pemString.length - expectedPosftix.length).trim();
    return Uint8Array.from(atob(base64), c => c.charCodeAt(0))
}

function parsePrivateKeyPem(pem) {
    return parsePem(pem, 'PRIVATE KEY')
}

function storePrivateKey(privateKey) {
    var request = indexedDB.open("keys");

    request.onupgradeneeded = function() {
      // The database did not previously exist, so create object stores and indexes.
      var db = request.result;
      var store = db.createObjectStore("privateKeys", {keyPath: "name"});

      // Populate with initial data.
      store.put({name: "first", key: privateKey});
    };

    request.onsuccess = function() {
      db = request.result;
    };
}

var privateKeyArray = parsePrivateKeyPem(privateKeyPem);
var NON_EXTRACTABLE = false;
window.crypto.subtle.importKey("pkcs8", privateKeyArray, algorithmKeyGen, NON_EXTRACTABLE, ['sign'])
.then(function(privateKey) {
        storePrivateKey(privateKey);
        privateKeyPem = null;
        privateKeyArray = null;
    }
);
```

4. Скопируйте содержимое этого скрипта и вставьте его в консоль браузера.
 
5. Ключ был загружен в браузер неизвлекаемым способом.
 
 

> **Warning:** Если приватный ключ интегрирован в браузер, но совершить транзакцию не удается, очистите кэш браузера и попробуйте еще раз интегрировать приватный ключ.

 

> **Note:** Если предложенный код вам не подходит или требуется дополнительная информация о **Web Crypto API**, посетите официальный сайт [https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API](https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API).

##### Импорт приватного ключа в пользовательский интерфейс

Виртуальный терминал имеет функцию использования приватного ключа через пользовательский интерфейс.
 
 

 
Для более быстрого проведения большого количества тестовых транзакций установите флажок “Сохранить ключ в браузере”, и приватный ключ будет автоматически сохранен в браузере.
 
 

#### Подробности интерфейса ВТ

ВТ имеет кнопки управления, которые более подробно описаны ниже.
 
 

#### Управление шаблонами

1) Для упрощения работы оператора Виртуального терминала, поля данных можно сохранить в виде шаблона. Использование шаблонов позволяет работать только с индивидуальными атрибутами клиента.
 
 

 
2) После ввода данных в правой части страницы можно сохранить эти данные как шаблон, нажав ‘Сохранить как шаблон’ и указав имя нового шаблона.
 
 

 
3) Для редактирования, клонирования, удаления шаблонов или их распространения, нажмите на три точки возле имени шаблона и выберите нужный параметр. Шаблоном можно делиться с пользователями, обладающими доступом более низкого уровня. Таким образом, Торговец может поделиться шаблоном со своими сотрудниками.
 
 

 
Для всех выбранных пользователей созданный шаблон станет шаблоном по умолчанию при загрузке виртуального терминала.
 
Изменения по-прежнему можно вносить до проведения транзакции, но только создатель шаблона имеет право изменять шаблон. Пользователи, которым был предоставлен доступ к шаблону, могут только копировать его.
 
Количество созданных шаблонов, доступных для совместного использования, не ограничено. Все они будут отображаться пользователям в алфавитном порядке.
 
 

#### Спецификация транзакциий

##### Списания

В разделе депозита можно совершить транзакцию продажи и предавторизации (холдирования), которые описаны ниже.
 

###### Продажа

Продажа — это тип транзакции, при которой покупатель получает товары или услуги от Торговца в обмен на деньги или другие активы.
 
Чтобы инициировать транзакцию, отправьте следующие 3 типа информации:
 
1) Данные транзакции — терминал, сумма, валюта, описание, номер заказа должны быть заполнены непосредственно в ВТ.
 
2) Информация о карте — владелец карты, номер карты, срок действия:
 
- можно заполнить непосредственно в ВТ;
 
- может быть заполнено автоматически вместе с Личной информацией, если указан Идентификатор рекуррента. Если указан идентификатор рекуррентного платежа, а поле CVV пустое, используйте “Cкопировать ссылку”, чтобы отправить форму клиенту для дополнительного подтверждения. В случае, если CVV будет заполнен непосредственно в форме ВТ, транзакция будет обработана напрямую;
 
- может быть заполнено клиентом на форме.
 
3) Личная информация - имя, фамилия, город, адрес, почтовый индекс, телефон, адрес электронной почты, IP-адрес клиента, страна и т. д.:
 
- можно заполнить непосредственно в ВТ;
 
- может быть заполнено автоматически вместе с данными Карты, если указан идентификатор рекуррента;
 
- может быть заполнено автоматически, если указан идентификатор клиента.
 
 
Обработка транзакции:
 
- Используйте кнопку “Копировать ссылку” для генерации ссылки для оплаты и отправки ее клиенту. Данный сценарий актуален для транзакций, требующих предоставления клиентом дополнительной информации в форме (данные держателя карты, проверка 3DS и т. д.).
 
- Используйте кнопку “Провести” в случае, если транзакция не требует предоставления клиентом дополнительной информации (например, безакцептные списания noCVV и non3D).
 
 
На изображении показаны возможные варианты заполнения.
 
 

###### Предавторизация

Предавторизация — тип транзакции, при которой банк по запросу торговца блокирует указанную сумму на карточном счете клиента и не позволяет держателю карты использовать эту заблокированную сумму.
 
Важно знать, что блокировка сохраняется в течение определенного периода времени в зависимости от вида карты (обычно, максимальный срок блокировки составляет 7 дней для дебетовых карт и 28 дней для кредитных карт).
 
Чтобы инициировать транзакцию, отправьте следующие 3 типа информации:
 
1) Данные транзакции — терминал, сумма, валюта, описание, номер заказа должны быть заполнены непосредственно в ВТ.
 
2) Информация о карте — владелец карты, номер карты, срок действия:
 
- можно заполнить непосредственно в ВТ;
 
- может быть заполнено автоматически вместе с Личной информацией, если указан Идентификатор рекуррента. Если указан идентификатор рекуррентного платежа, а поле CVV пустое, используйте “Cкопировать ссылку”, чтобы отправить форму клиенту для дополнительного подтверждения. В случае, если CVV будет заполнен непосредственно в форме ВТ, транзакция будет обработана напрямую;
 
- может быть заполнено клиентом на форме.
 
3) Личная информация - имя, фамилия, город, адрес, почтовый индекс, телефон, адрес электронной почты, IP-адрес клиента, страна и т. д.:
 
- можно заполнить непосредственно в ВТ;
 
- может быть заполнено автоматически вместе с данными Карты, если указан идентификатор рекуррента;
 
- может быть заполнено автоматически, если указан идентификатор клиента.
 
 
Обработка транзакции:
 
- Используйте кнопку “Копировать ссылку” для генерации ссылки для оплаты и отправки ее клиенту. Данный сценарий актуален для транзакций, требующих предоставления клиентом дополнительной информации в форме (данные держателя карты, проверка 3DS и т. д.).
 
- Используйте кнопку “Провести” в случае, если транзакция не требует предоставления клиентом дополнительной информации (например, безакцептные списания noCVV и non3D).
 
 
На изображении показаны возможные варианты заполнения.
 

##### Перевод между картами

Перевод между картами — это транзакция перевода средств с карты на карту (C2C).
 
Возможны несколько сценариев:
 
1) Перевод денег с неизвестной карты на зарегистрированную карту.
 
Данные Получателя извлекаются из рекуррентного идентификатора назначения. Информация о карте получателя (владелец карты, номер карты, срок действия) и личная информация (имя, фамилия, город, адрес, почтовый индекс, мобильный номер, электронная почта, страна и другие необязательные данные клиента) будут заполнены автоматически. Для ускорения заполнения полей получателя используйте раздел “Последние использованные” рядом с полем “Рекуррентный идентификатор назначения”, в котором содержатся ранее использованные рекуррентные идентификаторы. Торговец создает специальную ссылку для отправителя при помощи кнопки “Копировать ссылку”. Отправитель получает ссылку на форму, в которой он указывает номер своей карты, дату окончания срока действия, имя держателя карты и CVV, а затем проходит проверку 3DS при необходимости.
 
2) Перевод денег с зарегистрированной карты на неизвестную карту.
 
Данные отправителя извлекаются из рекуррентного идентификатора. Разделы “Информация о карте отправителя” (владелец карты, номер карты, срок действия) и “личная информация” (имя, фамилия, город, адрес, почтовый индекс, мобильный номер, адрес электронной почты, IP-адрес клиента, страна и другие необязательные данные клиента) будут заполнены автоматически. CVV не сохраняется и должен быть запрошен у Отправителя. Для ускорения заполнения полей Отправителя используйте раздел “Последние использованные” в поле “рекуррентный идентификатор”, в котором содержатся ранее использованные рекуррентные идентификаторы. Торговец создает специальную ссылку для Отправителя с помощью кнопки “Копировать ссылку”. Отправитель получает ссылку на форму, в которой он указывает номер карты получателя, а затем проходит проверку 3DS при необходимости.
 
3) Перевод денег между известными или зарегистрированными картами.
 
Торговец заполняет данные держателя карты или использует рекуррентные идентификаторы как для Отправителя, так и для Получателя средств непосредственно в ВТ и инициирует обработку перевода кнопкой “Провести”. В этом случае транзакция должна быть обработана через non3D канал, что нетипично для переводов C2C.
 
 

> **Note:** При заполнении поля “Идентификатор клиента” разделы личной информации (Имя, Фамилия, Город, Адрес, Почтовый индекс, Мобильный номер, Электронная почта, Страна) будут заполнены автоматически.

 
На изображении показаны возможные варианты заполнения.
 
 

##### Выплаты

В разделе вывода средств возможно осуществить перевод на карту (D2C - deposit to card) и перевод на счёт, которые описаны ниже.
 

###### Перевод на карту (D2C)

Операция перевода на карту представляет собой перевод средств с банковского счета Торговца на банковскую карту Получателя.
 
Возможны несколько сценариев:
 
1) Перевод денег на известную карту.
 
Торговец заполняет данные держателя карты для получателя средств и совершает выплату непосредственно в ВТ с помощью кнопки “Провести”.
 
2) Перевод денег на зарегистрированную карту.
 
Данные Получателя извлекаются с использованием рекуррентного идентификатора назначения. Разделы “Информация о карте Получателя” (владелец карты, номер карты, срок действия) и “Личная информация” (имя, фамилия, город, адрес, почтовый индекс, мобильный номер, электронная почта, страна и другие необязательные данные клиента) будут заполнены автоматически. Для ускорения заполнения полей Получателя используйте раздел “Последние использованные” рядом с полем рекуррентного идентификатора назначения, в котором содержатся ранее использованные рекуррентные идентификаторы.
 
3) Перевод денег на неизвестную карту.
 
Торговец создает специальную ссылку для получателя средств при помощи кнопки “Копировать ссылку”. Получателю отправляется ссылка на форму, в которой он должен указать номер карты получателя.
 
 

> **Note:** При заполнении ячейки “Идентификатор клиента” разделы “Личной информации” (Имя, Фамилия, Город, Адрес, Почтовый индекс, Мобильный номер, Электронная почта, Страна) будут заполнены автоматически.

 
На изображении показаны возможные варианты заполнения.
 
 

###### Перевод на счёт

Транзакция перевода на счёт — это перечисление средств на номер счета Получателя, цифровой кошелек или другой тип счета. Торговец заполняет платежные данные для Получателя средств непосредственно в ВТ и инициирует выплату кнопкой “Провести”.
 
 

> **Note:** При заполнении поля “Идентификатор клиента” разделы личной информации (Имя, Фамилия, Город, Адрес, Почтовый индекс, Мобильный номер, Электронная почта, Страна) будут заполнены автоматически.

 
На изображении показаны возможные варианты заполнения.


## Manager Documentation

### Менеджер Manual

#### Введение

Платёжный Шлюз Payneteasy (далее — Система, Платёжный Шлюз или Payneteasy) обеспечивает приём, обработку, хранение и передачу платёжных данных между участниками платёжных процессов. Это руководство предназначено для менеджеров программно-аппаратного комплекса Платёжного Шлюза, обеспечивающих эффективную обработку транзакций между:

* торговцы (и их посредники),
* их конечные клиенты (называемые плательщиками или получателями),
* банки-эквайеры или другие PSP (или их посредники).

Payneteasy предоставляет учётную запись Менеджер с широким доступом к функциям системы через UI и API. Этот тип учётной записи позволяет создавать и настраивать платёжные решения для всех Торговец с учётом требований соответствия, ограничений и особенностей бизнеса, назначать дополнительных участников выбранным проектам Торговец и отслеживать финансовые потоки каждого участника.

Руководство составлено в соответствии со структурой пользовательского интерфейса Платёжного шлюза и содержит подробную информацию о каждой часто используемой функции.

#### Payment Шлюзway Objects

Иерархия и область данных пользователей системы определяются на упрощённой инфологической модели системы. Все роли пользователей и сущности обработки описаны в разделах ниже.

##### Infological Model

```plantuml
title Упрощенная инфологическая модель системы
class Администратор #e1d5e7;line:black;line.dotted {
}
class Начальник #e1d5e7;line:black;line.dotted {
}
class Менеджер #e1d5e7;line:black;line.dotted {
}
class Торговец #e1d5e7;line:black;line.dotted {
}
class Перепродавец #e1d5e7;line:black;line.dotted {
}
class Дилер #e1d5e7;line:black;line.dotted {
}
package "Конфигурация обработки" <<Rectangle>> {
  class Проект #dae8fc;line:black;line.dotted {
  }
  class Процессор #d5e8d4;line:black;line.dotted {
  }
  class Шлюз #f5f5f5;line:black;line.dotted {
  }
  class КонечнаяТочка #ffe6cc;line:black;line.dotted {
  }
}

Администратор -down-{ Начальник
Начальник --{ Менеджер
Менеджер }-left-{ Торговец
Менеджер }-down-{ Перепродавец
Менеджер }-right-{ Дилер
Менеджер --{ Проект
Торговец --{ КонечнаяТочка
КонечнаяТочка }-right- Проект
Перепродавец --{ Проект
Дилер -down-{ Процессор
Процессор -down-{ Шлюз
Шлюз }-left- Проект

hide members
hide circle
```

##### Processing Configuration

Система предоставляет набор интеграций с внешними платёжными учреждениями и платёжными провайдерами, называемых «Процессоры». Каждый процессор представляет собой программный модуль, реализующий единый протокол обмена сообщениями с внешними системами. Для приёма, обработки и передачи платёжных данных необходимо настроить следующие сущности.

| Описание: Object type | Описание |
|--------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Процессор | Сущность Платёжного Шлюза, инкапсулирующая взаимодействие со сторонней системой обработки. |
| Шлюз | Набор параметров, идентифицирующих учётную запись, зарегистрированную во внешней системе обработки. Эти параметры могут использоваться для обработки платёжных данных во внешней системе с помощью протокола обмена сообщениями, реализованного в Процессоре. |
| Компания | Сущность системы, позволяющая объединить несколько Шлюзов в одну сущность, которую затем можно использовать во многих модулях системы (например, лимитах, отчётах и т. д.). |
| Проект | Сущность системы, которая определяет условия приёма платёжного сообщения от Endpoint’ов и его дальнейшую маршрутизацию к подключённым Шлюзs. |
| Endpoint | Уникально идентифицированный терминал, который присвоен Торговцу и должен передаваться в командах API шлюза. |
| Описание: Endpoint group | Набор Endpoint’ов с разными валютами, объединённых и доступных как одна логическая единица, которая используется в URL-адресе API шлюза. |
| Master Endpoint | Дополнительная логическая единица, соединяющая несколько конечных точек для интеграции Payment Cashier. |

> **Note:** Минимальная конфигурация: 1 Процессор, 1 шлюз, 1 проект, 1 конечная точка.

Система позволяет работать с несколькими валютами. Валюту можно добавить по запросу.

##### User Roles

Платёжный Шлюз поддерживает отдельный доступ к учётной записи для каждого пользователя системы. Обсудите наиболее подходящую модель учётных записей Платёжного Шлюза с менеджером поддержки.

У каждой учётной записи корневого пользователя могут быть собственные сотрудники, которым можно предоставить доступ к данным корневой учётной записи с определёнными ограничениями. Область данных определяется для всех экранов и отчётов системы. Подробнее см. [Сотрудники](https://doc.payneteasy.ru/manager/settings/employees.html.md).

См. список корневых учётных записей пользователей ниже:

| Торговец | Предоставляется представителям торговца. Учётные записи торговца могут просматривать свои транзакции и связанные проекты и конечные точки. Они могут обрабатывать транзакции и управлять собственными списками ограничений. |
|------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Менеджер | Предоставляется представителям PSP или платёжных учреждений. Аккаунты Менеджер имеют полный доступ к конфигурации системы. |
| Superior | Предоставляется представителям нескольких Менеджеров. Аккаунты Superior могут просматривать и настраивать все сущности для связанных Менеджеров. |
| Реселлер | Предоставляются агентам, которые привлекают Торговцев для Менеджера. Учётные записи реселлеров позволяют просматривать несколько связанных Проектов и Эндпоинтов Торговцев и управлять тарифными планами реселлера. Они не могут обрабатывать транзакции, управлять списками ограничений или создавать новые сущности. Платёжные посредники, представляющие Торговцев, могут получать учётные записи Торговца для каждого представляемого Торговца либо одну учётную запись реселлера, связанную с учётными записями Торговцев каждого представляемого Торговца. |
| Dealer | Предоставляется агентам, подключающим решения по обработке для Менеджера. Учётные записи дилеров могут просматривать несколько шлюзов, связанных с Процессором, и управлять тарифными планами дилера. Они не могут обрабатывать транзакции, управлять списками ограничений или создавать новые сущности. |

#### Quick Links

Для быстрого ознакомления собраны наиболее часто используемые функции:

Описание: Account management:

- Ознакомьтесь с параметрами входа и профиля пользователя на странице [General Account Information](https://doc.payneteasy.ru/manager/account_information.html.md),
- Создавайте и управляйте выделенными учётными записями для каждого члена команды на экране [Employees](https://doc.payneteasy.ru/manager/settings/employees.html.md),

Настройка базовой конфигурации обработки:

1. Создать учётную запись торговца.
2. Создайте [Шлюз](https://doc.payneteasy.ru/manager/settings/configuration/gate/gatecreate.html.md) для выбранного Процессора и установите на нём любой банковский тарифный план.
3. Создайте [проект](https://doc.payneteasy.ru/manager/settings/configuration/project/projectcreate.html.md) и задайте для него любой тарифный план менеджера, затем укажите созданный шлюз на вкладке [Routing & Balancing](https://doc.payneteasy.ru/manager/settings/configuration/project/routingandbalancing.html.md).
4. Создайте [Endpoint](https://doc.payneteasy.ru/manager/settings/configuration/endpoint/endpointcreate.html.md), чтобы связать Торговца с Проектом, затем выберите доступные операции для этого Endpoint.
5. Проверьте, что всё подключено, тестовой транзакцией из [виртуального терминала](https://doc.payneteasy.ru/manager/tools/virtual_terminal.html.md).
6. Клонируйте проект вместе с конечными точками и шлюзами для новой валюты, если необходимо поддерживать несколько валют, и при необходимости создайте [группу конечных точек](https://doc.payneteasy.ru/manager/settings/configuration/manager_endpoint_group.html.md).
7. Предоставьте представителям торговца идентификаторы конечных точек для каждой валюты и/или группу конечных точек для мультивалютной интеграции, логин торговца, контрольный ключ торговца (для API-интеграции), пароль (для доступа к интерфейсу).

Интеграции торговца и помощь с обработкой:

- Повторно отправляйте [Multiple Callbacks](https://doc.payneteasy.ru/manager/tools/batch_operations.html.md) в случае временных проблем с обработкой результатов транзакций на сервере Торговца,
- [Capture и Cancel](https://doc.payneteasy.ru/manager/manager_orders.html.md) предавторизованных транзакций и выполняйте [Refunds](https://doc.payneteasy.ru/manager/manager_orders.html.md) по авторизованным,
- Ускорьте интеграцию торговца с Платёжным Шлюзом благодаря полным логам запросов и ответов в [Integration Panel](https://doc.payneteasy.ru/manager/tools/integration_panel.html.md),
- Настраивайте последующее взаимодействие с клиентами с помощью [E-mail Or SMS Messages](https://doc.payneteasy.ru/manager/settings/configuration/endpoint/endpointmessage.html.md) после транзакций, отправляемых с сервера сообщений,

Мониторинг и бизнес-анализ:

- Сортируйте и находите транзакции на экране [поиска заказов](https://doc.payneteasy.ru/manager/manager_orders.html.md), просматривайте полную информацию о каждой транзакции на экране [сведений о заказах](https://doc.payneteasy.ru/manager/manager_orders.html.md),
- Получайте расширенную аналитику с [Dashboard](https://doc.payneteasy.ru/manager/dashboard.html.md) и [KPI](https://doc.payneteasy.ru/manager/reference/kpi.html.md) либо скачивайте подробные [отчёты](https://doc.payneteasy.ru/manager/reports_index.html.md) с необходимыми данными в один клик с помощью шаблонов,
- Собирайте данные во внешние системы для дальнейшего анализа или оповещений с помощью [Additional Callbacks](https://doc.payneteasy.ru/manager/settings/configuration/endpoint/endpointcallbacks.html.md) для каждой транзакции,
- Решайте текущие проблемы с платежами с помощью [Online Monitor](https://doc.payneteasy.ru/manager/tools/monitoring/tasks_man.html.md) и [Transaction Marker notifications](https://doc.payneteasy.ru/manager/tools/transaction_monitor_markers.html.md),
- Получайте актуальную информацию о [Current Торговец Balances](https://doc.payneteasy.ru/manager/settings/users/merchant.html.md) и отражайте выплаты,

Описание: Learn more:

- См. определения всех терминов в [глоссарии менеджера](https://doc.payneteasy.ru/manager/reference/glossary.html.md),
- Откройте все поддерживаемые [типы и статусы транзакций](https://doc.payneteasy.ru/manager/reference/manager_transaction_statuses_and_types.html.md),
- Разработайте эффективную платёжную стратегию с [Routing & Balancing](https://doc.payneteasy.ru/manager/settings/configuration/project/routingandbalancing.html.md) в соответствии с [ограничениями эквайера](https://doc.payneteasy.ru/manager/settings/configuration/gate/acquirerrestrictions.html.md) и [лимитами обработки](https://doc.payneteasy.ru/manager/tools/processing_limits.html.md),
- См. варианты [защиты от мошенничества](https://doc.payneteasy.ru/manager/settings/configuration/project/fraudprotectionfilters.html.md) с более чем 100 фильтрами,
- Снижайте риски с помощью управления [чёрным, белым списком и списком лояльности](https://doc.payneteasy.ru/manager/tools/manager_bwl.html.md),
- Настройте главные конечные точки для интеграции [Payment Cashier](https://doc.payneteasy.ru/manager/settings/configuration/manager_master_endpoint.html.md),

### 3-D Secure (3DS)

Технология 3-D Secure (3DS) предполагает предварительную аутентификацию участников. Она предусматривает перенос ответственности за отказ по аутентифицированной транзакции с интернет-магазина на банк-эмитент, а затем на держателя карты. В технологии 3-D Secure для транзакций требуется специальный пароль, известный только клиенту (держателю карты) и банку-эмитенту. Это позволяет сократить количество отказов по интернет-транзакциям.

3-D Secure основан на модели трёх доменов, в которой процесс аутентификации онлайн-транзакции разделён на три домена: домен эмитента, домен эквайера и домен взаимодействия.

Домен эмитента включает: банк, выпустивший кредитную карту; сервер контроля доступа (ACS); клиента, намеревающегося совершить покупку кредитной картой; программное обеспечение на компьютере клиента (веб-браузер).

Домен эквайера включает: Merchant или интернет-магазин (WEB-сайт которого используется для покупки), серверное ПО интернет-магазина, создающее и обрабатывающее сообщения аутентификации платежа, и эквайера — финансовое учреждение, взаимодействующее с системой авторизации (например, Visa Net/Europay Payment System Net) согласно договору с интернет-магазином и уведомляющее магазин о результатах авторизации.

Домен взаимодействия. Домен Visa или Master Card обеспечивает связь между клиентом, интернет-магазином и банками. При этом домен обеспечивает строгую конфиденциальность информации. Для аутентификации клиента система отправляет запрос аутентификации в банк-эмитент. Эмитент устанавливает соединение с клиентом, отображает секретную фразу и запрашивает пароль клиента. После проверки пароля клиента банк-эмитент формирует ответ. Затем банк-эквайер аутентифицирует интернет-магазин.

#### Описание: 3-D Secure flow Diagram

```plantuml
    @startuml

  participant Cardholder
  participant "Merchant Application"
  participant "Payneteasy"
  box "Interoperability Domain" #LightBlue
    participant "Directory Server"
    participant "ACS Server"
  end box
  participant Acquirer
  participant Issuer

  "Acquirer" -> "Issuer": Inter\nSettlement

  Cardholder -> "Merchant Application": Shopping +\nTransaction Data
  "Merchant Application" -> "Payneteasy" : 3DS Transaction\nRequest Message
  "Payneteasy" -> "Directory Server": 3DS Enrolment\nRequest(VEReq)
  "Directory Server" -> "ACS Server": 3DS Enrolment\nRequest(VEReq)

  "ACS Server" -> "Directory Server": 3DS Enrolment\nResponse(VERes)
  "Directory Server" -> "Payneteasy": 3DS Enrolment\nResponse(VERes)

  "Payneteasy" <-> Acquirer: Payneteasy Risk Setting = Process All Transactions
  "Payneteasy" -> "Merchant Application": Transaction\nResponse Message
  "Merchant Application" ->o "Payneteasy": Get Transaction Request
  "Payneteasy" -> "Merchant Application": Payer Authentication Request(PAReq)\n Redirect Cardholder browser to ACS server page
  "Merchant Application" -> "Cardholder": Payer Authentication Request(PAReq)\n Redirect Cardholder browser to ACS server page
  "Cardholder" -> "ACS Server": 3DS Payer Authentication Request (PAReq)
  activate "ACS Server"
  "ACS Server" -> "ACS Server": Cardholder Authentication
  "ACS Server" -> "ACS Server": MHS Message
  "ACS Server" -> "Payneteasy": 3DS Payer Authentication Response(PARes)
   deactivate "ACS Server"

   "Payneteasy" <-> Acquirer: Process Transaction
   "Payneteasy" -> "Merchant Application": Transaction Response\nMessage
   "Merchant Application" ->o "Payneteasy": Get Transaction Request

@enduml
```

Когда Cardholder оформляет заказ в Merchants Application, запускается следующий процесс:
 
> * Держатель карты указывает номер карты и CVV2;
> * Приложение Merchants Application запрашивает Payneteasy через биллинговую систему MPI (Merchant Plugin Interface), чтобы получить адрес банка-эмитента ACS Server (Access Control Server);
> * Payneteasy система перенаправляет Cardholder на ACS Server банка-эмитента;
> * Cardholder аутентифицируется в Issuer, затем перенаправляется в систему Payneteasy с результатами аутентификации;
> * Payneteasy система авторизует транзакцию в Acquirer, если результат аутентификации был успешным.

#### Сообщение об ошибке ответа проверки регистрации

| Сообщение ошибки | Описание: Ошибка code |
|------------------------------------------------------------|-------------------------|
| Параметр Сообщение ошибки | Описание: Ошибка code |
| Эквайер не участвует | 50 |
| Торговец не участвует | 51 |
| Пароль отсутствует | 52 |
| Неверный пароль | 53 |
| Неверное значение Common Название в клиентском сертификате | 54 |

#### Verify Enrollment Response Values

| Enrollment Response | Описание | VERes Status |
|----------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------|
| Аутентификация доступна | Держатель карты зарегистрирован, поддерживается активация во время покупки или доступно доказательство попытки аутентификации. Торговец использует URL-адрес ACS эмитента из VERes для создания запроса аутентификации плательщика. | Y |
| Держатель карты не участвует | Держатель карты не участвует — держатель карты не зарегистрирован | N |
| Невозможно аутентифицировать или карта не подходит для попыток | Невозможно аутентифицировать или карта не подходит для попыток (например, коммерческая или анонимная предоплаченная карта) | U |

#### Issuer Authentication Results Values

| Authentication Result | Authentication Result Determined by Issuer ACS | PARes Status |
|---------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------|
| Authentication Successful | Эмитент аутентифицировал держателя карты, проверив пароль или другую идентификационную информацию | Y |
| Попыткаs Processing Performed | Аутентификация была недоступна, но имелась возможность (через эмитента, Visa Попыткаs Service или третью сторону) создать доказательство того, что торговец пытался выполнить аутентификацию VbV. | A |
| Authentication Failed | Пароль держателя карты (или другие данные аутентификации) не прошёл проверку, поэтому эмитент не может аутентифицировать держателя карты. Ниже приведены причины неудачной аутентификации: * Держатель карты не смог правильно ввести информацию аутентификации за определённое эмитентом количество попыток (возможный признак мошеннического пользователя) * Держатель карты «отменяет» страницу аутентификации (возможный признак мошеннического пользователя) Торговцам не разрешается отправлять эти транзакции для обработки авторизации | N |
| Authentication Could Not Be Performed | ACS эмитента не может завершить запрос аутентификации — возможные причины включают: * Тип карты исключён из попыток (например, коммерческая карта или анонимная предоплаченная карта) * ACS не может обработать сообщение запроса аутентификации * ACS не может установить SSL-сеанс с браузером держателя карты * Системный сбой, препятствующий правильной обработке запроса аутентификации Торговцы могут проводить указанные выше покупки как неаутентифицированные и сохранять ответственность, если держатель карты позднее оспорит покупку. Это транзакции электронной коммерции без Verified by Visa. Если PARes имеет U и Invalid Request Code 55, это означает, что идентификатор учётной записи в PAReq не совпал со значением, возвращённым ACS в VERes. Торговцы должны считать такую транзакцию недействительной. | U |

#### Visa Electronic Commerce Indicator (ECI)

| Название | ECI | Описание |
|------------------------------------------------------|-------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Держатель карты был аутентифицирован | 5 | Это значение означает, что держатель карты был аутентифицирован эмитентом путём проверки пароля или идентификационных данных держателя карты. Значение возвращается ACS в сообщении Payer Authentication Response, когда держатель карты успешно проходит аутентификацию платежа 3-D Secure. |
| Торговец попытался аутентифицировать держателя карты | 6 | Это значение означает, что Merchant попытался аутентифицировать держателя карты, но в процессе не участвовал либо держатель карты, либо эмитент. Значение должно возвращаться ACS в сообщении Authentication Response для Попытка Response. Кроме того, Merchant может использовать ECI 6 в запросе авторизации, когда от Visa Directory Server получен Verify Enrollment со значением N. |
| Аутентификация платежа не была выполнена | 7 | Это значение устанавливается Merchant, если платёжная транзакция проведена по защищённому каналу (например, SSL/TLS), но аутентификация платежа не выполнялась, либо эмитент ответил, что аутентификация не может быть выполнена. ECI 7 применяется, когда Verify Enrollment или Payer Authentication Response содержит U, означающее невозможность аутентификации. |

#### Master Card E-Commerce Commerce Indicator (ECI)

| Название | ECI | Описание |
|------------------------------------------------------|-------|----------------------------------------------------------------------------------------------------|
| Торговец попытался аутентифицировать держателя карты | 01 | Аутентификация не могла быть завершена, но было предоставлено подтверждение попытки аутентификации |
| Держатель карты был аутентифицирован | 02 | Держатель карты успешно аутентифицирован |

#### Результат аутентификации 3-D Secure

| UI Information | VERes Status | PARes Status | CAVV/AAV | ECI Visa | ECI Master Card | Описание | Рекомендуемое название Master Card |
|-------------------------------------|----------------|----------------|------------|------------|------------------|------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------|
| Торговец не поддерживает Secure Code | - | - | - | - | - | Торговец не поддерживает Secure Code | Торговец не поддерживает Secure Code |
| Параметр DS Ошибка (%d) | Ошибка | - | - | 7 | - | Торговец не смог предоставить соответствующие учётные данные серверу каталогов | Ошибка on VERes |
| Параметр Not Eligible | U | - | - | 7 | - | Unable to Authenticate | Unable to Authenticate |
| Не участвует | N | - | - | 6 | - | Cardholder Not Participating | Cardholder Not Participating |
| Параметр 3-D Secure Ошибка | Y | Ошибка | - | - | - | Проверка PARes не удалась. Торговец не должен отправлять запрос авторизации | Ошибка on PARes |
| Параметр 3-D Secure Failed | Y | N | - | - | - | Аутентификация не удалась. Торговец не должен отправлять запрос авторизации | Сбой аутентификации (сбой Secure Code или неверная проверка подписи) |
| Ошибка ACS 3-D Secure | Y | U | - | 7 | - | ACS эмитента не может завершить запрос аутентификации | Unable to Authenticate |
| Параметр 3-D Secure Попытка | Y | A | No | - | 01 | - | Описание: Попытка (without AAV) |
| Полная попытка 3-D Secure | Y | A | Yes | 6 | 01 | Торговец попытался аутентифицировать держателя карты, но либо держатель карты, либо эмитент не участвовали | Попытка |
| 3-D Secure успешно пройдена | Y | Y | No | - | 02 | Аутентификация успешна без AAV | Успешная аутентификация (без AAV) |
| Полная успешная 3-D Secure | Y | Y | Yes | 5 | 02 | Authentication Successful | Auth Success |

### Customer Management System

#### Введение

CRM-система помогает компаниям поддерживать актуальность контактных данных клиентов, отслеживать каждое взаимодействие с ними и управлять учётными записями клиентов. Она предназначена для улучшения отношений с клиентами.
 

#### General Information

Этот экран находится в разделе «Инструменты» — «Система управления клиентами».
 
`Описание: pic2 balancing 2.0`

### Общая информация об аккаунте

Сотрудники менеджера могут просматривать транзакции, настраивать решения по обработке и скачивать различные отчёты через интерфейс Payneteasy. Он доступен по адресам [production environment](https://gate.payneteasy.ru/paynet-ui/) и [sandbox environment](https://sandbox.payneteasy.ru/paynet-ui/).

#### Первый вход

При первом входе в UI Payneteasy, после авторизации, сотруднику-менеджеру будет предложено создать и ввести новый пароль.

Минимальная длина пароля составляет 8 символов. Пароль должен содержать минимум один специальный символ, одну цифру, а также одну строчную и одну заглавную буквы.

> **Warning:** Важно, чтобы пароль не состоял из значимых языковых конструкций. В целях безопасности настоятельно рекомендуется использовать случайные буквенно-цифровые значения и регулярно менять пароль.

#### Вход при помощи OTP

ЕСЛИ включен OTP (Одноразовый Пароль), всем пользователям будет отправлено электронное письмо с одноразовой ссылкой для создания второго фактора аутентификации.

Пример данного письма:

`Изображение letterexample manager_faq`

Внутри письма содержится ссылка, перейдя по которой можно получить QR-код и секретный ключ:

`Менеджер qrexample FAQ`

Для расчета второго фактора отсканируйте QR-код или введите секретный ключ в любом доступном приложении, поддерживающем HOTP (Google Authenticator, Protectimus Smart OTP, Free OTP Authenticator и другие):

`Изображение appexample manager_faq`
 

If one-time password authentication is enabled for login, enter this password when logging in. Detailed information on working with OTP is available on the link.
When logging into the system, specify a username, password and generated code from the application (each time logging in, new password from application will be required):

`Изображение loginexample manager_faq`

#### Меню заголовка

Меню всегда находится в левом нижнем углу экрана:
 
 

 

Сверху вниз расположены: имя учётной записи в интерфейсе Payneteasy и её роль в системе, текущие дата и время в часовом поясе системы, ссылка на сайт документации [https://doc.payneteasy.ru](https://doc.payneteasy.ru) с подробной информацией об интерфейсе Payneteasy и API, язык меню и расчёты в валюте.

#### Профиль пользователя

By clicking on Manager name on the top left side of header you will be redirected to user profile where you can setup your profile.
From the right side of page you will see to pages Общие настройки and Orders full view settings:

##### Общие настройки

Здесь вы можете изменить следующие параметры:

> - Название
> - Язык, на котором будет автоматически отображаться система (можно изменить в выпадающем меню в верхней части страницы в любое время)
> - Адрес электронной почты, на который будут поступать все настроенные уведомления
> - Телефонный номер;
> - Валюта по умолчанию (её можно изменить в раскрывающемся меню вверху страницы в любое время)
> - Лимит предварительного просмотра выписок;
> - Ключ PGP;
> - Описание: CSV delimiter
> - Telegram-бот — из этого Telegram-бота вы будете получать информацию обо всех настроенных действиях
> - Описание: Mobile application
> - Описание: Menu view

Чтобы изменить язык из меню в левом нижнем углу, используйте раскрывающееся меню

 

Чтобы изменить валюту для расчётов в мониторе транзакций и dashboard, используйте выпадающее меню в шапке. Курс обмена обновляется ежедневно.

##### Настройки полного просмотра заказов

В этом разделе можно настроить видимые поля для подробного просмотра заказов:

### Ограничения эквайера

#### Описание: Gate level

Эта функция позволяет настроить внутренние фильтры и предотвратить неуспешную обработку транзакций на шлюзах с определёнными ограничениями. Чтобы включить эти ограничения, перейдите к нужному шлюзу и откройте вкладку «Ограничения эквайера».

> `Описание: pic39 balancing 2.0`

> **Warning:** Если ограничение на шлюзе срабатывает, этот шлюз удаляется из блока балансировки в стратегии обработки для текущей транзакции.

Информация и коды причин о шлюзах, исключённых из балансировки из-за сработавших ограничений, отображается в деталях транзакции в UI:

> `Описание: pic51 balancing 2.0`

Текст ответа API для этих ограничений можно найти на странице Internal Errors в разделе Integration.

Существуют такие ограничения, как:
 
 

| Restriction Name | Comment | Код UI |
|------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------|
| Проверка белого списка (WL) | Позволяет игнорировать все прочие ограничения Эквайера для выбранных номеров исходных кредитных карт и отпечатков устройств. Иногда поведение клиента может привести к ситуации, когда покупатель полностью не может проводить транзакции. Вы можете добавить данные клиента в белый список, чтобы он мог успешно провести транзакцию. Белый список можно указать для точного номера исходной карты менеджером и точного отпечатка устройства менеджером. | |
| Проверка предопределённых списков лояльности | Разрешает обработку только для доверенных Клиентов. У разных Эквайеров разные определения доверенного Клиента; этот фильтр разрешает обработку только для Клиентов с электронной почтой, исходной/целевой картой или назначением в соответствующих списках лояльности. Транзакции Клиентов, не включённых ни в один список лояльности, будут отфильтрованы. | 15034 15035 15036 15037 |
| Автоматическая проверка списков лояльности | Этот фильтр позволяет указать набор шлюзов (имя группы) и создать в его рамках подмножества шлюзов (финансовые инструменты), чтобы разрешить обработку транзакций с номерами карт только на связанных подмножествах шлюзов. Каждый номер карты, впервые обработанный одним из шлюзов набора, связывается с подмножеством (финансовым инструментом) шлюза, использованного для обработки. Все новые транзакции с тем же номером карты будут разрешены только на шлюзах со связанным финансовым инструментом и отфильтрованы на остальных шлюзах с другими финансовыми инструментами в той же группе. Если имя группы или финансовый инструмент не указан на шлюзе, этот фильтр не применяется, даже если он включён. | 15110 |
| Автоматическая проверка списков лояльности электронной почты клиентов | Этот фильтр позволяет указать набор шлюзов (имя группы) и создать в его рамках подмножества шлюзов (финансовые инструменты), чтобы разрешить обработку транзакций с адресом электронной почты только на связанных подмножествах шлюзов. Каждый адрес электронной почты, впервые обработанный одним из шлюзов набора, связывается с подмножеством (финансовым инструментом) шлюза, использованного для обработки. Все новые транзакции с тем же адресом электронной почты будут разрешены только на шлюзах со связанным финансовым инструментом и отфильтрованы на остальных шлюзах с другими финансовыми инструментами в той же группе. Если имя группы или финансовый инструмент не указан на шлюзе, этот фильтр не применяется, даже если он включён. | 15110 |
| Проверка типа кредитной карты получателя | Этот реферальный список позволяет блокировать обработку транзакций для выбранных типов кредитных карт-получателей (Business, Corporate и т.д.) | 15170 |
| Проверка типа кредитной карты источника | Этот реферальный список позволяет блокировать обработку транзакций для выбранных типов кредитных карт-источников (Business, Corporate и т.д.) | 15171 |
| Проверять количество одобрений клиента для торговца | Эта проверка срабатывает, когда количество транзакций конкретного клиента у данного торговца не достигает настроенных пороговых значений. Клиента можно идентифицировать по карте или email-адресу. Учитываются транзакции Sale, Preauth или Transfer со статусом approved. | 15172 |
| Проверять количество одобрений клиента для менеджера | Эта проверка срабатывает, когда количество транзакций, связанных с конкретным клиентом у данного Менеджера, не достигает заданных пороговых значений. Клиента можно идентифицировать по карте или email-адресу. Учитываются транзакции Sale, Preauth или Transfer со статусом approved. | 15173 |
| Проверять дату одобрения клиента для менеджера | Эта проверка срабатывает, если количество дней, прошедших с первой одобренной транзакции Клиента, меньше требуемого. Клиент определяется по client definition, заданному на уровне endpoint/проекта, при этом настройки endpoint имеют приоритет над настройками проекта. Учитываются транзакции Preauth, Sale, Transfer, Payout со статусом одобрения. | 15176 |
| Частота использования номера кредитной карты источника за последние 24 часа (дневной лимит) | Thявляется check fires when номер или сумма транзакцияs associated с exact Source credit карта номер exceeds configured thresholds. время threshold является a 24 hours window calculated backwards из moment транзакция. For window calculation all транзакция датаs являются truncated в hours. risk fires on транзакция after set threshold. So, if you set a threshold 10 транзакцияs, it fires on 11th транзакция in 24 hours. Counts Sale, Preauth или Transfer транзакцияs in approved статус. | 15004 15005 |
| Частота использования номера кредитной карты источника за последние 7 дней (недельный лимит) | Thявляется check fires when номер или сумма транзакцияs associated с exact Source credit карта номер exceeds configured thresholds. время threshold является a 7 days window calculated backwards из moment транзакция. For window calculation all транзакция датаs являются truncated в hours. risk fires on транзакция after set threshold. So, if you set a threshold 10 транзакцияs, it fires on 11th транзакция in 168 hours. Counts Sale, Preauth или Transfer транзакцияs in approved статус. | 15002 15003 |
| Частота использования номера кредитной карты источника за последний месяц (месячный лимит) | Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным номером кредитной карты источника, превышает настроенные пороги. Временной порог — это окно в один месяц, рассчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до дней. Риск срабатывает на транзакции после достижения установленного порога. Так, если установить порог в 10 транзакций, он сработает на 11-й транзакции в течение одного месяца. Расчёт месяца основан на календаре: даты 28, 29, 30 и 31 марта при расчёте окна будут приведены к 28 февраля. Учитываются транзакции Sale, Preauth или Transfer со статусом approved. | 15000 15001 |
| Частота использования номера кредитной карты источника за последние 3 месяца | Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным номером исходной кредитной карты, превышает настроенные пороги. Временной порог — окно последних 3 календарных месяцев, начиная с текущего месяца. Для расчёта окна все даты транзакций усекаются до месяцев. Риск срабатывает на транзакции после установленного порога. Поэтому, если установить порог в 10 транзакций, он сработает на 11-й транзакции за 3 месяца. Учитывает транзакции Sale, Preauth или Transfer в одобренном статусе. | 15075 15076 |
| Частота использования номера кредитной карты источника за последние 6 месяцев | Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным номером исходной кредитной карты, превышает настроенные пороги. Временной порог — окно последних 6 календарных месяцев, начиная с текущего месяца. Для расчёта окна все даты транзакций усекаются до месяцев. Риск срабатывает на транзакции после установленного порога. Поэтому, если установить порог в 10 транзакций, он сработает на 11-й транзакции за 6 месяцев. Учитывает транзакции Sale, Preauth или Transfer в одобренном статусе. | 15077 15078 |
| Частота использования номера кредитной карты источника за последние 12 месяцев | Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным номером исходной кредитной карты, превышает настроенные пороги. Временной порог — окно последних 12 календарных месяцев, начиная с текущего месяца. Для расчёта окна все даты транзакций усекаются до месяцев. Риск срабатывает на транзакции после установленного порога. Поэтому, если установить порог в 10 транзакций, он сработает на 11-й транзакции за 12 месяцев. Учитывает транзакции Sale, Preauth или Transfer в одобренном статусе. | 15079 15080 |
| Частота использования назначения за последние 24 часа (дневной лимит) | Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным назначением, превышает настроенные пороги. Временной порог — это окно в 24 часа, рассчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до часов. Риск срабатывает на транзакции после достижения установленного порога. Так, если установить порог в 10 транзакций, он сработает на 11-й транзакции за 24 часа. Учитываются транзакции Sale, Preauth или Transfer со статусом approved. | 15016 15017 |
| Частота использования назначения за последние 7 дней (недельный лимит) | Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным назначением, превышает настроенные пороги. Временной порог — это окно в 7 дней, рассчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до часов. Риск срабатывает на транзакции после достижения установленного порога. Так, если установить порог в 10 транзакций, он сработает на 11-й транзакции за 168 часов. Учитываются транзакции Sale, Preauth или Transfer со статусом approved. | 15014 15015 |
| Частота использования назначения за последний месяц (месячный лимит) | Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным назначением, превышает настроенные пороги. Временной порог — это окно в один месяц, рассчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до дней. Риск срабатывает на 11-й транзакции в одном месяце при пороге 10 транзакций. Расчёт месяца основан на календаре: даты 28, 29, 30 и 31 марта при расчёте окна будут приведены к 28 февраля. Учитываются транзакции Sale, Preauth или Transfer со статусом approved. | 15012 15013 |
| Частота использования электронной почты за последние 24 часа (дневной лимит) | Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным адресом электронной почты, превышает настроенные пороги. Временной порог — это окно в 24 часа, рассчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до часов. Риск срабатывает на транзакции после достижения установленного порога. Так, если установить порог в 10 транзакций, он сработает на 11-й транзакции за 24 часа. Учитываются транзакции Sale, Preauth или Transfer со статусом approved. | 15010 15011 |
| Частота использования электронной почты за последние 7 дней (недельный лимит) | Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным адресом электронной почты, превышает настроенные пороги. Временной порог — это окно в 7 дней, рассчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до часов. Риск срабатывает на транзакции после достижения установленного порога. Так, если установить порог в 10 транзакций, он сработает на 11-й транзакции за 168 часов. Учитываются транзакции Sale, Preauth или Transfer со статусом approved. | 15008 15009 |
| Частота использования электронной почты за последний месяц (месячный лимит) | Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным адресом электронной почты, превышает настроенные пороги. Временной порог — это окно в один месяц, рассчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до дней. Риск срабатывает на 11-й транзакции в одном месяце при пороге 10 транзакций. Расчёт месяца основан на календаре: даты 28, 29, 30 и 31 марта будут приведены к 28 февраля. Учитываются транзакции Sale, Preauth или Transfer со статусом approved. | 15006 15007 |
| Требования Visa к ответу об отклонении предавторизованной транзакции | Эта проверка срабатывает только для рекуррентных транзакций. Торговцы, получившие ответ об отклонении для предавторизованной транзакции, могут повторно отправить её на авторизацию не более четырёх раз в течение 13 календарных дней с даты первоначального ответа об отклонении у того же Эквайера, если код ответа является одним из следующих: - Код ответа 05 — авторизация отклонена - Код ответа 51 — недостаточно средств - Код ответа 61 - Exceeds Approval Сумма Limit - Код ответа 65 - Exceeds Withdrawal Frequency Limit Если ответ об одобрении не получен в течение этого времени, Торговцы не должны повторно отправлять транзакцию, иначе их эквайеры могут столкнуться с мерами за несоблюдение требований, изложенных в правилах Visa, а также с Chargeback. Правила Visa запрещают эквайерам и Торговцам, использующим рекуррентные сервисы, повторно отправлять отклонённую транзакцию на авторизацию при получении ответа о необходимости изъятия карты: - Response Код 04 - Pick Up Card - Код ответа 07 — изъять карту, специальный - Код ответа 33 — истёк срок действия карты, изъять - Код ответа 34 - Suspected Fraud, Retain Card - Код ответа 35 - Card Acceptor, Contact Acquirer, Retain Card - Код ответа 36 - Restricted Card, Retain Card - Код ответа 37 - Contact Acquirer Security Department, Retain Card - Response Код 41 - Lost Card - Response Код 43 - Stolen Card - Response Код 67 - Capture Card или ответ об отклонении - Код ответа 14 - Invalid Account Number (No Such Number) - Response Код 54 - Expired Card - Response Code 57 - Transaction Not Permitted. Порог времени представляет собой скользящее окно, рассчитываемое назад от момента транзакции. Он учитывает транзакции Account verification, Sale, Preauth или Transfer в статусе Declined по указанным причинам отклонения. Корректные причины отклонения должны поддерживаться подключённым PSP. Лимиты рассчитываются отдельно для каждого дескриптора гейта, а не для каждого гейта. | 15023 - CANCEL 15024 - CANCEL 15025 - PICKUP 15026 - DELAY |
| Общая частота использования электронной почты за последние 24 часа (общий дневной лимит) | Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным адресом электронной почты, превышает настроенные пороги. Временной порог составляет окно в 24 часа, рассчитываемое назад от момента транзакции. Для расчёта окна все даты транзакций усекаются до часов. Риск срабатывает на транзакции после установленного порога. Поэтому, если установить порог в 10 транзакций, он сработает на 11-й транзакции за 24 часа. Учитывает транзакции Sale, Preauth или Transfer в любом статусе. | 15042 15043 |
| Общая частота использования электронной почты за последние 7 дней (общий недельный лимит) | Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным адресом электронной почты, превышает настроенные пороги. Временной порог составляет окно в 7 дней, рассчитываемое назад от момента транзакции. Для расчёта окна все даты транзакций усекаются до часов. Риск срабатывает на транзакции после установленного порога. Поэтому, если установить порог в 10 транзакций, он сработает на 11-й транзакции за 168 часов. Учитывает транзакции Sale, Preauth или Transfer в любом статусе. | 15044 15045 |
| Общая частота использования электронной почты за последний месяц (общий месячный лимит) | Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным адресом электронной почты, превышает настроенные пороги. Временной порог составляет окно в один месяц, рассчитываемое назад от момента транзакции. Для расчёта окна все даты транзакций усекаются до дней. Риск срабатывает на транзакции после установленного порога. Поэтому, если установить порог в 10 транзакций, он сработает на 11-й транзакции за один месяц. Расчёт месяца ведётся по календарю: например, 28, 29, 30 и 31 марта при расчёте окна будут приведены к 28 февраля. Учитывает транзакции Sale, Preauth или Transfer в любом статусе. | 15046 15047 |
| Общая частота использования назначения за последние 24 часа (общий дневной лимит) | Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным назначением, превышает настроенные пороги. Временной порог составляет окно в 24 часа, рассчитываемое назад от момента транзакции. Для расчёта окна все даты транзакций усекаются до часов. Риск срабатывает на транзакции после установленного порога. Поэтому, если установить порог в 10 транзакций, он сработает на 11-й транзакции за 24 часа. Учитывает транзакции Sale, Preauth или Transfer в любом статусе. | 15048 15049 |
| Общая частота использования назначения за последние 7 дней (общий недельный лимит) | Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным назначением, превышает настроенные пороги. Временной порог составляет окно в 7 дней, рассчитываемое назад от момента транзакции. Для расчёта окна все даты транзакций усекаются до часов. Риск срабатывает на транзакции после установленного порога. Поэтому, если установить порог в 10 транзакций, он сработает на 11-й транзакции за 168 часов. Учитывает транзакции Sale, Preauth или Transfer в любом статусе. | 15050 15051 |
| Общая частота использования назначения за последний месяц (общий месячный лимит) | Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным назначением, превышает настроенные пороги. Временной порог составляет окно в один месяц, рассчитываемое назад от момента транзакции. Для расчёта окна все даты транзакций усекаются до дней. Риск срабатывает на транзакции после установленного порога. Поэтому, если установить порог в 10 транзакций, он сработает на 11-й транзакции за один месяц. Расчёт месяца ведётся по календарю: например, 28, 29, 30 и 31 марта при расчёте окна будут приведены к 28 февраля. Учитывает транзакции Sale, Preauth или Transfer в любом статусе. | 15052 15053 |
| Общая частота использования номера кредитной карты источника за последние 24 часа (общий дневной лимит) | Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным номером исходной кредитной карты, превышает настроенные пороги. Временной порог составляет окно в 24 часа, рассчитываемое назад от момента транзакции. Для расчёта окна все даты транзакций усекаются до часов. Риск срабатывает на транзакции после установленного порога. Поэтому, если установить порог в 10 транзакций, он сработает на 11-й транзакции за 24 часа. Учитывает транзакции Sale, Preauth или Transfer в любом статусе. | 15054 15055 |
| Общая частота использования номера кредитной карты источника за последние 7 дней (общий недельный лимит) | Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным номером исходной кредитной карты, превышает настроенные пороги. Временной порог составляет окно в 7 дней, рассчитываемое назад от момента транзакции. Для расчёта окна все даты транзакций усекаются до часов. Риск срабатывает на транзакции после установленного порога. Поэтому, если установить порог в 10 транзакций, он сработает на 11-й транзакции за 168 часов. Учитывает транзакции Sale, Preauth или Transfer в любом статусе. | 15056 15057 |
| Общая частота использования номера кредитной карты источника за последний месяц (общий месячный лимит) | Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным номером исходной кредитной карты, превышает настроенные пороги. Временной порог составляет окно в один месяц, рассчитываемое назад от момента транзакции. Для расчёта окна все даты транзакций усекаются до дней. Риск срабатывает на транзакции после установленного порога. Поэтому, если установить порог в 10 транзакций, он сработает на 11-й транзакции за один месяц. Расчёт месяца ведётся по календарю: например, 28, 29, 30 и 31 марта при расчёте окна будут приведены к 28 февраля. Учитывает транзакции Sale, Preauth или Transfer в любом статусе. | 15058 15059 |
| Частота использования полного номера кредитной карты-источника за последние 3 месяца (общий лимит за 3 месяца) | Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным номером исходной кредитной карты, превышает настроенные пороги. Временной порог — окно последних 3 календарных месяцев, начиная с текущего месяца. Для расчёта окна все даты транзакций усекаются до месяцев. Риск срабатывает на транзакции после установленного порога. Поэтому, если установить порог в 10 транзакций, он сработает на 11-й транзакции за 3 месяца. Учитывает транзакции Sale, Preauth или Transfer в любом статусе. | 15081 15082 |
| Частота использования полного номера кредитной карты-источника за последние 6 месяцев (общий лимит за 6 месяцев) | Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным номером исходной кредитной карты, превышает настроенные пороги. Временной порог — окно последних 6 календарных месяцев, начиная с текущего месяца. Для расчёта окна все даты транзакций усекаются до месяцев. Риск срабатывает на транзакции после установленного порога. Поэтому, если установить порог в 10 транзакций, он сработает на 11-й транзакции за 6 месяцев. Учитывает транзакции Sale, Preauth или Transfer в любом статусе. | 15083 15084 |
| Частота использования полного номера кредитной карты-источника за последние 12 месяцев (общий лимит за 12 месяцев) | Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным номером исходной кредитной карты, превышает настроенные пороги. Временной порог — окно последних 12 календарных месяцев, начиная с текущего месяца. Для расчёта окна все даты транзакций усекаются до месяцев. Риск срабатывает на транзакции после установленного порога. Поэтому, если установить порог в 10 транзакций, он сработает на 11-й транзакции за 12 месяцев. Учитывает транзакции Sale, Preauth или Transfer в любом статусе. | 15085 15086 |
| Частота использования номера кредитной карты источника для номера кредитной карты получателя | Эта проверка срабатывает, когда количество исходных кредитных карт, связанных с точным номером кредитной карты получателя, превышает настроенные пороги. Временной порог представляет собой скользящее окно, рассчитываемое назад от момента транзакции. Риск срабатывает на транзакции после установленного порога. Поэтому, если установить порог в 10 кредитных карт за 6 часов, он сработает на 11-й уникальной кредитной карте за 6 часов. Учитывает уникальные номера исходных кредитных карт для транзакций Transfer в одобренном или отклонённом статусе текущего Шлюза. | 15072 |
| Частота использования отклонённой электронной почты за последние 24 часа (дневной лимит отклонений) | Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным адресом электронной почты, превышает настроенные пороги. Временной порог составляет окно в 24 часа, рассчитываемое назад от момента транзакции. Для расчёта окна все даты транзакций усекаются до часов. Риск срабатывает на транзакции после установленного порога. Поэтому, если установить порог в 10 транзакций, он сработает на 11-й транзакции за 24 часа. Учитывает транзакции Sale, Preauth или Transfer в отклонённом статусе. | 15066 |
| Частота использования отклонённой электронной почты за последние 7 дней (недельный лимит отклонений) | Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным адресом электронной почты, превышает настроенные пороги. Временной порог составляет окно в 7 дней, рассчитываемое назад от момента транзакции. Для расчёта окна все даты транзакций усекаются до часов. Риск срабатывает на транзакции после установленного порога. Поэтому, если установить порог в 10 транзакций, он сработает на 11-й транзакции за 168 часов. Учитывает транзакции Sale, Preauth или Transfer в отклонённом статусе. | 15068 |
| Частота использования отклонённой электронной почты за последний месяц (месячный лимит отклонений) | Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным адресом электронной почты, превышает настроенные пороги. Временной порог составляет окно в один месяц, рассчитываемое назад от момента транзакции. Для расчёта окна все даты транзакций усекаются до дней. Риск срабатывает на транзакции после установленного порога. Поэтому, если установить порог в 10 транзакций, он сработает на 11-й транзакции за один месяц. Расчёт месяца ведётся по календарю: например, 28, 29, 30 и 31 марта при расчёте окна будут приведены к 28 февраля. Учитывает транзакции Sale, Preauth или Transfer в отклонённом статусе. | 15070 |
| Количество отклонённых транзакций номера кредитной карты источника за период | Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным номером счёта, превышает настроенные пороги. Временной порог — это окно в один месяц, рассчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до дней. Риск срабатывает на 11-й транзакции в одном месяце при пороге 10 транзакций. Расчёт месяца основан на календаре: даты 28, 29, 30 и 31 марта будут приведены к 28 февраля. Учитываются транзакции Sale, Preauth, Payout или Transfer со статусом approved. | 15125 15126 |
| Частота отклонений номера кредитной карты источника за последние 24 часа (дневной лимит отклонений) | Эта проверка срабатывает, когда количество или сумма отклонённых транзакций, связанных с точным номером исходной кредитной карты, превышает настроенные пороги. Временной порог составляет окно в 24 часа, рассчитываемое назад от момента транзакции. Для расчёта окна все даты транзакций усекаются до часов. Риск срабатывает на транзакции после установленного порога. Поэтому, если установить порог в 10 транзакций, он сработает на 11-й транзакции за 24 часа. Учитывает транзакции Account verification, Sale, Preauth или Transfer в статусах Declined или Filtered. | 15073 15074 |
| Частота отклонений номера кредитной карты источника за последнюю неделю (недельный лимит отклонений) | Эта проверка срабатывает, когда количество или сумма отклонённых транзакций, связанных с точным номером исходной кредитной карты, превышает настроенные пороги. Временной порог составляет окно в 7 дней, рассчитываемое назад от момента транзакции. Для расчёта окна все даты транзакций усекаются до дней. Риск срабатывает на транзакции после установленного порога. Поэтому, если установить порог в 10 транзакций, он сработает на 11-й транзакции за 7 дней. Учитывает транзакции Account verification, Sale, Preauth или Transfer в статусе Declined. | 15128 15129 |
| Частота отклонений номера кредитной карты источника за последний месяц (месячный лимит отклонений) | Эта проверка срабатывает, когда количество или сумма отклонённых транзакций, связанных с точным номером кредитной карты источника, превышает настроенные пороги. Временной порог — это окно в один месяц, рассчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до дней. Риск срабатывает на транзакции после достижения установленного порога. Так, если установить порог в 10 транзакций, он сработает на 11-й транзакции в течение одного месяца. Расчёт месяца основан на календаре: даты 28, 29, 30 и 31 марта при расчёте окна будут приведены к 28 февраля. Учитываются транзакции Account verification, Sale, Preauth или Transfer со статусом Declined. | 15130 15131 |
| Частота отклонений номера кредитной карты получателя за последние 24 часа (дневной лимит отклонений) | Thявляется check fires when номер или сумма declined транзакцияs associated с exact Destination credit карта номер exceeds configured thresholds. время threshold является a 24 hours window calculated backwards из moment транзакция. For window calculation all транзакция датаs являются truncated в hours. risk fires on транзакция after set threshold. So, if you set a threshold 10 транзакцияs, it fires on 11th транзакция in 24 hours. Counts Transfer транзакцияs in Declined статус. | 15132 15133 |
| Частота отклонений номера кредитной карты получателя за последнюю неделю (недельный лимит отклонений) | Thявляется check fires when номер или сумма declined транзакцияs associated с exact Destination credit карта номер exceeds configured thresholds. время threshold является a 7 days window calculated backwards из moment транзакция. For window calculation all транзакция датаs являются truncated в days. risk fires on транзакция after set threshold. So, if you set a threshold 10 транзакцияs, it fires on 11th транзакция in 168 hours. Counts Transfer транзакцияs in Declined статус. | 15134 15135 |
| Частота отклонений номера кредитной карты получателя за последний месяц (месячный лимит отклонений) | Эта проверка срабатывает, когда количество или сумма отклонённых транзакций, связанных с точным номером кредитной карты получателя, превышает настроенные пороги. Временной порог — это окно в один месяц, рассчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до дней. Риск срабатывает на транзакции после достижения установленного порога. Так, если установить порог в 10 транзакций, он сработает на 11-й транзакции в течение одного месяца. Расчёт месяца основан на календаре: даты 28, 29, 30 и 31 марта при расчёте окна будут приведены к 28 февраля. Учитываются транзакции Transfer со статусом Declined. | 15136 15137 |
| Частота отклонений общего номера кредитной карты за последние 24 часа (дневной лимит отклонений) | Thявляется check fires when номер или сумма declined транзакцияs associated с exact Source или Destination credit карта номер exceeds configured thresholds. время threshold является a 24 hours window calculated backwards из moment транзакция. For window calculation all транзакция датаs являются truncated в hours. risk fires on транзакция after set threshold. So, if you set a threshold 10 транзакцияs, it fires on 11th транзакция in 24 hours. Counts Account verification, Sale, Preauth или Transfer транзакцияs in Declined статус. | 15138 15139 15140 15141 |
| Частота отклонений общего номера кредитной карты за последнюю неделю (недельный лимит отклонений) | Thявляется check fires when номер или сумма declined транзакцияs associated с exact Source или Destination credit карта номер exceeds configured thresholds. время threshold является a 7 days window calculated backwards из moment транзакция. For window calculation all транзакция датаs являются truncated в days. risk fires on транзакция after set threshold. So, if you set a threshold 10 транзакцияs, it fires on 11th транзакция in 168 hours. Counts Account verification, Sale, Preauth или Transfer транзакцияs in Declined статус. | 15142 15143 15144 15145 |
| Частота отклонений общего номера кредитной карты за последний месяц (месячный лимит отклонений) | Эта проверка срабатывает, когда количество или сумма отклонённых транзакций, связанных с точным номером кредитной карты источника или получателя, превышает настроенные пороги. Временной порог — это окно в один месяц, рассчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до дней. Риск срабатывает на транзакции после достижения установленного порога. Так, если установить порог в 10 транзакций, он сработает на 11-й транзакции в течение одного месяца. Расчёт месяца основан на календаре: даты 28, 29, 30 и 31 марта при расчёте окна будут приведены к 28 февраля. Учитываются транзакции Account verification, Sale, Preauth или Transfer со статусом Declined. | 15146 15147 15148 15149 |
| Частота использования номера кредитной карты источника за последние N дней | Thявляется check fires when номер или сумма транзакцияs associated с exact Source credit карта номер exceeds configured thresholds. время threshold является a N days window calculated backwards из moment транзакция. N parameter (дата period) может be set из 1 в 30. For window calculation all транзакция датаs являются truncated в days. risk fires on транзакция after set threshold. So, if you set a threshold 10 транзакцияs, it fires on 11th транзакция in N days. Counts Sale, Preauth или Transfer транзакцияs in approved статус. | 15150 15151 |
| Частота использования номера кредитной карты получателя за последние N дней | Thявляется check fires when номер или сумма транзакцияs associated с exact Destination credit карта номер exceeds configured thresholds. время threshold является a N days window calculated backwards из moment транзакция. N parameter (дата period) может be set из 1 в 30. For window calculation all транзакция датаs являются truncated в days. risk fires on транзакция after set threshold. So, if you set a threshold 10 транзакцияs, it fires on 11th транзакция in N days. Counts Transfer транзакцияs in approved статус. | 15152 15153 |
| Общая частота использования номера кредитной карты за последние N дней | Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным номером исходной или получающей кредитной карты, превышает настроенные пороги. Временной порог составляет окно в N дней, рассчитываемое назад от момента транзакции. Параметр N (период дат) можно задать от 1 до 30. Для расчёта окна все даты транзакций усекаются до дней. Риск срабатывает на транзакции после установленного порога. Поэтому, если установить порог в 10 транзакций, он сработает на 11-й транзакции за N дней. Учитывает транзакции Sale, Preauth или Transfer в одобренном статусе. | 15154 15155 15156 15157 |
| Частота использования назначения за последние N дней | Thявляется check fires when номер или сумма транзакцияs associated с exact Purpose exceeds configured thresholds. время threshold является a N days window calculated backwards из moment транзакция. N parameter (дата period) может be set из 1 в 30. For window calculation all транзакция датаs являются truncated в days. risk fires on транзакция after set threshold. So, if you set a threshold 10 транзакцияs, it fires on 11th транзакция in N days. Counts Sale, Preauth или Transfer транзакцияs in approved статус. | 15158 15159 |
| Частота использования электронной почты за последние N дней | Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным адресом электронной почты, превышает настроенные пороги. Временной порог составляет окно в N дней, рассчитываемое назад от момента транзакции. Параметр N (период дат) можно задать от 1 до 30. Для расчёта окна все даты транзакций усекаются до дней. Риск срабатывает на транзакции после установленного порога. Поэтому, если установить порог в 10 транзакций, он сработает на 11-й транзакции за N дней. Учитывает транзакции Sale, Preauth или Transfer в одобренном статусе. | 15160 15161 |
| Частота использования IP-адреса за последние N дней | Thявляется check fires when номер или сумма транзакцияs associated с exact IP address exceeds configured thresholds. время threshold является a N days window calculated backwards из moment транзакция. N parameter (дата period) может be set из 1 в 30. For window calculation all транзакция датаs являются truncated в days. risk fires on транзакция after set threshold. So, if you set a threshold 10 транзакцияs, it fires on 11th транзакция in N days. Counts Sale, Preauth или Transfer транзакцияs in approved статус. | 15162 15163 |
| Частота использования отпечатка за последние N дней | Thявляется check fires when номер или сумма транзакцияs associated с exact Fingerprint exceeds configured thresholds. время threshold является a N days window calculated backwards из moment транзакция. N parameter (дата period) может be set из 1 в 30. For window calculation all транзакция датаs являются truncated в days. risk fires on транзакция after set threshold. So, if you set a threshold 10 транзакцияs, it fires on 11th транзакция in N days. Counts Sale, Preauth или Transfer транзакцияs in approved статус. | 15164 15165 |
| Частота использования номера счёта за последние N дней | Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным номером счёта, превышает настроенные пороги. Временной порог — это окно в N дней, рассчитываемое назад от момента транзакции. Параметр N (период дат) можно установить от 1 до 30. При расчёте окна все даты транзакций усекаются до дней. Риск срабатывает на транзакции после достижения установленного порога. Так, если установить порог в 10 транзакций, он сработает на 11-й транзакции за N дней. Учитываются транзакции Sale, Preauth или Transfer со статусом approved. | 15166 15167 |
| Detecting and preventing accidental duplicate email usage | Customer request for the current gate with the same email will be filtered out. | 15185 |
| Preventing sale when the pending amount exceeds limit | This filter blocks a Sale transaction on the current gate when the total amount of that credit card’s pending Sale transactions on this gate, accumulated within the configured time period, reaches the configured amount limit (including the current transaction’s amount). The client is identified strictly by Source credit card number — each card number has its own independent limit. Only transactions of type Sale are counted, and only while they are in a pending (non-final) status; Preauth, Transfer and other transaction types, as well as already Approved, Declined or Filtered transactions, are ignored. | 15190 |
| Customer email decline frequency for last 24 hours (daily decline limit) | This check fires when the number or amount of declined transactions associated with exact customer email exceeds the configured thresholds. The time threshold is a 24 hours window calculated backwards from the moment of the transaction. For window calculation all transaction dates are truncated to hours. The risk fires on the transaction after the set threshold. So, if you set a threshold of 10 transactions, it fires on the 11th transaction in 24 hours. Counts Account verification, Sale, Preauth or Transfer transactions in the Declined status. | 15186 15187 |
| Customer email usage frequency for last N hours | This check fires when the number of declines associated with exact customer email exceeds the configured thresholds. The time threshold is a N hours window calculated backwards from the moment of the transaction. The N parameter (date period) can be set from 1 to 24. For window calculation all transaction dates are truncated to hours. The risk fires on the transaction after the set threshold. So, if you set a threshold of 10 transactions, it fires on the 11th transaction in N hours. This filter takes into account full hours. Counts Sale, Preauth or Transfer transactions in the declined status. | 15188 |
| Customer email declines frequency for last N hours | This check fires when the number or amount of declined transactions associated with exact customer email exceeds the configured thresholds. The time threshold is a 24 hours window calculated backwards from the moment of the transaction. For window calculation all transaction dates are truncated to hours. The risk fires on the transaction after the set threshold. So, if you set a threshold of 10 transactions, it fires on the 11th transaction in 24 hours. Counts Account verification, Sale, Preauth or Transfer transactions in the Declined status. | 15189 |
| Source Email declined transaction interval | This check fires when the interval for the last declined transaction associated with exact Email is less than configured thresholds. The time threshold is time window calculated backwards from the moment of the transaction. The risk fires on the transaction below the set threshold. So, if you set a threshold of 10 minutes and the last declined transaction time is 10:00:00, it fires until 10:10:01. Counts Sale, Preauth or Transfer transactions in the Declined status. | 15090 |
| Billing Country State blacklist | This filter blocks transactions whose billing address state/region matches a selected list of states within one selected country; when “Allow only states from list” is enabled, the logic inverts and only transactions from the listed states are allowed, all others being blocked. States are identified by their code (1 to 3 letters or numeric, e.g. US-CA, IN-KL, LV-JUR, FR-01) — full state names are not recognized. The filter applies to Sale, Preauth, Transfer, Payout and Account Verification transactions; if the billing state field is empty, the transaction is not filtered. | 15192 |
| Частота использования диапазона BIN | Эта проверка срабатывает, когда количество транзакций, связанных с определённым диапазоном BIN карты, превышает настроенные пороги; также можно указать список исключений диапазонов BIN карт, для которых проверки не выполняются. Максимальный временной порог составляет окно в 300 секунд, рассчитываемое назад от момента первой транзакции. Риск срабатывает на транзакции после установленного порога. Поэтому, если установить порог в 10 транзакций, он сработает на 11-й транзакции за 300 секунд. Учитывает транзакции Sale, Preauth, Payout или Transfer. | 15119 |
| Частота использования страны эмитента | Эта проверка срабатывает, когда количество транзакций, связанных с одной страной эмитента карты, превышает настроенные пороги. Максимальный временной порог — это окно в 300 секунд, рассчитываемое назад от момента первой транзакции. Риск срабатывает на транзакции после достижения установленного порога. Так, если установить порог в 10 транзакций, он сработает на 11-й транзакции за 300 секунд. Учитываются транзакции Sale, Preauth, Payout или Transfer. | 15114 |
| Предотвращение транзакции с той же суммой | Эта проверка срабатывает, когда за временной порог (в секундах) выполняется более одной транзакции с одинаковой суммой. Максимальный временной порог — это окно в 300 секунд, рассчитываемое назад от момента первой транзакции. Риск срабатывает на второй транзакции с той же суммой в течение установленного временного порога. Учитываются транзакции Sale, Preauth, Payout или Transfer. | 15113 |
| Страна IP-адреса клиента отличается от страны выпуска | Эта проверка риска срабатывает, когда страна IP-адреса клиента отличается от страны эмитента карты. Запросы с IP-адресов, указанных в «Merchant API IP address», игнорируют эту проверку. Если параметр «apply for countries» пуст, фильтр потребует строгого соответствия страны клиента и страны эмитента для всех стран; иначе проверка принудит соответствие только для перечисленных стран. Например, если задать «apply for countries» как US, проверка сработает для комбинаций US-any NonUS или any NonUS-US, но для any NonUS-any NonUS и US-US не сработает. Для транзакций card2card страна эмитента исходной карты должна совпадать со страной эмитента карты получателя; то есть эта проверка сработает для любой трансграничной транзакции. | 15116 |
| Частота использования назначения за последний год (годовой лимит) | Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным назначением, превышает настроенные пороги. Временной порог — окно в один год, рассчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до дней. Риск срабатывает на 101-й транзакции за год при пороге 100. Расчёт года может начинаться с начала календарного года или с момента активации фильтра, усечённого до месяца, минус 12 месяцев. Например, если фильтр активирован 15 мая 2021 года, будут учитываться транзакции с мая 2020 года. Учитываются транзакции Sale, Preauth или Transfer со статусом approved. | 15117 15118 |
| Количество транзакций за период | Эта проверка срабатывает, когда количество транзакций превышает настроенные пороги. Максимальный порог времени — окно в 600 секунд, рассчитываемое назад от момента первой транзакции. Риск срабатывает на транзакции после установленного порога. Так, при пороге в 10 транзакций он сработает на 11-й транзакции в течение 600 секунд. Учитываются транзакции Sale, Preauth, Payout или Transfer. | 15115 |
| Минимальное время между транзакциями у эквайера | Эта проверка срабатывает, когда за заданный промежуток времени (в минутах) по одной карте в рамках одного финансового инструмента проводится более одной транзакции. Максимальный временной порог составляет окно в 120 минут, рассчитываемое назад от момента первой транзакции. Фильтр учитывает только одобренные транзакции. Риск срабатывает на второй транзакции по той же карте в установленный период времени. Учитывает транзакции Sale и Transfer. | 15120 |
| Частота использования номера счёта за последние 24 часа (дневной лимит) | Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным номером счёта, превышает настроенные пороги. Временной порог — это окно в 24 часа, рассчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до часов. Риск срабатывает на транзакции после достижения установленного порога. Так, если установить порог в 10 транзакций, он сработает на 11-й транзакции за 24 часа. Учитываются транзакции Sale, Preauth, Payout или Transfer со статусом approved. | 15121 15122 |
| Частота использования номера счёта за последние 7 дней (недельный лимит) | Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным номером счёта, превышает настроенные пороги. Временной порог — это окно в 7 дней, рассчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до часов. Риск срабатывает на транзакции после достижения установленного порога. Так, если установить порог в 10 транзакций, он сработает на 11-й транзакции за 168 часов. Учитываются транзакции Sale, Preauth, Payout или Transfer со статусом approved. | 15123 15124 |
| Частота использования номера счёта за последний месяц (месячный лимит) | Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным номером счёта, превышает настроенные пороги. Временной порог — это окно в один месяц, рассчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до дней. Риск срабатывает на 11-й транзакции в одном месяце при пороге 10 транзакций. Расчёт месяца основан на календаре: даты 28, 29, 30 и 31 марта будут приведены к 28 февраля. Учитываются транзакции Sale, Preauth, Payout или Transfer со статусом approved. | 15125 15126 |

Below is the example of configuration for “Email usage frequency for last month (monthly limit)” restriction.
To switch this restriction on, click on the toggle button near it’s name:

> `Изображение emailusage balancing 2.0`

Это ограничение поддерживает следующие настройки:

> 1. Параметр Amount limit — максимальная общая сумма транзакций за последний месяц для этого email-адреса. Value: общее значение суммы.
> 2. Параметр For all gates with the same descriptor — для этого значения e-mail рассчитывается текущая общая сумма или количество транзакций за последний месяц и конвертируется в валюту текущего гейта для сравнения с лимитом суммы или количества. Чтобы включить параметр, укажите «Y» (Yes) вместо «N» (No). Values: Y: для всех гейтов с одинаковым дескриптором, N: только для текущего гейта.
> 3. Параметр quantity limit задаёт лимиты количества транзакций. Value: общее значение количества.
> 4. Использовать календарный месяц : Значение: Y/N.

Выбор «Идентификатор страны» будет доступен в конфигурациях ограничения «Deny».

Каждой стране присваивается собственный числовой идентификатор. Нужную страну можно выбрать из списка.

#### Описание: Processor level

Этот функционал позволяет предотвратить неуспешную обработку транзакций на всех шлюзах одного Процессора, имеющих определённые ограничения. Чтобы включить его, перейдите к требуемому Процессору и нажмите вкладку «Ограничения эквайера». Вкладка доступна только для учётной записи Менеджера и связанных вышестоящих учётных записей.

> `Описание: Processor ACQ tab`
Существуют такие ограничения, как:
 
 

| Restriction Name | Comment | Описание: Код UI and reason |
|-----------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Проверка белого списка (WL) | Позволяет игнорировать все прочие ограничения Эквайера для выбранных номеров исходных кредитных карт и отпечатков устройств. Иногда поведение клиента может привести к ситуации, когда покупатель полностью не может проводить транзакции. Вы можете добавить данные клиента в белый список, чтобы он мог успешно провести транзакцию. Белый список можно указать для точного номера исходной карты менеджером и точного отпечатка устройства менеджером. | |
| Проверка предопределённых списков лояльности | Разрешает обработку только для доверенных Клиентов. У разных Эквайеров разные определения доверенного Клиента; этот фильтр разрешает обработку только для Клиентов с электронной почтой, исходной/целевой картой или назначением в соответствующих списках лояльности. Транзакции Клиентов, не включённых ни в один список лояльности, будут отфильтрованы. | 18042 — сбой проверки номера карты источника лояльного клиента Процессора 18043 — сбой проверки номера карты получателя лояльного клиента Процессора |
| Проверка типа кредитной карты получателя | Этот реферальный список позволяет блокировать обработку транзакций для выбранных типов кредитных карт-получателей (Business, Corporate и т.д.) | 18112 — Процессор не поддерживает тип продукта получателя |
| Проверка типа кредитной карты источника | Этот реферальный список позволяет блокировать обработку транзакций для выбранных типов кредитных карт-источников (Business, Corporate и т.д.) | 18113 — Процессор не поддерживает тип продукта |
| Проверять количество одобрений клиента для торговца | Эта проверка срабатывает, когда количество транзакций конкретного клиента у данного торговца не достигает настроенных пороговых значений. Клиента можно идентифицировать по карте или email-адресу. Учитываются транзакции Sale, Preauth или Transfer со статусом approved. | 18116 — Процессор не достиг требуемого количества одобрений для торговца |
| Проверять количество одобрений клиента для менеджера | Эта проверка срабатывает, когда количество транзакций, связанных с конкретным клиентом у данного Менеджера, не достигает заданных пороговых значений. Клиента можно идентифицировать по карте или email-адресу. Учитываются транзакции Sale, Preauth или Transfer со статусом approved. | 18117 — Процессор не достиг требуемого количества одобрений для менеджера |
| Частота использования номера кредитной карты источника за последние 24 часа (дневной лимит) | Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным номером исходной кредитной карты, превышает настроенные пороги. Временной порог составляет окно в 24 часа, рассчитываемое назад от момента транзакции. Для расчёта окна все даты транзакций усекаются до часов. Риск срабатывает на транзакции после установленного порога. Поэтому, если установить порог в 10 транзакций, он сработает на 11-й транзакции за 24 часа. Учитывает транзакции Sale, Preauth или Transfer в одобренном статусе. Временной интервал можно задать как календарный день вместо окна в 24 часа. | 18004 — достигнут одобренный почасовой лимит суммы 18005 — достигнут одобренный почасовой лимит количества |
| Частота использования номера кредитной карты источника за последние 7 дней (недельный лимит) | Thявляется check fires when номер или сумма транзакцияs associated с exact Source credit карта номер exceeds configured thresholds. время threshold является a 7 days window calculated backwards из moment транзакция. For window calculation all транзакция датаs являются truncated в hours. risk fires on транзакция after set threshold. So, if you set a threshold 10 транзакцияs, it fires on 11th транзакция in 168 hours. Counts Sale, Preauth или Transfer транзакцияs in approved статус. | 18002 — достигнут одобренный недельный лимит суммы 18003 — достигнут одобренный недельный лимит количества |
| Частота использования номера кредитной карты источника за последний месяц (месячный лимит) | Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным номером кредитной карты источника, превышает настроенные пороги. Временной порог — это окно в один месяц, рассчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до дней. Риск срабатывает на транзакции после достижения установленного порога. Так, если установить порог в 10 транзакций, он сработает на 11-й транзакции в течение одного месяца. Расчёт месяца основан на календаре: даты 28, 29, 30 и 31 марта при расчёте окна будут приведены к 28 февраля. Учитываются транзакции Sale, Preauth или Transfer со статусом approved. | 18000 — достигнут одобренный месячный лимит суммы 18001 — достигнут одобренный месячный лимит количества |
| Частота отклонений номера кредитной карты источника за последние 24 часа (дневной лимит отклонений) | This check fires when the number or amount of declined transactions associated with exact Source credit card number exceeds the configured thresholds. The time threshold is a 24 hours window calculated backwards from the moment of the transaction. For window calculation all transaction dates are truncated to hours. The risk fires on the transaction after the set threshold. So, if you set a threshold of 10 transactions, it fires on the 11th transaction in 24 hours. Counts Account verification, Sale, Preauth or Transfer transactions in the Declined status. | 18054 - Daily decline quantity limit exceeded for the same credit card number on processor 18055 - Daily decline amount limit exceeded for the same credit card number on processor |
| Частота отклонений номера кредитной карты источника за последние 7 дней (недельный лимит отклонений) | Эта проверка срабатывает, когда количество отклонённых транзакций, связанных с точным номером исходной кредитной карты, превышает настроенные пороги. Временной порог составляет окно в 7 дней, рассчитываемое назад от момента транзакции. Для расчёта окна все даты транзакций усекаются до часов. Риск срабатывает на транзакции после установленного порога. Поэтому, если установить порог в 10 транзакций, он сработает на 11-й транзакции за 168 часов. Учитывает транзакции Sale, Preauth или Transfer в отклонённом статусе. | 18058 — превышен недельный лимит количества отклонений для того же номера кредитной карты на Процессоре 18059 — превышен недельный лимит суммы отклонений для того же номера кредитной карты на Процессоре |
| Частота отклонений номера кредитной карты источника за последний месяц (месячный лимит отклонений) | Эта проверка срабатывает, когда количество отклонённых транзакций, связанных с точным номером исходной кредитной карты, превышает настроенные пороги. Временной порог составляет окно в 7 дней, рассчитываемое назад от момента транзакции. Для расчёта окна все даты транзакций усекаются до дней. Риск срабатывает на транзакции после установленного порога. Поэтому, если установить порог в 10 транзакций, он сработает на 11-й транзакции за один месяц. Расчёт месяца ведётся по календарю: например, 28, 29, 30 и 31 марта при расчёте окна будут приведены к 28 февраля. Учитывает транзакции Sale, Preauth или Transfer в одобренном статусе. | 18060 — превышен месячный лимит количества отклонений для того же номера кредитной карты на Процессоре 18061 — превышен месячный лимит суммы отклонений для того же номера кредитной карты на Процессоре |
| Частота использования номера кредитной карты получателя за последние 24 часа (дневной лимит) | Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным номером кредитной карты получателя, превышает настроенные пороги. Временной порог — это окно в 24 часа, рассчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до часов. Риск срабатывает на транзакции после достижения установленного порога. Так, если установить порог в 10 транзакций, он сработает на 11-й транзакции за 24 часа. Учитываются только транзакции Transfer со статусом approved. | 18032 — достигнут почасовой лимит одобренной суммы получателя 18033 — достигнут почасовой лимит одобренного количества получателя |
| Частота использования номера кредитной карты получателя за последние 7 дней (недельный лимит) | Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным номером кредитной карты получателя, превышает настроенные пороги. Временной порог — это окно в 7 дней, рассчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до часов. Риск срабатывает на транзакции после достижения установленного порога. Так, если установить порог в 10 транзакций, он сработает на 11-й транзакции за 168 часов. Учитываются только транзакции Transfer со статусом approved. | 18030 — достигнут недельный лимит одобренной суммы получателя 18031 — достигнут недельный лимит одобренного количества получателя |
| Частота использования номера кредитной карты получателя за последний месяц (месячный лимит) | Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным номером кредитной карты получателя, превышает настроенные пороги. Временной порог — это окно в один месяц, рассчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до дней. Риск срабатывает на 11-й транзакции в одном месяце при пороге 10 транзакций. Расчёт месяца основан на календаре: даты 28, 29, 30 и 31 марта будут приведены к 28 февраля. Учитываются только транзакции Transfer со статусом approved. | 18028 — достигнут месячный лимит одобренной суммы получателя 18029 — достигнут месячный лимит одобренного количества получателя |
| Общая частота использования номера кредитной карты за последние 24 часа (дневной лимит) | Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным номером кредитной карты, используемой как исходная или получающая, превышает настроенные пороги. Временной порог составляет окно в 24 часа, рассчитываемое назад от момента транзакции. Для расчёта окна все даты транзакций усекаются до часов. Риск срабатывает на транзакции после установленного порога. Поэтому, если установить порог в 10 транзакций, он сработает на 11-й транзакции за 24 часа. Учитывает транзакции Sale, Preauth или Transfer в одобренном статусе. | 18038 — достигнут общий одобренный почасовой лимит суммы 18039 — достигнут общий одобренный почасовой лимит количества |
| Общая частота использования номера кредитной карты за последние 7 дней (недельный лимит) | Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным номером кредитной карты, используемой как исходная или получающая, превышает настроенные пороги. Временной порог составляет окно в 7 дней, рассчитываемое назад от момента транзакции. Для расчёта окна все даты транзакций усекаются до часов. Риск срабатывает на транзакции после установленного порога. Поэтому, если установить порог в 10 транзакций, он сработает на 11-й транзакции за 168 часов. Учитывает транзакции Sale, Preauth или Transfer в одобренном статусе. | 18036 — достигнут общий одобренный недельный лимит суммы 18037 — достигнут общий одобренный недельный лимит количества |
| Общая частота использования номера кредитной карты за последний месяц (месячный лимит) | Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным номером кредитной карты, используемым как источник или получатель, превышает настроенные пороги. Временной порог — это окно в один месяц, рассчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до дней. Риск срабатывает на транзакции после достижения установленного порога. Так, если установить порог в 10 транзакций, он сработает на 11-й транзакции в течение одного месяца. Расчёт месяца основан на календаре: даты 28, 29, 30 и 31 марта при расчёте окна будут приведены к 28 февраля. Учитываются транзакции Sale, Preauth или Transfer со статусом approved. | 18034 — достигнут общий одобренный месячный лимит суммы 18035 — достигнут общий одобренный месячный лимит количества |
| Частота использования электронной почты за последние 24 часа (дневной лимит) | Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным адресом электронной почты, превышает настроенные пороги. Временной порог — это окно в 24 часа, рассчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до часов. Риск срабатывает на транзакции после достижения установленного порога. Так, если установить порог в 10 транзакций, он сработает на 11-й транзакции за 24 часа. Учитываются транзакции Sale, Preauth или Transfer со статусом approved. | 18010 — достигнут почасовой лимит одобренной суммы по электронной почте 18011 — достигнут почасовой лимит одобренного количества по электронной почте |
| Частота использования электронной почты за последние 7 дней (недельный лимит) | Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным адресом электронной почты, превышает настроенные пороги. Временной порог — это окно в 7 дней, рассчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до часов. Риск срабатывает на транзакции после достижения установленного порога. Так, если установить порог в 10 транзакций, он сработает на 11-й транзакции за 168 часов. Учитываются транзакции Sale, Preauth или Transfer со статусом approved. | 18008 — достигнут недельный лимит одобренной суммы по электронной почте 18009 — достигнут недельный лимит одобренного количества по электронной почте |
| Частота использования электронной почты за последний месяц (месячный лимит) | Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным адресом электронной почты, превышает настроенные пороги. Временной порог — это окно в один месяц, рассчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до дней. Риск срабатывает на 11-й транзакции в одном месяце при пороге 10 транзакций. Расчёт месяца основан на календаре: даты 28, 29, 30 и 31 марта будут приведены к 28 февраля. Учитываются транзакции Sale, Preauth или Transfer со статусом approved. | 18006 — достигнут месячный лимит одобренной суммы по электронной почте 18007 — достигнут месячный лимит одобренного количества по электронной почте |
| Срок использования электронной почты | Позволяет ограничить количество и сумму транзакций, доступных отдельному клиенту, и установить для Процессора лимит на всё время существования. Клиент определяется по адресу электронной почты. Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным адресом электронной почты, превышает настроенные пороги. Период времени равен сроку существования. Риск срабатывает на транзакции после установленного порога. Поэтому, если установить порог в 10 транзакций, он сработает на 11-й транзакции. Учитывает транзакции Sale, Preauth или Transfer в одобренном статусе. | 18048 — достигнут лимит одобренной суммы по электронной почте за всё время 18049 — достигнут лимит одобренного количества по электронной почте за всё время |
| Частота использования IP-адреса клиента за последние 24 часа (дневной лимит) | Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным IP-адресом Клиента, превышает настроенные пороги. Временной порог составляет окно в 24 часа, рассчитываемое назад от момента транзакции. Для расчёта окна все даты транзакций усекаются до часов. Риск срабатывает на транзакции после установленного порога. Поэтому, если установить порог в 10 транзакций, он сработает на 11-й транзакции за 24 часа. Учитывает транзакции Sale, Preauth или Transfer в одобренном статусе. | 18022 — достигнут почасовой лимит одобренной суммы IP-адреса клиента 18023 — достигнут почасовой лимит одобренного количества IP-адреса клиента |
| Частота использования IP-адреса клиента за последние 7 дней (недельный лимит) | Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным IP-адресом Клиента, превышает настроенные пороги. Временной порог составляет окно в 7 дней, рассчитываемое назад от момента транзакции. Для расчёта окна все даты транзакций усекаются до часов. Риск срабатывает на транзакции после установленного порога. Поэтому, если установить порог в 10 транзакций, он сработает на 11-й транзакции за 168 часов. Учитывает транзакции Sale, Preauth или Transfer в одобренном статусе. | 18020 — достигнут недельный лимит одобренной суммы IP-адреса клиента 18021 — достигнут недельный лимит одобренного количества IP-адреса клиента |
| Частота использования IP-адреса клиента за последний месяц (месячный лимит) | Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным IP-адресом Клиента, превышает настроенные пороги. Временной порог составляет окно в один месяц, рассчитываемое назад от момента транзакции. Для расчёта окна все даты транзакций усекаются до дней. Риск срабатывает на транзакции после установленного порога. Поэтому, если установить порог в 10 транзакций, он сработает на 11-й транзакции за один месяц. Расчёт месяца ведётся по календарю: например, 28, 29, 30 и 31 марта при расчёте окна будут приведены к 28 февраля. Учитывает транзакции Sale, Preauth или Transfer в одобренном статусе. | 18018 — достигнут месячный лимит одобренной суммы IP-адреса клиента 18019 — достигнут месячный лимит одобренного количества IP-адреса клиента |
| Частота использования назначения за последние 24 часа (дневной лимит) | Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным назначением, превышает настроенные пороги. Временной порог — это окно в 24 часа, рассчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до часов. Риск срабатывает на транзакции после достижения установленного порога. Так, если установить порог в 10 транзакций, он сработает на 11-й транзакции за 24 часа. Учитываются транзакции Sale, Preauth или Transfer со статусом approved. | 18016 — достигнут почасовой лимит одобренной суммы назначения 18017 — достигнут почасовой лимит одобренного количества назначения |
| Частота использования назначения за последние 7 дней (недельный лимит) | Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным назначением, превышает настроенные пороги. Временной порог — это окно в 7 дней, рассчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до часов. Риск срабатывает на транзакции после достижения установленного порога. Так, если установить порог в 10 транзакций, он сработает на 11-й транзакции за 168 часов. Учитываются транзакции Sale, Preauth или Transfer со статусом approved. | 18014 — достигнут недельный лимит одобренной суммы назначения 18015 — достигнут недельный лимит одобренного количества назначения |
| Частота использования назначения за последний месяц (месячный лимит) | Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным назначением, превышает настроенные пороги. Временной порог — это окно в один месяц, рассчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до дней. Риск срабатывает на 11-й транзакции в одном месяце при пороге 10 транзакций. Расчёт месяца основан на календаре: даты 28, 29, 30 и 31 марта при расчёте окна будут приведены к 28 февраля. Учитываются транзакции Sale, Preauth или Transfer со статусом approved. | 18012 — достигнут месячный лимит одобренной суммы назначения 18013 — достигнут месячный лимит одобренного количества назначения |
| Частота использования диапазона BIN | Эта проверка срабатывает, когда количество транзакций, связанных с определённым диапазоном BIN карты, превышает настроенные пороги; также можно указать список исключений диапазонов BIN карт, для которых проверки не выполняются. Максимальный временной порог составляет окно в 300 секунд, рассчитываемое назад от момента первой транзакции. Риск срабатывает на транзакции после установленного порога. Поэтому, если установить порог в 10 транзакций, он сработает на 11-й транзакции за 300 секунд. Учитывает транзакции Sale, Preauth, Payout или Transfer. | 18056 — лимит количества транзакций превышен по диапазону BIN на Процессоре |
| Частота использования страны эмитента | Эта проверка срабатывает, когда количество транзакций, связанных с одной страной эмитента карты, превышает настроенные пороги. Максимальный временной порог — это окно в 300 секунд, рассчитываемое назад от момента первой транзакции. Риск срабатывает на транзакции после достижения установленного порога. Так, если установить порог в 10 транзакций, он сработает на 11-й транзакции за 300 секунд. Учитываются транзакции Sale, Preauth, Payout или Transfer. | 18053 — лимит количества транзакций превышен по стране на Процессоре |
| Предотвращение транзакции с той же суммой | Эта проверка срабатывает, когда за временной порог (в секундах) выполняется более одной транзакции с одинаковой суммой. Максимальный временной порог — это окно в 300 секунд, рассчитываемое назад от момента первой транзакции. Риск срабатывает на второй транзакции с той же суммой в течение установленного временного порога. Учитываются транзакции Sale, Preauth, Payout или Transfer. | 18052 — запрос на ту же сумму на Процессоре |
| Количество транзакций за период | Эта проверка срабатывает, когда количество транзакций превышает настроенные пороги. Максимальный порог времени — окно в 600 секунд, рассчитываемое назад от момента первой транзакции. Риск срабатывает на транзакции после установленного порога. Так, при пороге в 10 транзакций он сработает на 11-й транзакции в течение 600 секунд. Учитываются транзакции Sale, Preauth, Payout или Transfer. | 18057 — обнаружена транзакция в установленном временном пороге |
| Частота использования номера счёта за последние 24 часа (дневной лимит) | Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным номером счёта, превышает настроенные пороги. Временной порог — это окно в 24 часа, рассчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до часов. Риск срабатывает на транзакции после достижения установленного порога. Так, если установить порог в 10 транзакций, он сработает на 11-й транзакции за 24 часа. Учитываются транзакции Sale, Preauth, Payout или Transfer со статусом approved. | 15121 15122 |
| Частота использования номера счёта за последние 7 дней (недельный лимит) | Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным номером счёта, превышает настроенные пороги. Временной порог — это окно в 7 дней, рассчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до часов. Риск срабатывает на транзакции после достижения установленного порога. Так, если установить порог в 10 транзакций, он сработает на 11-й транзакции за 168 часов. Учитываются транзакции Sale, Preauth, Payout или Transfer со статусом approved. | 15123 15124 |
| Частота использования номера счёта за последний месяц (месячный лимит) | Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным номером счёта, превышает настроенные пороги. Временной порог — это окно в один месяц, рассчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до дней. Риск срабатывает на 11-й транзакции в одном месяце при пороге 10 транзакций. Расчёт месяца основан на календаре: даты 28, 29, 30 и 31 марта будут приведены к 28 февраля. Учитываются транзакции Sale, Preauth, Payout или Transfer со статусом approved. | 15125 15126 |
| Частота отклонений номера кредитной карты получателя за последние 24 часа (дневной лимит отклонений) | Thявляется check fires when номер или сумма declined транзакцияs associated с exact Destination credit карта номер exceeds configured thresholds. время threshold является a 24 hours window calculated backwards из moment транзакция. For window calculation all транзакция датаs являются truncated в hours. risk fires on транзакция after set threshold. So, if you set a threshold 10 транзакцияs, it fires on 11th транзакция in 24 hours. Counts Transfer транзакцияs in Declined статус. | 18068 — превышен дневной лимит суммы отклонений для получателя на Процессоре 18069 — превышен дневной лимит количества отклонений для получателя на Процессоре |
| Частота отклонений номера кредитной карты получателя за последнюю неделю (недельный лимит отклонений) | Thявляется check fires when номер или сумма declined транзакцияs associated с exact Destination credit карта номер exceeds configured thresholds. время threshold является a 7 days window calculated backwards из moment транзакция. For window calculation all транзакция датаs являются truncated в days. risk fires on транзакция after set threshold. So, if you set a threshold 10 транзакцияs, it fires on 11th транзакция in 168 hours. Counts Transfer транзакцияs in Declined статус. | 18070 — превышен недельный лимит суммы отклонений для получателя на Процессоре 18071 — превышен недельный лимит количества отклонений для получателя на Процессоре |
| Частота отклонений номера кредитной карты получателя за последний месяц (месячный лимит отклонений) | Эта проверка срабатывает, когда количество или сумма отклонённых транзакций, связанных с точным номером кредитной карты получателя, превышает настроенные пороги. Временной порог — это окно в один месяц, рассчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до дней. Риск срабатывает на транзакции после достижения установленного порога. Так, если установить порог в 10 транзакций, он сработает на 11-й транзакции в течение одного месяца. Расчёт месяца основан на календаре: даты 28, 29, 30 и 31 марта при расчёте окна будут приведены к 28 февраля. Учитываются транзакции Transfer со статусом Declined. | 18072 — превышен месячный лимит суммы отклонений для получателя на Процессоре 18073 — превышен месячный лимит количества отклонений для получателя на Процессоре |
| Частота отклонений общего номера кредитной карты за последние 24 часа (дневной лимит отклонений) | Thявляется check fires when номер или сумма declined транзакцияs associated с exact Source или Destination credit карта номер exceeds configured thresholds. время threshold является a 24 hours window calculated backwards из moment транзакция. For window calculation all транзакция датаs являются truncated в hours. risk fires on транзакция after set threshold. So, if you set a threshold 10 транзакцияs, it fires on 11th транзакция in 24 hours. Counts Account verification, Sale, Preauth или Transfer транзакцияs in Declined статус. | 18074 — превышен дневной общий лимит суммы отклонений для отправителя на Процессоре 18075 — превышен дневной общий лимит количества отклонений для отправителя на Процессоре 18076 — превышен дневной общий лимит суммы отклонений для получателя на Процессоре 18077 — превышен дневной общий лимит количества отклонений для получателя на Процессоре |
| Частота отклонений общего номера кредитной карты за последнюю неделю (недельный лимит отклонений) | Thявляется check fires when номер или сумма declined транзакцияs associated с exact Source или Destination credit карта номер exceeds configured thresholds. время threshold является a 7 days window calculated backwards из moment транзакция. For window calculation all транзакция датаs являются truncated в days. risk fires on транзакция after set threshold. So, if you set a threshold 10 транзакцияs, it fires on 11th транзакция in 168 hours. Counts Account verification, Sale, Preauth или Transfer транзакцияs in Declined статус. | 18078 — превышен недельный общий лимит суммы отклонений для отправителя на Процессоре 18079 — превышен недельный общий лимит количества отклонений для отправителя на Процессоре 18080 — превышен недельный общий лимит суммы отклонений для получателя на Процессоре 18081 — превышен недельный общий лимит количества отклонений для получателя на Процессоре |
| Частота отклонений общего номера кредитной карты за последний месяц (месячный лимит отклонений) | Эта проверка срабатывает, когда количество или сумма отклонённых транзакций, связанных с точным номером кредитной карты источника или получателя, превышает настроенные пороги. Временной порог — это окно в один месяц, рассчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до дней. Риск срабатывает на транзакции после достижения установленного порога. Так, если установить порог в 10 транзакций, он сработает на 11-й транзакции в течение одного месяца. Расчёт месяца основан на календаре: даты 28, 29, 30 и 31 марта при расчёте окна будут приведены к 28 февраля. Учитываются транзакции Account verification, Sale, Preauth или Transfer со статусом Declined. | 18082 — превышен месячный общий лимит суммы отклонений для отправителя на Процессоре 18083 — превышен месячный общий лимит количества отклонений для отправителя на Процессоре 18084 — превышен месячный общий лимит суммы отклонений для получателя на Процессоре 18085 — превышен месячный общий лимит количества отклонений для получателя на Процессоре |
| Частота использования номера кредитной карты источника за последние N дней | Thявляется check fires when номер или сумма транзакцияs associated с exact Source credit карта номер exceeds configured thresholds. время threshold является a N days window calculated backwards из moment транзакция. N parameter (дата period) может be set из 1 в 30. For window calculation all транзакция датаs являются truncated в days. risk fires on транзакция after set threshold. So, if you set a threshold 10 транзакцияs, it fires on 11th транзакция in N days. Counts Sale, Preauth или Transfer транзакцияs in approved статус. | 18086 — достигнут лимит одобренной суммы за указанный период 18087 — достигнут лимит одобренного количества за указанный период |
| Частота использования номера кредитной карты получателя за последние N дней | Thявляется check fires when номер или сумма транзакцияs associated с exact Destination credit карта номер exceeds configured thresholds. время threshold является a N days window calculated backwards из moment транзакция. N parameter (дата period) может be set из 1 в 30. For window calculation all транзакция датаs являются truncated в days. risk fires on транзакция after set threshold. So, if you set a threshold 10 транзакцияs, it fires on 11th транзакция in N days. Counts Transfer транзакцияs in approved статус. | 18088 — достигнут лимит одобренной суммы за указанный период, 18089 — достигнут лимит одобренного количества за указанный период |
| Общая частота использования номера кредитной карты за последние N дней | Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным номером исходной или получающей кредитной карты, превышает настроенные пороги. Временной порог составляет окно в N дней, рассчитываемое назад от момента транзакции. Параметр N (период дат) можно задать от 1 до 30. Для расчёта окна все даты транзакций усекаются до дней. Риск срабатывает на транзакции после установленного порога. Поэтому, если установить порог в 10 транзакций, он сработает на 11-й транзакции за N дней. Учитывает транзакции Sale, Preauth или Transfer в одобренном статусе. | 18090 — достигнут общий лимит суммы за указанный период 18091 — достигнут общий лимит количества за указанный период 18092 — достигнут лимит суммы за указанный период для получателя 18093 — достигнут лимит количества за указанный период для получателя |
| Частота использования назначения за последние N дней | Thявляется check fires when номер или сумма транзакцияs associated с exact Purpose exceeds configured thresholds. время threshold является a N days window calculated backwards из moment транзакция. N parameter (дата period) может be set из 1 в 30. For window calculation all транзакция датаs являются truncated в days. risk fires on транзакция after set threshold. So, if you set a threshold 10 транзакцияs, it fires on 11th транзакция in N days. Counts Sale, Preauth или Transfer транзакцияs in approved статус. | 18094 — достигнут лимит одобренной суммы назначения за указанный период 18095 — достигнут лимит одобренного количества назначения за указанный период |
| Частота использования электронной почты за последние N дней | Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным адресом электронной почты, превышает настроенные пороги. Временной порог составляет окно в N дней, рассчитываемое назад от момента транзакции. Параметр N (период дат) можно задать от 1 до 30. Для расчёта окна все даты транзакций усекаются до дней. Риск срабатывает на транзакции после установленного порога. Поэтому, если установить порог в 10 транзакций, он сработает на 11-й транзакции за N дней. Учитывает транзакции Sale, Preauth или Transfer в одобренном статусе. | 18096 — достигнут лимит одобренной суммы по электронной почте за указанный период 18097 — достигнут лимит одобренного количества по электронной почте за указанный период |
| Частота использования IP-адреса за последние N дней | Thявляется check fires when номер или сумма транзакцияs associated с exact IP address exceeds configured thresholds. время threshold является a N days window calculated backwards из moment транзакция. N parameter (дата period) может be set из 1 в 30. For window calculation all транзакция датаs являются truncated в days. risk fires on транзакция after set threshold. So, if you set a threshold 10 транзакцияs, it fires on 11th транзакция in N days. Counts Sale, Preauth или Transfer транзакцияs in approved статус. | 18098 — достигнут лимит одобренной суммы IP-адреса за указанный период 18099 — достигнут лимит одобренного количества IP-адреса за указанный период |
| Частота использования отпечатка за последние N дней | Thявляется check fires when номер или сумма транзакцияs associated с exact Fingerprint exceeds configured thresholds. время threshold является a N days window calculated backwards из moment транзакция. N parameter (дата period) может be set из 1 в 30. For window calculation all транзакция датаs являются truncated в days. risk fires on транзакция after set threshold. So, if you set a threshold 10 транзакцияs, it fires on 11th транзакция in N days. Counts Sale, Preauth или Transfer транзакцияs in approved статус. | 18100 — достигнут лимит одобренной суммы отпечатка за указанный период, 18101 — достигнут лимит одобренного количества отпечатка за указанный период |
| Частота использования номера счёта за последние N дней | Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным номером счёта, превышает настроенные пороги. Временной порог — это окно в N дней, рассчитываемое назад от момента транзакции. Параметр N (период дат) можно установить от 1 до 30. При расчёте окна все даты транзакций усекаются до дней. Риск срабатывает на транзакции после достижения установленного порога. Так, если установить порог в 10 транзакций, он сработает на 11-й транзакции за N дней. Учитываются транзакции Sale, Preauth или Transfer со статусом approved. | 18102 — превышен лимит суммы за указанный период для номера счёта на Процессоре 18103 — превышен лимит количества за указанный период для номера счёта на Процессоре |
| Имя клиента отличается от имени держателя карты | This check fires when the provided клиент название does not match держатель карты название. | 18120 - Клиент название does not correspond to the картаholder название |
| Страна адреса выставления счёта клиента отличается от страны выпуска | Эта проверка риска срабатывает, когда страна платёжного адреса клиента в транзакции отличается от страны эмитента карты. Если параметр «apply for countries» пуст, фильтр потребует строгого соответствия страны клиента и страны эмитента для всех стран; иначе проверка принудит соответствие только для перечисленных стран. Например, если задать «apply for countries» как US, проверка сработает для комбинаций US-any NonUS или any NonUS-US, но для any NonUS-any NonUS и US-US не сработает. Для транзакций card2card страна эмитента исходной карты должна совпадать со страной эмитента карты получателя; то есть эта проверка сработает для любой трансграничной транзакции. | 18121 — страна адреса выставления счёта клиента не соответствует стране выпуска |
| Блокировка Процессора по указанным отклонениям | Фильтр позволяет блокировать Процессор на период блокировки на основании заданного лимита отклонённых транзакций с определёнными анализируемыми кодами отклонения, произошедших за анализируемый период. После активации фильтра его блокировки можно отслеживать на экране журналов Процессора. При отключении фильтра текущий статус Процессора сбрасывается на «разблокирован», несмотря на оставшееся время периода блокировки. Экран журналов Процессора включается по запросу. | 19100 — блокировка Процессора, достигнут лимит времени отклонений |
| Частота использования отклонённой электронной почты за последние 24 часа (дневной лимит отклонений) | Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным адресом электронной почты, превышает настроенные пороги. Временной порог составляет окно в 24 часа, рассчитываемое назад от момента транзакции. Для расчёта окна все даты транзакций усекаются до часов. Риск срабатывает на транзакции после установленного порога. Поэтому, если установить порог в 10 транзакций, он сработает на 11-й транзакции за 24 часа. Учитывает транзакции Sale, Preauth или Transfer в отклонённом статусе. | 19101 — почасовой лимит суммы отклонений по электронной почте 19102 — достигнут почасовой лимит количества отклонений по электронной почте |

### Audit Events

#### Введение

Монитор событий предназначен для уведомления об определённых событиях в системе с помощью push- или URL-уведомлений.

Включённое URL-уведомление отправляет запрос на указанный URL. Ожидается, что сервер Присоединяющейся стороны ответит HTTP-статусом 200 OK; в противном случае система попытается отправить то же уведомление до 30 раз в течение 14 дней, чтобы гарантировать его доставку.

URL Requirements - HTTPS: 443, 8443

Все события, кроме “Managers”, доступны менеджерам и superior’ам. Событие “Managers” доступно только superior’ам.

#### Описание: Access to control key

Событие “Описание: Access to control key” отправляет уведомление на указанный URL о просмотре контрольного ключа торговца любым пользователем системы.

Пример полученных данных:
 
{access_date: “2021.04.01 23:59:59”, user_name: “vp-support”, merchant_name: “имя нового торговца”, merchant_id: “1”, viewed_data: “merchant_control_key”}
 

| Название параметра | Проверка | Описание |
|----------------------|------------|--------------------------------------------------|
| access_date | Строка | Описание: Date of access |
| user_name | Строка | Имя пользователя, просмотревшего ключ управления |
| merchant_name | Строка | Описание: Торговец’s name |
| merchant_id | Integer | Торговец’s ID |
| viewed_data | Строка | Описание: Viewed data |

#### Доступ к профилю торговца

Событие “Доступ к профилю торговца” отправляет уведомление на указанный URL о посещении страницы торговца любым пользователем системы.

Пример полученных данных:
 
{access_date: “2021.04.01 23:59:59”, user_name: “vp-support”, merchant_name: “название нового торговца”, merchant_id: “1”, viewed_data: “merchant_page”}
 

| Название параметра | Проверка | Описание |
|----------------------|------------|--------------------------------------------------|
| access_date | Строка | Описание: Date of access |
| user_name | Строка | Имя пользователя, просмотревшего ключ управления |
| merchant_name | Строка | Описание: Торговец’s name |
| merchant_id | Integer | Торговец’s ID |
| viewed_data | Строка | Описание: Viewed data |

#### Endpoints

“Endpoints” event sends notification to the specified URL about creating a new/changing endpoint status.

Пример полученных данных:
 
{end_point_id: “1”, end_point_name: “new endpoint name”, end_point_status: “Disabled”, end_point_rate_plan_id: null, end_point_rate_plan_name: null}
 

| Название параметра | Проверка | Описание |
|--------------------------|------------|----------------------------------------------------------------------------------------------|
| end_point_id | Integer | Endpoint’s ID |
| end_point_name | Строка | Описание: Endpoint’s name |
| end_point_status | Строка | Описание: Endpoint’s status. Возможные значения: Включено, Отключено |
| end_point_rate_plan_id | Строка | Идентификатор тарифного плана конечной точки |
| end_point_rate_plan_name | Строка | Название тарифного плана конечной точки |

#### Endpoints first transaction

“Endpoints first transaction” event sends notification to the specified URL about first endpoint transaction.

Пример полученных данных:
 
{end_point_id: “1”, end_point_name: “new endpoint name”, end_point_status: “Disabled”, end_point_first_transaction_date: “2021.04.01 23:59:59”}
 

| Название параметра | Проверка | Описание |
|----------------------------------|------------|----------------------------------------------------------------------------------------------|
| end_point_id | Integer | Endpoint’s ID |
| end_point_name | Строка | Описание: Endpoint’s name |
| end_point_status | Строка | Описание: Endpoint’s status. Возможные значения: Включено, Отключено |
| end_point_first_transaction_date | Строка | Дата первой транзакции конечной точки |

#### Gates

Событие “Gates” отправляет уведомление на указанный URL о создании нового или изменении статуса шлюза.

Пример полученных данных:
 
{gate_id: “1”, gate_name: “название нового шлюза”, gate_status: “Отключён”, gate_rate_plan_id: “10”, gate_rate_plan_name: “название нового тарифного плана шлюза”}
 

| Название параметра | Проверка | Описание |
|----------------------|------------|------------------------------------------------------------------------------------------|
| gate_id | Integer | Gate’s ID |
| gate_name | Строка | Описание: Gate’s name |
| gate_status | Строка | Описание: Gate’s status. Возможные значения: Включено, Отключено |
| gate_rate_plan_id | Строка | Описание: Gate’s rate plan ID |
| gate_rate_plan_name | Строка | Описание: Gate’s rate plan name |

#### Managers

Событие «Менеджеры» отправляет уведомление на указанный URL о создании нового менеджера.

Пример полученных данных:
 
{manager_id: “1”, manager_name: “название нового менеджера”}
 

| Название параметра | Проверка | Описание |
|----------------------|------------|--------------------------|
| manager_id | Integer | Manager’s ID |
| manager_name | Строка | Описание: Manager’s name |

#### Торговец

Событие “Торговецs” отправляет уведомление на указанный URL о создании нового или изменении статуса торговца.

Пример полученных данных:
 
{merchant_id: “1”, merchant_name: “новое имя торговца”, merchant_status: “Disabled”}
 

| Название параметра | Проверка | Описание |
|----------------------|------------|----------------------------------------------------------------------------------------------|
| merchant_id | Integer | Торговец’s ID |
| merchant_name | Строка | Описание: Торговец’s name |
| merchant_status | Строка | Описание: Торговец’s status. Возможные значения: Включено, Отключено |

#### Первая транзакция торговца

Событие “Первая транзакция торговца” отправляет уведомление на указанный URL о первой транзакции торговца.

Пример полученных данных:
 
{merchant_id: “1”, merchant_name: “название нового торговца”, merchant_status: “Отключён”, merchant_first_transaction_date: “2021.04.01 23:59:59”}
 

| Название параметра | Проверка | Описание |
|---------------------------------|------------|----------------------------------------------------------------------------------------------|
| merchant_id | Integer | Торговец’s ID |
| merchant_name | Строка | Описание: Торговец’s name |
| merchant_status | Строка | Описание: Торговец’s status. Возможные значения: Включено, Отключено |
| merchant_first_transaction_date | Строка | Дата первой транзакции торговца |

#### Описание: Processing limits

Событие “Описание: Processing limits” отправляет уведомление на указанный URL о создании новой или изменении конфигурации/удалении лимита.

Пример полученных данных:
 
{processing_limit_id: “1”, processing_limit_action_type: “создан”}
 

| Название параметра | Проверка | Описание |
|------------------------------|------------|---------------------------------------------------------------------------------------------------------------|
| processing_limit_id | Integer | Описание: Процессор’s limit ID |
| processing_limit_action_type | Строка | Тип действия лимита Процессора. Возможные значения: Создан, Включён, Отключён, Удалён |

#### Процессор

Событие “Процессорs” отправляет уведомление на указанный URL о создании нового или изменении статуса процессора.

Пример полученных данных:
 
{processor_id: “1”, processor_name: “новое имя процессора”, processor_status: “Disabled”}
 

| Название параметра | Проверка | Описание |
|----------------------|------------|-----------------------------------------------------------------------------------------------|
| processor_id | Integer | Процессор’s ID |
| processor_name | Строка | Описание: Процессор’s name |
| processor_status | Строка | Описание: Процессор’s status. Возможные значения: Включено, Отключено |

#### Проекты

Событие “Проекты” отправляет уведомление на указанный URL о создании нового или изменении статуса проекта.

Пример полученных данных:
 
{project_id: “1”, project_name: “имя нового проекта”, project_status: “Отключён”, project_rate_plan_id: “10”, project_rate_plan_name: “имя нового тарифного плана проекта”}
 

| Название параметра | Проверка | Описание |
|------------------------|------------|---------------------------------------------------------------------------------------------|
| project_id | Integer | Project’s ID |
| project_name | Строка | Описание: Project’s name |
| project_status | Строка | Описание: Project’s status. Возможные значения: Включено, Отключено |
| project_rate_plan_id | Строка | Описание: Project’s rate plan ID |
| project_rate_plan_name | Строка | Название тарифного плана проекта |

### Групповые операции

#### Введение

Групповые операции — это набор инструментов, позволяющий обрабатывать несколько операций через пользовательский интерфейс системы. Ниже представлен список доступных групповых операций.

#### Gate Operations

##### Close Day For Selected Gates

Эта пакетная операция может быть полезна для закрытия банковского дня по группе шлюзов. Выберите ID шлюзов или процессоров, чтобы закрыть банковские дни на всех шлюзах.

 

 

> **Note:** При выборе Процессора закрытие дня будет применено ко всем шлюзам, прикреплённым к этому Процессору.

#### Transaction Operations

##### Чарджбэк

Эта пакетная операция может быть полезна, если Reversal по какой-либо причине не был выполнен для предотвращения Чарджбэк и необходимо создать транзакцию Чарджбэк по указанным входным данным. Соберите идентификаторы заказов, присвоенные системой Payneteasy, в CSV-файл и загрузите его, чтобы выполнить Чарджбэк для выбранных транзакций. Пример CSV-файла доступен на том же экране.

 

##### Reversal

Эта пакетная операция может быть полезна для создания транзакций Reversal в соответствии с заданными входными данными. Соберите идентификаторы заказов, назначенные системой Payneteasy, в CSV-файл и загрузите его, чтобы выполнить Reversal выбранных транзакций. Пример CSV-файла для загрузки доступен на том же экране.

 

##### Мошенничество

Если Присоединяющаяся сторона подозревает транзакцию в мошенничестве, эта пакетная операция может использоваться для пометки транзакций как мошеннических в соответствии с указанными входными данными. Соберите идентификаторы заказов, присвоенные системой Payneteasy, в CSV-файл и загрузите его, чтобы отметить выбранные транзакции как мошеннические. Пример CSV-файла для загрузки доступен на том же экране.

 

##### Capture

Эта пакетная операция может быть полезна для списания заблокированной суммы по транзакциям Preauth (Preauth должна иметь окончательный статус approved) в соответствии с указанными входными данными. Соберите идентификаторы заказов, присвоенные системой Payneteasy, в CSV-файл и загрузите его, чтобы выполнить Capture выбранных транзакций. Пример CSV-файла доступен на том же экране.

 

##### Retry Pending Reversals

Эта пакетная операция повторно отправляет запрос Reversal для ожидающих Reversal в соответствии с заданными входными данными. Соберите идентификаторы заказов, назначенные системой Payneteasy, в CSV-файл и загрузите его, чтобы выполнить Reversal выбранных транзакций. Пример CSV-файла для загрузки доступен на том же экране.

 

##### Blacklist

Эта пакетная операция в соответствии с заданными входными данными добавляет карты в чёрный список или внешнюю систему мошенничества, если она настроена. Соберите идентификаторы заказов, назначенные системой Payneteasy, в CSV-файл и загрузите его, чтобы добавить в чёрный список карту выбранных транзакций. Пример CSV-файла для загрузки доступен на том же экране.

 

##### Commit Reversal

Эта пакетная операция может быть полезна для инициирования транзакций Reversal в соответствии с заданными входными данными. Соберите идентификаторы заказов, назначенные системой Payneteasy, в CSV-файл и загрузите его, чтобы выполнить Reversal выбранных транзакций. Пример CSV-файла для загрузки доступен на том же экране.

 

##### Add Comment To Transactions

Эта пакетная операция может быть полезна для добавления комментария к транзакциям в соответствии с заданными входными данными. Соберите идентификаторы заказов, назначенные системой Payneteasy, в CSV-файл и загрузите его, чтобы добавить комментарий для выбранных транзакций. Пример CSV-файла для загрузки доступен на том же экране.

 

##### Add Card Mappings

Эта пакетная операция может быть полезна для сопоставления (привязки) одного или нескольких идентификаторов держателей карт с данными карты.

 

##### Query Status Of Transactions

Эта пакетная операция может быть полезна для запроса статуса транзакций (независимо от статуса) в соответствии с заданными входными данными. Соберите идентификаторы заказов, назначенные системой Payneteasy, в CSV-файл и загрузите его, чтобы запросить статус выбранных транзакций. Пример CSV-файла для загрузки доступен на том же экране.

 

##### Resend Callbacks

Данная групповая операция может быть полезна, если информация о конечном статусе транзакций доступна в системе Payneteasy и по какой-то причине недоступна в системе Присоединяющейся Стороны. Соберите идентификаторы заказов, присвоенные системой Payneteasy, в CSV-файл и загрузите его для отправки новых обратных вызовов. Пример CSV-файла для загрузки доступен на этом же экране.

##### Upload Чарджбэкs Info

Эта пакетная операция может быть полезна во время процедуры Чарджбэк для загрузки дополнительных сведений о Чарджбэк. Соберите идентификаторы заказов, назначенные системой Payneteasy, внесите сведения в CSV-файл и загрузите его.

 

##### Sale With Card Reference ID

Эта пакетная операция может использоваться для инициирования Sale без информации о карте, только с использованием Card reference ID. Соберите Endpoint и идентификаторы Card reference, присвоенные системой Payneteasy, внесите все данные в CSV-файл и загрузите его для инициирования транзакций Sale с Card reference ID. Пример CSV-файла доступен на том же экране.

 

##### Ethoca Alerts Update

Эта групповая операция может быть полезна для обновления статусов Ethoca. Соберите идентификаторы заказов, присвоенные системой Payneteasy, в CSV-файл и загрузите его для отправки статусов в систему Ethoca. Пример CSV-файла для загрузки доступен на этом же экране.

 

##### Create Recurring Payments

Эта пакетная операция может быть полезна для инициирования рекуррентных платежей по транзакциям, требующим регулярных списаний с одинаковыми данными. Соберите идентификаторы заказов, присвоенные системой Payneteasy, внесите всю информацию в CSV-файл и загрузите его для создания рекуррентных платежей. Пример CSV-файла для загрузки доступен на том же экране.

 

##### Update Recurring Payments

Эта пакетная операция может быть полезна для обновления рекуррентных платежей (новые данные клиента и т. д.) по транзакциям, требующим регулярных списаний с одинаковыми данными. Соберите идентификаторы рекуррентных заказов, присвоенные системой Payneteasy, внесите всю информацию в CSV-файл и загрузите его для обновления сведений о рекуррентных платежах. Пример CSV-файла доступен на том же экране.

 

##### PIPO Mark Sent

Эта пакетная операция позволяет отметить ожидающий банковский перевод как отправленный (но ещё не полученный). Этот статус соответствует «processing» для транзакции Preauth. Соберите идентификаторы заказов, присвоенные системой Payneteasy, внесите всю информацию в CSV-файл и загрузите его, чтобы отметить платежи PIPO как отправленные. Пример CSV-файла для загрузки доступен на том же экране.

 

##### PIPO Mark Received

Этот пакет позволяет пометить ожидающий банковский перевод как полученный. Этот статус соответствует «approved» для транзакции preauth. Соберите идентификаторы заказов, назначенные системой Payneteasy, внесите всю информацию в CSV-файл и загрузите его, чтобы пометить платежи PIPO как полученные. Пример CSV-файла для загрузки доступен на том же экране.

 

##### Scoring

Этот пакет позволяет получить информацию о Card scoring. Соберите идентификаторы заказов и необходимые данные карты, назначенные системой Payneteasy, внесите всю информацию в CSV-файл и загрузите его для получения сведений Card scoring. Пример CSV-файла для загрузки доступен на том же экране.

 

##### Запрос подтверждающих документов

Эта пакетная операция может быть полезна для загрузки копии слипа продажи в поддержку или для выявления потенциального Чарджбэк. Соберите идентификаторы заказов, назначенные системой Payneteasy, внесите всю информацию в CSV-файл и загрузите его, чтобы добавить сведения Запрос подтверждающих документов. Пример CSV-файла для загрузки доступен на том же экране.

### Групповые операции со шлюзами

#### Введение

Batch Operations feature allows simultaneous management of multiple
payment gates without the need to edit each gate individually.
 
The functionality is designed to simplify administrative tasks related
to gate configuration, particularly for cases where acquirer limits or
filters must be updated across many gates at once. This functionality
is available in the “Gates” section of the user interface. It is
available for Manager and Superior roles by default, and can be added
for Employees by request.
 

Доступные действия:

| Действие | Описание |
|----------------------|---------------------------------------------------------------|
| Включить/Отключить | Включает или выключает выбранные шлюзы. |
| Мин/макс | Устанавливает минимальную и максимальную сумму операции. |
| Ограничения эквайера | Позволяет подключить и настроить фильтры Referral и Velocity. |
 

#### Обработка групповых операций в интерфейсе пользователя

1. Перейдите в Настройки -> Конфигурация -> Шлюзы.
2. Используйте **Точный Поиск** для фильтрации шлюзов по нужным критериям.
3. Отметьте шлюзы чекбоксами в левом столбце списка. Можно выбрать все шлюзы на странице или все найденные (до 20 000).
4. После выбора шлюзов нажмите Действия в правом верхнем углу, чтобы открыть список доступных операций.

 
`Select Gates`
 

> **Note:** Одновременно может выполняться только одна операция. При попытке запустить новую операцию будет отображено соответствующее предупреждающее сообщение.

##### Включение/выключение шлюзов

Эта операция изменяет статус активности сразу у нескольких шлюзов.

Шаги:
 
1. Выберите нужные шлюзы.
 
2. Нажмите Действия -> Включить/отключить.
 
3. В появившемся модальном окне выберите действие (Включить или Отключить).
 
4. Нажмите Применить.
 
 
`Enable Disable Gates`

##### Установка лимитов Мин/макс

Used to define minimum and maximum allowed transaction amounts for
selected gates. If the selected gates have different currencies, the
system converts the values automatically based on the current internal
exchange rate.

Шаги:
 
1. Выберите шлюзы.
 
2. Выберите Действия -> Мин/макс.
 
3. В модальном окне укажите:
 
- Валюта — выбирается из списка (допускается только одна);
 
- Минимальная сумма транзакции;
 
- Максимальная сумма транзакции.
 
4. Проверьте, что минимальная сумма не превышает максимальную.
 
5. Нажмите Применить.
 
 
`Min Max Amount Gates`
 

> **Warning:** If the MIN or MAX value is already set at the gate level, then when applying the batch, incorrect values (for example, if MIN is greater than MAX) may be displayed as successfully applied, but will not actually be written to the gate. The display of notifications will be improved in the future.

##### Ограничения эквайера

This function allows applying **Referral** and **Velocity** filters to a
group of gates, and configuring their specific parameters.

Шаги:
 
1. Выберите шлюзы.
 
2. Выберите Действия -> Ограничения эквайера.
 
3. В модальном окне отметьте выбранные шлюзы и нажмите Применить.
 
4. На вкладке **Фильтры** выберите один или несколько фильтров из списка (Referral и Velocity).
 
5. На вкладке **Конфигурации** задайте параметры фильтров:
 
- Включение/выключение фильтра;
 
- Выбор валюты;
 
- Лимиты суммы и количества. Если выбранные шлюзы имеют разные валюты, система автоматически конвертирует значения на основе текущего внутреннего обменного курса;
 
- Дополнительные параметры (например, *для всех шлюзов с одинаковым дескриптором*).
 
6. Наведите курсор на значок i рядом с параметром, чтобы увидеть подсказку.
 
7. Нажмите Применить для применения изменений.
 
 
`restrictions_1``restrictions_2``restrictions_3`

##### Выполнение и мониторинг задач

Each batch operation is added to the execution queue and processed
asynchronously by the backend system.

**Поведение интерфейса:**

- While the batch task is running, an informational panel is displayed
 above the gate list showing:
 - Общим количеством шлюзов в обработке;
 - Текущим прогрессом (в процентах)
 - Количеством успешно обновлённых шлюзов.
 - Количеством неуспешно обновлённых шлюзов.
- После завершения задачи:
 - A download link for a CSV file with failed gate updates and
 error codes appears.
 - Временный CSV файл удаляется после загрузки;
 - Панель можно закрыть кнопкой Закрыть (X).

`excec_status`

### Принципы построения модели выставления счетов

#### Введение

Начиная с версии 3.23.01 доход распределяется между всеми участниками иерархически. Это повышает точность расчётов, позволяет управлять параметрами выплаты удержаний и настраивать модель тарифов в зависимости от платёжного потока.
 
Эта модель позволяет переопределять тарифы, а также сумму удержания и дату его выплаты.
 
Порядок распределения дохода для транзакций sale
 

При обработке транзакции SMS или DMS все участники удерживают свою комиссию из суммы Sale согласно заданным ставкам. Ставки применяются от Bank к Merchant. Каждый участник потока видит только определённые для него ставки, не зная ставок предшествующих участников платёжного потока. Для транзакций Sale последним участником является Reseller, и его ставка будет окончательной.
 
Порядок распределения дохода для транзакций Transfer
 

При обработке транзакции Transfer расчёт тарифа выполняется так же, за исключением дополнительного участника — получателя средств. Последний участник этого потока — торговец, а получатель видит свой тариф как окончательный.
 

#### Описание: Rates definition

Ставки применяются по возрастанию: каждый последующий тарифный план наследует предыдущую ставку. Поэтому чем выше уровень пользователя, тем выше его ставка. Ставки Bank и Dealer определяются на уровне Gate, а для Manager, Reseller и Merchant — на уровне Project. Эти ставки могут быть переопределены на уровне Endpoint. В этом потоке могут отсутствовать некоторые участники.
 

#### Учёт комиссий

Первый элемент на диаграмме — общая комиссия, учтённая для транзакции. Для простоты рассмотрим транзакцию Sale в Проекте без Реселлера. Таким образом, с Торговца удерживается комиссия, определённая в тарифном плане Менеджера. В этом случае расчёт комиссии идёт по приоритетной цепочке Банк → Дилер → Менеджер. Это означает, что Банк первым получает свою долю согласно тарифу Банка, затем удерживается комиссия Дилера, а Менеджер получает остаток.
 

Существует вероятность, что комиссия не будет соответствовать ожидаемой.

*Example 1:*
 
Посмотрим, как изменится расчёт комиссии в зависимости от применённых диапазонов.
 
> * Тарифный план дилера определяется следующим образом: если сумма транзакции находится между 0 и 1000 USD, ставка дилера составляет 5 USD; если больше 1000 USD — 8 USD.
> * Ставка менеджера фиксирована: 10 USD;
Предположим, что Менеджер не заметил диапазоны, заданные Dealer, и ожидает комиссию в 5 USD
 

Как видно на рисунке, комиссия Dealer рассчитывается раньше комиссии Manager, и фактическая комиссия Manager будет ниже ожидаемой – 2 USD.
 
*Example 2:*
 
Со ставками, заданными для BIN, страны или банка, следует быть гораздо внимательнее. Предположим, что диапазоны Dealer и Manager одинаковы.
 
> * Ставка дилера: для всех транзакций 5 USD, за исключением BIN 233445, для которого ставка составляет 12 USD;
> * Ставка Менеджера: предположим, что Менеджер не учёл ставку Dealer для BIN и задал фиксированную ставку 10 USD.
Рассмотрим транзакцию с BIN 456778. Общая комиссия будет распределена следующим образом: 5 USD для Dealer и 5 USD для Manager. Транзакция с BIN 233445 приносит 12 USD для Dealer, а комиссия Manager будет отрицательной: -2 USD, поскольку общая комиссия в тарифном плане Manager составляет 10 USD.
 

#### Удержание и его перенос

Чтобы застраховать риски Торговца, можно определить удержание для конкретных Торговцев. Система управления выплатами обеспечивает учёт замороженных удержаний и сумм удержаний, подлежащих возврату Торговцу. Удержание покрывает риски, связанные с Chargeback, инициированными недовольными клиентами при расторжении договора с Торговцем. Операция переноса выполняется не более чем за 182 календарных дня. Период выплаты и процент удержания определяются в тарифах.
 
Алгоритм расчёта и переноса удержания
 
Каждый участник платёжного потока, кроме торговца, может определить собственные процент удержания и период удержания. Процент и период удержания не зависят друг от друга.
 

Согласно рисунку, для транзакции t1 Банк удерживает из общей комиссии значение HB за период ΔtB, определённый в тарифе Банка. Таким образом, Банк удерживает сумму HB за период [t1, t2] на своём счёте для покрытия рисков Chargeback и мошеннических операций. После истечения периода ΔtB, если не было отрицательных транзакций, Банк выплачивает удержанные средства Дилеру. Этот процесс CB называется переносом. Такая же схема применяется к любому участнику платёжного потока.
 

Общий доход любого участника составляет: комиссия + холд участника – холд предыдущего участника.

> * Для банка: в момент t1 за период ΔtB доход будет пополнен на сумму удержания HB, а в момент t2 эта же сумма будет вычтена.
> * Для дилера: в момент t1 за период ΔtD доход будет пополнен на сумму удержания HD, в момент t3 та же сумма будет списана, а в момент t2 доход дилера пополняется на сумму переноса CB, возвращённую банком.
> * Для Менеджера: в момент t1 за период ΔtM доход будет пополнен на сумму удержания HM, в момент t4 та же сумма будет списана, а в момент t3 доход Менеджера пополняется на сумму переноса CD, возвращённую Дилером.
> * Для Реселлера: в момент t1 за период ΔtR доход будет пополнен на сумму удержания HR, в момент t5 та же сумма будет списана, а в момент t4 доход Реселлера пополняется на сумму переноса CM, возвращённую Менеджером.
> * Для торговца: торговец не может определять значения удержания; в момент t1 за период ΔtR из дохода будет удержана сумма HR, а в момент t5 будет зачислена та же сумма.
При правильном задании параметров удержания процент удержания участника платёжного потока будет не меньше процента удержания предыдущего участника. В противном случае возникают финансовые риски. То же относится к параметру периода удержания.
 

#### Описание: Rates validation

Начиная с версии 3.23.0 можно определять отрицательные ставки. Проверить тарифные планы в момент создания невозможно: проверка выполняется при обработке транзакции. Если отрицательные ставки определены намеренно, отключите проверку в настройках Project. Это отключит проверку всех ставок, определённых для Project.
 

#### Описание: Event model

Payneteasy использует событийную модель для применения ставок. Процессоры генерируют различные события. Ставки применяются к этим событиям в соответствии с тарифными планами. Payneteasy связывает событие с транзакцией в системе, будь то транзакция Sale или вызов внешней системы борьбы с мошенничеством. Транзакция является минимальной единицей тарификации. У транзакции есть тип и статус.
 

##### Стандартные типы транзакций

| Транзакция | Описание |
|--------------|-----------------------------------------------------------------------------------------------------|
| sale | списывает сумму со счёта клиента |
| preauth | удерживает сумму на счёте клиента, но не списывает её |
| capture | списывает сумму со счёта клиента; может быть выполнена только после соответствующей предавторизации |
| cancel | отменяет транзакцию preauth, если она не была списана операцией capture |
| reversal | возвращает сумму на счёт клиента |
| chargeback | запрос на возврат суммы, инициированный держателями карт через банк-эмитент |
| dispute | для оспаривания операции Chargeback подтверждает двойное списание |
| fraud | операция помечает транзакцию как мошенническую |
| refund | операция прямого списания со счёта клиента |
| transfer | операция перевода денег, перевод денег между картами или со счёта Торговца |

##### Стандартные статусы транзакций

| Транзакция | Описание |
|--------------|-------------------------------------------------------------------|
| approved | транзакция одобрена банком или PSP |
| decline | транзакция отклонена банком или PSP |
| filtered | Транзакция отфильтровывается системой до достижения банка или PSP |
Текущая модель допускает следующие комбинации типов и статусов:
 
> * APPROVED: все типы транзакций;
> * Статус DECLINED: sale, preauth, transfer;
> * Статус FILTERED: sale, preauth, transfer, reversal;
Чтобы применить тарифы к событию, необходимо определить следующие параметры:
 
> * Параметр Minimum (min)
> * Параметр Percentage (rate)
> * Фиксированная (абсолютная) ставка (abs)
> * Процент удержания (hold)
> * Параметр Hold period
> * Пользовательская функция
Ставка рассчитывается следующим образом:
 
> * сначала вычисляется максимум из заданных minimum и percentage, умноженного на сумму транзакции: greatest (min, amount\*rate)
> * к рассчитанному значению добавляется фиксированная ставка: наибольшее(min, amount\*rate) + abs
> * удержание списывается: наибольшее(min, amount\*rate) + abs + hold
> * применяется пользовательская функция. Функция может переопределить расчёт
> * сумма транзакции уменьшается на рассчитанную сумму
При определении тарифов для BIN, банка или страны необходимо задать следующие параметры:
 
> * Параметр Minimum (min)
> * Параметр Percentage (rate)
> * Фиксированная (абсолютная) ставка (abs)
> * Пользовательская функция
Вы не можете переопределять параметры холда. Для переопределённых событий применяется следующий приоритет поиска: сначала ищется ставка, переопределённая для BIN; если она не найдена, система ищет ставку, переопределённую для банка; если и она не найдена, ищется ставка, переопределённая для страны. Если ни одна ставка не переопределена, применяется ставка по умолчанию.
 

#### Конфигурация таблицы тарифов

Для большей гибкости при определении ставок вы можете использовать интерфейс определения таблицы ставок.
 
Для типов транзакций, инициирующих заказы, кроме перевода, поддерживается таблица ставок диапазона одного уровня. Диапазон можно определить по сумме транзакции, общей сумме и общему числу транзакций, обработанных шлюзом в текущем месяце.
 
Для транзакций, не инициирующих заказы, можно определить следующие диапазоны: отношение текущего числа транзакций этого типа к общему числу транзакций за текущий или прошлый месяц.
 
Для транзакций Transfer можно определить два уровня диапазонов в таблице тарифов. Диапазоны первого уровня такие же, как для транзакции, инициирующей заказы. Второй уровень — направление перевода. Направления перевода определяются на уровне экземпляра Payneteasy. Стандартные направления: с карты Visa на любую другую карту, с карты Master Card на любую другую карту, перевод внутри банка и многие другие. Чтобы выбрать необходимые направления, создайте запрос на улучшение.
 

`exclamation`

Расчёт агрегированных величин (общей суммы, общего количества и соотношения) по умолчанию выполняется на уровне шлюза. Для прозрачности ставок следует выбрать расчёт агрегированных величин на уровне конечной точки или проекта.

Рассмотрим конфигурацию таблицы тарифов для транзакций Transfer
 
Предположим, что Шлюз поддерживает переводы для различных типов карт. Тариф перевода зависит от общей суммы транзакций, обработанных Шлюзом. Лимит установлен в размере 10 000 000. Можно определить разные тарифы в зависимости от направления перевода. Если общая сумма меньше 10 000 000, применяются тарифы для следующих направлений: Visa2Any, Master Card2Any, Any2Any; в противном случае устанавливается общий тариф. В этом случае действует следующая иерархия:
 

Рассмотрим поток транзакции по карте 4444 5555 6666 1111. Поскольку сначала диапазоны первого уровня определяются для общей суммы транзакций, в момент обработки сначала проверяется общая сумма транзакций, обработанных Шлюзом. Предположим, что общая сумма равна 5 000 000 — это означает, что поток идёт по верхней ветви. Затем определяется диапазон для типа карты; обрабатываемая карта — Visa. Для карт Visa существует направление перевода Visa2Any. Это означает, что система выберет в таблице тариф: < 10 000 000, Visa2Any.
 

`exclamation`

Карта может одновременно попасть в несколько направлений. В этом случае направление выбирается в следующем порядке приоритета: перевод внутри банка, затем направление, где определены и отправитель, и получатель (например, Visa2Visa), затем только отправитель (например, Visa2Any), только получатель (например, Any2Visa), направление по умолчанию.

Можно определять диапазоны направлений как первый уровень иерархии. В этом случае при определении таблицы тарифов сумма и число транзакций будут рассчитываться отдельно для каждого направления.
 

#### Описание: Complex rates

Чтобы правильно определить тарифный план, необходимо понимать, как это сделать для разных участников платёжного потока. Рассмотрим простой случай. Пусть комиссия участников A и B определяется только минимальным значением и не зависит от суммы транзакции. Участник A ожидает доход ya, участник B — yb. В таком случае определите тарифный план с минимальной ставкой ya+yb.
 

Та же логика применяется к тарифам, для которых определена только процентная ставка. Предположим, комиссия участников A и B задана только как процент от суммы транзакции. Участник A ожидает комиссию Ra, участник B — Rb. В таком случае необходимо определить тарифный план с комиссией Ra+Rb.
 

Рассмотрим более сложный случай. Предположим, что оба участника ожидают комиссию как минимальное значение для транзакций ниже определённой суммы, а в противном случае — процент от транзакции. Порог перехода от минимального тарифа к процентному для участника A равен x1, для участника B — x2. Если этот порог одинаков для обоих участников (x1 = x2), применяемый тариф будет равен сумме минимальных тарифов ниже порога и сумме процентных значений выше него.
 

Если параметры различаются, ставка рассчитывается более сложным образом. Давайте рассмотрим возможные случаи.
 

На рисунке минимально возможный тариф отмечен зелёным. В диапазоне (x1, x2) тариф определяется иной формулой, чем просто суммой двух минимальных тарифов и суммой процентных тарифов. Точно определить такой тариф невозможно. Необходимо добавить два диапазона: x1, x2. В диапазоне (0, x2] тариф определяется как сумма минимальных комиссий. В [x1, x2] тариф определяется как процентный тариф участника A (или участника B, если его порог срабатывает первым) и абсолютное значение комиссии участника B, равное минимальной комиссии участника B (или A соответственно). В [x2, +∞) тариф определяется как сумма процентных тарифов обоих участников.
 
Чтобы избежать слишком сложных таблиц ставок, необходимо корректировать минимальное значение ставки и процент. Если увеличить минимальную ставку в диапазоне Δmin, необходимо также увеличить процентную ставку ΔR. Если минимальное значение ставки корректируется более чем на Δmin, процентные ставки корректировать не следует. Границы корректировки обозначены пунктирной линией.
 
Если игнорировать эти корректировки для сумм транзакций, попадающих в (x1, x2), комиссия участника B будет снижена (предполагается, что B находится ниже в иерархии платёжного потока).

### Buffer Online Balance Holds

Отображает все транзакции с суммой в холде. Например, при выполнении Payout сумма выплаты сначала резервируется в буфере (поэтому при успехе она будет переведена на счёт клиента), а после проведения транзакции сумма освобождается (списывается) со счёта. Чтобы скрыть или показать игнорируемые холды, нажмите значок «глаз».

`hold`
 
Можно выбрать Торговца и валюту.
 
Нажмите кнопку Экспорт, чтобы экспортировать файл со всей информацией об удержаниях.
 
Чтобы отключить все уведомления о сверке для определённого баланса удержаний, нажмите кнопку `unmute`.

### Buffer Online Balance Releases

Показывает всю сумму, освобождённую из холда в буфере, которая впоследствии будет списана с баланса.

`release`
 
Можно выбрать Торговца и валюту.
 
Нажмите кнопку Экспорт, чтобы экспортировать файл со всей информацией об удержаниях.
 
Чтобы отключить все уведомления о сверке для определённого баланса удержаний, нажмите кнопку `unmute`.

### Buffer Online Balance Topups

Отображает все пополнения в буфере, которые затем будут добавлены к балансу (например, sale).

`Пополнение`
 
Можно выбрать Торговца и валюту.
 
Нажмите кнопку Экспорт, чтобы экспортировать файл со всей информацией о пополнениях.
 
Чтобы отключить все уведомления о сверке конкретного пополнения баланса, нажмите кнопку `unmute`.

### Кнопка Купить сейчас

Интеграция кнопки “Купить сейчас” актуальна для Торговцев, имеющих ограниченный ассортимент товаров для продажи. Это самый простой способ интеграции с Payneteasy. Такой способ интеграции не требует больших технических усилий. Интеграция кнопки Купить сейчас также позволяет Торговцу (или Присоеденяющейся стороне, представляющей Торговца) исключить себя из процесса хранения, обработки или передачи данных держателя карты Плательщика или других конфиденциальных платежных данных. Такие данные отправляются Плательщиком в форме сведений о клиенте, размещенной на Payneteasy, и в платёжной форме в сертифицированной среде PCI DSS.

#### Настройка кнопки Купить сейчас

Чтобы настроить кнопку Купить сейчас на сайте Торговца, следуйте этим инструкциям.

> • Найдите нужный Терминал;
> • Перейдите на вкладку Товары Купить сейчас;
> • Нажмите на Добавить товар;
> • Заполните обязательные поля.

#### Обязательные поля кнопки Купить сейчас

| Название параметра | Описание | Значение |
|----------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------|
| Сумма | Сумма к оплате. Сумма должна быть указана в наибольших единицах с разделителем .. Например, 10.5 для USD означает 10 долларов США и 50 центов. | `Необходимость`: Обязательно `Тип`: Numeric `Длина`: 10 |
| Описание | Описание товара. | `Необходимость`: Обязательно `Тип`: String `Длина`: 64k |
| redirect_url | URL-адрес страницы, на которую будет перенаправлен плательщик после завершения транзакции. | `Необходимость`: Обязательно `Тип`: String `Длина`: 1024 |
| Пункт назначения | Назначение платежа. Этот параметр полезен для торговцев, которые позволяют своим плательщикам пополнять свои счета с помощью банковской карты (счета мобильных телефонов, игровые счета и т. д.). Примеры значений: +9999999999; mail@example.com и т. д. Это значение может использоваться системой мониторинга мошенничества. | `Необходимость`: Опционально `Тип`: String `Длина`: 128 |
| Платежный инструмент | Методы оплаты. | `Необходимость`: Опционально `Тип`: String `Длина`: 128 |

#### Поля платёжной формы кнопки Купить сейчас

> To configure the fields to be shown on payment form, ask Payneteasy support manager to:
> • Go to API fields on the proper Endpoint.
> • Mark each needed API field as Visible and/or Required.
> • Save API fields and preview the payment form.

> **Warning:** Рекомендуется создавать отдельные Терминалы для кнопки “Купить сейчас”, поскольку активация этой опции может привести к некорретной работе других типов интеграции. Также:

1. Кнопки нельзя удалить, можно только отключить Терминал полностью, чтобы остановить транзакции с помощью кнопки Купить сейчас.
 
2. Изменение суммы транзакции в платежной форме не будет поддерживаться, если на данном Терминале настроена какая-либо кнопка “Купить сейчас”.

### Cashflow Report

Рассчитывает оборот транзакций: Sale, Chargeback и сумму удержанных средств. Показывает распределение оборота с учётом комиссий и приблизительную прибыль за период, а также с разбивкой по дням.
 
При необходимости можно добавить дополнительные критерии, нажав Criteria: конечные точки, проекты, торговцы, шлюзы, процессоры и т. д. Настроенные критерии поиска можно сохранить как шаблон для последующего использования:
 
 

 
Данные загружаются нажатием кнопки Generate. Пример таблицы, полученной при выгрузке, показан на рисунке ниже:

### Chain Strategy Details

Chain strategy details позволяет выбрать, какие Declines (отрицательные результаты обработки) продолжат или остановят цепочку.

If the configured routing has such balancing types as: Chain by Sequence, Chain by Equivalently on Tx Count, Chain by Coefficient on Tx Count, it’s possible to go to the “Chain
Strategy Details” tab on the gate level and select the criteria to continue or stop the chain.

> `Описание: pic37 balancing 2.0`

The number and name of the gate is at the top of the page.
The active line “Continue the chain” is located below and the choice of criteria is to the right of it.
“Independently of the decline reason” is selected by default.

Two active columns – “Unavailable” and “Available” – are located below.
The reasons for decline are located in the “Unavailable” field.
The chain can continue:

> - Независимо от причины отклонения — цепочка продолжится независимо от полученных кодов отклонения.
> - Only for the selected decline reasons - the chain will continue only for the specified decline reasons. Select the reasons from the “Unavailable” column with the check boxes next to them, and add them to the “Available” column by clicking the “Add” button. Remove the unwanted reasons by selecting them with the check boxes and clicking the “Remove” button.
> Confirm the parameters with the “Save” button.
> - For any decline reason except the selected ones - the chain will continue for all reasons, EXCEPT for the specified ones. Select the reasons from the “Unavailable” column with the check boxes next to them, and add them to the “Available” column by clicking the “Add” button.
> Remove the unwanted reasons by selecting them with the check boxes and clicking the “Remove” button. Confirm the parameters with the “Save” button.

### Chain Strategy Skips

Параметр Chain strategy skips позволяет пропустить шлюз по PAN для транзакции, если возникает один из выбранных кодов ошибок. После отклонения транзакции с конкретным PAN на одном шлюзе этот шлюз будет пропускаться при каскадировании следующих транзакций с тем же PAN в течение указанного периода времени (задаётся в минутах).

> `Изображение chainstrat balancing 2.0`
 
Эта функциональность поддерживается для следующих опций:
 
- Chain by Sequence
- Chain by Last Customer tx Status on Acquirer
- Chain by Coefficient Based on tx Count
- Chain by Equivalent Coefficient Based on tx Count
- First in Sequence
- First in Sequence by Last Customer tx Status on Acquirer
- First in Sequence by Last Customer tx Status on Gate

### Поток Чарджбэк и типы транзакций

#### Описание: Чарджбэк terms

| Название | Описание |
|-----------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Запрос на получение | Запрос эмитента на квитанцию о транзакции, которая может включать оригинал, бумажную копию, факсимиле или электронную версию |
| Чарджбэк | Транзакция, которую эмитент возвращает эквайеру. Эмитент может выполнить chargeback только по веской причине, как описано в правилах VISA/MC |
| Representment | * эквайер отклоняет или отвечает на Чарджбэк, сделанный эмитентом, и * отправляет транзакцию обратно эмитенту и * подтверждает его дополнительной документацией, устраняющей разногласие Эквайер может выполнить representment только по действительной причине, описанной в правилах VISA/MC Поскольку это уже 2-й раз, когда эквайер предъявляет эту транзакцию эмитенту, это называется повторным предъявлением (representment) |
| Арбитражный Чарджбэк | Транзакция, которую эмитент возвращает эквайеру во 2-й раз. Эмитент может выполнить chargeback только по веской причине, как описано в правилах MC |
| Prearbitration | Попытка урегулировать спор до подачи заявления в арбитражный комитет VISA/MC |
| Arbitration | Процесс, при котором финансовая ответственность за транзакции, обработанные через Interchange, которые предъявляются и возвращаются по chargeback, определяется VISA/MC |
| CPD (центральная дата обработки) | Дата, когда запись (транзакция, chargeback, запрос на извлечение и т.д.) была обработана международными платёжными карточными системами |
| Compliance | Процесс, при котором определяются споры, возникающие из-за нарушений любых правил, регулирующих транзакцию, при отсутствии права на chargeback |
| Письмо добросовестности | Попытка урегулировать спор, когда отсутствуют права на Чарджбэк по соответствию |
| SAFE/рекомендация по мошенничеству TC40 | Запись, подготовленная эмитентом для информирования VISA/MC о мошеннической активности торговца |
| TID (документ информации о транзакции) | Термин, используемый для документации транзакций, такой как наборы форм, записи, торговые чеки, терминальные квитанции и записи о списаниях |

#### Master Card Чарджбэк Guide

##### Чарджбэк Flow

```plantuml
participant MasterCard
participant Acquirer
participant Issuer

activate Issuer
"Acquirer" -> "Issuer": First Presentment - 7 days

 "Acquirer" //-- "Issuer": Retrieval request
 activate Acquirer

 "Acquirer" --> "Issuer": Исполнение запроса на получение

 deactivate Acquirer

 "Issuer" -> "Acquirer": Сhargeback
 deactivate Issuer

 activate Acquirer

 "Acquirer" -> "Issuer": Second Presentment

 deactivate Acquirer
 activate Issuer

 "Issuer" -> "Acquirer": Arbitration Чарджбэк
 deactivate Issuer
 activate Acquirer
 Acquirer -> MasterCard: ARBITRATION
 deactivate Acquirer
```

##### Чарджбэк Stages

| Timeframe | Stage | Описание | MIT-Function Code (s) | API Method | Overall window |
|-------------|---------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------|---------------------|------------------------------|
| | First Presentment | Эквайер отправляет транзакцию эмитенту | 1240-200 | sale | Описание: 45/60/120/540 days |
| 30 дней | Retrieval Request | Эмитент может запросить копию торгового чека для подтверждения или идентификации потенциального Чарджбэк. NOTE: Для большинства Чарджбэк не требуется запрос на получение | 1644-603 | retrieval | Описание: 45/60/120/540 days |
| 30 дней | Исполнение запроса на получение | | | | Описание: 45/60/120/540 days |
| 45 дней | Чарджбэк | Эмитент инициирует Чарджбэк в сроки, применимые к конкретной причине сообщения (Refer to section 3, Master Card Message Reason Codes—Dual Message System Transactions for details). NOTE: Если эмитент получает читаемую копию TID при повторном представлении по коду причины сообщения 4802 — «Запрошенная/требуемая информация нечитаема или отсутствует», а после первого просмотра документа определяет, что имеет другое право на Чарджбэк по иному коду причины сообщения, эмитент должен начать процесс заново с новым Чарджбэк. Дополнительные сведения см. в разделе «Код причины сообщения 4802 — Запрошенная/требуемая информация нечитаема или отсутствует». | 1442-450 (full amount); 1442-453 (partial amount) | chargeback | Описание: 45/60/120/540 days |
| 45 дней | Second Presentment | При необходимости эквайер может выполнить повторное представление в течение 45 календарных дней с даты Central Site Business Date (PDS 0158 [Business Activity], подполе 5 [Business Date]) Чарджбэк. | 1240-205 (full amount); 1240-282 (partial amount) | chargeback_reversal | 45 дней |
| 45 дней | Arbitration Чарджбэк | Когда это применимо, эмитент может инициировать arbitration chargeback в течение 45 календарных дней с Central Site Business Date второго предъявления | 1442-451 (full amount); 1442-454 (partial amount) | prearbitration | 45 дней |
| 45 дней | Arbitration Case Filing | Эквайер может направить в Master Card дело об Arbitration для принятия решения по спору в течение 45 календарных дней с Центральной рабочей даты сайта для арбитражного чарджбэка. | N/A | arbitration | |

#### Visa Чарджбэк Guide

##### Чарджбэк Flow

```plantuml
participant Acquirer
participant Issuer
participant VISA

activate Issuer
"Acquirer" -> "Issuer": First Presentment - 6 days

 "Acquirer" //-- "Issuer": Retrieval request
 activate Acquirer

 "Acquirer" --> "Issuer": Исполнение запроса на получение

 deactivate Acquirer

 "Issuer" -> "Acquirer": Сhargeback
 deactivate Issuer
 activate Acquirer

  "Acquirer" -> "Issuer": Representment

 deactivate Acquirer
 activate Issuer

  "Acquirer" //-- "Issuer": Prearbitration attempt

 activate Acquirer

 "Acquirer" --> "Issuer": Prearbitration response

  deactivate Acquirer
  Issuer -> VISA:    ARBITRATION
  deactivate Issuer
```

##### Чарджбэк Stages

| Timeframe | Stage | Описание | API Method | Window | Overall window |
|-------------|--------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------|----------|---------------------------|
| | First Presentment | Эквайер отправляет транзакцию эмитенту | sale | | |
| 30 дней | Retrieval Request | Эмитент может запросить копию торгового чека для подтверждения или идентификации потенциального Чарджбэк | retrieval | | Описание: 75/120/540 days |
| 30 дней | Retrieval Request Fulfil | | | | Описание: 75/120/540 days |
| 45 дней | Чарджбэк | Эмитент инициирует Чарджбэк в сроки, применимые к конкретной причине сообщения | chargeback | | Описание: 75/120/540 days |
| 45 дней | Representment | При необходимости эквайер может обработать второе представление | chargeback_reversal | 29 дней | Описание: 60(30\*) days |
| 30 дней | Prearbitration Attempt | Перед подачей на Arbitration запрашивающий участник должен сделать попытку Pre-arbitration через Visa Resolve Online как минимум за полные 30 календарных дней до даты подачи на Arbitration, если выполняется любое из следующих условий: * Новая документация или информация предоставляется противоположной стороне спора * Эквайер представил убедительные доказательства. В попытке Pre-arbitration эмитент должен подтвердить, что пытался связаться с держателем карты для рассмотрения убедительных доказательств. * Эмитент изменяет код причины спора после обработки Representment * Эквайер предоставил доказательства того, что держатель карты больше не оспаривает транзакцию. В попытке Pre-arbitration эмитент должен подтвердить, что держатель карты по-прежнему оспаривает транзакцию. | prearbitration | 29 дней | Описание: 60(30\*) days |
| | Prearbitration Response | | | 30 дней | Описание: 60(30\*) days |
| | Arbitration | Если противостоящий Участник не принимает финансовую ответственность за спорную транзакцию, запрашивающий Участник может инициировать Arbitration | arbitration | 30 дней | Описание: 60(30\*) days |
| | Arbitration Appeal | Решение по любой разрешённой апелляции является окончательным и не подлежит оспариванию | | 30 дней | Описание: 60(30\*) days |

\* 30 дней применяются, если не было попытки prearbitration

#### Visa Compliance Guide

##### Чарджбэк Stages

| Stage | Описание | API Method |
|-------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------|
| First Presentment | Эквайер отправляет транзакцию эмитенту | sale |
| Держатель карты или эмитент оспаривает первое представление | | |
| Pre-Compliance | Перед подачей на Compliance запрашивающая сторона должна попытаться урегулировать спор с противоположной стороной. Эта попытка должна включать всё следующее: * Описание: Attempt date * Чёткая идентификация как попытки до Compliance * Плановая дата подачи отчёта о соответствии * Вся относящаяся документация * Конкретное нарушение международных правил работы Visa Попытка предварительного Compliance должна содержать сведения, требуемые в анкете попытки предварительного Compliance. Её необходимо отправить в электронном виде через Visa Resolve Online не менее чем за полные 30 календарных дней до даты подачи Compliance. | |
| Pre-Compliance Acceptance | Если противоположный участник принимает финансовую ответственность за оспариваемую транзакцию, он должен зачислить запрашивающему участнику последнюю сумму, полученную через Visa Net, в течение 30 календарных дней с даты попытки pre-Compliance. | |
| Непринятие финансовой ответственности за Pre-Compliance | Если противостоящий Участник не принимает финансовую ответственность за спорную транзакцию, запрашивающий Участник может инициировать Compliance | |

### Close Day Report

Отображает точное время, когда на каждом шлюзе была выполнена процедура закрытия дня для расчёта.
 
При необходимости можно добавить дополнительные критерии, нажав Criteria: endpoints, projects, merchants, gates, processors и т. д. Настроенные критерии поиска можно сохранить как шаблон для последующего использования.
 
Данные можно скачать, нажав кнопку Сгенерировать.
 
Пример полученного отчета показан ниже:

### Описание: Close day

#### Введение

Для некоторых процессоров средства переводятся на банковский счёт только после процедуры Close Day, которая инициирует банковский клиринг.

Процедуру Close Day можно инициировать через API, вручную кнопкой «Close Day» на уровне Шлюза или автоматически каждый день в предустановленное либо выбранное системой время. Если по какой-либо причине невозможно выполнить «Close Day» через API, необходимо провести процедуру «Close Day» вручную на уровне Шлюза.

> **Warning:** Во время процедуры Close Day следующий шлюз будет заблокирован, и транзакции не будут проходить через него.

#### Описание: Manual day closure

 
Чтобы выполнить процедуру Close Day, перейдите Settings -> Configuration -> Gates:
 
 

 

 
На странице сведений о шлюзе нажмите Описание: Close day и подтвердите действие во всплывающем окне. На странице появится окно «Описание: Close day for ‘gate name’». Дождитесь завершения операции:
 
 

 
После успешного закрытия дня на странице сведений о шлюзе будут отображаться дата закрытия дня и сумма транзакций за период от предыдущей до текущей даты закрытия дня:
 
 
`lastday`

#### Автоматическое закрытие дня

 
Чтобы выполнять Close Day автоматически, перейдите Settings -> Configuration -> Gates:
 
 

 

 
На странице сведений о шлюзе нажмите Edit, установите Automatic closing of the day и нажмите Save. Оптимальное время Close Day система выбирает автоматически (UTC+3):
 
 
`autoclosure`
 
После каждого успешного закрытия дня на странице сведений о шлюзе будут отображаться дата закрытия дня и сумма транзакций за период от предыдущей до текущей даты закрытия дня:
 
 
`lastday`

#### Автоматическое закрытие дня по расписанию

 
Чтобы выполнять Close Day автоматически в заданное время, перейдите Settings -> Configuration -> Gates:
 
 

 
На странице сведений о гейте нажмите кнопку Edit и установите Описание: Close day automatically. Затем заполните строку Описание: Close day time. Выберите предпочтительное время закрытия дня и нажмите Save. Обратите внимание: флажок Automatic closing of the day должен быть снят, иначе время закрытия гейта будет выбрано системой автоматически:
 
 
`autoclosepreset`
 
После каждого успешного закрытия дня на странице сведений о шлюзе будут отображаться дата закрытия дня и сумма транзакций за период от предыдущей до текущей даты закрытия дня:
 
 
`lastdaytime`

#### Разрешить закрытие дня через API

Чтобы разрешить эту процедуру через API, перейдите Settings -> Configuration -> Gates:
 

На странице сведений о шлюзе нажмите кнопку Edit, установите флажок Разрешить закрытие дня через API. Количество дней, по истечении которых Close Day будет запускаться автоматически, можно задать в поле Day closing maximum delay (days) (автоматически установлено 3 дня), затем нажмите Save:
 
`closeday_via_api`

#### Gate Lock Release Tool

Если во время закрытия дня через API один или несколько Шлюзов остались заблокированными (в теле ответа с status: finished для Шлюза — is Day Closing : true), блокировку можно снять вручную. Для этого перейдите в Settings -> Configuration -> Gates:

 

 
На странице сведений о шлюзе нажмите Блокировки:
 
 
`gatelock`
Текущая информация о блокировке шлюза отображается в меню «Текущие блокировки»:
 
* Идентификатор сессии блокировки — идентификатор сессии блокировки.
* Дата начала закрытия дня — начальная дата Close Day.
* Bank terminal lock status — блокировка Endpoint для выполнения транзакций (Blocked/Free).
* Начальный статус задачи шлюза — статус инициализации Шлюза.
* Статус задачи закрытия дня — статус закрывающего Шлюза.
* Закрытие дня — Gate находится на этапе закрытия, то есть заблокирован или нет (Y/N). Y — Gate заблокирован, N — не заблокирован.

Доступны следующие команды разблокировки:

* CLEAR_TRANSACTION_LOCK — сбрасывает сессию, вызвавшую блокировку.
* CLEAR_INIT_ATTEMPT — сбрасывает статус инициализации Шлюза.
* CLEAR_CLOSING_DAY_ATTEMPTS — сбрасывает статус закрывающего Шлюза.
* CLEAR_CLOSING_DAY_FLAG — сбросить назначение закрывающего Gate, снять блокировку.

Установите флажок соответствующего меню и нажмите кнопку Обновить.

После разблокировки снова откройте инструмент снятия блокировки шлюза и убедитесь, что статус параметра блокировки изменился в меню «Текущие блокировки». Например, если Gate был заблокирован, после снятия блокировки параметр равен Is day closing = N.

`closedaylock`

### Конфигурация

### Customers Management

#### Введение

Customer Management - is a module which allows to set custom payment flow. It is located at Settings -> Customers management.
This screen contains the list of all Merchants in the system tat are connected to Customers Management.

 

 

На этом экране можно выполнить поиск по торговцам или добавить нового торговца (конфигурацию) в модуль управления клиентами, нажав Add new в правом верхнем углу экрана.

#### Adding New Merchant To Customer Management

После нажатия кнопки Добавить новую появится этот экран:

 

 

Сначала выберите Торговца в поле Merchant, который будет подключён к системе Customer Management.

 

Затем выберите один из режимов работы: CRM (API) или Платёжный Шлюз.

- CRM (API) позволяет определять клиента по merchant customer id. Если параметр customer level присутствует в вызовах API, создаются ненастроенные уровни.
- Платёжный Шлюз — позволяет определить клиента по внутреннему идентификатору клиента.

 

> **Warning:** Please note that for proper operation, the parameter must match the Client Definition value set on the endpoint or project

В поведении по умолчанию выберите Проект или Неизвестный уровень.

- Project — если в вызовах API присутствует ненастроенный уровень клиента, будут использованы настройки Project и Endpoint (Client definition).
- Unknown Level — если в вызовах API присутствует ненастроенный уровень клиента, будут использованы настройки уровня Unknown.

 

> **Warning:** Любая неправильная настройка может привести к остановке обработки платежей.

После выбора Operation mode и Default behaviour (по желанию) выберите один из вариантов или оба:

- Сбрасывать индивидуальные настройки платежей при изменении уровня клиента.
- Автоматически добавить все проекты торговца на уровень Unknown
- Reset show in from when changing customer level.

 

После добавления торговца в Customer Management можно редактировать или удалить конфигурацию.

##### CRM

> CRM (API) — позволяет определить клиента по идентификатору клиента торговца.
Параметры, используемые в конфигурации CRM:
 
- merchant_customer_identifier
- customer_level

> **Warning:** customer_id не должен включаться в запрос.

```plantuml
  title CRM operation mode
  start
  :(1) Receiving [merchant_customer_identifier] and [customer_level] from Connecting Party;
  if (
  (2) System will check if such user was already registered in Customer Management.

  Does customer with such [merchant_customer_identifier] already exist?
  ) then (Yes)
    :(3) Customer was already registered in
  Customer Management.

  Customer is being identified by
  merchant_customer_identifier;
    :(4) Routing will be chosen according to the
  level sent in the request.

  Customer level in the system will be set equal to
  customer_level in request.;
  else (No)
    :(5) Registering new customer in Customer Management
  with id passed in merchant_customer_identifier.

  New Customer is being identified by
  merchant_customer_identifier;
    :(6) Routing will be chosen according to the
  level sent in the request.

  Customer level in the system will be set equal to
  customer_level in request.;
  endif
    :(7) Routing being adjusted according to level specifications.;
  stop
```

(3), (5) merchant_customer_identifier не следует передавать с пустым значением. Если merchant_customer_identifier отправлен с пустым значением, Клиент будет создан в Customer Management и может быть идентифицирован только с помощью Client Definition, настроенного на уровне Проекта или Endpoint.
 
(4), (6) Если customer_level передаётся пустым, клиенту будет присвоен пустой уровень либо Unknown level, если настроено поведение по умолчанию Unknown level.
 

> **Warning:** Неправильно переданные параметры могут привести к неверной маршрутизации транзакций или к тому, что они вообще не будут обработаны.

##### Платёжный Шлюз

> PNE (GATE) — позволяет определить клиента по внутреннему идентификатору клиента.
Параметры, используемые в конфигурации PNE:
 
- customer_id
- customer_level

> **Warning:** merchant_customer_identifier не должен включаться в запрос.

```plantuml
  title PNE (GATE) operation mode
  start
  :(1) Receiving [customer_id] and [customer_level] from Connecting Party.;

  if (
  (2) System will check if such user was already registered in Customer Management.

  Does customer with such [customer_id] exist?
  ) then (yes)
    :(3)  Customer was already registered in
  Customer Management.

  Customer is being identified by customer_id;
    :(4) Routing is chosen according to the
  level of customer in Customer Management.

  Customer level in the system will be set equal to
  customer_level in request.;
  else (No)
    :(5) In case of customer with customer_id value sent in the request
  have not been found in Customer Management, routing rules
  won't be applied.;

  endif
    :(7) Routing being adjusted according to level specifications;
  stop
```

(3), (5) Если customer_id передаётся пустым, проверяется Client Definition, заданный на уровне проекта или конечной точки, и, если клиент не найден, будет создан новый клиент с новым customer_id.
 
(4), (6) Если customer_level отправлен пустым, маршрутизация будет настроена в соответствии со сконфигурированным поведением по умолчанию Unknown level или Project.
 

> **Warning:** Неправильно переданные параметры могут привести к неверной маршрутизации транзакций или к тому, что они вообще не будут обработаны.

If Auto leveling is enabled for the Merchant, Customer level can also change automatically based on accumulated transaction history, independently of this request flow — see [Auto Leveling](#auto-leveling).

#### Level Configuration

Level configuration can be done for Deposits and Withdrawals. In order to add configurations press +Add button and select the name, currency and projects.

 

 

> **Note:** Валюта может различаться в зависимости от валют, в которых доступны проекты торговца.

 

 

unknown — уровень по умолчанию, который будет создан автоматически.

 

На экране выше все уровни будут отображены со следующей информацией:

- Параметр Level name
- Currency - supported currencies on the level
- Проекты — все проекты торговца, подключённые к Customer Management.
- Created и Modified — показывают время создания или изменения конфигурации.

 

Configuration for a specific currency can be toggled on/off or whole configuration can be deleted.
Press edit button to add/remove projects from level.

##### Конфигурация уровня клиента

Нажмите Level Название, чтобы открыть настройку уровня клиента. В открывшемся окне выберите Level configuration, чтобы настроить пользовательский платёжный поток для уровня клиента, или Filters, чтобы добавить дополнительные проверки для уровня.

 

На этом экране отображается информация об уровне: Payment direction — пополнение или выплата, Currency, Параметр Level name, Status — показывает статус уровня (активен/отключён).

 

 

В разделе Payment methods отображаются все доступные методы Payment Cashier. При нажатии на любой из методов появляется окно Configuration.

В разделе Конфигурация нажмите Сбросить по умолчанию, чтобы восстановить все настройки по умолчанию;
 
Установите или снимите флажок Show in form, чтобы показать/скрыть выбранный способ оплаты из формы Payment Cashier;
 
Установите минимальную/максимальную сумму, которая задаст или переопределит эти параметры на уровне конечной точки.
 
Нажмите кнопку Сохранить, чтобы применить конфигурацию.
 
 
В списке шлюзов выберите, какой маршрут Routing или шлюз будет доступен для выбранного уровня.
 
 
После всех настроек изменённые способы оплаты будут перемещены на вкладку Edited. Все неизменённые способы будут показаны на вкладке Default.
 

##### Auto leveling

Auto leveling allows Customer level to be changed automatically, based on configured rules, without manual intervention from Manager.

> **Note:** Auto leveling is only available when Customer Management is configured in Платёжный Шлюз (PNE) operation mode. Transactions are being counted only for card/email Client Definition configurations on Endpoint/Project.

Rules are configured separately for Deposit and Withdrawal payment directions.

 

 
- Collect Data from - selects the entity whose transaction history is used to calculate the rule: Merchant or Manager.
- Type of calculation - selects which transaction metric triggers the level change: Count, Amount, Count and Amount or Count or Amount.

> **Note:** Currency selection is only available for Amount, Count and Amount and Count or Amount types of calculation.

 

 

For each level added to the rule, Параметр Level name should be selected, together with the threshold value (s) required for Customer to reach that level, depending on the selected Type of calculation.

 

> **Warning:** Customer level is changed by only one level at a time, even if the transaction count/amount would be enough to cover several levels in the line. Transactions are counted within a rolling 180-day window from the last level change, and any amount exceeding the current level’s threshold is carried over towards the next level for the remainder of that window. Auto leveling does not automatically downgrade a Customer level.

 

New Customers tracked under an Auto leveling rule are assigned the first level of the rule’s line, rather than the unknown level, since unknown remains a technical level for projects not connected to a rule.

> **Note:** This behaviour applies only to Customers created under an Auto leveling rule and does not change the Default behaviour (Project / Unknown Level) configured for the Merchant.

##### Filters

Фильтры транзакций в Системе предназначены для отклонения определённых транзакций по различным причинам.

 

 

Существуют фильтры трёх уровней:

- Частота использования идентификатора клиента за последние 24 часа (дневной лимит)
- Частота использования идентификатора клиента за последние 7 дней (недельный лимит).
- Частота использования идентификатора клиента за последний месяц (месячный лимит)

 

| Название | Описание | Значение |
|---------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------|
| Лимит суммы | Максимальная общая сумма транзакций за последние 24 часа (неделю, месяц) для точного идентификатора клиента | 99999 |
| Календарная неделя начинается с воскресенья | «Да»: календарная неделя начинается с воскресенья, «Нет»: календарная неделя начинается с понедельника | Yes/No |
| Для всех валют торговца в CMS | будет рассчитана текущая общая сумма или количество транзакций за последние 24 часа (неделю, месяц) для этого идентификатора Клиента: «Да» — для всех уровней Торговца во всех валютах в направлении платежа (пополнение или вывод) с конвертацией в валюту текущего уровня для сравнения с лимитом суммы; «Нет» — только для текущего уровня. | |
| Лимит количества | Максимальное общее количество транзакций за последние 24 часа (неделю, месяц) для точного идентификатора клиента | 99999 |
| Исключить транзакции Cancel | | |
| Использовать календарный день | | |

**Коды ошибок**

| # | Код | Название |
|-------|-------|-------------------------------------------------|
| 19000 | | Daily сумма лимит превышен for клиент id |
| 19001 | | Daily количество лимит превышен for клиент id |
| 19002 | | Weekly сумма лимит превышен for клиент id |
| 19003 | | Weekly количество лимит превышен for клиент id |
| 19004 | | Monthly сумма лимит превышен for клиент id |
| 19005 | | Monthly количество лимит превышен for клиент id |

#### Customers

Для Customers можно выполнить индивидуальную настройку. В зависимости от переданных параметров (customer_id, customer_level, merchant_customer_identifier) клиент может быть создан автоматически или вручную на экране Customers. Нажмите Customers, чтобы открыть экран Customers.

На этом экране будут отображаться все клиенты с краткой информацией.
 

 

Как показано на изображении выше, нажмите 1 — Show filter, чтобы открыть дополнительные критерии поиска. Во всплывающем окне выберите следующие критерии: Customer IDs Платёжного Шлюза, Merchant Customer IDs, название уровня пополнения, название уровня вывода средств, Email или диапазон дат (даты создания).

Можно добавлять, изменять или удалять информацию из панели 2 или через раздел фильтров.
 
 

Выберите группу клиентов или всех, чтобы Set global limit или Change level — для всех выбранных клиентов.

Нажмите Создать, чтобы создать нового клиента.
 
 

Нажмите Загрузить, чтобы скачать список всех клиентов с их данными.
 
 
Нажмите Upload, чтобы загрузить список клиентов с их реквизитами, используя параметры, показанные ниже:
 

Загрузить CSV — для загрузки списка клиентов;
 
Скачать шаблон — для загрузки примера файла;
 
Создать имитацию — для создания клиентов с фиктивными данными.
 

Upload CSV - for uploading the list of existing customers with new configuration;
 
 

> **Note:** The uploaded file fully overwrites the configuration: existing data may be not only added, but also overwritten or erased. Make sure the file contains complete and correct data.

##### Common Settings

При нажатии на идентификатор любого клиента откроется следующее окно:

 

 

In Common settings all customer information will be shown. Under Actions menu, press Edit info to change customer information except Customer ID and Merchant customer ID. The Virtual terminal button will allow to open the virtual terminal with al customer information directly from this screen. All orders will show all orders associated with customer.

##### Individual Payment Settings

Индивидуальные настройки платежа позволяют настроить Cashier Payment Form для каждого клиента отдельно. Сначала выберите уровень и валюту. Затем выберите Use as global limit for customer, если минимальная/максимальная сумма для валюты должна применяться ко всем доступным решениям. Выберите Payment methods и при необходимости примените настройку. При нажатии Virtual terminal откроется Virtual terminal со всей информацией о клиенте.

### Обзорная панель

#### Мониторинг транзакций

Мониторинг транзакций доступен в верхней части страницы общей статистики:

 

Мониторинг содержит следующие блоки:

| `Оборот` | Сумма всех успешных операций продажи, списания, отмены (возврата) и перевода. |
|------------------------------------------------------------------------------|---------------------------------------------------------------------------------|
| Описание: `Declined`, `отфильтровано и подтверждено` | Количество операций указанных типов с соответствующим статусом. |
| `Чарджбэки` | Количество и сумма успешных операций чарджбэка и предарбитражных операций. |
| `Мошенничество` | Количество и сумма успешных мошеннических операций. |
| `Возвраты` | Количество и сумма успешных операций отмены и аннулирования. |

Для просмотра подробной аналитики по каждому способу оплаты, щелкните на указатель в правой части соответствующего блока:

 

#### Аналитика

##### Область данных

Для изменения диапазона статистики используйте переключатели:

 

Установите желаемый диапазон дат во всплывающем календаре:

 

Данные для графиков можно сортировать с помощью кнопки Критерии:

 

Currencies, payment methods, as well as endpoints, projects and other data can be specified for analysis.
Here is the example of the payment method selection to construct the chart:

##### Описание: Charts bundle

 
Количество успешных, отклоненных и отфильтрованных системой транзакций отображено на графике Оборота:
 
 

The following graphs can be also selected: the ratio by volume of transactions or by amount of payments, as well as by type of transactions (sale, capture, transfer, etc). Payneteasy Payment Gateway also displays statistics on negative activity and earnings.
 
Требуемый период времени задается переключателем (день, неделя, месяц):
 
 

 
Тип диаграммы (сумма, количество, все) можно изменить с помощью кнопки:
 
 

##### Коэффициент одобрения

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

##### Транзакции по странам

Обзор аналитики по странам отображает два типа региональной статистики: на основе IP-адресов клиентов и на основе BIN-кодов карт.
 
 

##### Причины отклонения транзакции

Этот экран статистики можно использовать для визуальной оценки наиболее частых причин отклонения платежей, а также причин чарджбэков и мошенничества.

### Статистика отказов

Данный отчет позволяет получить статистику по отклоненным транзакциям, которые делятся на следующие группы: отклоненные банком-Эквайером, отклоненные внутренней системой обнаружения мошенничества и отклоненные из-за внутренней ошибки.
 
При необходимости можно добавить дополнительные критерии, нажав Criteria: endpoints, projects, merchants, gates, processors и т. д. Настроенные критерии поиска можно сохранить как шаблон для последующего использования.
 
Предварительный просмотр этого отчёта можно открыть, нажав кнопку Предпросмотр.
 
Отчёт можно создать, нажав кнопку Создать.
 
Пример полученного отчета показан ниже:

### Сотрудники

#### Создание аккаунтов для сотрудников

Создание новых учётных записей для доступа к системе доступно в разделе «Настройки» — «Сотрудники».
 
Вкладка Сотрудники содержит список всех аккаунтов сотрудников, созданных в системе для всех пользователей, подключённых к менеджеру.
 
Новая учетная запись сотрудника может быть создана с помощью кнопки Добавить пользователя. Необходимо заполнить следующую форму:
 
 

 

Необходимо нажать Scope username, чтобы открыть раскрывающееся меню и выбрать основную учётную запись менеджера или другого пользователя, для которого требуется новая учётная запись сотрудника:

 

 

Далее выберите одну из доступных ролей сотрудников в системе:

 

После создания личного кабинета сотрудник может сразу же войти в систему. Логин и пароль генерируются на этапе создания личного кабинета (не забудьте предварительно сохранить пароль). Если пароль не был сохранен, его можно сбросить на экране сведений о сотруднике.

 

 

При первом входе сотрудника в учетную запись система просит сменить временный пароль на постоянный:

 

#### Привилегии пользователя

Здесь представлены все доступные роли для торговца, реселлера, менеджера, дилера и Superior.
 

##### Торговец

Основная учётная запись Торговца имеет доступ только к своему трафику и не может видеть других торговцев.
 

| Тип сотрудника | Описание |
|---------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| merchant-support | Данный сотрудник имеет такой же доступ, как и Торговец, но не может создавать сотрудников Торговца. Может отменять заказы со страницы заказов. |
| merchant-support-readonly | Данный сотрудник имеет ограниченную версию доступа merchant-support, не имеет доступа к изменению конфигурации. Может отменять заказы со страницы заказов. |
| merchant-risk | Данный сотрудник имеет доступ к сведениям о транзакциях и действиям над ними, просмотру и работе со списками BWL и опциями BWL со страницы сведений о заказе, отчетам и групповым операциям. Может отменять заказы со страницы заказов. |
| merchant-risk-readonly | Данный сотрудник имеет доступ к сведениям о транзакциях, просмотру и работе со списками BWL и опциями BWL на странице сведений о заказе, не имеет доступа к отчетам и групповым операциям. |
| merchant-finance | Данный сотрудник имеет доступ к некоторым сущностям в системе, обзорной панели и сведениям о транзакциях. |
| merchant-finance-readonly | Данный сотрудник может видеть только сведения о транзакциях, групповые операции и отчеты. |
| merchant-vt-only | Данный сотрудник имеет доступ только к Виртуальному терминалу. |
| merchant-vt-transaction | Данный сотрудник имеет доступ только к Виртуальному терминалу и к сведениям о транзакциях. |
| merchant-desc | Данный сотрудник может видеть только обзорную панель и сведения о транзакциях. |
| merchant-loyalty | Данный сотрудник может видеть только списки BWL и сведения о транзакциях. |
| merchant-client-support | Данный сотрудник может видеть только сведения о транзакциях. |
| merchant-transaction | Данный сотрудник почти идентичен merchant-client-support. |
| merchant-analyst | Данный сотрудник почти идентичен merchant-transaction с доступом к обзорной панели, не может видеть Проекты. |

##### Реселлер

Основная учётная запись Реселлера имеет доступ только к просмотру трафика по проектам, связанным с этим реселлером.
 

| Тип сотрудника | Описание |
|-------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| reseller-support | Данный сотрудник имеет такой же доступ, как и аккаунт Реселлера, но не может создавать сотрудников Реселлера. |
| reseller-finance | Данный сотрудник имеет такой же доступ, как и reseller-support, но не умеет работать с тарифными планами. |
| reseller-no-finance | Данный сотрудник имеет такой же доступ, как reseller-support, может создавать сотрудников, но не имеет никакого доступа к банковской информации. |
| reseller-desc | Данный сотрудник имеет такой же доступ, как reseller-support, имеет доступ к некоторым действиям с транзакциями и маркерам транзакций, но не имеет доступа к интеграционой панели. |
| reseller-client-support | Данный сотрудник имеет такой же доступ, как и reseller-support, может видеть загруженные документы на странице сведений о заказе, но не имеет доступа к обзорной панели и корректировкам. |

Попросите менеджера поддержки Payneteasy подобрать наиболее подходящие роли для конкретных случаев или получить полный список функциональности ролей.

##### Менеджер

Основной аккаунт Менеджер логически аналогичен аккаунту Superior, но не имеет доступа к другим Менеджерам.
 

| Тип сотрудника | Описание |
|------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| manager-support | Этот сотрудник аналогичен аккаунту Менеджер, но не может создавать сотрудников Менеджер. Может выполнять reverse заказов со страницы заказов |
| manager-no-settings | Ограниченная версия manager-support, без доступа к конфигурации вообще. Может выполнять reverse заказов со страницы заказов |
| manager-no-finance | Этот сотрудник имеет доступ к конфигурации, спискам BWL, но без финансовых отчётов и действий, которые можно выполнять с транзакциями |
| manager-limited-support | Расширенная версия manager-no-finance, поскольку имеет доступ к странице лимитов обработки, тарифным планам и может работать со списками BWL. Также может управлять сотрудниками. |
| manager-view | Этот сотрудник аналогичен учётной записи менеджера, но не может ничего редактировать |
| manager-limited-view | Ограниченная версия manager-no-settings, без доступа к процессорам на странице сведений о заказе, но с доступом к Gates. Может выполнять отмену заказов со страницы заказов. |
| manager-finance | Ограниченная версия manager-support, но не может редактировать детали Торговца и с очень ограниченной страницей Tools. Может выполнять reverse заказов со страницы заказов |
| manager-restricted | Ограниченная версия manager-support, минимум сущностей |
| manager-transaction | Этот сотрудник имеет доступ только к просмотру сведений о транзакциях |
| manager-transaction-readonly | Аналогично manager-transaction, но не может скачивать отчёты по транзакциям со страницы Orders, расшифровывать данные клиента и видеть общую сумму оборота |
| manager-banking | Этот сотрудник имеет доступ только к просмотру сведений о транзакциях, Dashboard и отчёта о транзакциях |
| manager-report | Этот сотрудник имеет доступ к просмотру деталей транзакций, Dashboard и отчёту по транзакциям, спискам BWL и пакетным операциям |
| manager-loyalty | Этот сотрудник имеет доступ только к спискам BWL (не со страницы сведений о заказе) |
| manager-loyalty-extended | Этот сотрудник имеет доступ к просмотру сведений о транзакциях и списков BWL |
| manager-sales | Этот сотрудник имеет доступ к Dashboard, к просмотру деталей транзакций и всех сущностей без возможности редактирования |
| manager-reconciliation | Этот сотрудник не имеет доступа к пакетным операциям, имеет доступ к отчётам по транзакциям, к просмотру деталей транзакций и всех сущностей без возможности редактирования |

##### Dealer

Основной аккаунт Dealer имеет доступ только к просмотру трафика по Gates и Processors, связанным с этим Dealer.
 

| Тип сотрудника | Описание |
|------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| dealer-support | Этот сотрудник аналогичен учётной записи дилера, но не может создавать сотрудников дилера |
| dealer-finance | Этот сотрудник — ограниченная версия dealer-support с очень небольшими отличиями |
| dealer-finance-limited | Этот сотрудник является ограниченной версией dealer-finance без доступа к персональной информации клиента (платёжный адрес, электронная почта и номер телефона) и отчётам по транзакциям на странице заказов. |
| dealer-limited | Этот сотрудник — ограниченная версия dealer-finance без доступа к личной информации клиента (адрес выставления счёта, email и номер телефона) и шлюзам |

##### Superior

Главная учётная запись Superior может просматривать и управлять всеми учётными записями Менеджер, принадлежащими текущей учётной записи, а также всеми учётными записями Торговец, принадлежащими следующим Менеджер.
 

| Тип сотрудника | Описание |
|--------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| superior-support | Этот сотрудник аналогичен аккаунту Superior, но не может создавать сотрудников Superior. Может выполнять reverse заказов со страницы заказов |
| superior-limited-support | Ограниченная версия superior-support: нет доступа к страницам сверки и баланса, панели Integration и странице лимитов обработки. Можно отменять заказы на странице заказов. |
| superior-client-support | Этот сотрудник может видеть только транзакции |
| superior-transaction | Более расширенный тип, чем superior-client-support: этот сотрудник также может скачивать отчёт по транзакциям и просматривать сведения о некоторых сущностях в системе (без возможности редактирования). |
| superior-desc | Более расширенный тип, чем superior-transaction: этот сотрудник также имеет доступ к Dashboard и действиям с Orders, но не имеет доступа к сущностям на странице сведений о заказе. Может отменять заказы на странице заказов. |
| superior-finance | Этот сотрудник отличается от роли Superior следующим: нет доступа к Dashboard и конфигурации. Может отменять заказы на странице заказов и имеет доступ к Adjustments. |
| superior-no-finance | Этот сотрудник имеет доступ к конфигурации, спискам BWL, но без финансовых отчётов и действий, которые можно выполнять с транзакциями |
| superior-restricted | Этот сотрудник имеет доступ к конфигурации, спискам BWL, странице лимитов обработки, тарифным планам. Также может управлять сотрудниками |
| superior-risk | У этого сотрудника нет доступа к конфигурации, но есть доступ к Dashboard, сведениям о заказе и действиям, отчётам, выпискам и опции BWL. Он может отменять заказы на странице заказов. |
| superior-sales | Этот сотрудник имеет доступ к транзакциям и виртуальному терминалу |
| superior-view | То же, что учётная запись Superior, но без возможности редактирования |
| superior-vt-transaction | Этот сотрудник имеет доступ к транзакциям, виртуальному терминалу и может просматривать некоторые сущности |

### Endpoint

**Endpoint Overview**
 
 
Endpoint is uniquely identified terminal in Payment Gateway, which is assigned to the Merchant and has to be provided in the commands within Payment Gateway API. The Endpoint list screen is located at Settings -> Configuration -> Endpoints. This screen contains all Endpoints created for all Merchants in the system.
 
 

 
Описание: - Endpoint is enabled.
 
— конечная точка отключена.
 
 
Для мониторинга активности конечной точки используются KPI, например доходы Торговца и средняя стоимость заказа. Подменю KPI открывается кнопкой Detailed на экране поиска конечной точки. Подробнее см. [Подробный просмотр KPI](https://doc.payneteasy.ru/manager/reference/kpi.html.md).
 
Нажмите название конечной точки, чтобы открыть подробную информацию о ней.
 
Можно настроить пользовательские платёжные формы для конечной или главной конечной точки; см. [Настройка форм](https://doc.payneteasy.ru/integration/reference/forms_customization.html.md) в документации по интеграции. Настроенные формы можно установить на экране сведений о конечной точке.
 
Для просмотра фильтров, настроенных на Терминале, используйте вкладку “Фильтры фрод-защиты”.
 
Чтобы просмотреть необходимость дополнительных полей в платежной форме, воспользуйтесь вкладкой “API Поля”.
 
Для работы с другими параметрами конфигурации см. информацию ниже.
 

> **Note:** Настройки Endpoint (такие как лимиты, платёжные формы, определение клиента и т.д.) переопределяют настройки Проекта.

**Endpoint Settings**
 
 

| [Создать, клонировать, редактировать конечную точку](https://doc.payneteasy.ru/manager/endpoint/endpointcreate.html.md) | Этот экран показывает, как создавать и редактировать конечную точку. |
|-----------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------|
| [Шаблоны сообщений](https://doc.payneteasy.ru/manager/endpoint/endpointmessage.html.md) | Этот экран показывает всю информацию о шаблонах сообщений, отправляемых клиентам после транзакций. |
| [Сведения о конечной точке](https://doc.payneteasy.ru/manager/endpoint/endpointdetails.html.md) | Экран с деталями Endpoint содержит информацию о настроенных параметрах этого Endpoint, его ID, лимитах и связанном Проекте. |
| [Callbacks](https://doc.payneteasy.ru/manager/endpoint/endpointcallbacks.html.md) | Этот экран показывает, как настроить обратные вызовы на уровне конечной точки. |
| [Кнопка «Купить сейчас»](https://doc.payneteasy.ru/manager/endpoint/buynow.html.md) | Этот экран показывает информацию и способы настройки кнопки «Купить сейчас». |
| [Баланс учётной записи конечной точки](https://doc.payneteasy.ru/manager/endpoint/endpointbalance.html.md) | Этот экран показывает всю информацию о балансах учётных записей. |

### Баланс счёта

Each Connecting Party has a merchant user account created in Payment Gateway. If balance display is enabled, Merchant accounts can check current balances via Common tab on Endpoints. Balances also can be requested via API [by Endpoint](https://doc.payneteasy.ru/integration/API_commands/api_v2_get_balance.html.md) or [by Merchant](https://doc.payneteasy.ru/integration/API_commands/api_v2_get_balance_merchant.html.md).
Manager can get balance of any merchant by balance name via API request - [balance by Manager](https://doc.payneteasy.ru/integration/API_commands/api_v2_get_balance_manager.html.md)
To configure balances, see [Account balances](https://doc.payneteasy.ru/manager/users/merchant.html.md).

> **Note:** Чтобы включить эту функцию, обратитесь в службу поддержки Payneteasy.

Ниже приведён пример окна конечной точки с текущими балансами:

`balancesendpoint`

### Обратные вызовы

Дополнительный обратный вызов можно настроить на уровне конечной точки с помощью утилиты Create Callback. Чтобы настроить новый обратный вызов, перейдите в нижнюю часть экрана сведений о конечной точке и нажмите «Add Callback». В окне настройки можно определить несколько параметров:

* Тип транзакции.
* URL-адрес — это полностью определенный URL-адрес со всеми параметрами, которые потребуются целевой странице или скрипту Торговца. Пример: [https://www.merchant.com/sale_completed](https://www.merchant.com/sale_completed).
* Комментарий, если необходимо, .

 
`pic68 торговец_callback`

### Create, Clone, Edit Endpoint

#### Endpoint Creation

 
To create endpoint, go to Settings -> Configuration -> Endpoints and press + Endpoint in the top right corner.
 
См. таблицу [Endpoint details](https://doc.payneteasy.ru/manager/endpointdetails.html.md) для правильного указания конфигурации для нового endpoint.
 
Конечная точка наследует валюту от связанного с ней проекта.
 

#### Endpoint Editing And Cloning

 
Нажмите кнопку Редактировать, чтобы редактировать конечную точку, и Клонировать, чтобы клонировать конечную точку.
 
 

 

Для новой конечной точки требуются её имя, торговец, с которым она будет связана, и проект, с которым она будет связана. Валюта конечной точки наследуется от связанного проекта.
 
Остальные настройки endpoint будут унаследованы автоматически. Чтобы сбросить параметры к значениям по умолчанию, выберите Reset to default.
 
Чтобы увидеть, какие изменения будут клонированы для этой конечной точки, нажмите кнопку изменения.
 
 

Endpoint покажет только фильтры, включённые на уровне проекта, см. [Фильтры транзакций](https://doc.payneteasy.ru/manager/project/fraudprotectionfilters.html.md)
 
Настройки фильтров конечной точки переопределяют настройки фильтров проекта.
 
Чтобы клонировать фильтры, нажмите Клонировать фильтры.

### Endpoint Details

> **Note:** Настройки, указанные на уровне конечной точки, переопределяют настройки уровня проекта.

| Название параметра | Описание | Необходимость Описание: for creation |
|----------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------|
| Статус | Показывает, включена или отключена конечная точка. Может быть изменено позже. | Обязательное |
| Project | Показывает, к какому именно проекту привязана эта конечная точка. НЕ МОЖЕТ быть изменено позже. | Обязательное |
| Торговец | Показывает, к какому именно торговцу привязана эта конечная точка. НЕ МОЖЕТ быть изменено позже. | Обязательное |
| Описание | Отображает описание конечной точки. Может быть изменено позже. | Необязательное |
| Тарифный план Менеджера | Позволяет задать тарифный план Менеджера. Позднее его можно изменить. | Необязательное |
| Тарифный план реселлера | Позволяет установить тарифный план реселлера, если выбран реселлер. Его можно изменить позже. | Необязательное |
| Тарифный план торговца | Позволяет установить дополнительный тарифный план торговца. Может быть изменён позже. | Необязательное |
| Шаблон платёжной формы | Позволяет добавить платёжную форму, которая будет отображаться после инициирования транзакции. | Необязательное |
| Шаблон формы ожидания | Позволяет добавить форму ожидания, которая будет отображаться до достижения транзакцией окончательного статуса. | Необязательное |
| Шаблон завершающей формы | Позволяет добавить завершающую форму, которая будет отображаться после достижения транзакцией окончательного статуса. | Необязательное |
| Теги | Показывает тег Endpoint. При поиске Endpoint по тегу будут показаны все Endpoint с тем же тегом. Может быть изменено позже. | Необязательное |
| Сервис лояльности | Показывает, какой внешний сервис лояльности выбран. Позднее его можно изменить. | Необязательное |
| Минимальная сумма транзакции | Можно задать любую минимальную сумму, которая будет проходить через endpoint. Запросы транзакций с суммами ниже минимума будут отклонены. Значение можно изменить позднее. | Необязательное |
| Максимальная сумма транзакции | Можно задать любую максимальную сумму, которая будет проходить через endpoint. Запросы транзакций с суммами выше максимума будут отклонены. Значение можно изменить позднее. | Необязательное |
| Включить автоматический Capture | Включает автоматический Capture. | Необязательное |
| Период автоматического Capture (часы) | Устанавливает время в часах, после которого предавторизованная сумма будет автоматически списана. | Необязательное |
| Включить автоматический возврат | Включает автоматический возврат. | Необязательное |
| Период автоматического возврата (минуты) | Устанавливает время в минутах, после которого транзакция будет возвращена. | Необязательное |
| Сервер сообщений | Позволяет выбрать сервер сообщений. | Необязательное |
| Количество одобренных сессий для возвращающегося клиента | Показывает, после скольких транзакций с финальным статусом approved клиент будет считаться возвращающимся для endpoint. | Необязательное |
| Определение клиента | Показывает, по каким критериям клиент будет считаться новым или возвращающимся для конечной точки. | Необязательное |
| URL запроса торговца о Transfer | URL сервера Присоединяющейся стороны для этапа Check Transfer. Обязателен для [Mobile Device Transfer](https://doc.payneteasy.ru/integration/api_use_cases/mobile_device_transfer.html.md). | Необязательное |
| URL уведомления торговца о Transfer | URL сервера Присоединяющейся стороны для этапа сопоставления карты Transfer. Обязателен для [Mobile Device Transfer](https://doc.payneteasy.ru/integration/api_use_cases/mobile_device_transfer.html.md). | Необязательное |
| URL запроса торговца о Sale | URL сервера Присоединяющейся стороны для этапа Check Sale. Обязателен для [Mobile Device Sale](https://doc.payneteasy.ru/integration/api_use_cases/mobile_device_sale.html.md). | Необязательное |
| URL уведомления торговца о Sale | URL сервера Присоединяющейся стороны для этапа сопоставления карт Sale. Обязательно для [Mobile Device Sale](https://doc.payneteasy.ru/integration/api_use_cases/mobile_device_sale.html.md). | Необязательное |
| URL запроса торговца о Verification | URL-адрес сервера Присоединяющейся стороны для этапа Check Verification. Обязательно для [проверки мобильного устройства](https://doc.payneteasy.ru/integration/api_use_cases/mobile_device_card_verification.html.md). | Необязательное |
| URL уведомления торговца о проверке | URL-адрес сервера Присоединяющейся стороны для этапа Verification Card Mapping. Обязательно для [проверки мобильного устройства](https://doc.payneteasy.ru/integration/api_use_cases/mobile_device_card_verification.html.md). | Необязательное |

### Шаблоны сообщений

Шаблоны сообщений можно использовать для отправки клиенту SMS-сообщений или сообщений по электронной почте после каждой успешной транзакции. Для отправки таких сообщений с адреса Торговца, Торговец должен предоставить менеджеру службы поддержки Payneteasy свои учетные данные сервера сообщений. Шаблоны создаются с помощью кнопки Шаблон. Пример заполнения формы:
 
 

 
Пример шаблона сообщения в форме:
 
 

 
Отправка сообщений включена.
 
Отправка сообщений отключена.

### Fraud/Chargeback Ratio Report

Рассчитывает показатели отрицательной статистики по учётным записям MID.
 
При необходимости можно добавить дополнительные критерии, нажав Criteria: endpoints, projects, merchants, gates, processors и т. д. Настроенные критерии поиска можно сохранить как шаблон для последующего использования.
 
Данные можно скачать, нажав кнопку Сгенерировать.
 
Пример полученного отчета показан ниже:

### Fraud/Chargeback Reasons Report

Отображает отчёт о причинах Chargeback для выбранных параметров.
 
При необходимости можно добавить дополнительные критерии, нажав Criteria: endpoints, projects, merchants, gates, processors и т. д. Настроенные критерии поиска можно сохранить как шаблон для последующего использования.
 
Данные можно скачать, нажав кнопку Сгенерировать.
 
Пример полученного отчета показан ниже:

### MC/VISA/Am Ex Мошенничество Regulation

#### Definitions

| Страна ID | Страна |
|--------------------------|---------------------------------------------------------------------------------------|
| CTR | Master Card’s or Visa’s Chargeback-to-Transaction Ratio |
| FSDVR | Master Card’s Мошенничество-to-Sales Dollar Volume Ratio |
| FSR | Visa’s Мошенничество-to-Sales Ratio |
| GMAP | Master Card’s Global Merchant Audit Program |
| CMM | Master Card’s Chargeback-Monitored Merchant |
| ECM | Master Card’s Excessive Chargeback Merchant |
| MCMP | Visa’s Merchant Chargeback Activity Monitoring |
| HRCMP | Visa’s High Risk Chargeback Monitoring Program |
| GMCMP | Visa’s Global Merchant Chargeback Monitoring Program |
| GMFPP | Visa’s Global Merchant Мошенничество Performance Program |
| RMFPP | Visa’s Regional Merchant Мошенничество Performance Program |
| Международная транзакция | Транзакции, в которых карта выпущена в стране, отличной от страны нахождения торговца |
| Региональная транзакция | Транзакции, в которых карта выпущена в том же регионе, где находится торговец |

#### Флаги Payneteasy и возможные штрафы EFT

| EFT | PNE Flag | Conditions | Penalties |
|------------|--------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Master Card | CMM | * CTR 1.00% * Chargebacks Count 100 | * Календарный месяц периода * Report Submission Fee USD 50 * Late Report Комиссия за подачу: 5 000 USD в месяц * Chargeback Fee USD 0 |
| Master Card | ECM | * CTR 1.50% * Chargebacks Count 100 | * Период двух последовательных календарных месяцев * Report Submission Fee USD 100 * Late Report Комиссия за подачу от 500 до 1 000 USD в день * Комиссия Chargeback 25 USD за Chargeback сверх 1,5% * Описание: Period first through Описание: sixth month * Report Submission Fee USD 100 * Late Report Комиссия за подачу от 500 до 1 000 USD в день * Комиссия Chargeback 25 USD за Chargeback сверх 1,5% * Период с седьмого по двенадцатый месяц * Report Submission Fee USD 100 * Late Report Комиссия за подачу от 500 до 1 000 USD в день * Комиссия Chargeback 25 USD за Chargeback сверх 1,5% * 50 000 USD в месяц после 12 месяцев |
| Master Card | GMAP Step 1 | * FSDVR 3.00 - 4.99% * Мошенничествоs Count 3 * Мошенничествоs Amount USD 3,000 | * Календарный месяц периода * Chargeback любой мошеннической транзакции: НЕТ |
| Master Card | GMAP Step 2 | * FSDVR 5.00 - 7.99% * Мошенничествоs Count 4 * Мошенничествоs Amount USD 4,000 | * Календарный месяц периода * Chargeback любой мошеннической транзакции: НЕТ |
| Master Card | GMAP Step 3 | * FSDVR 8.00% * Мошенничествоs Count 5 * Мошенничествоs Amount USD 5,000 | * Календарный месяц периода * Chargeback любой мошеннической транзакции: ДА * Master Card по собственному усмотрению может продлить период ответственности за Chargeback до 12 месяцев |
| Visa | MCMP | * CTR 3.00% * International (or Regional) Chargebacks Count 100 | * Описание: Period any month * Chargeback Fee USD 0 |
| Visa | GMCMP | * CTR 2.00% * International (or Regional) Chargebacks Count 200 * International (or Regional) Transaction Count 200 | * Описание: Period months 1-3 * Chargeback Fee USD 0 * Описание: Period months 4-9 * Chargeback Fee USD 100 - USD 200 * Описание: Period beyond month 9 * Chargeback Fee USD 100 - USD 200 * Penalty USD 25,000 |
| Visa | HRCMP Step 1 | * CTR 2.00% | * Описание: Period months 1-3 * Chargeback Fee USD 100 * Описание: Period months 4-6 * Chargeback Fee USD 150 * Описание: Period month 7 and Описание: subsequent months * Chargeback Fee USD 150 * Описание: Penalty disqualify |
| Visa | HRCMP Step 2 | * CTR 4.00% * International (or Regional) Chargebacks Count 3000 * Торговцу начисляется 1 млн USD или более в виде комиссий GMCMP | * Описание: Period any month * Описание: Penalty disqualify |
| Visa | GMFPP Step 1 | * FSR 2.50% * International Мошенничество Описание: Transaction count 25 * International Мошенничество Сумма транзакций 25 000 USD | * Описание: Описание: Period month 1-3 * Описание: Period month 3 Описание: and above * Штраф 5 000 USD + 5 000 USD за каждый следующий месяц * Chargeback любой мошеннической транзакции: ДА |
| Visa | GMFPP Step 2 | * FSR 2.50% * International Мошенничество Transactions Описание: amount USD 250,000 | * Описание: Period month 1 Описание: and above * Штраф 5 000 USD + 5 000 USD за каждый следующий месяц * Chargeback любой мошеннической транзакции: ДА |
| Visa | RMFPP Step 1 | * FSR 7.50% * Количество региональных мошеннических транзакций: 15 * Regional Мошенничество Transactions Описание: amount USD 15,000 | * Описание: Описание: Period month 1-3 * Описание: Period month 3 Описание: and above * Chargeback любой мошеннической транзакции: ДА |
| Visa | RMFPP Step 2 | * FSR 20.00% * Количество региональных мошеннических транзакций: 20 * Regional Мошенничество Transactions Описание: amount USD 40,000 | * Описание: Period month 1 Описание: and above * Chargeback любой мошеннической транзакции: ДА |
| Am Ex | AECP | * CTR 3.00% | * Период 3 месяца и более * 5 USD за оспоренное списание, если Торговец участвует в программе немедленных Chargeback * 15 USD за оспоренное списание, если Торговец не участвует в программе немедленных Chargeback |

#### Описание программ мошенничества

##### Master Card Excessive Chargeback Program

Master Card разработала программу Excessive Chargeback Program (ECP), чтобы побуждать каждого Эквайера постоянно и внимательно контролировать показатели Chargeback на уровне Торговца и своевременно определять, когда Торговец Master Card превысил или, вероятно, превысит ежемесячные пороговые значения Chargeback.

См. [руководство ECP](https://www.mastercard.us/en-us/business/overview/support/rules.html)

###### ECP Definitions

Соотношение Chargeback к транзакциям Master Card (CTR)
 
CTR — это количество Chargeback Master Card, полученных Эквайером для Торговца за календарный месяц, делённое на количество транзакций продаж Master Card Торговца за предыдущий месяц, эквайрированных этим Эквайером. (CTR 1 % равен 100 базисным пунктам, а CTR 1,5 % равен 150 базисным пунктам.)
 
Торговец Master Card, контролируемый по Chargeback (CMM)
 
CMM — это Торговец, у которого CTR превышает 100 базисных пунктов и не менее 100 chargeback’ов за календарный месяц.
 
Торговец Master Card с чрезмерным количеством Chargeback (ECM)
 
Торговец является ECM, если в каждом из двух последовательных календарных месяцев («триггерных месяцев») его минимальный CTR составляет 150 базисных пунктов и в каждом месяце имеется не менее 100 Chargeback. Этот статус сохраняется, пока CTR ECM не станет ниже 150 базисных пунктов в течение двух последовательных месяцев.
 
Параметр Tier 1 ECM
 
Торговец является Tier 1 ECM в течение с первого по шестой месяц (подряд или не подряд), когда Торговец идентифицирован как ECM.
 
Параметр Tier 2 ECM
 
Торговец является Tier 2 ECM в течение с седьмого по двенадцатый месяц (подряд или не подряд), когда Торговец идентифицирован как ECM.
 

##### Master Card Global Merchant Audit Program

Глобальная программа аудита торговцев (GMAP) использует скользящие данные за шесть месяцев для выявления точек Merchant Master Card, которые в любом календарном месяце соответствуют следующему набору критериев.

See [SPME Manual](http://www.mastercard.com/us/merchant/pdf/SPME-Entire_Manual_public.pdf)

Уровень 1 — информационное предупреждение о мошенничестве
 
> * Три мошеннические транзакции
> * Не менее 3 000 USD в мошеннических транзакциях
> * Минимальное соотношение объёма мошенничества к продажам в долларах — 3%, не превышающее 4,99%
Уровень 2 — рекомендуемое обучение по предупреждению о мошенничестве
 
> * Четыре мошеннические транзакции
> * Не менее 4 000 USD в мошеннических транзакциях
> * Минимальное соотношение объёма мошенничества к продажам в долларах — 5%, не превышающее 7,99%
Уровень 3 — высокое предупреждение о мошенничестве
 
> * Пять мошеннических транзакций
> * Не менее 5 000 USD в мошеннических транзакциях
> * Минимальное соотношение объёма мошенничества к продажам в долларах — 8%

Master Card по своему единоличному усмотрению может продлить период ответственности по Chargeback до 12 месяцев. Master Card оставляет за собой право указать ID Эквайера, имя Эквайера, имя Торговца, местоположение Торговца и период ответственности по Chargeback любого Торговца уровня 3 в Global Security Bulletin. Когда Master Card указывает сведения об Эквайере и Торговце в Global Security Bulletin, применяются права эмитента на Chargeback. Каждый эмитент получает право использовать код причины сообщения 4849 — «Подозрительная деятельность Торговца», чтобы выставить Эквайеру Chargeback по некоторым мошенническим транзакциям.

Соотношение объёма мошенничества к продажам Master Card в долларах (FSDVR)
 
FSDVR — это сумма случаев мошенничества Master Card, полученных эквайером для торговца за календарный месяц, делённая на сумму транзакций Sale Master Card торговца за тот же месяц, обработанных этим эквайером.
 

##### Visa Merchant Chargeback Activity Monitoring

Соотношение Chargeback к транзакциям Visa (CTR)
 
CTR — количество Chargeback Visa, полученных Эквайером для Торговца за календарный месяц, делённое на количество эквайрированных этим Эквайером транзакций продаж Visa Торговца в том же месяце. Споры, связанные с кодом причины Chargeback 93 «Merchant Мошенничество Performance Program», исключаются из мониторинга программы.
 

Эквайер должен отслеживать коэффициент отношения Chargeback к объёму транзакций своих Торговцев и выявлять любого Торговца, который:

> * Получает более 100 Chargeback в месяц
> * Превышает соотношение объёма Chargeback к транзакциям в 3%

##### Visa Global Merchant Chargeback Monitoring Program Overview

Visa отслеживает Merchant Outlets и Acquirers, создающих чрезмерный уровень международных Chargebacks в рамках Global Merchant Chargeback Monitoring Program, как указано ниже и в руководстве программы Visa Global Merchant Chargeback Monitoring Program (GMCMP). Споры, связанные с Chargeback Reason Код 93, «Merchant Мошенничество Performance Program», исключены из мониторинга программы.

Торговая точка Merchant определяется в Глобальной программе мониторинга чарджбэков торговцев, если она достигает или превышает все следующие ежемесячные уровни активности:

> * 200 международных Chargeback
> * 200 International Transactions
> * Соотношение международных Chargeback к международным транзакциям — 2%

Visa может изменять или создавать новые ежемесячные уровни эффективности в ответ на возникающие тренды Chargeback и мошенничества.

Global Merchant Chargeback Monitoring Program Handling Fees
 
Visa взимает с Эквайера комиссию за обработку Chargeback в размере 100 долларов США за каждый международный Chargeback, полученный для каждой выявленной торговой точки после включения Торговца в программу Global Merchant Chargeback Monitoring Program. Visa получает эту комиссию от Эквайера и перечисляет 70 долларов США эмитенту, инициировавшему Chargeback, через Visa Integrated Billing Statement. Остаток Visa удерживает в качестве административной комиссии. Если Эквайер и Торговец не внедрили процедуры по сокращению Chargeback, Visa может взимать с Эквайера повышенную комиссию за обработку Chargeback, не превышающую 200 долларов США за каждый международный Chargeback, полученный для его Торговца. По своему усмотрению Visa может взимать с Эквайера комиссии за обработку Chargeback по последующей активности Chargeback, происходящей в течение до 4 месяцев после прекращения работы Торговца, независимо от объёма продаж.
 
Global Merchant Chargeback Monitoring Program Penalties
 
Visa начисляет штрафы по Global Merchant Chargeback Monitoring Program эквайеру, как описано в следующих таблицах.
 
Штрафы программы глобального мониторинга Chargeback торговцев — пороги уровня торговца
 

| Торговая точка соответствует или превышает пороговые значения активности Chargeback, указанные в обзоре программы Global Merchant Chargeback Monitoring Program Overview, в месяцах 1–3 (месяц 1 = первоначальное уведомление) | * Описание: Workout Period <sub 1</sub * Описание: No fee |
|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Торговая точка достигает или превышает пороговые значения активности Chargeback, указанные в Global Merchant Chargeback Monitoring Program Overview, в месяцах 4-9 | * 100 долл. США за каждый международный Chargeback за каждый месяц, пока Торговец достигает или превышает пороговые значения программы <sub 1</sub * Если эквайер и торговец не внедрили процедуры для снижения Chargeback, Visa может взимать с эквайера 200 долларов США за каждый международный Chargeback, полученный для его торговца <sub 2</sub . |
| Торговая точка достигает или превышает пороговые значения активности Chargeback, указанные в Global Merchant Chargeback Monitoring Program Overview, после 9-го месяца | * 100 долл. США за каждый международный Chargeback за каждый месяц, пока Торговец достигает или превышает пороговые значения программы <sub 1</sub * Если эквайер и торговец не внедрили процедуры для снижения Chargeback, Visa может взимать с эквайера 200 долларов США за каждый международный Chargeback, полученный для его торговца <sub 2</sub . * Эквайер имеет право на комиссию за проверку в размере 25 000 USD * Visa может инициировать процессы дисквалификации торговой точки и/или её принципалов |

<sub>1</sub> Период восстановления не применяется к пороговым значениям уровня эквайера, торговцам с высоким риском или торговцам с высоким риском бренда, как указано в кодах категорий торговцев с высоким риском бренда

<sub>2</sub> Visa распределяет 70 USD из каждой комиссии эмитенту через Funds Disbursement

##### Visa High Risk Chargeback Monitoring Program

Торговец, обязанный использовать один из следующих кодов категории торговца (MCC), считается имеющим высокий риск для бренда:

> * 5962, “Direct Marketing-Travel-Related Arrangement Services”
> * 5966, “Direct Marketing-Outbound Telemarketing Merchants”
> * 5967, “Direct Marketing-Inbound Telemarketing Merchants”
> * 7995, “Ставки, включая лотерейные билеты, игровые фишки казино, внеипподромные ставки и ставки на скачках”
> * 5912, “Drug Stores, Pharmacies”
> * 5122, “Drugs, Drug Proprietaries, Druggist Sundries”
> * 5993, «Магазины и киоски сигар», для торговцев, продающих сигареты в среде без предъявления карты
Global Merchant Chargeback Monitoring Program - High-Brand Risk Merchants - Penalties
 
В следующей таблице указаны штрафы за каждый международный Chargeback для эквайеров торговцев высокого брендового риска, включённых в Глобальную программу мониторинга чарджбэков торговцев.
 

| Торговец достигает или превышает указанное соотношение Chargeback <sub 1</sub | * Months 1-3 * 100 USD за Chargeback в месяц для каждой выявленной торговой точки <sub 2</sub |
|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Торговец достигает или превышает указанное соотношение Chargeback <sub 1</sub | * Months 4-6 * 150 USD за Chargeback в месяц для каждой выявленной торговой точки <sub 2</sub |
| Торговец достигает или превышает указанное соотношение Chargeback <sub 1</sub | * Месяц 7 и последующие месяцы * 150 долл. США за каждый Chargeback в месяц за каждую идентифицированную торговую точку <sub 2</sub , и Visa может дисквалифицировать Торговца от участия в программе Visa |
| Visa может отстранить Торговца от участия в программе Visa, если торговец достигает или превышает указанное соотношение Chargeback <sub 1</sub без эффективного плана сокращения Chargeback и достигаются 2 из следующих уровней активности Chargeback: | * Соотношение Chargeback торговца в 2 или более раз превышает указанное соотношение Chargeback (за один месяц) * Торговцу начисляются комиссии за 3 000 или более Chargeback (за один месяц) * Торговцу начисляется 1 млн долл. США или более в виде сборов по Global Merchant Chargeback Monitoring Program (при достижении) |

<sub>1</sub> Пороговое соотношение Chargeback составляет 2%

<sub>2</sub> Если эквайер и торговец не внедрили процедуры снижения Chargeback, Visa может взимать с эквайера 200 долларов США за каждый международный Chargeback, полученный для его торговца.

Эквайер не идентифицирует Торговца с высоким риском для бренда с правильным кодом категории торговца, как указано в “High-Brand Risk Merchant Category Кодs”

> * При возникновении нарушения
> * 25 000 USD на торговца в месяц

##### Visa’s Global Merchant Мошенничество Performance Program

Применяется, если торговец находится в одном регионе, а карта выпущена в другом регионе.

##### Visa’s Regional Merchant Мошенничество Performance Program

Применяется к транзакциям, где карта выпущена в том же регионе, в котором находится торговец.

Соотношение мошенничества к продажам Visa (FSR)
 
FSR — это число случаев мошенничества Visa, полученных эквайером для торговца за календарный месяц, делённое на число транзакций Sale Visa торговца за тот же месяц, обработанных этим эквайером.
 

##### American Express Chargeback Programs

См. [Справочное руководство для торговцев American Express — США](https://www.americanexpress.com/content/dam/amex/us/merchant/new-merchant-regulations/Reference-Guide_EN_US.pdf)

Некоторые Chargeback возникают из-за включения торговцев в одну из программ Chargeback Am Ex. Компания может включить вас в любую такую программу при подписании договора или в любое время действия соглашения. Эти программы:

Immediate Chargeback Program
 
Эта программа позволяет Am Ex обрабатывать чарджбэк в любое время, когда держатель карты оспаривает транзакцию по любой причине, кроме фактического или предполагаемого мошенничества, без предварительного направления запроса. Вас могут включить в программу по одной из трёх причин:
 
> * Вы выбираете участие в этой программе, чтобы избежать получения запросов или споров.
> * Am Ex включает вас в эту программу, если вы соответствуете критериям компании по непропорциональному количеству запросов и chargeback’ов.
> * В вашей отрасли исторически высокая частота клиентских споров (не обязательно приводящих к chargeback).
Partial Immediate Chargeback Program
 
Участие в этой программе позволяет Am Ex обрабатывать Chargeback ниже заранее установленной суммы, не направляя предварительно запрос каждый раз, когда держатель карты оспаривает транзакцию по любой причине, кроме фактического или предполагаемого мошенничества. Все споры по списаниям выше установленной суммы обрабатываются по стандартной политике. Вы можете быть включены в программу по одной из трёх причин:
 
> * Вы решаете участвовать в этой программе, чтобы избежать получения запросов по списаниям ниже определённой суммы в долларах.
> * Ваше соглашение с Am Ex предусматривает участие в этой программе.
> * Ваша отрасль исторически характеризуется высоким уровнем споров клиентов.
Мошенничество Full Recourse Program
 
Эта программа позволяет Am Ex оформлять Chargeback без предварительного запроса, когда компания получает спор держателя карты, основанный на фактическом или предполагаемом мошенничестве. Вас могут включить в программу по одной или нескольким следующим причинам:
 
> * Вы классифицированы как торговец с высоким риском.
> * Am Ex получает непропорционально высокое количество запросов и chargeback’ов относительно вашей предыдущей истории или отраслевых стандартов.
> * Ваш аккаунт торговца был аннулирован как фиктивный, запрещённый или иным образом нарушающий соглашение.
Обратите внимание: приведённый выше список причин, по которым вас могут включить в одну из программ Chargeback Am Ex, не является исчерпывающим. Компания по своему усмотрению может включить вас в любую из них в любое время.
 
Чрезмерная комиссия за спор
 
Если в течение любых трёх (3) месяцев ежемесячное соотношение оспариваемых списаний к валовым списаниям (за вычетом кредитов) в Торговой точке превышает три процента, а затем в любом месяце Торговая точка снова превышает это соотношение, мы можем взимать с Торговца плату за каждое оспариваемое списание сверх этого соотношения.
 
> * 5 USD за оспоренное списание, если торговец участвует в программе немедленных Chargeback, или
> * 15 USD за оспоренное списание, если торговец не участвует в программе немедленных Chargeback

#### Visa US Rules

##### Merchant Chargeback Monitoring Program - U.S. Region

Visa отслеживает общий объём внутригосударственных и международных Interchange и Chargeback для одной торговой точки и выявляет торговцев США, у которых в течение любого месяца наблюдаются все следующие уровни активности:

> * 100 или более межбанковских транзакций
> * Описание: 100 or more Chargebacks
> * Соотношение общего объёма Chargeback к Interchange 1% или выше
Для целей программ мониторинга Chargeback торговцев США, если эквайер отправляет Interchange для одной торговой точки под несколькими названиями, Visa:
 
> * Группирует активность торговца
> * Уведомляет соответствующего эквайера о группировке Interchange

##### Merchant Chargeback Monitoring Program Fees - U.S. Region

Visa начисляет сборы по Merchant Chargeback Monitoring Program эквайеру в США, как описано в таблице ниже.

Merchant Chargeback Monitoring Program Fees - U.S. Region
 

| Торговая точка в США достигает или превышает пороговые значения активности Chargeback, указанные в “Merchant Chargeback Monitoring Program - US Region” | * Первоначальное уведомление — месяц 0 * Описание: No fee |
|--------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Торговая точка в США продолжает достигать или превышать пороговые значения активности Chargeback в течение месяца, следующего за первоначальным уведомлением | * Описание: Notification - month 1 * 5 000 долл. США за непредоставление заполненной документации в течение 10 календарных дней с даты письма-уведомления * 1 000 USD в день до получения завершённой документации |
| Торговая точка в США продолжает достигать или превышать пороговые значения активности Chargeback в течение второго месяца | * Описание: Notification - month 2 * 10 000 долл. США за непредоставление приемлемого плана снижения Chargeback в течение 10 календарных дней с даты письма-уведомления * 1 000 USD в день до получения приемлемого плана снижения Chargeback |
| Торговая точка в США продолжает достигать или превышать пороговые значения активности Chargeback в течение 3-го, 4-го и 5-го месяцев | * 50 долл. США за каждый Chargeback за каждый месяц, пока Торговец продолжает достигать или превышать пороговые значения Chargeback <sub 1</sub |
| Торговая точка в США продолжает достигать или превышать пороговые значения активности Chargeback в течение 6-го и 7-го месяцев | * 100 долл. США за каждый Chargeback за каждый месяц, пока Торговец продолжает достигать или превышать пороговые значения Chargeback <sub 2</sub |
| Торговая точка в США продолжает достигать или превышать пороговые значения активности Chargeback в течение 8-го и 9-го месяцев | * Описание: US $25,000 review fee * 100 долл. США за каждый Chargeback за каждый месяц, пока Торговец продолжает достигать или превышать пороговые значения Chargeback <sub 2</sub |
| Торговая точка в США продолжает достигать или превышать пороговые значения активности Chargeback после 9-го месяца | * 100 долл. США за каждый Chargeback за каждый месяц, пока Торговец продолжает достигать или превышать пороговые значения Chargeback <sub 2</sub * Торговец и его принципалы подлежат процедурам дисквалификации, как указано в “Critical Chargeback Levels - U.S. Region” |

<sub>1</sub> Visa распределяет 40 USD из каждой комиссии эмитенту через Funds Disbursement

<sub>2</sub> Visa распределяет 90 USD из каждой комиссии эмитенту через Funds Disbursement

##### High-Brand Risk Chargeback Monitoring Program Fees - U.S. Region

Visa начисляет сборы по High-Brand Risk Chargeback Monitoring Program эквайеру в США с даты уведомления, как описано в следующей таблице
 

| В течение месяцев 1–3 торговец достигает или превышает пороги активности Chargeback, указанные в «Программе мониторинга Chargeback высокого риска для бренда — регион США» | * Описание: US $ 5,000 review fee month * 100 USD за Chargeback в месяцы 1–3 <sub 1</sub |
|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------|
| В течение 4-6 месяцев Торговец достигает или превышает применимые коэффициенты Chargeback, указанные в <sub 1</sub выше | * 150 USD за Chargeback в месяцы 4–6 <sub 2</sub * Описание: US $ 25,000 review fee in month 6 |
| После 6 месяцев, в течение которых торговец достигал или превышал пороги Chargeback, указанные в «Программе мониторинга Chargeback высокого риска для бренда — регион США» | * Visa может дисквалифицировать торговца от участия в программе Visa |

<sub>1</sub> Visa распределяет 90 USD из каждой комиссии эмитенту через Funds Disbursement

<sub>2</sub> Visa распределяет 135 USD из каждой комиссии эмитенту через Funds Disbursement

Merchant Disqualification - U.S. Region
 
Visa может дисквалифицировать Торговца в США, указанного в “High-Brand Risk Merchant Category Кодs”, от участия в программе Visa, если Торговец:
 
> * Достигает или превышает критический уровень активности Chargeback, определённый Visa
> * Действует с целью обойти программы Visa
> * Наносит ущерб системе Visa
> * Эквайер должен уплатить невозвратную комиссию 5 000 USD и приложить её к письму об апелляции

#### Acquirer Penalties

##### Acquirer Global Merchant Chargeback Monitoring Program

Эквайер определяется в программе глобального мониторинга Chargeback торговцев, если достигает или превышает все следующие ежемесячные уровни активности:

> * 500 международных Chargeback
> * 500 International Transactions
> * Соотношение международных Chargeback к международным транзакциям — 1,5%
> * Один или несколько торговцев в программе в течение отчётного месяца
Штрафы программы глобального мониторинга Chargeback торговцев — пороги уровня эквайера
 

| Эквайер достигает или превышает пороговые значения активности Chargeback, указанные в Global Merchant Chargeback Monitoring Program Overview | * 25 000 USD за каждый месяц, в котором эквайер достигает или превышает пороги программы |
|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Эквайер соответствует или превышает пороговые значения активности Chargeback, указанные в обзоре программы Global Merchant Chargeback Monitoring Program Overview, более 3 раз в течение скользящего 12-месячного периода | * 50 000 USD за каждый месяц, в котором эквайер достигает или превышает пороги программы |
| Эквайер соответствует или превышает пороговые значения активности Chargeback, указанные в обзоре программы Global Merchant Chargeback Monitoring Program Overview, более 6 раз в течение скользящего 12-месячного периода | * 100 000 USD за каждый последующий месяц, в котором порог достигнут или превышен * Эквайер подлежит применению процедур снижения риска, как указано в Member Risk Reduction Requirements * Visa может применять дополнительные штрафы за повторные или умышленные нарушения, как указано в Repetitive Violations и Willful Violations |

##### Acquirer Chargeback Monitoring Program - U.S. Region

Visa отслеживает общий объём внутригосударственных и международных Interchange, а также Chargeback для любого эквайера из США, у которого в течение любого месяца наблюдаются все следующие уровни активности:

> * 500 или более межбанковских транзакций
> * Описание: 500 or more Chargebacks
> * Соотношение общего объёма Chargeback к Interchange 1% или выше
Visa начисляет сборы по High-Brand Risk Chargeback Monitoring Program эквайеру в США с даты уведомления, как описано в следующей таблице
 

| Описание: Acquirer does not * Идентифицируйте торговца с высоким риском для бренда по правильному коду категории торговца * Register a High-Brand Risk Merchant | * 25 000 USD на торговца в месяц * 100 000 долл. США после 3 нарушений за календарный год и/или запрет на подключение Торговцев с высоким риском для бренда <sub 1</sub |
|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Эквайер сознательно подключает дисквалифицированного Торговца или любого из принципалов дисквалифицированного Торговца | * 250 000 USD в месяц, пока эквайер не расторгнет соглашение с торговцем <sub 1</sub |

<sub>1</sub> Visa может налагать на эквайеров условия за нарушения Региональных правил деятельности США, вплоть до прекращения программы эквайера.

Visa начисляет сборы по Acquirer Chargeback Monitoring Program эквайеру в США, как описано в следующей таблице.

Acquirer Chargeback Monitoring Program Fees - U.S. Region
 

| Эквайер сознательно пытается обойти положения “Acquirer Chargeback Monitoring Program - U.S. Region” | * 25 000 USD начисляются через 60 календарных дней после уведомления эквайера |
|---------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Эквайер достигает или превышает пороговые значения активности Chargeback, указанные в “Acquirer Chargeback Monitoring Program - U.S. Region” | * US $25,000 |
| Эквайер достигает или превышает пороговые значения активности Chargeback более 3 раз за скользящий 12-месячный период | * 100 000 USD за каждый последующий месяц, в котором превышен любой из порогов |
| У эквайера было 3 или более Торговцев в программах мониторинга chargeback Торговцев в течение 6 месяцев подряд | * Ежедневный сбор за проверку не менее 2 500 долларов США, при минимальном недельном сборе 17 500 долларов США, взимаемый во время проверки операций эквайера и/или торговцев, связанных с картами Visa, как указано в «Проверке деятельности эквайера — регион США». |
| Эквайер не предпринимает действий по рекомендациям, следующим из проверки деятельности эквайера и/или Торговцев, связанной с обработкой карт Visa | * Описание: US $75,000 minimum |

##### Acquirer Мошенничество Monitoring Program

Visa отслеживает эквайера для определения непропорционального соотношения мошенничества к продажам.

Эквайер, превышающий всемирное или региональное отношение мошенничества к продажам в 3 раза более одного квартала, будет считаться несоответствующим требованиям и может подлежать, помимо прочего, следующим штрафам и санкциям:

> * Денежные штрафы, указанные в применимых региональных правилах работы Visa
> * Временная приостановка заключения договоров с новыми торговцами
> * Прекращение членства

##### График штрафов программы мониторинга мошенничества эквайеров — регион AP и регион CEMEA

| Описание: First violation | * US $25,000 |
|----------------------------------------|---------------------------------------------------------------------------------------------------------------------------|
| Второе последовательное нарушение | * US $50,000 |
| 3 или более последовательных нарушений | * 100 000 долл. США за каждое последующее нарушение в квартал ИЛИ Visa может отозвать или приостановить лицензию эквайера |

##### Acquirer Мошенничество Monitoring Program Fines - U.S. Region

| Описание: First month | * US $25,000 |
|--------------------------------|----------------|
| Описание: Second month | * US $50,000 |
| Описание: Third month | * US $75,000 |
| Четвёртый и последующие месяцы | * US $100,000 |

##### Условия и комиссии онлайн-сервиса идентификации рисков — регион США

Описание: Visa may:

> * Наложить условия на эквайера в США, если любой из его Торговцев определён как Identified Merchant посредством RIS Online
> * Взимать ежедневный сбор за проверку не менее 2 500 долл. США, с минимальным недельным сбором 17 500 долл. США, если требуется выездная проверка
Если Visa установит, что эквайер в США или его Торговец каким-либо образом изменил данные Торговца во избежание обнаружения службой Risk Identification Service (RIS) Online, Visa может взимать с эквайера сбор 25 000 долларов США за каждый выявленный случай.
 
Visa налагает на эквайера из США следующие штрафы, указанные в таблице ниже, по истечении трёхмесячного периода восстановления, описанного в «Уведомлении о чрезмерной мошеннической активности — регион США».
 

| Период штрафа — месяц 1 <sub 1</sub . Эквайер получает уведомление о чрезмерной мошеннической активности <sub 2</sub | * US $10,000 |
|---------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------|
| Период штрафа — месяц 2 или 3. Эквайер получает уведомление о чрезмерной мошеннической активности <sub 2</sub | * US $25,000 |
| Период штрафа — месяц 4. Эквайер получает уведомление о чрезмерной мошеннической активности <sub 2</sub | * US $50,000 |
| Период штрафа — месяц 5. Эквайер получает уведомление о чрезмерной мошеннической активности <sub 2</sub | * US $75,000 |
| Период штрафа — месяц 6. Эквайер получает уведомление о чрезмерной мошеннической активности <sub 2</sub | * US $50,000 |
| Период штрафов — после 6-го месяца. Эквайер получает последующие уведомления о чрезмерной мошеннической активности <sub 2</sub | * 100 000 долл. США в месяц \* Торговец и его принципал(ы) подлежат процедурам дисквалификации, как указано в “Critical Chargeback Levels - U.S. Region” |

<sub>1</sub> Процесс устранения рисков Risk Identification Service Online, включая требования к уведомлениям, описан в документе «Уведомление о чрезмерной мошеннической активности — регион США».

<sub>2</sub> Идентифицированный торговец должен оставаться ниже пороговых значений RIS Online Notification, влекущих штраф, не менее трёх месяцев подряд, чтобы эквайер вышел из периода штрафа, указанного в этой таблице.

#### Описание: Мошенничество reasons

| Код | Reason | Описание |
|-------|-------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 00 | Lost Мошенничество | Мошенническая транзакция, совершаемая с использованием утерянной кредитной или дебетовой карты (или другого физического устройства доступа к её счёту, например чеков удобства и перевода баланса) без фактического, подразумеваемого или очевидного разрешения держателя карты. |
| 01 | Stolen Мошенничество | Мошенническая транзакция, совершаемая с использованием украденной кредитной или дебетовой карты (или другого физического устройства доступа к её счёту, например чеков удобства и перевода баланса) без фактического, подразумеваемого или очевидного разрешения держателя карты. |
| 02 | Never Received Issue | Перехват и использование кредитной или дебетовой карты (либо иного устройства доступа к счёту) до её получения держателем карты лицом без фактического, подразумеваемого или очевидного разрешения держателя карты. |
| 03 | Мошенничествоulent Application | Мошенническая транзакция с использованием кредитной или дебетовой карты, полученной по заявлению с ложным именем или иной недостоверной идентификационной информацией. |
| 04 | Counterfeit Card Мошенничество | Использование изменённой или незаконно воспроизведённой кредитной или дебетовой карты (или другого физического устройства доступа к её счёту, например чеков удобства и перевода баланса), включая копирование либо изменение магнитной полосы или тиснения. |
| 05 | Account Takeover Мошенничество | Существующий кредитный или дебетовый счёт используется без фактического, подразумеваемого или очевидного разрешения держателя карты лицом, получившим доступ к счёту несанкционированным способом, например посредством смены адреса или запроса на повторный выпуск кредитной либо дебетовой карты (или другого устройства доступа к счёту, например чеков для удобства и перевода баланса), но не в случае утерянных или украденных карт. |
| 06 | Card Not Present Мошенничество | Мошенническая транзакция, совершаемая с использованием данных кредитного или дебетового счёта, включая данные псевдосчёта, без физического участия карты или другого устройства, по телефону, почте, через Интернет или иными электронными средствами, без фактического, подразумеваемого или явного разрешения держателя карты. |
| 07 | Multiple Imprint Мошенничество | Мошенническая транзакция по кредитной или дебетовой карте, когда Merchant после законной очной транзакции проводит одну или несколько дополнительных транзакций без фактического, подразумеваемого или очевидного разрешения держателя карты. Например, Merchant делает несколько отпечатков карты на бумажных бланках или формирует чеки терминала после получения дополнительных разрешений на считывание карты онлайн или офлайн. |
| 51 | Сговорчивый торговец для bust-out мошенничества | Сговорившийся держатель карты, участвующий в транзакциях со сговорившимся торговцем, как определено в Cardholder-Merchant Collusion Program. |

#### Описание: Chargeback reasons

| Код | Reason | Описание |
|-------|-------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 30 | Services Not Provided or Merchandise Not Received | Торговец не смог или не захотел предоставить услуги, либо держатель карты или уполномоченное лицо не получили товар в согласованном месте или к согласованной дате. Требуемые документы: документация, подтверждающая получение услуг держателем карты, либо доказательство получения товара или билета держателем карты или уполномоченным лицом в согласованную дату или в согласованном месте. Срок: 120 дней с даты обработки транзакции или даты, когда держатель карты ожидал получить услугу. |
| 41 | Cancelled Recurring Transaction | Торговец продолжал списывать средства с держателя карты по Recurring-транзакции несмотря на уведомление об отмене. Требуемые документы: документация, подтверждающая, что услуга не была отменена за 15 календарных дней до даты обработки транзакции, и документация с указанием части или суммы использованных услуг или товара. Временной период: 120 дней с даты обработки транзакции. |
| 4801 | Requested Transaction Data Not Received | Запрос на получение не был исполнен. Требуемые документы: копия квитанции транзакции. Временной период: 60 дней с даты запроса на получение. |
| 4802 | Requested/Required Information Illegible or Missing | Получена квитанция транзакции, но номер счёта или сумма неразборчивы. Требуемые документы: копия квитанции транзакции. Временной период: 120 дней с даты обработки транзакции. |
| 4807 | Warning Bulletin File | Карта была указана в электронном Warning Bulletin File, однако Торговец завершил транзакцию. Требуемые документы: нет. Временной период: 45 дней с даты обработки транзакции. |
| 4808 | Requested/Required Authorization Not Obtained | Сумма транзакции превысила пороговый лимит, установленный Master Card, но авторизация не была получена или была отклонена. Требуемые документы: нет. Временной период: 45 дней с даты обработки транзакции. |
| 4812 | Account Number Not on File | Транзакция не получила авторизацию и была обработана с использованием номера счёта, который не совпадает ни с одним из имеющихся у эмитента. Требуемые документы: нет. Временной период: 45 дней с даты обработки транзакции. |
| 4831 | Transaction Amount Differs | Держатель карты заявляет, что ему была выставлена неверная сумма. Необходимые документы: копия квитанции о транзакции и доказательство того, что держатель карты несёт ответственность за спорную сумму. Временной период: 120 дней с даты обработки транзакции. |
| 4834 | Duplicate Processing | Одна и та же транзакция была обработана более одного раза. Требуемые документы: копии двух разных квитанций транзакций. Временной период: 120 дней с даты обработки транзакции. |
| 4835 | Card Not Valid or Expired | Торговец завершил транзакцию картой, срок действия которой истёк до даты транзакции, и Торговец не получил авторизацию. Требуемые документы: нет. Временной период: 120 дней с даты обработки транзакции. |
| 4837 | No Cardholder Authorization | Торговец не получил оттиск и подпись (или PIN) в среде присутствия карты и завершил транзакцию без разрешения держателя карты, либо транзакция была обработана с фиктивным номером счёта, либо не существовало действительной выпущенной карты с указанным номером счёта или квитанцией о транзакции. Требуемые документы: доказательство обоих элементов — оттиск, подпись или PIN. Временной период: 120 дней с даты обработки транзакции. |
| 4840 | Мошенничествоulent Processing of Transactions | Несколько транзакций совершены по одной карте в одной торговой точке без разрешения держателя карты. Требуемые документы: все квитанции транзакций и пояснение торговца. Временной период: 120 дней с даты обработки транзакции. |
| 4841 | Cancelled Recurring Transaction | Получатель платежа продолжал выставлять держателю карты счёт за рекуррентную транзакцию после получения уведомления об отмене от держателя карты или эмитента либо после того, как эмитент указал держателя карты. Требуемые документы: нет. Временной период: 120 дней с даты обработки транзакции. |
| 4842 | Late Presentment | Транзакция не была обработана в требуемые сроки. Требуемые документы: нет. Временной период: 120 дней с даты обработки транзакции. |
| 4846 | Correct Transaction Currency Код Not Provided | Эквайер не передал корректный код валюты транзакции. Транзакция произошла в среде с двумя валютами, а валюта транзакции не указана в квитанции. Держателю карты не была предоставлена возможность выбрать желаемую валюту завершения транзакции либо он не согласился с валютой транзакции. Требуемые документы: документация, подтверждающая, что указана или предоставлена правильная валюта. Временной период: 120 дней с даты обработки транзакции. |
| 4847 | Запрошенная/требуемая авторизация не получена, транзакция мошенническая | Сумма транзакции превысила минимальный лимит, установленный Master Card, однако авторизация не была получена или была отклонена, и транзакция является мошеннической. Требуемые документы: нет. Временной период: 120 дней с даты обработки транзакции. |
| 4849 | Questionable Merchant Activity | Эмитенты могут использовать этот Chargeback, только если эквайер обработал транзакцию для получателя платежа, который позднее был указан в бюллетене безопасности Master Card Global Security Bulletin за нарушение правил Master Card. Требуемые документы: нет. Временной период: 120 календарных дней с даты публикации Global Security Bulletin. |
| 4850 | Credit Posted as a Purchase | Счёт держателя карты был ошибочно проведён с дебетом вместо кредита в результате неверного кода транзакции или ошибки ввода. Необходимые документы: эквайер должен предоставить копию TID в качестве доказательства розничной продажи вместо возврата. Временной период: 120 дней с даты обработки транзакции. |
| 4853 | Cardholder Dispute | Держатель карты вернул (или попытался вернуть) товары или услуги точке, принимающей карты, поскольку они не соответствовали описанию. Требуемые документы: копия TID или счёта (если применимо). Получатель карты. Срок: 120 календарных дней с даты обработки транзакции или даты получения товаров и услуг при отложенной доставке. |
| 4855 | Nonreceipt of Merchandise | Держатель карты или его уполномоченный представитель не получил товары, которые должны были быть отгружены или доставлены. Необходимые документы: доказательство того, что держатель карты или лицо, уполномоченное держателем карты, получило товар. Временной период: 120 календарных дней отсчитываются от даты обработки представленной транзакции либо от последней ожидаемой даты доставки. |
| 4857 | Card-Activated Telephone Transaction | Описание: The issuer. Требуемые документы: дополнительная или исправленная информация для устранения расхождения в выставлении счёта. Временной период: 120 дней с даты обработки транзакции. |
| 4859 | Services Not Rendered | Получатель платежа не желает или не может оказать услуги. Держатель карты оплатил услуги или товары другим способом. Держатель карты не получил средства в банкомате либо получил только часть. Держатель карты не получил авиаперевозку. Требуемые документы: доказательство оказания услуг или возможности их оказания получателем платежа; соответствующее пояснение получателя платежа; документация, подтверждающая перечисление средств. Временной период: 120 дней с даты обработки транзакции. |
| 4860 | Credit Not Processed | Получатель карты не зачислил кредит на свою учётную запись либо зачислил кредит и уменьшил причитающуюся сумму кредита без надлежащего раскрытия информации. Требуемые документы: возражение получателя платежа (например, о том, что товар не был возвращён или отмена не была принята) либо надлежащее раскрытие информации, предоставленное в момент взаимодействия. Временной период: 120 дней с даты обработки транзакции. |
| 4862 | Counterfeit Transaction Magnetic Stripe POS Мошенничество | Мошенническая транзакция, при которой держатель карты или уполномоченное им лицо владели всеми картами, выпущенными для учётной записи на дату транзакции. Требуемые документы: доказательство обоих элементов — оттиск, подпись или PIN. Временной период: 120 дней с даты обработки транзакции. |
| 4863 | Cardholder Does Not Recognize | Держатель карты не распознаёт транзакцию. Требуемые документы: копия квитанции транзакции. Временной период: 120 дней с даты обработки транзакции. |
| 4870 | Chip Liability Shift | Поддельная транзакция с предъявлением карты была обработана для чиповой карты на терминале без EMV, при этом и эмитент, и эквайер находятся в стране или регионе, принявшем программу переноса ответственности за чиповые карты. Требуемые документы: нет. Временной период: 120 дней с даты обработки транзакции. |
| 4871 | Chip/PIN Liability Shift | Мошенническая транзакция совершена с использованием гибридной карты с предпочтительным PIN в терминале, считывающем только магнитную полосу (независимо от поддержки PIN), либо в терминале с поддержкой чипа, не оснащённом PIN-падом, способным как минимум проверять PIN офлайн; при этом и эмитент, и эквайер находятся в стране или регионе, принявшем программу переноса ответственности за чип. Требуемые документы: нет. Временной период: 120 дней с даты обработки транзакции. |
| 4899 | Domestic Chargeback Dispute (Europe Region Only) | Только эмитенты могут использовать код причины сообщения 4899 в случае централизованно эквайрированной внутренней транзакции или внутренней транзакции, обработанной через Banknet или EPS-Net, для которой Chargeback доступен согласно применимому внутреннему правилу, но не может быть обработан с другим кодом причины сообщения. Требуемые документы: в соответствии с внутренним правилом. Временной период: в соответствии с внутренним правилом. |
| 53 | Not as Described or Defective Merchandise | Держатель карты получил повреждённый или дефектный товар либо товар или услуга не соответствовали описанию в квитанции по транзакции или иной документации, предоставленной во время покупки. Требуемые документы: документы, подтверждающие правильное описание услуги или товара и отсутствие дефектов. Доказательство того, что услуга не была отменена и использовалась держателем карты, либо доказательство по товару. Временной период: 120 дней с даты обработки транзакции. |
| 57 | Мошенничествоulent Multiple Transactions | Несколько транзакций совершены по одной карте в одной торговой точке без разрешения держателя карты. Необходимые документы: доказательства того, что мошеннических множественных транзакций не было. Доказательства того, что транзакции представляют собой действительные отложенные или изменённые списания для транзакции T&E. Временной период: 120 дней с даты обработки транзакции. |
| 60 | Нечитаемое подтверждение исполнения | Получена квитанция транзакции, но номер счёта или сумма неразборчивы. Требуемые документы: разборчивая копия квитанции транзакции. Временной период: 120 дней с даты обработки транзакции. |
| 62 | Counterfeit Transaction | Поддельная карта использовалась для транзакции по магнитной полосе или чипу, получившей Authorization, однако Authorization Request не содержал требуемых данных либо содержал изменённые данные. Транзакция с поддельной картой в присутствии держателя была обработана по чиповой карте на терминале без EMV; при этом эмитент и эквайер находятся в стране или регионе, принявшем программу переноса ответственности за чип. Требуемые документы: нет. Временной период: 120 дней с даты обработки транзакции. |
| 70 | Бюллетень восстановления карты или файл исключений | Торговец не проверил Card Recovery Bulletin или Exception File для транзакции с суммой ниже Floor Limit. Требуемые документы: нет. Временной период: 75 дней с даты обработки транзакции. |
| 71 | Declined Authorization | Торговец завершил транзакцию после того, как запрос авторизации получил ответ об отклонении. Требуемые документы: нет. Временной период: 75 дней с даты обработки транзакции. |
| 72 | No Authorization | Для транзакции требовалась авторизация, но торговец её не получил. Требуемые документы: нет. Временной период: 75 дней с даты обработки транзакции. |
| 73 | Expired Card | Торговец завершил транзакцию картой, срок действия которой истёк до даты транзакции, и Торговец не получил авторизацию. Требуемые документы: документация, подтверждающая, что карта не была просрочена на дату транзакции. Временной период: 75 дней с даты обработки транзакции. |
| 74 | Late Presentment | Транзакция не была обработана в требуемые сроки, а состояние счёта на момент Chargeback не было надлежащим. Дата обработки транзакции была более чем через 180 календарных дней после даты транзакции. Требуемые документы: нет. Временной период: 120 дней с даты обработки транзакции. |
| 75 | Транзакция не распознана | Держатель карты не распознаёт транзакцию. Требуемые документы: копия квитанции транзакции. Временной период: 120 дней с даты обработки транзакции. |
| 76 | Неверная валюта, код транзакции или нарушение обработки внутренней транзакции | Транзакция была обработана с неверным кодом транзакции или кодом валюты, либо Торговец не представил квитанцию о транзакции в стране, где она произошла, либо держатель карты не был уведомлён о Dynamic Currency Conversion или ему было отказано в выборе оплаты у Торговца. Необходимые документы: квитанция о транзакции или иная запись, подтверждающая корректность транзакции. Временной период: 120 дней с даты обработки транзакции. |
| 77 | Несоответствующий номер счёта | Транзакция не получила авторизацию и была обработана с использованием номера счёта, который не совпадает ни с одним из имеющихся у эмитента. Требуемые документы: нет. Временной период: 120 дней с даты обработки транзакции. |
| 78 | Service Код Violation | Авторизация не была получена для транзакции со считыванием магнитной полосы по карте Visa Electron или карте Visa в диапазоне учётных записей с обязательной положительной авторизацией. Требуемые документы: нет. Временной период: 75 дней с даты обработки транзакции. |
| 80 | Incorrect Transaction Amount or Account Number | Сумма транзакции указана неверно, либо при расчёте суммы транзакции была допущена ошибка сложения или перестановки цифр, либо Торговец изменил сумму транзакции после её завершения без согласия держателя карты, либо транзакция была обработана с использованием неверного номера счёта. Необходимые документы: квитанция о транзакции или иная запись, подтверждающая правильность суммы транзакции и номера счёта. Временной период: 120 дней с даты обработки транзакции. |
| 81 | Мошенничество - Card-Present Environment | Торговец не получил оттиск и подпись (или PIN) в среде Card-Present и завершил транзакцию без разрешения держателя карты, либо транзакция была обработана с фиктивным номером счёта, либо не существовало действительной карты с номером счёта или квитанцией транзакции. Мошенническая транзакция с присутствием карты была обработана по утерянной/украденной чиповой карте на терминале без EMV, при этом и эмитент, и эквайер находятся в стране или регионе, внедрившем программу переноса ответственности за чиповые карты. Требуемые документы: квитанция по транзакции или иной документ, подтверждающий обработку отдельных транзакций, а также доказательство того, что транзакции не относились к одной и той же услуге или товару. Временной период: 120 дней с даты обработки транзакции. |
| 82 | Duplicate Processing | Одна транзакция была обработана более одного раза. Необходимые документы: подтверждение оттиска карты и подпись или PIN. Убедительное доказательство того, что держатель карты участвовал в транзакции. Временной период: 120 дней с даты обработки транзакции. |
| 83 | Мошенничество - Card-Absent Environment | Транзакция Mail/Phone Order Recurring или электронной коммерции была обработана без разрешения держателя карты, либо использовался фиктивный номер счёта, либо отсутствовала действительная карта с номером счёта из квитанции по транзакции. Требуемые документы: доказательство того, что услуга не была отменена и использовалась держателем карты, либо доказательство того, что товар не был возвращён. Доказательство правильного описания политики отмены. Временной период: 120 дней с даты обработки кредитной транзакции. |
| 85 | Credit Not Processed | Торговец не обработал квитанцию кредитной транзакции должным образом. Требуемые документы: документы (кроме квитанции транзакции), подтверждающие, что торговец не получил оплату иным способом за те же товары или услуги. Временной период: 120 дней с даты обработки транзакции. |
| 86 | Paid by Other Means | Товар или услуга получены, но оплачены иным способом. Требуемые документы: нет. Временной период: 120 дней с даты обработки транзакции. |
| 90 | Non-Receipt of Cash or Load Transaction Value at ATM or Load Device | Держатель карты не получил или получил только часть наличных либо суммы транзакции Load. Требуемые документы: доказательство обоих элементов — оттиск, подпись или PIN. Временной период: 120 дней с даты обработки транзакции. |
| 93 | Merchant Мошенничество Performance Program | Visa уведомила, что транзакция определена программой эффективности мошенничества торговцев. Требуемые документы: нет. Временной период: 120 дней с даты обработки транзакции. |
| 96 | Transaction Exceeds Limited Amount | Терминал самообслуживания, выполняющий транзакцию типа A или B, активируемую держателем карты, превысил допустимую сумму. Требуемые документы: нет. Временной период: 120 дней с даты обработки транзакции. |
| 28 | Запрос копии с подписью | Банк держателя карты запрашивает у торговца копию квитанции о транзакции для анализа мошенничества. |
| 33 | Мошенничество Analysis Request | Банк держателя карты запрашивает у торговца копию квитанции для анализа мошенничества. |
| 79 | Requested Transaction Information Not Received | Этот chargeback возникает, когда торговец не отвечает на запрос на извлечение в указанный срок или не предоставляет разборчивый ответ. |
| 5621 | Sales Draft Chargeback | Sales Draft Chargeback. |
| 10 | Мошенничество | Мошенничество. |
| 10.1 | EMV Liability Shift Counterfeit Мошенничество | EMV Liability Shift Counterfeit Мошенничество. |
| 10.2 | EMV Liability Shift Non-Counterfeit Мошенничество | EMV Liability Shift Non-Counterfeit Мошенничество. |
| 10.3 | Other Мошенничество-Card Present Environment | Other Мошенничество-Card Present Environment. |
| 10.4 | Other Мошенничество-Card Absent Environment | Other Мошенничество-Card Absent Environment. |
| 10.5 | Visa Мошенничество Monitoring Program | Visa Мошенничество Monitoring Program. |
| 11.1 | Card Recovery Bulletin | Card Recovery Bulletin. |
| 11.2 | Declined Authorization | Declined Authorization. |
| 11.3 | No Authorization | No Authorization. |
| 12.1 | Late Presentment | Late Presentment. |
| 12.2 | Incorrect Transaction Код | Incorrect Transaction Код. |
| 12.3 | Incorrect Currency | Incorrect Currency. |
| 12.4 | Incorrect Account Number | Incorrect Account Number. |
| 12.5 | Incorrect Amount | Incorrect Amount. |
| 12.6 | Duplicate Processing/Paid by Other Means | Duplicate Processing/Paid by Other Means. |
| 12.7 | Invalid Data | Invalid Data. |
| 13 | Consumer Dispute | Consumer Dispute. |
| 13.1 | Merchandise / Services Not Received | Merchandise / Services Not Received. |
| 13.2 | Cancelled Recurring | Cancelled Recurring. |
| 13.3 | Not as Described or Defective Merchandise/Services | Not as Described or Defective Merchandise/Services. |
| 13.4 | Counterfeit Merchandise | Counterfeit Merchandise. |
| 13.5 | Misrepresentation | Misrepresentation. |
| 13.6 | Credit Not Processed | Credit Not Processed. |
| 13.7 | Cancelled Merchandise/Services | Cancelled Merchandise/Services. |
| 13.8 | Original Credit Transaction Not Accepted | Original Credit Transaction Not Accepted. |
| 13.9 | Non-Receipt of Cash or Load Transaction Value | Non-Receipt of Cash or Load Transaction Value. |
| 501 | Non-JCB Card | Этот Chargeback возникает, когда не была получена действительная авторизация от банка-эмитента, а информация о карте, вытисненная на ней или закодированная на магнитной полосе, не соответствует спецификации карт JCB. Этот Chargeback может быть отменён при предоставлении подтверждения того, что действительная авторизация была получена на момент продажи, вместе с подписанным слипом, проведённым через считывающее устройство или отпечатанным и соответствующим спецификациям JCB, либо доказательства оформления кредита. |
| 502 | Card-Member Dispute | Этот Chargeback возникает, когда держатель карты оспаривает полученные товары или оказанные услуги. Этот Chargeback может быть отменён при предоставлении письменного возражения с доказательством того, что товары/услуги, описанные в чеке продажи или счёте, были надлежащими, условия были корректно раскрыты на момент покупки либо был выдан кредит. |
| 503 | Expired JCB Card | Этот Chargeback возникает, когда карта, использованная в транзакции, истекла до даты транзакции и Sale обработана без действительной авторизации. Такой Chargeback может быть отменён при предоставлении доказательства действительной авторизации на момент Sale вместе с подписанным слип-чеком, содержащим действительную дату окончания карты на момент Sale, либо доказательства оформления кредита. |
| 507 | Incorrect Transaction Amount | Этот чарджбэк возникает, когда для продажи указана неверная сумма транзакции. Чарджбэк может быть отменён при предоставлении доказательства правильности суммы и/или читаемой копии подписанного слипа либо подтверждения оформления кредита. |
| 510 | Mis-Post | Этот chargeback возникает, когда кредитовая транзакция ошибочно проводится как дебетовая или дебетовая — как кредитовая на счёт держателя карты. |
| 512 | Duplicate Processing | Этот Chargeback возникает, когда держатель карты заявляет, что с него дважды списали средства за одну транзакцию. Его можно отменить, предоставив два отдельных подписанных слипа для каждой транзакции или доказательство оформления кредита. |
| 513 | Credit Not Received | Этот Chargeback возникает, когда Клиент указывает, что не получил зачисление на свой счёт. Этот Chargeback может быть отменён при предоставлении доказательства зачисления на этот счёт, подписанного чека продажи с указанием политики Refund на момент покупки либо доказательства выдачи кредита. |
| 516 | Non-Receipt of Requested Item | Этот Chargeback возникает, когда клиент заявляет, что не получил товар, который должен был быть доставлен, или что товар был оплачен иным способом. Такой Chargeback может быть отменён при предоставлении подписанного держателем карты подтверждения доставки, подписанного слип-чека, подтверждающего получение товара держателем карты, либо доказательства оформления кредита. |
| 517 | Requested Copy Illegible | Этот Chargeback возникает, когда эмитент счёта запрашивает от имени держателя карты копию квитанции о транзакции и разборчивая копия запрошенного слипа не была получена. Этот Chargeback может быть отменён при предоставлении разборчивой копии запрошенного подписанного слипа, сформированного при считывании или импринтинге, либо доказательства выдачи кредита. |
| 521 | Транзакция превышает лимит Floor | Этот Chargeback возникает, когда транзакция превышает соответствующий минимальный лимит, действующий без действительной авторизации на момент продажи, либо когда сумма транзакции, превышающая этот лимит, больше авторизованной суммы. Этот Chargeback может быть отменён при предоставлении подтверждения действительной авторизации для транзакции или любой суммы, превышающей назначенный вам минимальный лимит, либо доказательства оформления кредита. |
| 522 | Authorization Declined | Этот чарджбэк возникает, когда транзакция по аккаунту была обработана после получения ответа об отклонении. Чарджбэк может быть отменён при предоставлении доказательства действительной авторизации транзакции или оформления кредита. |
| 523 | Incorrect Card Number | Этот Chargeback возникает, когда номер счёта предоставлен эмитенту для транзакции и не соответствует ни одному номеру счёта в основном файле банка. Этот Chargeback может быть отменён при предоставлении слипа продажи, сформированного при импринтинге или считывании, с тем же номером счёта, который оспаривается. |
| 524 | Addition Error | Этот Chargeback возникает, когда копия слип-чека или иной записи транзакции у держателя карты содержит ошибку сложения, из-за которой общая сумма неверна. Такой Chargeback может быть отменён при предоставлении доказательства корректности суммы транзакции и/или разборчивой копии подписанного слип-чека с магнитной полосой или отпечатком либо доказательства оформления кредита. |
| 525 | Altered Amount | Этот Chargeback возникает, когда клиент заявляет, что с его счёта списана неверная сумма. Его можно отменить, предоставив доказательство правильной обработки транзакции или оформления кредита. |
| 526 | No Signature | Этот Chargeback возникает, когда держатель карты заявляет, что не участвовал в транзакции и не авторизовал её. Этот Chargeback может быть отменён при предоставлении подписанного держателем карты слипа продажи, сформированного при считывании или импринтинге, доказательства доставки либо доказательства выдачи кредита. |
| 527 | No Imprint | Этот чарджбэк возникает, когда держатель карты заявляет, что не участвовал в транзакции и не санкционировал её проведение. Чарджбэк может быть отменён при предоставлении подписанного слипа, отпечатка слипа или доказательства оформления кредита. |
| 534 | Unauthorized Multiple Transactions | Этот Chargeback возникает, когда в одном месте происходит две или более транзакций, а держатель карты заявляет, что авторизовал или участвовал только в одной. Этот Chargeback может быть отменён при предоставлении подписанного слипа продажи, сформированного при считывании или импринтинге, для всех транзакций с держателем карты либо доказательства выдачи кредита. |
| 536 | Late Submission | Этот Chargeback возникает, когда между датой транзакции и расчётом по продаже прошло более 45 дней. Этот Chargeback может быть отменён при предоставлении подписанного слипа продажи, сформированного при считывании или импринтинге, и соответствующего заголовочного талона пакета либо доказательства выдачи кредита. |
| 537 | No Show Dispute | Этот chargeback возникает, когда держатель карты утверждает, что он забронировал отель или аренду автомобиля, но произошло одно из следующего. |
| 538 | Advance Deposit | Этот чарджбэк возникает, когда держатель карты заявляет, что участвовал в транзакции по авансовому депозиту для обеспечения бронирования отеля, но произошло одно из следующих событий. |
| 541 | Illegible Item | Этот Chargeback возникает, когда эмитент счёта от имени держателя карты запрашивает копию квитанции по транзакции и разборчивая копия запрошенного слип-чека не была получена. Такой Chargeback может быть отменён при предоставлении разборчивой копии подписанного слип-чека с магнитной полосой или отпечатком, либо доказательства оформления кредита. |
| 544 | Cancelled Recurring Transaction | Этот Chargeback возникает, когда держатель карты заявляет, что разрешение на обработку рекуррентных транзакций было отменено до даты транзакции. Этот Chargeback может быть отменён при предоставлении доказательства того, что держатель карты авторизовал транзакцию, либо доказательства выдачи кредита. |
| 546 | Unauthorized Purchase | Этот Chargeback возникает, когда держатель карты заявляет, что не участвовал в транзакции и не авторизовал её. Этот Chargeback может быть отменён при предоставлении подписанного держателем карты слипа продажи, сформированного при считывании или импринтинге, доказательства доставки либо доказательства выдачи кредита. |
| 547 | JCB Card on Stop List | Этот Chargeback возникает, когда карта JCB, предъявленная для оплаты, была внесена в Stop List, действовавший на момент продажи. Этот Chargeback может быть отменён при предоставлении доказательства того, что карта не была внесена в Stop List на момент продажи, либо доказательства выдачи кредита. |
| 554 | Non-Receipt of Merchandise/Cash at ATM | Этот Chargeback возникает, когда: a) держатель карты не получает товар в согласованном месте или b) держатель карты участвовал в транзакции в банкомате, но запрошенная сумма наличных не была выдана держателю карты. Этот Chargeback может быть отменён при предоставлении подтверждения доставки, показывающего, что держатель карты получил товар или запрошенную сумму в случае транзакции в банкомате, либо доказательства оформления кредита. |
| 580 | Non-Receipt of T&E Documentation | Этот чарджбэк возникает, когда эмитент не получил запрошенную копию слипа в установленный срок. Чарджбэк может быть отменён при предоставлении доказательства отправки копии в установленный срок или подтверждения оформления кредита. |
| 581 | Split Sale | Этот Chargeback возникает, когда транзакция, требующая решения об авторизации, была разделена на две или более продажи по карте во избежание авторизации, и при представлении всей продажи для авторизации она была бы отклонена. Такой Chargeback может быть отменён при предоставлении доказательства, что транзакция не является разделённой продажей, либо что была получена действительная авторизация на всю сумму, либо доказательства оформления кредита. |
| 582 | Domestic Transaction | Этот Chargeback возникает, когда внутренняя обработанная транзакция была рассчитана через International Interchange. Этот Chargeback может быть отменён при предоставлении документации или информации, которая, по вашему мнению, поможет отменить Chargeback, либо доказательства того, что был выдан кредит. |
| 583 | Paid By Other Means | Этот Chargeback возникает, когда держатель карты оплатил транзакцию альтернативным способом. Его можно отменить, предоставив подписанный слип с проведённой или импринтированной картой либо доказательство оформления кредита. |
| A01 | Charge Amount Exceeds Authorization Amount | Нет дополнительной информации. |
| A02 | No Valid Authorization | Нет дополнительной информации. |
| A08 | Authorization Approval Expired | Нет дополнительной информации. |
| C02 | Credit Not Processed | Нет дополнительной информации. |
| C04 | Goods/Services Returned or Refused | Нет дополнительной информации. |
| C05 | Goods/Services Canceled | Нет дополнительной информации. |
| C08 | Goods/Services Not Received or Only Partially Received | Нет дополнительной информации. |
| C14 | Paid by Other Means | Нет дополнительной информации. |
| C18 | No Show or CARDeposit Canceled | Нет дополнительной информации. |
| C28 | Canceled Recurring Billing | Нет дополнительной информации. |
| C31 | Goods/Services Not As Described | Нет дополнительной информации. |
| C32 | Goods/Services Damaged or Defective | Нет дополнительной информации. |
| F10 | Missing Imprint | Нет дополнительной информации. |
| F14 | Missing Signature | Нет дополнительной информации. |
| F24 | No Card Member Authorization | Нет дополнительной информации. |
| F29 | Card Not Present | Нет дополнительной информации. |
| F30 | EMV Counterfeit | Нет дополнительной информации. |
| F31 | EMV Lost/Stolen/Non - Received | Нет дополнительной информации. |
| FR2 | Мошенничество Full Recourse Program | Нет дополнительной информации. |
| FR4 | Immediate Chargeback Program | Нет дополнительной информации. |
| FR6 | Partial Immediate Chargeback Program | Нет дополнительной информации. |
| M01 | Chargeback Authorization | Нет дополнительной информации. |
| M10 | Vehicle Rental - Capital Damages | Нет дополнительной информации. |
| M49 | Vehicle Rental - Theft or Loss of Use | Нет дополнительной информации. |
| P01 | Unassigned Card Number | Нет дополнительной информации. |
| P03 | Credit Processed as Charge | Нет дополнительной информации. |
| P04 | Charge Processed as Credit | Нет дополнительной информации. |
| P05 | Incorrect Charge Amount | Нет дополнительной информации. |
| P07 | Late Submission | Нет дополнительной информации. |
| P08 | Duplicate Charge | Нет дополнительной информации. |
| P22 | Non-Matching Card Number | Нет дополнительной информации. |
| P23 | Currency Discrepancy | Нет дополнительной информации. |
| R03 | Insufficient Reply | Нет дополнительной информации. |
| R13 | No Reply | Нет дополнительной информации. |
| 6321 | Нет авторизации или участия | Chargeback, инициированный, когда держатель карты заявляет, что на дату транзакции владел действительной картой и не разрешал или не участвовал в транзакции, обработанной торговцем. |
| 6323 | Transaction Information Document (TID) | Представляет ситуацию, когда держатель карты запрашивает у торговца документ с информацией о транзакции (TID), необходимый для личной отчётности о расходах и других целей. |
| 6341 | Расследование мошенничества по Описание: the bank or issuer | Спор, инициированный в результате расследования мошенничества банком или эмитентом. |
| G001 | Recall/Customer Dispute | Recall/Customer Dispute. |

#### Retrieval Request Reasons

| Код | Описание |
|-------|----------------------------------------------------------------------------------------------------------------------------------------------|
| 3 | Кредит не получен за билеты/ваучеры |
| 4 | Request Reshipment of Tickets Not Received |
| 7 | Счёт был выставлен в рассрочку — кредит к оплате |
| 9 | Customer Requests Return Instructions/Pickup |
| 10 | Partial Credit Received – Remaining Credit Due |
| 11 | Customers Requests Waiving Cancellation Fee – Credit Due |
| 12 | Charged Billed Twice in Error |
| 15 | Запрашивает кредит за комиссию за обмен |
| 16 | Запрашивает кредит за повреждённый товар |
| 18 | Запрашивает кредит за завышенную сумму |
| 20 | Утверждает, что услуга отменена — запрашивает кредит и прекращение будущих выставлений счетов |
| 21 | Утверждает, что услуга отменена — выдайте кредит или предоставьте политику отмены и прекратите выставление счетов |
| 22 | Утверждает, что членство отменено — запрашивает кредит и прекращение будущих выставлений счетов |
| 24 | Damaged Merchandise, Requests Return |
| 27 | Order Canceled – Issue Credit or Provide Cancellation Policy/Proof of Delivery |
| 28 | Членство отменено письменно — выдайте кредит/предоставьте подписанную политику отмены и прекратите выставление счетов |
| 29 | Членство истекло — выдайте кредит или предоставьте подписанный договор с политикой продления/датой истечения |
| 30 | Defective Merchandise – Credit Requested |
| 31 | Депозит за неприобретённый автомобиль — выдайте кредит или предоставьте подписанное соглашение |
| 33 | Держатель карты не знает о списаниях — предоставьте подтверждение и детализацию или выдайте кредит |
| 40 | Service / Membership Cancelled – Credit Requested or Proof of Usage |
| 41 | Невозможно связаться/отменить — прекратить списания |
| 42 | Клиент утверждает альтернативное соглашение о выставлении счёта — запрашивает кредит и прекращение будущих выставлений счетов |
| 43 | Request to Cancel Service – Contact Customer Directly |
| 44 | Запрашивает отмену услуги — предоставьте инструкции/разрешение на отмену |
| 45 | Запрашивает замену повреждённого товара |
| 48 | Запрашивает замену повреждённого товара |
| 49 | Депозит за неарендованный автомобиль — выдайте кредит или предоставьте подписанное соглашение |
| 59 | Requests Repair of Damaged Merchandise |
| 60 | Requests Repair of Defective Merchandise |
| 61 | Кредит должен был быть списанием — выставить счёт клиенту |
| 62 | Списание должно было быть кредитом — выдать полный кредит |
| 63 | Dissatisfied w/ Good/Service – Credit Requested |
| 70 | Dissatisfied w/ Repair Work on Vehicle – Credit Requested |
| 71 | Запрашивает кредит за ущерб личному имуществу (услуги переезда) |
| 72 | Держатель карты не знает о выставлении счёта, и на нём неверная подпись |
| 73 | Бронирование не гарантировано, подлежало отмене — запрошен кредит |
| 76 | Отменённая услуга — выдайте кредит или предоставьте копию соглашения и прекратите будущие выставления счетов |
| 77 | Request to Return Merchandise – Provide Return Instructions |
| 78 | Неверный номер карты — укажите правильный номер, чтобы избежать Chargeback |
| 79 | Неверный номер карты — укажите правильный номер, чтобы избежать Chargeback |
| 80 | Отменённый таймшер — запрошен кредит или предоставьте копию подписанного соглашения |
| 82 | Клиент не знает о кредите на свой счёт |
| 83 | Referenced Customer Deceased |
| 86 | Прекратить выставление счетов для этой неактивной учётной записи |
| 87 | Выдать кредит и прекратить выставление счетов неактивной учётной записи |
| 89 | Альтернативные соглашения о выставлении счетов — запрошен кредит или предоставьте подтверждающую документацию |
| 90 | Членство/услуга оплачены полностью — запрошен кредит и прекращение будущих выставлений счетов |
| 91 | Отмена выполнена в допустимый срок — запрошен кредит |
| 93 | Cardholder Does Not Recognize Charges |
| 94 | Cardholder Does Not Recognize Charges |
| 95 | Отменённая услуга — запрошен кредит или предоставьте подписанное подтверждение оказания услуг |
| 97 | Клиент запрашивает кредит за несанкционированные списания |
| 99 | Class/Course Cancelled – Credit Requested |
| 107 | Учреждение больше не работает — запрошен кредит и прекращение будущих выставлений счетов |
| 110 | Вызовы, связанные со списаниями, подключены к неверному номеру |
| 117 | Связанный со списаниями вызов был отсечён |
| 119 | Держатель карты не знает о выставлении счёта CARDeposit — запрашивает кредит |
| 120 | Запрашивает кредит за завышенную сумму аренды автомобиля |
| 121 | Запрашивает кредит, поскольку арендованный автомобиль работал неправильно |
| 122 | Держатель карты не знает об аренде автомобиля — выдать кредит |
| 123 | Держатель карты не знает об аренде автомобиля — выдать кредит |
| 124 | Клиент запрашивает поддержку по списаниям |
| 125 | Держатель карты не знает об аренде автомобиля — выдать кредит |
| 127 | Cardholder Does Not Recognize Charges, Provide Documentation or Issue Credit |
| 128 | Держатель карты утверждает, что не авторизовал списания — предоставьте документацию или выдайте кредит |
| 129 | Cardholder Does Not Recognize Charges, Provide Documentation or Issue Credit |
| 130 | Запрашивает кредит за депозит, не вычтенный из счёта за аренду |
| 131 | Списание должно было быть выставлено непосредственно страховой компании |
| 132 | Клиенту дважды выставлен счёт с разных адресов бизнеса |
| 133 | Двойное списание за ту же покупку |
| 134 | Клиент утверждает, что часть списания была депозитом |
| 136 | Клиент утверждает, что списание было за депозит |
| 141 | Клиент утверждает, что списание было депозитом за возвращённый автомобиль |
| 143 | Клиент утверждает, что заказанные цветы не получены |
| 146 | Спорный товар возвращён, но вместо кредита обработано второе списание |
| 147 | Customer Claims Billing Paid by Insurance Company |
| 150 | Returned Damaged Merchandise – Provide Documentation or Issue Credit |
| 151 | Вернул повреждённый товар и запрашивает замену или кредит |
| 152 | Received & Returned Incorrect Merchandise, Provide Documentation or Issue Credit |
| 153 | Получен и возвращён неправильный товар, запрашивается замена или кредит |
| 154 | Cancelled Order – Provide Documentation or Issue Credit |
| 155 | Товар не получен — предоставьте документацию или выдайте кредит |
| 156 | Товар не получен — выдайте кредит и повторно выставьте счёт при доставке |
| 157 | Товар возвращён, но замена не отправлена — предоставьте документацию или выдайте кредит |
| 158 | Merchandise Returned, Provide Documentation or Issue Credit |
| 159 | Клиент запрашивает подписанное подтверждение и детализацию списаний |
| 160 | Билеты/ваучеры не заказаны — предоставьте документацию или выдайте кредит |
| 161 | Tickets/Vouchers Returned – Provide Documentation or Issue Credit |
| 162 | Tickets/Vouchers Returned – Provide Documentation or Issue Credit |
| 163 | Tickets/Vouchers Not Received – Provide Documentation or Issue Credit |
| 164 | Билеты/ваучеры не использованы и утеряны или украдены — предоставьте документацию или выдайте кредит |
| 165 | Tickets/Vouchers Lost or Stolen – Provide Documentation or Issue Credit |
| 166 | Запрашивает кредит за платёж, совершённый непосредственно торговой точке, |
| 167 | Reservation Confirmed on Incorrect Date – Provide Documentation or Issue Credit |
| 168 | Reservation Confirmed in Incorrect Location – Provide Documentation or Issue Credit |
| 169 | Incorrect Conversion Rate Used – Provide Documentation or Issue Credit |
| 170 | Cancelled Reservation – Provide Documentation or Issue Credit |
| 171 | Assured Reservation Not Honored – Provide Documentation or Issue Credit |
| 173 | Запрашивает кредит за дублирующее выставление счёта |
| 174 | Клиент запрашивает подписанное подтверждение и детализацию списаний |
| 175 | Клиент запрашивает кредит за списание |
| 176 | Держатель карты не распознаёт указанные списания |
| 177 | Cardholder Claims Charge Unauthorized |
| 178 | No Merchandise Ordered or Delivered – Provide Documentation or Issue Credit |
| 179 | Держатель карты не распознаёт списание за бронирование |
| 180 | Держатель карты не распознаёт списание за проживание в торговой точке. |
| 181 | No Knowledge of Referenced No Show Charge |
| 182 | Держатель карты оспаривает списания за ущерб в торговой точке |
| 183 | Держатель карты не распознаёт списания от торговой точки |
| 184 | Списания, определённые как выдача наличных, нельзя выставлять через Am Ex |
| 185 | Куплено, но доставка отклонена — предоставьте документацию или выдайте кредит |
| 186 | Неправильный товар — выдать кредит и предоставить инструкции по возврату |
| 187 | Запрашивает замену неправильного товара |
| 188 | Держатель карты не знает о списании, запрашивает кредит |
| 189 | No Subscription Issues Received – Provide Documentation or Issue Credit |
| 190 | Проблем с подпиской не получено — запрос на начало доставки |
| 191 | Товар не заказан или не получен — предоставьте документацию или выдайте кредит |
| 192 | Клиент запрашивает подписанное подтверждение и детализацию списаний |
| 193 | Списания, произведённые в торговой точке, являются мошенническими |
| 194 | Списания, произведённые в торговой точке, являются мошенническими — полные данные магнитной полосы не получены |
| 195 | Клиент не распознаёт списание и запрашивает подписанное подтверждение и детализацию списаний |
| 196 | Cardholder Does Not Recognize Charges, Provide Documentation or Issue Credit |
| 197 | Подписка отменена, но счёт выставлен — предоставьте документацию или выдайте кредит |
| 198 | Subscription Never Ordered – Provide Documentation or Issue Credit |
| 199 | С держателя карты списано и за проживание, и за незаезд — запрашивает кредит за незаезд |
| 200 | Отправить отчёт о претензии и запросить подписанное подтверждение и детализацию списаний |
| 608 | Клиент не оспаривает, но запрашивает подписанное подтверждение и детализацию списаний |
| 610 | Списание должно было быть третьему лицу — предоставьте документацию или выдайте кредит |
| 620 | С клиента списана недостаточная сумма |
| 656 | No Knowledge of Referenced No-Show/Assured Reservation Charge |
| 657 | Запрашивает кредит за завышенную сумму |
| 658 | Claims Received Multiple Billings in Error |
| 671 | Счёт был выставлен за бесплатное проживание |
| 672 | Клиент не распознаёт отложенные списания — предоставьте документацию или выдайте кредит |
| 673 | Выставлен счёт за гарантированное бронирование и фактическое проживание — кредит за гарантированное бронирование |
| 674 | Invalid or Incorrect Acct Number – Customer Doesn’t Recognize Charge |
| 675 | Счёт CARDeposit должен был быть применён к проживанию — предоставьте документацию или выдайте кредит |
| 676 | Cancelled CARDeposit Reservation – Provide Documentation or Issue Credit |
| 678 | Второй запрос кредита по выставленному счёту |
| 679 | Двойное списание за CARDeposit |
| 680 | Customer Claims Overcharge – Provide Documentation or Issue Credit |
| 681 | Гарантированное бронирование отменено в соответствии с правилами — предоставьте документацию или выдайте кредит |
| 682 | Cancellation of Membership – Provide Documentation or Issue Credit |
| 683 | Списание относится к другому лицу из-за замены карт Am Ex |
| 684 | Списание оплачено наличными — предоставьте документацию или выдайте кредит |
| 685 | Customer Requests Copy of Signed Receipt |
| 687 | Does Not Recognize Charge, Provide Documentation or Issue Credit |
| 688 | Списание должно быть оплачено компанией клиента — выдать кредит и повторно выставить счёт правильной стороне |
| 689 | Бронирование сделано и оплачено третьим лицом — предоставьте документацию или выдайте кредит |
| 690 | Не оспаривает списания, но запрашивает подтверждение и детализацию |
| 691 | Не оспаривает списания, но запрашивает подписанное подтверждение и детализацию |
| 692 | Клиенту следовало выставить счёт только за одну ночь — предоставьте документацию или выдайте кредит |
| 693 | Клиент оспаривает списание за ущерб — предоставьте документацию или выдайте кредит |
| 694 | Dissatisfactory Accommodations, Requests Credit |
| 695 | Платёж совершён непосредственно торговой точке — предоставьте документацию или выдайте кредит |
| 696 | Car Rental Cancelled – Provide Documentation or Issue Credit |
| 697 | Утверждает двойное списание за тот же арендованный автомобиль — предоставьте документацию или выдайте кредит |
| 698 | Клиент запрашивает поддержку по арендным списаниям |
| 699 | Клиенту следовало выставить счёт только за одну ночь — предоставьте документацию или выдайте кредит |
| 700 | Service Cancelled – Provide Documentation or Issue Credit |
| 701 | Customer Requests Cancellation of Service- Discontinue Future Billings |
| 702 | Customer Received Duplicate Credits |
| 703 | Ремонт/замена должны покрываться гарантией — предоставьте документацию или выдайте кредит |
| 704 | Событие отменено — кредит за неиспользованные билеты |
| 705 | Tickets Cancelled – Provide Documentation or Issue Credit |
| 706 | Customer Refused Delivery – Provide Documentation or Issue Credit |
| 707 | Вызов, связанный со счётом, имел низкое качество передачи |
| 708 | Вызов, связанный со счётом, не был завершён/подключён |
| 712 | Services Not Rendered |
| 713 | Duplicate Billing – Provide Documentation or Issue Credit |
| 722 | Клиент не распознаёт списание за проживание — предоставьте документацию или выдайте кредит |
| 723 | Платёж совершён непосредственно торговой точке — предоставьте документацию или выдайте кредит |
| 730 | Выдать кредит за списание и прекратить все будущие выставления счетов |
| 792 | Клиент не знает о списании — кредит и прекращение будущих выставлений счетов |
| 800 | Customer No Longer Disputes Charge (Positive Signal) |
| R040 | Услуга/членство отменены — выдайте кредит и прекратите будущие выставления счетов |
| R041 | Клиент не может связаться и отменить услугу — прекратите будущие выставления счетов |
| R042 | Клиент заключил альтернативные соглашения о выставлении счетов — предоставьте документацию или выдайте кредит |
| R043 | Customer Requests Cancellation of Service – Contact Customer Directly |
| R044 | Customer Requests Cancellation Instructions/Authorization- Contact Directly |
| RM05 | Держатель карты не согласен с выставленной суммой |
| RM21 | Держатель карты не распознаёт |
| RM23 | Cardholder Requests Copy |
| RM41 | Требуется для юридического анализа/анализа мошенничества |
| RM42 | Требуется для chargeback |
| S06 | Automatic Closure of Inquiry |
| V28 | Cardholder Requests Copy w/ Signature |
| V29 | Запрос сведений о списании или договора аренды |
| V30 | Держатель карты запрашивает копию |
| V31 | Требуется для chargeback |
| V32 | Оригинал утерян при пересылке |
| V33 | Требуется для юридического анализа/анализа мошенничества |
| V34 | Повторный запрос копии |
| V35 | Письменное требование держателя карты |
| V36 | Юридический процесс требует оригинал |
| V37 | Предыдущая копия нечитаема |
| V38 | Требуется для анализа бумаги/почерка |
| V39 | Повторный запрос оригинала |
| V40 | Требуется для arbitration |
| V78 | Держатель карты запрашивает копию с подписью |
| V79 | Запрос сведений о списании или договора аренды |
| V80 | Держатель карты запрашивает копию |
| V81 | Требуется для chargeback |
| V82 | Оригинал утерян при пересылке |
| V83 | Требуется для юридического анализа/анализа мошенничества |
| V84 | Повторный запрос копии |
| V85 | Письменное требование держателя карты |
| V86 | Юридический процесс требует оригинал |
| V87 | Предыдущая копия нечитаема |
| V88 | Требуется для анализа бумаги/почерка |
| V89 | Повторный запрос оригинала |
| V90 | Требуется для arbitration |
| 6305 | Держатель карты не согласен с выставленной суммой |
| 6321 | Держатель карты не распознаёт транзакцию |
| 6322 | Transaction Certificate (ICC Transaction) |
| 6323 | Документ с информацией о транзакции (Transaction Information Document, TID), необходимый для учёта расходов в личных записях держателя карты |
| 6341 | Описание: Мошенничество investigation |
| 6342 | Документация по потенциальному Chargeback или соответствию |
| 6343 | Запрос аудита подтверждения в реальном времени (IIAS) |

### Фильтры транзакций

#### Вводная информация

Фильтры транзакций в Системе предназначены для отклонения определенных транзакций по заданным причинам. Например, присутствуют фильтры для защиты от мошенничества, или для проверки наличия карты или страны эмитента в разрешенном списке.
 
 
Фильтры транзакций управляются на уровне проекта системы. Чтобы настроить фильтры для проекта, перейдите к Фильтрам защиты от мошенничества в меню проекта.
 
 

 
Иконка слева от фильтра сообщает его статус. Клик по иконке включает или выключает фильтр.
 
Детали фильтра доступны при нажатии на кнопку Configure.
 
 
Число (или несколько чисел) в «**Коды ошибок**» называется кодом отклонения или кодом причины отклонения транзакции. Этот код будет отображаться на экране Заказы, если транзакция получит статус Отфильтровано.
 
На некоторых фильтрах доступен Скоринг. Скоринг позволяет более гибко настраивать критерии фильтрации транзакции. Количество очков риска для каждого фильтра может быть установлено в диапазоне от 0 до 100. Транзакция проверяется включёнными фильтрами и получает соответствующие очки риска при срабатывании фильтра. При достижении общего количества в 100 очков риска транзакция получает статус Filtered. Если транзакция не набирает 100 риск очков, она проходит проверку и переходит на следующую стадию процессинга.
 
 
Фильтры также доступны на уровне конечной точки системы. Настройки фильтра на уровне конечной точки переопределяют настройки на уровне проекта.
 
 
Некоторые параметры фильтра можно добавить только на экране Информация о заказе.
 

#### Фильтры защиты от мошенничества

| Rule название | Rule описание |
|----------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Описание: Technical filters | Технические фильтры сравнивают два или более запросов торговца для выявления и предотвращения оплаты дублирующихся счетов. Все фильтры этой категории могут применяться к запросам в короткий период времени с момента получения транзакции нашей системой. |
| Описание: Referral filters | Проверки рефералов позволяют создавать списки блокировки и доверия для хороших и плохих атрибутов транзакций, влияя на оценку риска на основе известной тенденции по многим различным атрибутам клиента. |
| Veloгород filters | Проверки скорости позволяют торговцам устанавливать пороги частоты для различных атрибутов клиента, контролируя частоту попыток транзакций клиента. Они предназначены для выявления высокоскоростных мошеннических атак. Правила скорости рассчитываются на уровне учётной записи торговца. Если у торговца несколько учётных записей под его учётной записью компании, счётчики скорости не суммируются по всей компании без дополнительной настройки. Например, одна кредитная карта используется для 2 транзакций в учётной записи A и для 3 транзакций в учётной записи B. Правило скорости учитывает 2 в A и 3 в B. Прекращение действий покупателем после перенаправления на метод оплаты или 3-D Secure считается попыткой и добавляется к счётчику правил скорости как отклонённая транзакция. Однако не все такие прерванные попытки можно найти в списке платежей; это зависит от конкретной интеграции с PSP. |
| Фильтры согласованности | Проверки согласованности сравнивают между собой два или более атрибута транзакции. |
| Пользовательские бизнес-проверки | Дополнительные проверки и профили рисков, определённые менеджером. |

#### Описание: Technical filters

##### Обнаружение и предотвращение повторных запросов

Торговец запрос with the same запрос parameters will be filtered out

Оценка: Нет

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|-----------------------------------|----------------------------------------------------------------------------------------------------------|------------------------------------------------|
| Интервал проверки в секундах | Максимальный интервал в секундах для проверки повторного запроса | Тип: int Default: 15 |
| Пропустить отклонённые транзакции | Y — пропускать сессии со статусом Filtered или Declined, Описание: N - otherwise | Type: Enum Default: No |

**Коды ошибок**

| # | Код | Название |
|-------|-------|------------------|
| 10001 | 1007 | Повторный запрос |

##### Выявление и предотвращение дублирующихся счетов

Запрос торговца с тем же идентификатором заказа клиента будет отфильтрован

Оценка: Нет

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|------------------------------|------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------|
| Интервал проверки в секундах | Максимальный интервал в секундах для проверки дублирующихся счетов; установите 0 для бесконечности | Тип: int Default: 30 |
| Skip error транзакцияs | Y — пропускать сессии со статусом Error, Failed, Limited или Rejected, Описание: N - otherwise | Type: Enum Default: Yes |
| Skip unapproved транзакцияs | Y — пропускать сессии со статусом Filtered, Declined или Cancelled, Описание: N - otherwise | Type: Enum Default: Yes |

**Коды ошибок**

| # | Код | Название |
|-------|-------|-----------------------------|
| 10048 | 1058 | Описание: Duplicate invoice |

##### Detecting and preventing accidental duplicate кредитная карта номер использование

Клиент запрос for the current Торговец with the same кредитная карта номер will be filtered out

Оценка: Нет

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|-----------------------------------|-------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------|
| Интервал проверки в секундах | max interval in seconds to check duplicate кредитная карта номер использование, values more then 60 seconds are ignored | Тип: int Default: 30 |
| Пропустить отклонённые транзакции | Y — пропускать сессии со статусом Filtered или Declined, Описание: N - otherwise | Type: Enum Default: Yes |

**Коды ошибок**

| # | Код | Название |
|-------|-------|-------------------------------|
| 10087 | 1097 | Повторяющаяся кредитная карта |

##### Частота отклонённых транзакций по номеру кредитной карты и счёту

This check fires when the number of declined transactions associated with exact Credit Card number and Invoice number exceeds the configured thresholds. The time threshold is a moving window calculated backwards from the moment of the transaction, all transactions dates are truncated to minutes during window calculation. The risk fires on the transaction after the set threshold. So, if you set a threshold of 10 declines in 60 minutes, it fires on the 11th decline in 60 minutes. Counts transactions for Account verification, Sale, Preauth or Transfer transactions in the Filtered or Declined status. The limit is calculated for the current Endpoint if parameter “for all торговец проектs” set to N, or for all Merchant Projects if parameter set to Y.

Оценка: Нет

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|------------------------------------|----------------------------------------------------------------------------------------------------------------------------|------------------------------------------------|
| Интервал проверки в минутах | Временной интервал в минутах для расчёта количества отклонений; значения более 24 часов игнорируются | Тип: int Default: 30 |
| For all Торговец проектs | Y - to check transactions for all projects of the current Merchant, otherwise check transactions for current endpoint only | Type: Enum Default: No |
| Максимальное количество отклонений | maximum номер of declined or filtered транзакцияs allowed | Тип: int Default: 2 |

**Коды ошибок**

| # | Код | Название |
|-------|-------|------------------------------------------------------------------|
| 10009 | 1013 | Too many declines for the same кредитная карта номер and invoice |

##### Предотвращение повторных операций списания для того же клиента

Эта проверка срабатывает, когда в любой момент времени у одного Клиента имеется более одной транзакции с нефинальным статусом. Риск срабатывает на второй транзакции, если первая всё ещё имеет нефинальный статус. Фильтр работает только для Проектов, добавленных в CMS. Учитываются обратные транзакции, Payout или Transfer.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|--------------------------|-----------------------------------------------------------------------------------------------------|-------------------------------------------------|
| For all торговец проектs | Да: для всех проектов торговца Нет: только для текущего проекта | Type: Enum Default: Yes |
| Описание: Skip reversals | Да: транзакции Reversal не учитываются Нет: транзакции Reversal учитываются | Type: Enum Default: Yes |

**Коды ошибок**

| # | Код | Название |
|-------|-------|------------------------------|
| 10205 | 1215 | Повторный запрос на списание |

##### Предотвращение новых транзакций с картой источника, для которой есть предыдущая попытка с неизвестным статусом

Эта проверка срабатывает, когда клиент пытается выполнить новую карточную транзакцию, в то время как последняя транзакция с той же картой источника всё ещё имеет нефинальный неизвестный статус в течение прошлых N минут (максимум 1 час). Учитываются транзакции Sale, Preauth или Transfer с неизвестным статусом.

Оценка: Нет

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|-----------------------------|--------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------|
| Интервал проверки в минутах | Максимальный интервал в минутах для проверки существующей неизвестной операции | Тип: Int Default: 60 |
| For all торговец проектs | Y — проверять транзакции по всем проектам текущего торговца N - check transactions for current endpoint only | Type: Enum Default: No |

**Коды ошибок**

| # | Код | Название |
|-------|-------|---------------------------------------------------------|
| 10259 | 1269 | Клиент карта has previous транзакцияs in unknown статус |

##### Detecting and preventing accidental duplicate email usage

Customer request for the current merchant with the same customer email will be filtered out

Оценка: Нет

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|-----------------------------------|-------------------------------------------------------------------------------------------------|------------------------------------------------|
| Интервал проверки в секундах | max interval in seconds to check duplicate email usage, values more then 60 seconds are ignored | Тип: Int Default: 30 |
| Пропустить отклонённые транзакции | Y - skip sessions in Declined status Описание: N - otherwise | Type: Enum Default: No |

**Коды ошибок**

| # | Код | Название |
|-------|-------|------------------------|
| 10273 | 1284 | Duplicated transaction |

#### Описание: Referral filters

When transaction is filtered by merchant blacklist, the API response message will have the following structure: “Transaction declined - please contact support with the following code: {error code}:{error #}”
This message is relevant only for merchant black lists and can be displayed to the customer instead of actual filtering reason.

##### Проверка чёрного списка (BL)

Позволяет заносить в чёрный список указанных клиентов по различным критериям, таким как электронная почта, IP-адрес и т. д.

Оценка: Нет

Включено по умолчанию: Y

**Parameters**

| Название | Описание | Значение |
|--------------------------|-------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------|
| For all торговец проектs | Y - to check чёрный списокs for all projects of the current Торговец, otherwise check чёрный списокs for current project only | Type: Enum Default: Yes |

**Коды ошибок**

| # | Код | Название |
|-------|-------|--------------------------------------------------------------------------------|
| 10002 | 1022 | Credit card blacklisted |
| 10027 | 1037 | Страна эмитента в чёрном спискеs |
| 10028 | 1038 | Страна in blacklist |
| 10033 | 1043 | Email server blacklisted |
| 10068 | 1078 | Email blacklisted |
| 10113 | 1123 | Billing country blacklisted |
| 10123 | 1133 | Страна эмитента находится в чёрном списке для выбранного метода оплаты |
| 10094 | 1104 | Credit card blacklisted |
| 10029 | 1039 | Credit card issuer blacklisted |
| 10067 | 1077 | Destination credit card blacklisted |
| 10095 | 1105 | Destination credit card blacklisted |
| 10125 | 1135 | Destination credit card issuer blacklisted |
| 10030 | 1040 | IP address blacklisted |
| 10096 | 1106 | IP address blacklisted |
| 10031 | 1041 | Email blacklisted |
| 10097 | 1107 | Email blacklisted |
| 10069 | 1079 | Destination blacklisted |
| 10098 | 1108 | Destination blacklisted |
| 10137 | 1147 | Страна платёжного адреса в чёрном списке для Торговца |
| 10138 | 1148 | IP-address страна в чёрном списке for Торговец |
| 10139 | 1149 | Электронная почта клиента в чёрном списке для Торговца |
| 10140 | 1150 | Клиент fingerprint в чёрном списке for Торговец |
| 10141 | 1151 | Клиент ip-address в чёрном списке for Торговец |
| 10142 | 1152 | Назначение платежа клиента в чёрном списке для Торговца |
| 10143 | 1153 | Destination карта bin в чёрном списке for Торговец |
| 10144 | 1154 | Destination карта страна в чёрном списке for Торговец |
| 10145 | 1155 | Destination карта номер в чёрном списке for Торговец |
| 10146 | 1156 | Destination карта type в чёрном списке for Торговец |
| 10147 | 1157 | Домен электронной почты в чёрном списке для Торговца |
| 10148 | 1158 | BIN исходной карты в чёрном списке для Торговца |
| 10149 | 1159 | Source карта страна в чёрном списке for Торговец |
| 10150 | 1160 | Source карта номер в чёрном списке for Торговец |
| 10151 | 1161 | Тип исходной карты в чёрном списке для Торговца |
| 10156 | | Электронная почта клиента в чёрном списке для менеджера |
| 10157 | | Отпечаток клиента в чёрном списке для менеджера |
| 10158 | | IP-адрес клиента в чёрном списке для менеджера |
| 10159 | | Назначение клиента в чёрном списке для менеджера |
| 10160 | | Номер карты получателя в чёрном списке для менеджера |
| 10161 | | Домен электронной почты в чёрном списке для менеджера |
| 10162 | | Номер карты источника в чёрном списке для менеджера |
| 10169 | | Электронная почта клиента + номер карты источника в чёрном списке для торговца |
| 10194 | | Маска карты источника в чёрном списке для торговца |
| 10195 | | Маска карты получателя в чёрном списке для торговца |
| 10196 | | Маска карты источника в чёрном списке для менеджера |
| 10197 | | Маска карты получателя в чёрном списке для менеджера |
| 10271 | | Customer phone number blacklisted for manager |
| 10272 | | Customer phone number blacklisted for merchant |
| 15027 | | Customer e-mail blacklisted for gate |
| 15028 | | Клиент fingerprint blacklisted for gate |
| 15029 | | Customer ip-address blacklisted for gate |
| 15030 | | Customer purpose blacklisted for gate |
| 15031 | | Destination card number blacklisted for gate |
| 15032 | | E-mail domain blacklisted for gate |
| 15033 | | Source card number blacklisted for gate |
| 15038 | | Destination card bin blacklisted for processor |
| 15039 | | Destination card country blacklisted for processor |
| 15040 | | Source card bin blacklisted for processor |
| 15041 | | Source card country blacklisted for processor |
| 15062 | | Billing country blacklisted for gate |
| 15063 | | IP-address country blacklisted for gate |
| 15064 | | Destination card country blacklisted for gate |
| 15065 | | Source card country blacklisted for gate |
| 15111 | | Source card mask blacklisted for gate |
| 15112 | | Destination card mask blacklisted for gate |
| 15182 | | Destination card mask extended blacklisted for gate |
| 15183 | | Source card mask extended blacklisted for gate |
| 15184 | | Site URL check failed: blacklisted by processor |
| 15191 | | Source card mask and expiration date blacklisted for gate |
| 18040 | | Source card number blacklisted for processor |
| 18041 | | Destination card number blacklisted for processor |
| 18044 | | Customer purpose blacklisted for processor |
| 18045 | | Customer ip-address blacklisted for processor |
| 18046 | | Customer e-mail blacklisted for processor |
| 18047 | | Клиент fingerprint blacklisted for processor |
| 18050 | | Source card mask blacklisted for processor |
| 18051 | | Destination card mask blacklisted for processor |
| 19104 | | Billing address country is in processor black list |

##### Проверка предопределённых списков лояльности

Разрешает обработку только для доверенных клиентов. У разных Merchant разные определения доверенного клиента; фильтр разрешает обработку только для клиентов, чьи e-mail, исходная/целевая карта или назначение присутствуют в соответствующих списках лояльности. Транзакции клиентов, отсутствующих во всех списках лояльности, будут отфильтрованы. Фильтр применяется только для выбранных стран; для остальных стран проверка игнорируется.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|-----------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------|
| Идентификатор страны BIN | \* | Type: List Default: \* |
| For all торговец проектs | Y — для проверки электронной почты клиента в античёрных списках электронной почты по всем проектам текущего торговца; в противном случае проверяется список электронной почты только текущего проекта | Type: Enum Default: Yes |
| Игнорировать проверку типа счёта | \* | Тип: String Default: \* |
| Игнорировать проверку списка идентификаторов банков | \* | Тип: String Default: \* |
| IP страна identifier | Применять фильтр только к выбранным странам; страна определяется по IP-адресу клиента | Type: List Default: \* |

**Коды ошибок**

| # | Код | Название |
|-------|-------|---------------------------------------------------------------------------------------------|
| 10046 | | Disloyal customer |
| 10152 | 1162 | Сбой проверки электронной почты лояльного клиента торговца |
| 10153 | 1163 | Сбой проверки назначения лояльного клиента торговца |
| 10154 | 1164 | Сбой проверки номера карты получателя лояльного клиента торговца |
| 10155 | 1165 | Сбой проверки номера карты источника лояльного клиента торговца |
| 10163 | 1173 | Сбой проверки электронной почты лояльного клиента менеджера |
| 10164 | 1174 | Сбой проверки назначения лояльного клиента менеджера |
| 10165 | 1175 | Сбой проверки номера карты получателя лояльного клиента менеджера |
| 10166 | 1176 | Сбой проверки номера карты источника лояльного клиента менеджера |
| 10168 | 1178 | Сбой проверки электронной почты клиента + номера карты источника лояльного клиента торговца |
| 10183 | 1193 | Сбой проверки электронной почты клиента + номера карты источника лояльного клиента торговца |
| 10184 | 1194 | Сбой проверки телефона клиента + номера карты источника лояльного клиента торговца |
| 10185 | 1195 | Сбой проверки назначения клиента + номера карты источника лояльного клиента торговца |
| 10186 | 1196 | Сбой проверки отпечатка клиента + номера карты источника лояльного клиента торговца |
| 10193 | 1203 | Транзакция отклонена — обратитесь в службу поддержки со следующим кодом: 1203:10193 |
| 10260 | 1270 | Сбой проверки маски карты получателя лояльного клиента менеджера |
| 10261 | 1271 | Сбой проверки маски карты источника лояльного клиента торговца |
| 10262 | 1272 | Сбой проверки маски карты получателя лояльного клиента торговца |
| 10263 | 1273 | Сбой проверки маски карты источника лояльного клиента менеджера |
| 15034 | | Gate loyal customer e-mail check failed |
| 15035 | | Gate loyal customer purpose check failed |
| 15036 | | Gate loyal destination card number check failed |
| 15037 | | Gate loyal source card number check failed |
| 15110 | | Gate loyal card number check failed |
| 15168 | | Gate loyal source card mask check failed |
| 15169 | | Gate loyal destination card mask check failed |
| 15177 | | Gate auto loyal customer email check failed |
| 15178 | | Gate loyal source card mask and expiration date check failed |
| 15179 | | Gate loyal source card mask and country billing check failed |
| 15180 | | Gate loyal source card mask extended check failed |
| 15181 | | Gate loyal destination card mask extended check failed |
| 18042 | | Processor loyal source card number check failed |
| 18043 | | Processor loyal destination card number check failed |
| 18110 | | Processor loyal source card mask check failed |
| 18111 | | Processor loyal destination card mask check failed |

##### Запретить недоверенные сети

Позволяет создавать списки блокировки на основе определённых диапазонов IP-адресов клиента. Торговцы могут отправлять диапазоны IP-адресов в формате IPv4 или IPv6 через загрузку CSV.

Оценка: Нет

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------|
| Клиент ip ranges | Описание: file format example: 192.168.0.0, 192.168.255.255 Диапазон IPv6: fd00:0000:0000:0000:0000:0000:0000:0000, fdff:ffff:ffff:ffff:ffff:ffff:ffff:ffff | Тип: File |

**Коды ошибок**

| # | Код | Название |
|-------|-------|-----------------------------|
| 10034 | 1044 | Описание: Untrusted network |

##### Проверка белого списка кредитных карт (WL)

Allows ignoring all other fraud filters for selected credit cards. Sometimes customer’s behavior can lead to the unfortunate situation where a shopper is completely unable to process transactions.
You can whitelist a customer’s credit card so they can successfully process their transaction. White list will be applied only before total transactions amount for the last month for this credit card will not reach the limit specified by filter parameters. White list could be specified for: the exact source card number by manager and merchant, the exact destination card number by merchant or the whole source card number issuer BIN range.

Оценка: Н/Д

Включено по умолчанию: Y

**Parameters**

| Название | Описание | Значение |
|-----------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------|
| For all торговец проектs | будет рассчитана текущая общая сумма транзакций за последний месяц для этого значения банковской карты: Y — для всех проектов, 3D — только для 3D-шлюзов, Non3D — только для нешлюзов 3D, N — только для текущего проекта текущего Торговца с конвертацией в валюту текущего проекта для сравнения со значением «up to amount». | Type: Enum Default: Yes |
| Subtract Cancel транзакцияs | \* | Type: Enum Default: Yes |
| Up to сумма | Максимальная общая сумма транзакций по этой кредитной карте за последний месяц, позволяющая добавить кредитную карту в белый список; при достижении этого лимита белый список будет проигнорирован. | Тип: Decimal Default: 99999999 |

##### Клиент fingerprint

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Значение |
|----------------------------------|----------------------------------------------------|
| Порог добавления в чёрный список | Тип: Decimal Default: 10.0 |
| Block транзакция threshold | Тип: Decimal Default: 3.5 |

**Коды ошибок**

| # | Код | Название |
|-------|-------|-------------------------------------------------------|
| 10035 | 1045 | Подозрительная активность, связанная с мошенничеством |
| 10039 | 1049 | Подозрительная активность, связанная с мошенничеством |

##### Проверить режим ввода считывателя

Если режим ввода считывателя отсутствует в разрешённом списке и этот список настроен, фильтр отклоняет транзакцию

Оценка: Нет

Включено по умолчанию: N

**Коды ошибок**

| # | Код | Название |
|-------|-------|--------------------------------------|
| 10088 | 1098 | Недопустимый режим считывания данных |

##### IP адрес Страна check

Этот список ссылок позволяет торговцу обрабатывать транзакции только для выбранных стран на основе страны IP-адреса клиента. Запросы с IP-адресов из «Merchant API IP address» игнорируют эту проверку.

Оценка: Нет

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|-------------------|----------------------------------------------------|------------|
| Страна identifier | Список идентификаторов стран, разделённых запятыми | Type: List |

**Коды ошибок**

| # | Код | Название |
|-------|-------|--------------------------|
| 10014 | 1024 | Страна not in trust list |

##### Issuer Страна check

Этот список рефералов позволяет торговцу обрабатывать транзакции только для выбранных стран на основе страны выпуска карты. Запросы с IP-адресов, указанных в «Merchant API IP address», игнорируют эту проверку. Проверка применяется к номерам карт источника и получателя.

Оценка: Нет

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|-------------------|----------------------------------------------------|------------|
| Страна identifier | Список идентификаторов стран, разделённых запятыми | Type: List |

**Коды ошибок**

| # | Код | Название |
|-------|-------|-------------------------------------------------|
| 10015 | 1025 | Страна эмитента отсутствует в списке доверенных |

##### Billing Страна check

Этот список рефералов позволяет торговцу обрабатывать транзакции только для выбранных стран на основе страны выставления счёта клиента. Запросы с IP-адресов, указанных в «Merchant API IP address», игнорируют эту проверку.

Оценка: Нет

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|-------------------|----------------------------------------------------|------------|
| Страна identifier | Список идентификаторов стран, разделённых запятыми | Type: List |

**Коды ошибок**

| # | Код | Название |
|-------|-------|----------------------------------------------------------|
| 10112 | 1122 | Страна платёжного адреса отсутствует в списке доверенных |

##### IP адрес Страна blacklist

Этот список рефералов позволяет торговцу создавать списки блокировки на основе страны IP-адреса клиента. Запросы с IP-адресов, указанных в «Merchant API IP address», игнорируют эту проверку.

Оценка: Нет

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|-------------------|----------------------------------------------------|------------|
| Страна identifier | Список идентификаторов стран, разделённых запятыми | Type: List |

**Коды ошибок**

| # | Код | Название |
|-------|-------|---------------------|
| 10028 | 1038 | Страна in blacklist |

##### Чёрный список стран эмитента

Этот список рефералов позволяет торговцу создавать списки блокировки на основе страны выпуска карты. Запросы с IP-адресов, указанных в «Merchant API IP address», игнорируют эту проверку. Проверка применяется к номерам карт источника и получателя.

Оценка: Нет

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|-------------------|----------------------------------------------------|------------|
| Страна identifier | Список идентификаторов стран, разделённых запятыми | Type: List |

**Коды ошибок**

| # | Код | Название |
|-------|-------|---------------------------------|
| 10027 | 1037 | Страна эмитента в чёрном списке |

##### Чёрный список стран платёжного адреса

Этот список рефералов позволяет торговцу создавать списки блокировки на основе страны выставления счёта клиента. Запросы с IP-адресов, указанных в «Merchant API IP address», игнорируют эту проверку.

Оценка: Нет

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|-------------------|----------------------------------------------------|------------|
| Страна identifier | Список идентификаторов стран, разделённых запятыми | Type: List |

**Коды ошибок**

| # | Код | Название |
|-------|-------|------------------------------------------|
| 10113 | 1123 | Страна платёжного адреса в чёрном списке |

##### Чёрный список стран эмитента по способу оплаты

Этот список рефералов позволяет торговцу создавать списки блокировки на основе страны выпуска карты для выбранного метода оплаты. Запросы с IP-адресов, указанных в «Merchant API IP address», игнорируют эту проверку. Проверка применяется к номерам карт источника и получателя.

Оценка: Н/Д

Включено по умолчанию: N

**Parameters**

| Название | Значение |
|------------|-----------------------------------------------|
| | Type: List Default: - |

**Коды ошибок**

| # | Код | Название |
|-------|-------|------------------------------------------------------------------------|
| 10123 | 1133 | Страна эмитента находится в чёрном списке для выбранного метода оплаты |

##### Транзакция сумма check

This check can be used to apply higher risk scores to транзакцияs based on the сумма транзакции.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Значение |
|------------------------------|---------------------------------------------------|
| Описание: Transaction amount | Тип: Decimal Default: 0.0 |

**Коды ошибок**

| # | Код | Название |
|-------|-------|----------------------------|
| 10032 | 1042 | Incorrect транзакция сумма |

##### Проверка типа исходной кредитной карты

This referral list allows the Торговец to process транзакцияs only for selected Source Кредитная карта types. Counts Sale and Transfer транзакцияs.

Оценка: Нет

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|----------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------|
| forbidden карта level типs | Список типов карт уровня карты, разделённых запятыми. Типичные типы карт: PREPAID, REWARDS, VIRTUAL, CASH, ATM, STANDARD, CLASSIC, GOLD, SIGNATURE, PLATINUM, ELECTRON, CORPORATE, BUSINESS, WORLD, DEBIT и варианты, такие как GOLD REWARDS, WORLD CORPORATE и т. д. | Тип: String Default: PREPAID, REWARD, CORPORATE, BUSINESS |

**Коды ошибок**

| # | Код | Название |
|-------|-------|-------------------------------|
| 10127 | 1137 | Неподдерживаемый тип продукта |

##### Проверка типа целевой кредитной карты

This referral list allows the Торговец to process транзакцияs only for selected Destination Кредитная карта types. Counts Sale and Transfer транзакцияs.

Оценка: Нет

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|----------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------|
| forbidden карта level типs | Список типов карт уровня карты, разделённых запятыми. Типичные типы карт: PREPAID, REWARDS, VIRTUAL, CASH, ATM, STANDARD, CLASSIC, GOLD, SIGNATURE, PLATINUM, ELECTRON, CORPORATE, BUSINESS, WORLD, DEBIT и варианты, такие как GOLD REWARDS, WORLD CORPORATE и т. д. | Тип: String Default: PREPAID, REWARD, CORPORATE, BUSINESS |

**Коды ошибок**

| # | Код | Название |
|-------|-------|------------------------------------------|
| 10129 | 1139 | Неподдерживаемый тип продукта получателя |

#### Фильтры согласованности

##### Описание: Check customer data

Если одно из стоп-слов содержится в имени, имени или фамилии держателя карты, либо эти данные соответствуют указанному регулярному выражению, либо данные клиента не прошли базовые правила проверки (при включённом флаге), фильтр отклоняет транзакцию.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Значение |
|--------------------------------------------|-------------------------------------------------|
| Применить базовые правила проверки | Type: Enum Default: Y |
| Проверить, равны ли имя и фамилия клиента | Type: Enum Default: N |
| Проверить, содержит ли имя клиента фамилию | Type: Enum Default: N |
| Проверить, содержит ли фамилия клиента имя | Type: Enum Default: N |
| Описание: Deny regexp | Тип: String Default: \* |
| Минимальная длина имени клиента | Тип: Int Default: 0 |
| Минимальная длина фамилии клиента | Тип: Int Default: 0 |
| Описание: Stop word list | Тип: String Default: \* |

##### Клиент IP-адрес Страна differs from Issuing Страна

Эта проверка риска срабатывает, когда страна IP-адреса клиента отличается от страны эмитента карты. Запросы с IP-адресов, указанных в «Merchant API IP address», игнорируют эту проверку. Если параметр «Применять для стран» пуст, фильтр потребует строгого соответствия страны клиента и страны эмитента для всех стран; иначе проверка принудит соответствие только для перечисленных стран. Например, если задать «Применять для стран» как US, проверка сработает для комбинаций US-any NonUS или any NonUS-US, но для any NonUS-any NonUS и US-US не сработает. Для транзакций card2card страна эмитента исходной карты должна совпадать со страной эмитента карты получателя; то есть эта проверка сработает для любой трансграничной транзакции.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------|
| Применять для стран | Если текущие параметры не пусты, проверка будет применяться только для перечисленных стран | Type: List Default: 0 |
| Игнорировать неопределённые страны | Игнорировать проверку, если невозможно определить страну клиента или эмитента | Type: Enum Default: Y |
| skip страна identifier | Игнорировать проверку для конкретной страны клиента; например, проверку можно пропустить, если клиент использует мобильную сеть с прокси браузера Opera для обработки транзакции | Type: List Default: 0 |

**Коды ошибок**

| # | Код | Название |
|-------|-------|----------------------------------------------------------------------|
| 10013 | 1023 | Страна of the клиент does not correspond to the страна of the issuer |

##### Имя клиента отличается от имени держателя карты

This check fires when the provided клиент название does not match держатель карты название.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|-----------------------------------|------------------------------------------------------------------------------------------|---------------------------------------------|
| Наибольшее расстояние Левенштейна | Наибольшее расстояние Левенштейна to consider клиент and держатель карты названиеs equal | Тип: Int Default: 3 |

**Коды ошибок**

| # | Код | Название |
|-------|-------|---------------------------------------------------------------------|
| 10114 | 1124 | Клиент название does not correspond to the держатель карты название |

##### IP-адрес клиента отличается от IP-адреса, использованного для проверки 3-D Secure

Эта проверка срабатывает, когда предоставленный IP-адрес Клиента не совпадает с IP-адресом, использованным для проверки 3-D Secure. Иногда мошенники меняют назначение платёжных операций конвертации Sale (отзывная операция) на card2card-переводы на собственные карты (безотзывная операция). Для исключения автоматизации таких случаев мошенничества можно использовать этот фильтр. Некоторые провайдеры используют динамические IP-адреса для своих клиентов, и во время обработки транзакции IP-адрес клиента может немного измениться. Чтобы избежать ложных срабатываний в таких случаях, допускается изменение IP-адреса в подсети /24.

Оценка: Да

Включено по умолчанию: N

**Коды ошибок**

| # | Код | Название |
|-------|-------|----------------------------------------------------------------|
| 10070 | 1080 | Клиент IP-адрес have been changed during транзакция processing |

##### Клиент birthday check

Эта проверка срабатывает, когда указанная дата рождения клиента имеет неверный формат или клиент слишком молод или слишком стар, чтобы выполнить запрошенную операцию.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|-----------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------|
| дата format | Формат ввода даты рождения клиента; допускаются следующие макросы: %Y — год, число из четырёх цифр; %m — месяц, число (00..12); %d — день месяца, число (00..31) | Тип: String Default: %Y%m%d |
| Описание: maximum age | Максимальный возраст клиента для обработки транзакции | Тип: Int Default: 100 |
| Описание: minimum age | Минимальный возраст клиента для обработки транзакции | Тип: Int Default: 16 |

**Коды ошибок**

| # | Код | Название |
|-------|-------|------------------------------------|
| 10086 | 1096 | Недопустимая дата рождения клиента |

##### Source Кредитная карта номер expiration дата check

Эта проверка срабатывает, когда срок действия указанной исходной кредитной карты скоро истечёт. Порог времени представляет собой скользящее окно, рассчитываемое назад от момента транзакции. Обычно срок действия карты истекает в последний день месяца, указанного на карте. Проверка может использоваться, чтобы не принимать кредитную карту для будущих предавторизованных платежей, если её срок действия истекает до последнего запланированного рекуррентного платежа.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|---------------------------------------------------------------|---------------------------------------------------------------|---------------------------------------------|
| Минимальное количество дней до истечения срока действия карты | Минимальное количество дней до истечения срока действия карты | Тип: Int Default: 0 |

**Коды ошибок**

| # | Код | Название |
|-------|-------|--------------------------------------------|
| 10126 | 1136 | Срок действия карты истекает слишком скоро |

##### The 6+4 клиент картаs differs from the 6+4 passed in назначение платежа

This check fires when the provided Клиент 6+4 карта does not match 6+4 passed in назначение платежа. Counts Sale and Preauth транзакцияs in any статус.

Оценка: Да

Включено по умолчанию: N

**Коды ошибок**

| # | Код | Название |
|-------|-------|--------------------------------------------------------|
| 10249 | 1259 | Клиент карта 6+4 does not match the назначение платежа |

#### Пользовательские бизнес-проверки

##### Изменение суммы транзакции для назначения платежа

Эта проверка срабатывает, когда изменение суммы транзакции, связанное с точным назначением, превышает настроенные пороги. Временной порог представляет собой скользящее окно, рассчитываемое назад от момента транзакции. Например, если установить количественный порог 10 транзакций за 30 дней, будет разрешено только 10 транзакций с суммой, соответствующей приведённому ниже регулярному выражению параметра; начиная с 11-й транзакции её сумма должна соответствовать регулярному выражению после значения параметра. Учитывает транзакции Account verification, Sale, Preauth или Transfer в статусе Approved.

Оценка: Нет

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|------------------------------|----------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------|
| for all торговец проектs | Y — для проверки транзакций по всем проектам текущего торговца; в противном случае проверяются транзакции только текущего проекта | Type: Enum Default: N |
| Период поиска в днях | lookup period to analyse сумма транзакции velocity in days | Тип: int Default: 30 |
| Описание: quantity threshold | Начиная с указанного порога все суммы транзакций должны соответствовать значению параметра «Описание: regexp after» | Тип: int Default: 99999 |
| Описание: regexp after | значение регулярного выражения, охватывающее все суммы транзакций, начиная со значения параметра “Описание: quantity threshold” | Тип: String Default: ^(2[5-9][0-9]|[3-9][0-9] {2}|[1-9][0-9]{3,10})([.] [0-9]{0,3})?$ |
| Описание: regexp below | если сумма транзакции соответствует значению этого параметра, текущее значение “Описание: quantity threshold” увеличивается на единицу | Тип: String Default: ^([0-9]{1,2}| 1[0-9]{2}| 2[0-4][0-9])([.][0-9] {0,3})?$ |

**Коды ошибок**

| # | Код | Название |
|-------|-------|--------------------------|
| 10080 | 1090 | Invalid транзакция сумма |

##### Требования к повторным попыткам авторизации в EMEA

Эта проверка срабатывает для всех транзакций покупки. Торговцы, получившие ответ об отклонении транзакции, могут повторно отправить её на авторизацию не более пятнадцати раз в течение 30 календарных дней с даты исходного ответа об отклонении, если код ответа является одним из следующих:

* Код ответа 100 — отклонено (общее, без комментариев)
* Код ответа 101 — отклонено, срок действия карты истёк
* Код ответа 102 — отклонено, подозрение на мошенничество
* Код ответа 104 — отклонено, карта с ограничениями
* Код ответа 106 — отказ, превышено допустимое число попыток PIN
* Код ответа 107-Decline, refer to карта issuer
* Код ответа 108 — отказ, см. специальные условия эмитента карты
* Код ответа 109-Decline, invalid Торговец
* Код ответа 110 — отклонено, недопустимая сумма
* Код ответа 112 — отклонено, требуются данные PIN
* Код ответа 114-Decline, no account of type запросed
* Код ответа 115-Decline, запросed function not supported
* Код ответа 116 — отклонено, недостаточно средств
* Код ответа 117 — отклонено, неверный PIN
* Код ответа 120-Decline, транзакция not permitted to terminal
* Код ответа 121-Decline, exceeds withdrawal сумма limit
* Код ответа 122 — отклонено, нарушение безопасности
* Код ответа 123-Decline, exceeds withdrawal частота limit
* Код ответа 124-Decline, violation of law
* Ответ Код 160-Decline, additional клиент authentication обязательный
* Код ответа 197 — отказ, обратитесь в Am Ex
* Код ответа 198 — отклонено, позвоните в центр обработки карт
* Код ответа 903-Статус message: re-enter транзакция
* Код ответа 904-Decline reason message: format ошибка
* Код ответа 907 — причина отказа: эмитент карты или коммутатор не работает
* Код ответа 909 — причина отказа: неисправность системы
* Код ответа 913 — причина отказа: дублирующаяся передача
* Код ответа 914 — причина отказа: невозможно отследить исходную транзакцию
* Код ответа 921 — причина отказа: ошибка программного или аппаратного обеспечения безопасности, действий не требуется
* Код ответа 950 — причина отказа: нарушение делового соглашения

Правила международных карточных систем запрещают эквайерам и торговцам с рекуррентными услугами повторно отправлять отклонённую транзакцию на авторизацию, если получен ответ:

* Код ответа 111-Decline, invalid карта номер
* Код ответа 180-Decline, by держатель картыs wish
* Код ответа 200 — изъять (общее, без комментариев)
* Код ответа 207 — изъять, особые условия
* Код ответа 208 — изъять утерянную карту
* Код ответа 209 — изъять, украденная карта
* Код ответа 908 — причина отказа: получатель транзакции не найден для маршрутизации

Описание: Visa only:

* Код ответа 119-Decline, транзакция not permitted to держатель карты
* Код ответа 902-Decline reason message: invalid транзакция

Masterкарта only:

* Код ответа 201 — изъять, срок действия карты истёк
* Код ответа 202 — изъять, подозрение на мошенничество
* Код ответа 203-Pick-up, карта acceptor contact карта acquirer
* Код ответа 204 — изъять, карта с ограничениями
* Код ответа 205 — изъять карту, получателю платежа следует обратиться в службу безопасности эквайера
* Код ответа 206 — изъять карту, превышено допустимое число попыток PIN
* Код ответа 210-Pick-up, suspected counterfeit карта

Временной порог — это скользящее окно, рассчитываемое назад от момента транзакции. Учитываются транзакции Account verification, Sale, Preauth со статусом Declined для перечисленных причин отклонения. Правильные причины отклонения должны поддерживаться подключённым PSP. Лимиты рассчитываются отдельно для каждого идентификатора торговца, PAN и суммы транзакции.

Оценка: Нет

Включено по умолчанию: N

**Коды ошибок**

| # | Код | Название |
|-------|-------|-------------------------------------------------------------------|
| 10182 | 1192 | Достигнут лимит повторных попыток авторизации в платёжной системе |

##### Требования Visa к ответу об отклонении предавторизованной транзакции: Н/Д.

Эта проверка срабатывает только для рекуррентных транзакций. Торговцы, получившие ответ об отклонении для предавторизованной транзакции, могут повторно отправить её на авторизацию не более четырёх раз в течение 16 календарных дней с даты первоначального ответа об отклонении, если код ответа является одним из следующих:

* Код ответа 05 — авторизация отклонена
* Код ответа 51 — недостаточно средств
* Код ответа 61 - Exceeds Approval Сумма Limit
* Код ответа 65 - Exceeds Withdrawal Frequency Limit

Если ответ об одобрении не получен в течение этого времени, Торговцы не должны повторно отправлять транзакцию, иначе их эквайеры могут столкнуться с мерами за несоблюдение требований, изложенных в правилах Visa, а также с Chargeback. Правила Visa запрещают эквайерам и Торговцам, использующим рекуррентные сервисы, повторно отправлять отклонённую транзакцию на авторизацию при получении ответа о необходимости изъятия карты:

* Response Код 04 - Pick Up Card
* Код ответа 07 — изъять карту, специальный
* Код ответа 33 — истёк срок действия карты, изъять
* Код ответа 34 - Suspected Fraud, Retain Card
* Код ответа 35 - Card Acceptor, Contact Acquirer, Retain Card
* Код ответа 36 - Restricted Card, Retain Card
* Код ответа 37 - Contact Acquirer Security Department, Retain Card
* Response Код 41 - Lost Card
* Response Код 43 - Stolen Card
* Response Код 67 - Capture Card

или ответ об отклонении
 
* Код ответа 14 - Invalid Account Number (No Such Number)
* Response Код 54 - Expired Card
* Response Код 57 - Transaction Not Permitted

Временной порог — это скользящее окно, рассчитываемое назад от момента транзакции. Учитываются транзакции Account verification, Sale, Preauth или Transfer со статусом Declined для перечисленных причин отклонения. Правильные причины отклонения должны поддерживаться подключённым PSP. Лимиты рассчитываются отдельно для каждого дескриптора шлюза.

Оценка: Нет

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|--------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------|
| Применить типы ограничений | CANCEL (только причины отклонения cancel), PICKUP (только причины отклонения pickup), DELAY (только временные задержки) | Тип: String Default: CANCEL,PICKUP,DELAY |
| Период игнорирования в месяцах | если значение этого параметра больше нуля, в течение указанного периода допускается только одна отклонённая транзакция, независимо от её кода отклонения | Тип: Int Default: 0 |

**Коды ошибок**

| # | Код | Название |
|-------|-------|-----------------------------------------------------------------|
| 10090 | 1100 | Нарушение правил Visa для предавторизованной транзакции (DELAY) |
| 10135 | 1145 | Нарушение правил PSP для транзакции без CVV (CANCEL) |
| 10136 | 1146 | Нарушение правил PSP для транзакции без CVV (PICKUP) |

##### Ограничения MCC 6211

Security Brokers/Dealers

[5] American Samoa
 
[7] Angola
 
[9] Antarctica
 
[19] Bangladesh
 
[22] Belgium
 
[24] Benin
 
[26] Bhutan
 
[28] Босния и Герцеговина
 
[30] Bouvet Island
 
[32] British Indian Ocean Territory
 
[34] Bulgaria
 
[35] Burkina Faso
 
[36] Burundi
 
[39] Canada
 
[40] Cabo Verde
 
[43] Chad
 
[45] China
 
[46] Christmas Island
 
[47] Cocos (Keeling) Islands
 
[49] Comoros
 
[50] Congo
 
[54] Cote d’Ivoire
 
[60] Djibouti
 
[61] Dominica
 
[66] Equatorial Guinea
 
[67] Eritrea
 
[69] Ethiopia
 
[70] Falkland Islands (Malvinas)
 
[78] Gabon
 
[79] Gambia
 
[85] Greenland
 
[86] Grenada
 
[87] Guadeloupe
 
[91] Guinea
 
[92] Guinea-Bissau
 
[94] Haiti
 
[95] Остров Херд и острова Макдональд
 
[96] Holy See (Vatican City State)
 
[107] Israel
 
[110] Japan
 
[115] Kosovo
 
[116] Kiribati
 
[121] Lao People’s Democratic Republic
 
[125] Liberia
 
[131] North Macedonia
 
[132] Madagascar
 
[133] Malawi
 
[136] Mali
 
[139] Martinique
 
[140] Mauritania
 
[144] Micronesia, Federated States of
 
[147] Mongolia
 
[151] Mozambique
 
[152] Myanmar
 
[154] Nauru
 
[155] Nepal
 
[157] Netherlands Antilles
 
[158] New Caledonia
 
[161] Niger
 
[163] Niue
 
[164] Norfolk Island
 
[165] Northern Mariana Islands
 
[169] Palau
 
[170] Palestine, State of
 
[176] Pitcairn
 
[179] Puerto Rico
 
[181] Reunion
 
[184] Rwanda
 
[185] Saint Barthelemy
 
[186] Острова Святой Елены, Вознесения и Тристан-да-Кунья
 
[189] Сен-Мартен (французская часть)
 
[190] Сен-Пьер и Микелон
 
Описание: [194] Sao Tome and Principe
 
[196] Senegal
 
[203] Solomon Islands
 
[206] Южная Георгия и Южные Сандвичевы острова
 
[210] Suriname
 
[211] Шпицберген и Ян-Майен
 
[217] Tajikistan
 
[220] Timor-Leste
 
[221] Togo
 
[222] Tokelau
 
[223] Tonga
 
[228] Острова Теркс и Кайкос
 
[229] Tuvalu
 
[238] Vanuatu
 
[240] Viet Nam
 
Описание: [243] Wallis and Futuna
 
[244] Western Sahara
 
[246] Zambia
 
[247] Zimbabwe
 
[254] Бонэйр, Синт-Эстатиус и Саба
 
 

Оценка: Нет

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|-----------------------------|---------------------------------------------------|-----------------------------------------------|
| Описание: allow Australia | Разрешает обработку в Австралии | Type: Enum Default: N |
| Описание: allow France | Разрешает обработку транзакций во Франции | Type: Enum Default: N |
| Описание: allow Jamaica | Разрешает обработку транзакций на Ямайке | Type: Enum Default: N |
| Разрешить Master Card для NA | Разрешает обработку Master Card в Северной Америке | Type: Enum Default: N |
| Описание: allow Netherlands | Разрешает обработку в Нидерландах | Type: Enum Default: N |
| Описание: allow Uganda | Разрешает обработку транзакций в Уганде | Type: Enum Default: N |

**Коды ошибок**

| # | Код | Название |
|-------|-------|---------------------------|
| 10099 | 1109 | Нарушение правил MCC 6211 |

##### Ограничения MCC 7995

Betting/Casino Gambling

[5] American Samoa
 
[7] Angola
 
[8] Anguilla
 
[9] Antarctica
 
[15] Austria
 
[19] Bangladesh
 
[22] Belgium
 
[24] Benin
 
[26] Bhutan
 
[28] Босния и Герцеговина
 
[29] Botswana
 
[30] Bouvet Island
 
[32] British Indian Ocean Territory
 
[33] Brunei Darussalam
 
[34] Bulgaria
 
[35] Burkina Faso
 
[36] Burundi
 
[40] Cabo Verde
 
[42] Central African Republic
 
[43] Chad
 
[46] Christmas Island
 
[47] Cocos (Keeling) Islands
 
[49] Comoros
 
[50] Congo
 
[54] Cote d’Ivoire
 
[55] Croatia
 
[56] Cuba
 
[57] Cyprus
 
[58] Czech Republic
 
[59] Denmark
 
[60] Djibouti
 
[61] Dominica
 
[62] Dominican Republic
 
[66] Equatorial Guinea
 
[67] Eritrea
 
[68] Estonia
 
[69] Ethiopia
 
[70] Falkland Islands (Malvinas)
 
[72] Fiji
 
[73] Finland
 
[74] France
 
[78] Gabon
 
[79] Gambia
 
[82] Ghana
 
[84] Greece
 
[85] Greenland
 
[86] Grenada
 
[87] Guadeloupe
 
[91] Guinea
 
[92] Guinea-Bissau
 
[94] Haiti
 
[95] Остров Херд и острова Макдональд
 
[96] Holy See (Vatican City State)
 
[98] Hong Kong
 
[99] Hungary
 
[103] Iran, Islamic Republic of
 
[104] Iraq
 
[105] Ireland
 
[107] Israel
 
[108] Italy
 
[109] Jamaica
 
[111] Jersey
 
[115] Kosovo
 
[116] Kiribati
 
[117] Korea, Democratic People’s Republic of
 
[118] Korea, Republic of
 
[121] Lao People’s Democratic Republic
 
[122] Latvia
 
[123] Lebanon
 
[125] Liberia
 
[126] Libya
 
[128] Lithuania
 
[129] Luxembourg
 
[131] North Macedonia
 
[132] Madagascar
 
[133] Malawi
 
[136] Mali
 
[137] Malta
 
[139] Martinique
 
[140] Mauritania
 
[144] Micronesia, Federated States of
 
[147] Mongolia
 
[149] Montserrat
 
[151] Mozambique
 
[152] Myanmar
 
[154] Nauru
 
[155] Nepal
 
[156] Netherlands
 
[157] Netherlands Antilles
 
[158] New Caledonia
 
[161] Niger
 
[163] Niue
 
[164] Norfolk Island
 
[165] Northern Mariana Islands
 
[166] Norway
 
[169] Palau
 
[170] Palestine, State of
 
[175] Philippines
 
[176] Pitcairn
 
[177] Poland
 
[178] Portugal
 
[179] Puerto Rico
 
[181] Reunion
 
[184] Rwanda
 
[185] Saint Barthelemy
 
[186] Острова Святой Елены, Вознесения и Тристан-да-Кунья
 
[188] Saint Lucia
 
[189] Сен-Мартен (французская часть)
 
[190] Сен-Пьер и Микелон
 
Описание: [194] Sao Tome and Principe
 
[196] Senegal
 
[200] Singapore
 
[201] Slovakia
 
[202] Slovenia
 
[203] Solomon Islands
 
[204] Somalia
 
[206] Южная Георгия и Южные Сандвичевы острова
 
[207] Spain
 
[209] Sudan
 
[210] Suriname
 
[211] Шпицберген и Ян-Майен
 
[212] Eswatini
 
[213] Sweden
 
[214] Switzerland
 
[215] Syrian Arab Republic
 
[217] Tajikistan
 
[220] Timor-Leste
 
[221] Togo
 
[222] Tokelau
 
[223] Tonga
 
[226] Turkey
 
[228] Острова Теркс и Кайкос
 
[229] Tuvalu
 
[230] Uganda
 
[234] United States
 
[238] Vanuatu
 
[239] Venezuela, Bolivarian Republic of
 
[240] Viet Nam
 
[242] Virgin Islands, U.S.
 
Описание: [243] Wallis and Futuna
 
[244] Western Sahara
 
[245] Yemen
 
[246] Zambia
 
[247] Zimbabwe
 
[253] Curaçao
 
[254] Бонэйр, Синт-Эстатиус и Саба
 
[255] South Sudan
 
 

Оценка: Нет

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|-------------------------|----------------------------------------------------------|-----------------------------------------------|
| Описание: allow Germany | Разрешает обработку транзакций в Германии | Type: Enum Default: N |
| Описание: allow UK | Разрешает обработку транзакций в Соединённом Королевстве | Type: Enum Default: N |

**Коды ошибок**

| # | Код | Название |
|-------|-------|---------------------------|
| 10124 | 1134 | Нарушение правил MCC 7995 |

##### Ограничения обработки CDB

Запретить все страны, кроме США и стран ЕС. Также запретить следующие страны ЕС: Австрия, Бельгия, Дания, Мальта, Португалия, Румыния, Словакия, Эстония, Латвия; а также следующие штаты США: Алабама, Джорджия, Миссури, Южная Дакота, Небраска, Калифорния, Северная Каролина, Флорида.

Оценка: Нет

Включено по умолчанию: N

**Parameters**

| Название | Значение |
|-------------------------------------------|-----------------------------------------------|
| Проверка страны BIN кредитной карты | Type: Enum Default: Y |
| Проверка страны платёжного адреса клиента | Type: Enum Default: Y |
| check клиент IP страна | Type: Enum Default: Y |

**Коды ошибок**

| # | Код | Название |
|-------|-------|--------------------------------------|
| 10167 | 1177 | Нарушение ограничений обработки CDB. |

#### Veloгород filters

##### Source Кредитная карта Number decline частота for last 24 hours (дневной decline limit)

Эта проверка срабатывает, когда количество или сумма отклонённых транзакций, связанных с точным номером исходной кредитной карты, превышает настроенные пороги. Временной порог составляет окно в 24 часа, рассчитываемое назад от момента транзакции. Для расчёта окна все даты транзакций усекаются до часов. Риск срабатывает на транзакции после установленного порога. Поэтому, если установить порог в 10 транзакций, он сработает на 11-й транзакции за 24 часа. Учитывает транзакции Account verification, Sale, Preauth или Transfer в статусе Declined.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|-----------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------|
| Лимит суммы | maximum total транзакцияs сумма for the last 24 hours for this кредитная карта used as Source карта | Тип: Decimal Default: 999999999 |
| For all торговец проектs | Будет рассчитана текущая общая сумма или количество транзакций за последние 24 часа для этого значения кредитной карты: Y — для всех проектов; 3DS — только для 3DS-шлюзов; Non-3DS — только для не-3DS-шлюзов; N — только для текущего проекта текущего торговца; затем значение будет конвертировано в валюту текущего проекта для сравнения с лимитами суммы или количества. | Type: Enum Default: Y |
| Лимит количества | maximum total транзакцияs count for the last 24 hours for this кредитная карта used as Source карта | Тип: Int Default: 99999 |
| Описание: Use calendar days | «Y» — для расчёта по календарным дням вместо расчёта от момента включения фильтра; «N» — для расчёта от момента включения фильтра | Type: Enum Default: N |

**Коды ошибок**

| # | Код | Название |
|-------|-------|---------------------------------------------------------|
| 10083 | 1093 | Daily decline сумма лимит превышен for отправитель |
| 10084 | 1094 | Daily decline количество лимит превышен for отправитель |

##### Source Кредитная карта Number increasing sequence of approved сумма транзакцииs for last 24 hours (дневной rising limit)

Эта проверка срабатывает, когда количество одобренных транзакций с возрастающей суммой, связанных с точным номером кредитной карты источника, превышает настроенные пороги. Временной порог — окно в 24 часа, рассчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до часов. Риск срабатывает на 11-й возрастающей транзакции за 24 часа при пороге 10. Учитываются транзакции Sale, Preauth или Transfer со статусом Approved. Эта проверка сопоставляет транзакции только в рамках одной учётной записи торговца в одном проекте.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|------------------|------------------------------------------------------------------------------------------------------|-------------------------------------------------|
| Лимит количества | maximum транзакцияs count with increasing сумма for the last 24 hours for this кредитная карта номер | Тип: Int Default: 99999 |

**Коды ошибок**

| # | Код | Название |
|-------|-------|-------------------------------------------------------------|
| 10022 | 1032 | Too many транзакцияs with increasing суммаs for отправитель |

##### Source Кредитная карта Number использование частота for last 24 hours (дневной limit)

Thявляется check fires when номер или сумма транзакцияs associated с exact Source credit карта номер exceeds configured thresholds. время threshold является a 24 hours window calculated backwards из moment транзакция. For window calculation all транзакция датаs являются truncated в hours. risk fires on транзакция after set threshold. So, if you set a threshold 10 транзакцияs, it fires on 11th транзакция in 24 hours. Counts Sale, Preauth или Transfer транзакцияs in approved статус.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|-------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------|
| Лимит суммы | maximum total транзакцияs сумма for the last 24 hours for this кредитная карта used as Source карта | Тип: Decimal Default: 999999999 |
| for all торговец проектs | Будет рассчитана текущая общая сумма или количество транзакций за последние 24 часа для этого значения кредитной карты: Y — для всех проектов; 3DS — только для 3DS-шлюзов; Non-3DS — только для не-3DS-шлюзов; N — только для текущего проекта текущего торговца; затем значение будет конвертировано в валюту текущего проекта для сравнения с лимитами суммы или количества. | Type: Enum Default: Y |
| Лимит количества | maximum total транзакцияs count for the last 24 hours for this кредитная карта used as Source карта | Тип: Int Default: 99999 |
| Описание: skip payouts | Позволяет обрабатывать транзакции Payout, даже если количество или сумма превышает пороги | Type: Enum Default: N |
| Исключить транзакции Cancel | Вычитает отменённые транзакции из рассчитанных порогов количества и суммы | Type: Enum Default: N |
| Использовать календарный день | «Y» — для расчёта по календарным дням вместо расчёта от момента включения фильтра; «N» — для расчёта от момента включения фильтра | Type: Enum Default: N |

**Коды ошибок**

| # | Код | Название |
|-------|-------|---------------------------------------------------|
| 10016 | 1026 | Превышен дневной лимит суммы для отправителя |
| 10017 | 1027 | Превышен дневной лимит количества для отправителя |

##### Source Кредитная карта Number использование частота for last 7 days (недельный limit)

Thявляется check fires when номер или сумма транзакцияs associated с exact Source credit карта номер exceeds configured thresholds. время threshold является a 7 days window calculated backwards из moment транзакция. For window calculation all транзакция датаs являются truncated в hours. risk fires on транзакция after set threshold. So, if you set a threshold 10 транзакцияs, it fires on 11th транзакция in 168 hours. Counts Sale, Preauth или Transfer транзакцияs in approved статус.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|---------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------|
| Лимит суммы | maximum total транзакцияs сумма for the last 7 days for this кредитная карта used as Source карта | Тип: Decimal Default: 999999999 |
| Календарная неделя начинается с воскресенья | «Y»: календарная неделя начинается с воскресенья, «N»: календарная неделя начинается с понедельника | Type: Enum Default: N |
| for all торговец проектs | Будет рассчитана текущая общая сумма или количество транзакций за последние 7 дней для этого значения кредитной карты: Y — для всех проектов; 3DS — только для 3DS-шлюзов; Non-3DS — только для не-3DS-шлюзов; N — только для текущего проекта текущего торговца; затем значение будет конвертировано в валюту текущего проекта для сравнения с лимитами суммы или количества. | Type: Enum Default: Y |
| Лимит количества | maximum total транзакцияs count for the last 7 days for this кредитная карта used as Source карта | Тип: Int Default: 99999 |
| Описание: skip payouts | Позволяет обрабатывать транзакции Payout, даже если количество или сумма превышает пороги | Type: Enum Default: N |
| Исключить транзакции Cancel | Вычитает отменённые транзакции из рассчитанных порогов количества и суммы | Type: Enum Default: N |
| Описание: use calendar week | “Y” для расчёта с использованием календарных недель вместо расчёта с момента включения фильтра; “N” для расчёта с момента включения фильтра | Type: Enum Default: N |

**Коды ошибок**

| # | Код | Название |
|-------|-------|-----------------------------------------------------|
| 10018 | 1028 | Превышен недельный лимит суммы для отправителя |
| 10019 | 1029 | Превышен недельный лимит количества для отправителя |

##### Source Кредитная карта Number использование частота for last month (месячный limit)

Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным номером кредитной карты источника, превышает настроенные пороги. Временной порог — это окно в один месяц, рассчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до дней. Риск срабатывает на транзакции после достижения установленного порога. Так, если установить порог в 10 транзакций, он сработает на 11-й транзакции в течение одного месяца. Расчёт месяца основан на календаре: даты 28, 29, 30 и 31 марта при расчёте окна будут приведены к 28 февраля. Учитываются транзакции Sale, Preauth или Transfer со статусом approved.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------|
| Лимит суммы | maximum total транзакцияs сумма for the last one month for this кредитная карта used as Source карта | Тип: Decimal Default: 999999999 |
| for all торговец проектs | Будет рассчитана текущая общая сумма или количество транзакций за последний месяц для этого значения кредитной карты: Y — для всех проектов; 3DS — только для 3DS-шлюзов; Non-3DS — только для не-3DS-шлюзов; N — только для текущего проекта текущего торговца; затем значение будет конвертировано в валюту текущего проекта для сравнения с лимитами суммы или количества. | Type: Enum Default: Y |
| Лимит количества | maximum total транзакцияs count for the last one month for this кредитная карта used as Source карта | Тип: Int Default: 99999 |
| Описание: skip payouts | Позволяет обрабатывать транзакции Payout, даже если количество или сумма превышает пороги | Type: Enum Default: N |
| Исключить транзакции Cancel | Вычитает отменённые транзакции из рассчитанных порогов количества и суммы | Type: Enum Default: N |
| Описание: use calendar month | “Y” для расчёта с использованием календарных месяцев вместо расчёта с момента включения фильтра; “N” для расчёта с момента включения фильтра | Type: Enum Default: N |

**Коды ошибок**

| # | Код | Название |
|-------|-------|----------------------------------------------------|
| 10020 | 1030 | Превышен месячный лимит суммы для отправителя |
| 10021 | 1031 | Превышен месячный лимит количества для отправителя |

##### Destination Кредитная карта Number использование частота for last 24 hours (дневной limit)

Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным номером кредитной карты получателя, превышает настроенные пороги. Временной порог — это окно в 24 часа, рассчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до часов. Риск срабатывает на транзакции после достижения установленного порога. Так, если установить порог в 10 транзакций, он сработает на 11-й транзакции за 24 часа. Учитываются только транзакции Transfer со статусом approved.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|-------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------|
| Лимит суммы | maximum total транзакцияs сумма for the last 24 hours for this кредитная карта used as Destination карта | Тип: Decimal Default: 999999999 |
| for all торговец проектs | Будет рассчитана текущая общая сумма или количество транзакций за последние 24 часа для этого значения кредитной карты: Y — для всех проектов; 3DS — только для 3DS-шлюзов; Non-3DS — только для не-3DS-шлюзов; N — только для текущего проекта текущего торговца; затем значение будет конвертировано в валюту текущего проекта для сравнения с лимитами суммы или количества. | Type: Enum Default: Y |
| Лимит количества | maximum total транзакцияs count for the last 24 hours for this кредитная карта used as Destination карта | Тип: Int Default: 99999 |
| Использовать календарный день | «Y» — для расчёта по календарным дням вместо расчёта от момента включения фильтра; «N» — для расчёта от момента включения фильтра | Type: Enum Default: N |

**Коды ошибок**

| # | Код | Название |
|-------|-------|------------------------------------------------|
| 10049 | 1059 | Превышен дневной лимит суммы для получателя |
| 10050 | 1060 | Daily количество лимит превышен for получатель |

##### Destination Кредитная карта Number использование частота for last 7 days (недельный limit)

Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным номером кредитной карты получателя, превышает настроенные пороги. Временной порог — это окно в 7 дней, рассчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до часов. Риск срабатывает на транзакции после достижения установленного порога. Так, если установить порог в 10 транзакций, он сработает на 11-й транзакции за 168 часов. Учитываются только транзакции Transfer со статусом approved.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|---------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------|
| Лимит суммы | maximum total транзакцияs сумма for the last 7 days for this кредитная карта used as Destination карта | Тип: Decimal Default: 99999999 |
| Календарная неделя начинается с воскресенья | «Y»: календарная неделя начинается с воскресенья, «N»: календарная неделя начинается с понедельника | Type: Enum Default: N |
| for all торговец проектs | Будет рассчитана текущая общая сумма или количество транзакций за последние 7 дней для этого значения кредитной карты: Y — для всех проектов; 3DS — только для 3DS-шлюзов; Non-3DS — только для не-3DS-шлюзов; N — только для текущего проекта текущего торговца; затем значение будет конвертировано в валюту текущего проекта для сравнения с лимитами суммы или количества. | Type: Enum Default: Y |
| Лимит количества | maximum total транзакцияs count for the last 7 days for this кредитная карта used as Destination карта | Тип: Int Default: 99999 |
| Описание: use calendar week | “Y” для расчёта с использованием календарных недель вместо расчёта с момента включения фильтра; “N” для расчёта с момента включения фильтра | Type: Enum Default: N |

**Коды ошибок**

| # | Код | Название |
|-------|-------|-------------------------------------------------|
| 10051 | 1061 | Превышен недельный лимит суммы для получателя |
| 10052 | 1062 | Weekly количество лимит превышен for получатель |

##### Destination Кредитная карта Number использование частота for last month (месячный limit)

Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным номером кредитной карты получателя, превышает настроенные пороги. Временной порог — это окно в один месяц, рассчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до дней. Риск срабатывает на 11-й транзакции в одном месяце при пороге 10 транзакций. Расчёт месяца основан на календаре: даты 28, 29, 30 и 31 марта будут приведены к 28 февраля. Учитываются только транзакции Transfer со статусом approved.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|--------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------|
| Лимит суммы | maximum total транзакцияs сумма for the last one month for this кредитная карта used as Destination карта | Тип: Decimal Default: 999999999 |
| Проверять транзакции предавторизации | «Y» Запрещает транзакции Preauth при достижении лимита количества; необходимо включить фильтр и задать правильные значения лимита во всех проектах, где требуется эта функция. | Type: Enum Default: N |
| for all торговец проектs | Будет рассчитана текущая общая сумма или количество транзакций за последний месяц для этого значения кредитной карты: Y — для всех проектов; 3DS — только для 3DS-шлюзов; Non-3DS — только для не-3DS-шлюзов; N — только для текущего проекта текущего торговца; затем значение будет конвертировано в валюту текущего проекта для сравнения с лимитами суммы или количества. | Type: Enum Default: Y |
| Лимит количества | maximum total транзакцияs count for the last one month for this кредитная карта used as Destination карта | Тип: Int Default: 99999 |
| Описание: Use calendar month | “Y” для расчёта с использованием календарных месяцев вместо расчёта с момента включения фильтра; “N” для расчёта с момента включения фильтра | Type: Enum Default: N |

**Коды ошибок**

| # | Код | Название |
|-------|-------|--------------------------------------------------|
| 10053 | 1063 | Monthly сумма лимит превышен for получатель |
| 10054 | 1064 | Monthly количество лимит превышен for получатель |

##### Общая частота использования номера кредитной карты за последние 24 часа (дневной лимит)

Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным номером кредитной карты, используемым как источник или получатель, превышает настроенные пороги. Временной порог — это окно в 24 часа, рассчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до часов. Риск срабатывает на транзакции после достижения установленного порога. Так, если установить порог в 10 транзакций, он сработает на 11-й транзакции за 24 часа. Учитываются транзакции Sale, Preauth или Transfer со статусом approved.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|-------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------|
| Лимит суммы | maximum total транзакцияs сумма for the last 24 hours for this кредитная карта used as Source or Destination | Тип: Decimal Default: 999999999 |
| for all торговец проектs | Будет рассчитана текущая общая сумма или количество транзакций за последние 24 часа для этого значения кредитной карты: Y — для всех проектов; 3DS — только для 3DS-шлюзов; Non-3DS — только для не-3DS-шлюзов; N — только для текущего проекта текущего торговца; затем значение будет конвертировано в валюту текущего проекта для сравнения с лимитами суммы или количества. | Type: Enum Default: Y |
| Лимит количества | Максимальное общее количество транзакций за последние 24 часа для этой кредитной карты, используемой как источник или получатель | Тип: Int Default: 99999 |
| Исключить транзакции Cancel | Вычитает отменённые транзакции из рассчитанных порогов количества и суммы | Type: Enum Default: N |
| Использовать календарный день | «Y» — для расчёта по календарным дням вместо расчёта от момента включения фильтра; «N» — для расчёта от момента включения фильтра | Type: Enum Default: N |

**Коды ошибок**

| # | Код | Название |
|-------|-------|-------------------------------------------------------|
| 10055 | 1065 | Daily total сумма лимит превышен for отправитель |
| 10056 | 1066 | Daily total количество лимит превышен for отправитель |
| 10057 | 1067 | Daily total сумма лимит превышен for получатель |
| 10058 | 1068 | Daily total количество лимит превышен for получатель |

##### Total Кредитная карта Number использование частота for last 7 days (недельный limit)

Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным номером кредитной карты, используемым как источник или получатель, превышает настроенные пороги. Временной порог — это окно в 7 дней, рассчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до часов. Риск срабатывает на транзакции после достижения установленного порога. Так, если установить порог в 10 транзакций, он сработает на 11-й транзакции за 168 часов. Учитываются транзакции Sale, Preauth или Transfer со статусом approved.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|---------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------|
| Лимит суммы | maximum total транзакцияs сумма for the last 7 days for this кредитная карта used as Source or Destination | Тип: Decimal Default: 999999999 |
| Календарная неделя начинается с воскресенья | «Y»: календарная неделя начинается с воскресенья, «N»: календарная неделя начинается с понедельника | Type: Enum Default: N |
| for all торговец проектs | Будет рассчитана текущая общая сумма или количество транзакций за последние 7 дней для этого значения кредитной карты: Y — для всех проектов; 3DS — только для 3DS-шлюзов; Non-3DS — только для не-3DS-шлюзов; N — только для текущего проекта текущего торговца; затем значение будет конвертировано в валюту текущего проекта для сравнения с лимитами суммы или количества. | Type: Enum Default: Y |
| Лимит количества | максимальный total транзакцияs count for the last 7 days for this credit карта used as Source or Destination | Тип: Int Default: 99999 |
| Исключить транзакции Cancel | Вычитает отменённые транзакции из рассчитанных порогов количества и суммы | Type: Enum Default: N |
| Описание: use calendar week | “Y” для расчёта с использованием календарных недель вместо расчёта с момента включения фильтра; “N” для расчёта с момента включения фильтра | Type: Enum Default: N |

**Коды ошибок**

| # | Код | Название |
|-------|-------|--------------------------------------------------------|
| 10059 | 1069 | Weekly total сумма лимит превышен for отправитель |
| 10060 | 1070 | Weekly total количество лимит превышен for отправитель |
| 10061 | 1071 | Weekly total сумма лимит превышен for получатель |
| 10062 | 1072 | Weekly total количество лимит превышен for получатель |

##### Total Кредитная карта Number использование частота for last month (месячный limit)

Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным номером кредитной карты, используемым как источник или получатель, превышает настроенные пороги. Временной порог — это окно в один месяц, рассчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до дней. Риск срабатывает на транзакции после достижения установленного порога. Так, если установить порог в 10 транзакций, он сработает на 11-й транзакции в течение одного месяца. Расчёт месяца основан на календаре: даты 28, 29, 30 и 31 марта при расчёте окна будут приведены к 28 февраля. Учитываются транзакции Sale, Preauth или Transfer со статусом approved.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------|
| Лимит суммы | maximum total транзакцияs сумма for the last one month for this кредитная карта used as Source or Destination | Тип: Decimal Default: 999999999 |
| for all торговец проектs | Будет рассчитана текущая общая сумма или количество транзакций за последний месяц для этого значения кредитной карты: Y — для всех проектов; 3DS — только для 3DS-шлюзов; Non-3DS — только для не-3DS-шлюзов; N — только для текущего проекта текущего торговца; затем значение будет конвертировано в валюту текущего проекта для сравнения с лимитами суммы или количества. | Type: Enum Default: Y |
| Лимит количества | Максимальное общее количество транзакций за последний месяц для этой кредитной карты, используемой как источник или получатель | Тип: Int Default: 99999 |
| Исключить транзакции Cancel | Вычитает отменённые транзакции из рассчитанных порогов количества и суммы | Type: Enum Default: N |
| Описание: use calendar month | “Y” для расчёта с использованием календарных месяцев вместо расчёта с момента включения фильтра; “N” для расчёта с момента включения фильтра | Type: Enum Default: N |

**Коды ошибок**

| # | Код | Название |
|-------|-------|---------------------------------------------------------|
| 10063 | 1073 | Monthly total сумма лимит превышен for отправитель |
| 10064 | 1074 | Monthly total количество лимит превышен for отправитель |
| 10065 | 1075 | Monthly total сумма лимит превышен for получатель |
| 10066 | 1076 | Monthly total количество лимит превышен for получатель |

##### Purpose использование частота for last 24 hours (дневной limit)

Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным назначением, превышает настроенные пороги. Временной порог — это окно в 24 часа, рассчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до часов. Риск срабатывает на транзакции после достижения установленного порога. Так, если установить порог в 10 транзакций, он сработает на 11-й транзакции за 24 часа. Учитываются транзакции Sale, Preauth или Transfer со статусом approved.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------|
| Лимит суммы | максимальный total транзакцияs сумма for the last 24 hours for this Purpose | Тип: Decimal Default: 999999999 |
| for all торговец проектs | Будет рассчитана текущая общая сумма или количество транзакций за последние 24 часа для этого значения кредитной карты: Y — для всех проектов; 3DS — только для 3DS-шлюзов; Non-3DS — только для не-3DS-шлюзов; N — только для текущего проекта текущего торговца; затем значение будет конвертировано в валюту текущего проекта для сравнения с лимитами суммы или количества. | Type: Enum Default: Y |
| Лимит количества | максимальный total транзакцияs count for the last 24 hours for this Purpose | Тип: Int Default: 99999 |
| Исключить транзакции Cancel | Вычитает отменённые транзакции из рассчитанных порогов количества и суммы | Type: Enum Default: N |
| Описание: Использовать календарный деньs | «Y» — для расчёта по календарным дням вместо расчёта от момента включения фильтра; «N» — для расчёта от момента включения фильтра | Type: Enum Default: N |

**Коды ошибок**

| # | Код | Название |
|-------|-------|----------------------------------------------------------|
| 10040 | 1050 | Превышен дневной лимит суммы для назначения платежа |
| 10041 | 1051 | Превышен дневной лимит количества для назначения платежа |

##### Purpose использование частота for last 7 days (недельный limit)

Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным назначением, превышает настроенные пороги. Временной порог — это окно в 7 дней, рассчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до часов. Риск срабатывает на транзакции после достижения установленного порога. Так, если установить порог в 10 транзакций, он сработает на 11-й транзакции за 168 часов. Учитываются транзакции Sale, Preauth или Transfer со статусом approved.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|---------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------|
| Лимит суммы | максимальный total транзакцияs сумма for the last 7 days for this Purpose | Тип: Decimal Default: 999999999 |
| Календарная неделя начинается с воскресенья | «Y»: календарная неделя начинается с воскресенья, «N»: календарная неделя начинается с понедельника | Type: Enum Default: N |
| for all торговец проектs | Будет рассчитана текущая общая сумма или количество транзакций за последние 7 дней для этого значения кредитной карты: Y — для всех проектов; 3DS — только для 3DS-шлюзов; Non-3DS — только для не-3DS-шлюзов; N — только для текущего проекта текущего торговца; затем значение будет конвертировано в валюту текущего проекта для сравнения с лимитами суммы или количества. | Type: Enum Default: Y |
| Лимит количества | максимальный total транзакцияs count for the last 7 days for this Purpose | Тип: Int Default: 99999 |
| Subtract Cancel транзакцияs | Вычитает отменённые транзакции из рассчитанных порогов количества и суммы | Type: Enum Default: Y |
| Описание: Use calendar days | «Y» — для расчёта по календарным дням вместо расчёта от момента включения фильтра; «N» — для расчёта от момента включения фильтра | Type: Enum Default: N |

**Коды ошибок**

| # | Код | Название |
|-------|-------|------------------------------------------------------------|
| 10042 | 1052 | Превышен недельный лимит суммы для назначения платежа |
| 10043 | 1053 | Превышен недельный лимит количества для назначения платежа |

##### Частота использования назначения за последний месяц (месячный лимит)

Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным назначением, превышает настроенные пороги. Временной порог — это окно в один месяц, рассчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до дней. Риск срабатывает на 11-й транзакции в одном месяце при пороге 10 транзакций. Расчёт месяца основан на календаре: даты 28, 29, 30 и 31 марта при расчёте окна будут приведены к 28 февраля. Учитываются транзакции Sale, Preauth или Transfer со статусом approved.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------|
| Лимит суммы | максимальный total транзакцияs сумма for the last one month for this Purpose | Тип: Decimal Default: 999999999 |
| for all торговец проектs | Будет рассчитана текущая общая сумма или количество транзакций за последний месяц для этого значения кредитной карты: Y — для всех проектов; 3DS — только для 3DS-шлюзов; Non-3DS — только для не-3DS-шлюзов; N — только для текущего проекта текущего торговца; затем значение будет конвертировано в валюту текущего проекта для сравнения с лимитами суммы или количества. | Type: Enum Default: Y |
| Лимит количества | максимальный total транзакцияs count for the last one month for this Purpose | Тип: Int Default: 99999 |
| Исключить транзакции Cancel | Вычитает отменённые транзакции из рассчитанных порогов количества и суммы | Type: Enum Default: N |
| Описание: Использовать календарный деньs | «Y» — для расчёта по календарным дням вместо расчёта от момента включения фильтра; «N» — для расчёта от момента включения фильтра | Type: Enum Default: N |

**Коды ошибок**

| # | Код | Название |
|-------|-------|----------------------------------------------------------|
| 10044 | 1054 | Превышен месячный лимит суммы для назначения платежа |
| 10045 | 1055 | Monthly количество лимит превышен for назначение платежа |

##### Email использование частота for last 24 hours (дневной limit)

Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным адресом электронной почты, превышает настроенные пороги. Временной порог — это окно в 24 часа, рассчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до часов. Риск срабатывает на транзакции после достижения установленного порога. Так, если установить порог в 10 транзакций, он сработает на 11-й транзакции за 24 часа. Учитываются транзакции Sale, Preauth или Transfer со статусом approved.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------|
| Лимит суммы | максимальный total транзакцияs сумма for the last 24 hours for this Email address | Тип: Decimal Default: 999999999 |
| for all торговец проектs | Будет рассчитана текущая общая сумма или количество транзакций за последние 24 часа для этого значения кредитной карты: Y — для всех проектов; 3DS — только для 3DS-шлюзов; Non-3DS — только для не-3DS-шлюзов; N — только для текущего проекта текущего торговца; затем значение будет конвертировано в валюту текущего проекта для сравнения с лимитами суммы или количества. | Type: Enum Default: Y |
| Лимит количества | максимальный total транзакцияs count for the last 24 hours for this Email address | Тип: Int Default: 99999 |
| Исключить транзакции Cancel | Вычитает отменённые транзакции из рассчитанных порогов количества и суммы | Type: Enum Default: N |
| Описание: Использовать календарный деньs | «Y» — для расчёта по календарным дням вместо расчёта от момента включения фильтра; «N» — для расчёта от момента включения фильтра | Type: Enum Default: N |

**Коды ошибок**

| # | Код | Название |
|-------|-------|---------------------------------------------------|
| 10073 | 1083 | Daily сумма лимит превышен for email address |
| 10074 | 1084 | Daily количество лимит превышен for email address |

##### Email использование частота for last 7 days (недельный limit)

Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным адресом электронной почты, превышает настроенные пороги. Временной порог — это окно в 7 дней, рассчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до часов. Риск срабатывает на транзакции после достижения установленного порога. Так, если установить порог в 10 транзакций, он сработает на 11-й транзакции за 168 часов. Учитываются транзакции Sale, Preauth или Transfer со статусом approved.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|---------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------|
| Лимит суммы | максимальный total транзакцияs сумма for the last 7 days for this Email address | Тип: Decimal Default: 999999999 |
| Календарная неделя начинается с воскресенья | «Y»: календарная неделя начинается с воскресенья, «N»: календарная неделя начинается с понедельника | Type: Enum Default: N |
| for all торговец проектs | Будет рассчитана текущая общая сумма или количество транзакций за последние 7 дней для этого значения кредитной карты: Y — для всех проектов; 3DS — только для 3DS-шлюзов; Non-3DS — только для не-3DS-шлюзов; N — только для текущего проекта текущего торговца; затем значение будет конвертировано в валюту текущего проекта для сравнения с лимитами суммы или количества. | Type: Enum Default: Y |
| Лимит количества | максимальный total транзакцияs count for the last 7 days for this Email address | Тип: Int Default: 99999 |
| Исключить транзакции Cancel | Вычитает отменённые транзакции из рассчитанных порогов количества и суммы | Type: Enum Default: N |
| Описание: Использовать календарный деньs | «Y» — для расчёта по календарным дням вместо расчёта от момента включения фильтра; «N» — для расчёта от момента включения фильтра | Type: Enum Default: N |

**Коды ошибок**

| # | Код | Название |
|-------|-------|----------------------------------------------------|
| 10075 | 1085 | Weekly сумма лимит превышен for email address |
| 10076 | 1086 | Weekly количество лимит превышен for email address |

##### Email использование частота for last month (месячный limit)

Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным адресом электронной почты, превышает настроенные пороги. Временной порог — это окно в один месяц, рассчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до дней. Риск срабатывает на 11-й транзакции в одном месяце при пороге 10 транзакций. Расчёт месяца основан на календаре: даты 28, 29, 30 и 31 марта будут приведены к 28 февраля. Учитываются транзакции Sale, Preauth или Transfer со статусом approved.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|-----------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------|
| Лимит суммы | максимальный total транзакцияs сумма for the last one month for this Email address | Тип: Decimal Default: 999999999 |
| for all торговец проектs | Будет рассчитана текущая общая сумма или количество транзакций за последний месяц для этого значения кредитной карты: Y — для всех проектов; 3DS — только для 3DS-шлюзов; Non-3DS — только для не-3DS-шлюзов; N — только для текущего проекта текущего торговца; затем значение будет конвертировано в валюту текущего проекта для сравнения с лимитами суммы или количества. | Type: Enum Default: Y |
| Лимит количества | максимальный total транзакцияs count for the last one month for this Email address | Тип: Int Default: 99999 |
| Subtract Cancel транзакцияs | Вычитает отменённые транзакции из рассчитанных порогов количества и суммы | Type: Enum Default: N |
| Описание: Use calendar days | «Y» — для расчёта по календарным дням вместо расчёта от момента включения фильтра; «N» — для расчёта от момента включения фильтра | Type: Enum Default: N |

**Коды ошибок**

| # | Код | Название |
|-------|-------|-----------------------------------------------------|
| 10077 | 1087 | Monthly сумма лимит превышен for email address |
| 10078 | 1088 | Monthly количество лимит превышен for email address |

##### IP-адрес использование частота for last 24 hours (дневной limit)

Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным IP-адресом клиента, превышает настроенные пороги. Временной порог составляет окно в 24 часа, рассчитываемое назад от момента транзакции. Для расчёта окна все даты транзакций усекаются до часов. Риск срабатывает на транзакции после установленного порога. Поэтому, если установить порог в 10 транзакций, он сработает на 11-й транзакции за 24 часа. Учитывает транзакции Sale, Preauth или Transfer в одобренном статусе.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------|
| Лимит суммы | maximum total транзакцияs сумма for the last 24 hours for this IP-адрес | Тип: Decimal Default: 999999999 |
| for all торговец проектs | Будет рассчитана текущая общая сумма или количество транзакций за последние 24 часа для этого значения кредитной карты: Y — для всех проектов; 3DS — только для 3DS-шлюзов; Non-3DS — только для не-3DS-шлюзов; N — только для текущего проекта текущего торговца; затем значение будет конвертировано в валюту текущего проекта для сравнения с лимитами суммы или количества. | Type: Enum Default: Y |
| Лимит количества | максимальный total транзакцияs count for the last 24 hours for this IP address | Тип: Int Default: 99999 |
| Исключить транзакции Cancel | Вычитает отменённые транзакции из рассчитанных порогов количества и суммы | Type: Enum Default: N |
| Описание: Использовать календарный деньs | «Y» — для расчёта по календарным дням вместо расчёта от момента включения фильтра; «N» — для расчёта от момента включения фильтра | Type: Enum Default: N |

**Коды ошибок**

| # | Код | Название |
|-------|-------|----------------------------------------------|
| 10100 | 1110 | Превышен дневной лимит суммы для IP-адреса |
| 10101 | 1111 | Daily количество лимит превышен for IP-адрес |

##### IP-адрес использование частота for last 7 days (недельный limit)

Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным IP-адресом клиента, превышает настроенные пороги. Временной порог составляет окно в 7 дней, рассчитываемое назад от момента транзакции. Для расчёта окна все даты транзакций усекаются до часов. Риск срабатывает на транзакции после установленного порога. Поэтому, если установить порог в 10 транзакций, он сработает на 11-й транзакции за 168 часов. Учитывает транзакции Sale, Preauth или Transfer в одобренном статусе.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|---------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------|
| Лимит суммы | maximum total транзакцияs сумма for the last 7 days for this IP-адрес | Тип: Decimal Default: 999999999 |
| Календарная неделя начинается с воскресенья | «Y»: календарная неделя начинается с воскресенья, «N»: календарная неделя начинается с понедельника | Type: Enum Default: N |
| for all торговец проектs | Будет рассчитана текущая общая сумма или количество транзакций за последние 7 дней для этого значения кредитной карты: Y — для всех проектов; 3DS — только для 3DS-шлюзов; Non-3DS — только для не-3DS-шлюзов; N — только для текущего проекта текущего торговца; затем значение будет конвертировано в валюту текущего проекта для сравнения с лимитами суммы или количества. | Type: Enum Default: Y |
| Лимит количества | максимальный total транзакцияs count for the last 7 days for this IP address | Тип: Int Default: 99999 |
| Исключить транзакции Cancel | Вычитает отменённые транзакции из рассчитанных порогов количества и суммы | Type: Enum Default: N |
| Описание: Использовать календарный деньs | «Y» — для расчёта по календарным дням вместо расчёта от момента включения фильтра; «N» — для расчёта от момента включения фильтра | Type: Enum Default: N |

**Коды ошибок**

| # | Код | Название |
|-------|-------|-----------------------------------------------|
| 10102 | 1112 | Weekly сумма лимит превышен for IP-адрес |
| 10103 | 1113 | Weekly количество лимит превышен for IP-адрес |

##### IP-адрес использование частота for last month (месячный limit)

Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным IP-адресом клиента, превышает настроенные пороги. Временной порог составляет окно в один месяц, рассчитываемое назад от момента транзакции. Для расчёта окна все даты транзакций усекаются до дней. Риск срабатывает на транзакции после установленного порога. Поэтому, если установить порог в 10 транзакций, он сработает на 11-й транзакции за один месяц. Расчёт месяца ведётся по календарю: например, 28, 29, 30 и 31 марта при расчёте окна будут приведены к 28 февраля. Учитывает транзакции Sale, Preauth или Transfer в одобренном статусе.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|-----------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------|
| Лимит суммы | maximum total транзакцияs сумма for the last one month for this IP-адрес | Тип: Decimal Default: 999999999 |
| for all торговец проектs | Будет рассчитана текущая общая сумма или количество транзакций за последний месяц для этого значения кредитной карты: Y — для всех проектов; 3DS — только для 3DS-шлюзов; Non-3DS — только для не-3DS-шлюзов; N — только для текущего проекта текущего торговца; затем значение будет конвертировано в валюту текущего проекта для сравнения с лимитами суммы или количества. | Type: Enum Default: Y |
| Лимит количества | максимальный total транзакцияs count for the last one month for this IP address | Тип: Int Default: 99999 |
| Subtract Cancel транзакцияs | Вычитает отменённые транзакции из рассчитанных порогов количества и суммы | Type: Enum Default: N |
| Описание: Use calendar days | «Y» — для расчёта по календарным дням вместо расчёта от момента включения фильтра; «N» — для расчёта от момента включения фильтра | Type: Enum Default: N |

**Коды ошибок**

| # | Код | Название |
|-------|-------|------------------------------------------------|
| 10104 | 1114 | Monthly сумма лимит превышен for IP-адрес |
| 10105 | 1115 | Monthly количество лимит превышен for IP-адрес |

##### Source Кредитная карта Number использование частота for Purpose

Эта проверка срабатывает, когда количество исходных кредитных карт, связанных с точным назначением, превышает настроенные пороги. Временной порог представляет собой скользящее окно, рассчитываемое назад от момента транзакции. Риск срабатывает на транзакции после установленного порога. Поэтому, если установить порог в 10 кредитных карт за 6 часов, он сработает на 11-й уникальной кредитной карте за 6 часов. Учитывает уникальные номера исходных кредитных карт для транзакций Account verification, Sale, Preauth или Transfer в любом статусе текущего Торговца.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|---------------------------|--------------------------------------------------------------|----------------------------------------------|
| Интервал проверки в часах | время frame to calculate unique кредитная карта номерs count | Тип: Int Default: 12 |
| maximum карта номер count | Максимальное количество уникальных кредитных карт | Тип: Int Default: 5 |

**Коды ошибок**

| # | Код | Название |
|-------|-------|-----------------------------------------------------|
| 10071 | 1081 | Too many кредитная картаs used for the same account |

##### Source Кредитная карта Number использование частота for Email address

Эта проверка срабатывает, когда количество исходных кредитных карт, связанных с точным адресом электронной почты, превышает настроенные пороги. Временной порог представляет собой скользящее окно, рассчитываемое назад от момента транзакции. Риск срабатывает на транзакции после установленного порога. Поэтому, если установить порог в 10 кредитных карт за 6 часов, он сработает на 11-й уникальной кредитной карте за 6 часов. Учитывает уникальные номера исходных кредитных карт для транзакций Account verification, Sale, Preauth или Transfer в любом статусе текущего Торговца.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|---------------------------|--------------------------------------------------------------|----------------------------------------------|
| Интервал проверки в часах | время frame to calculate unique кредитная карта номерs count | Тип: Int Default: 12 |
| maximum карта номер count | Максимальное количество уникальных кредитных карт | Тип: Int Default: 5 |

**Коды ошибок**

| # | Код | Название |
|-------|-------|-------------------------------------------------------------------------------|
| 10091 | 1101 | Слишком много кредитных карт используется для одного адреса электронной почты |

##### Source Кредитная карта Number использование частота for First and Last название

Эта проверка срабатывает, когда количество исходных кредитных карт, связанных с точными именем и фамилией Клиента, превышает настроенные пороги. Временной порог представляет собой скользящее окно, рассчитываемое назад от момента транзакции. Риск срабатывает на транзакции после установленного порога. Поэтому, если установить порог в 10 кредитных карт за 6 часов, он сработает на 11-й уникальной кредитной карте за 6 часов. Учитывает уникальные номера исходных кредитных карт для транзакций Sale или Preauth в любом статусе текущего Торговца.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|---------------------------|--------------------------------------------------------------|----------------------------------------------|
| Интервал проверки в часах | время frame to calculate unique кредитная карта номерs count | Тип: Int Default: 12 |
| maximum карта номер count | Максимальное количество уникальных кредитных карт | Тип: Int Default: 5 |

**Коды ошибок**

| # | Код | Название |
|-------|-------|----------------------------------------------------|
| 10092 | 1102 | Too many кредитная картаs used for the same клиент |

##### Source Кредитная карта Number использование частота for Destination Кредитная карта номер

Эта проверка срабатывает, когда количество исходных кредитных карт, связанных с точным номером кредитной карты получателя, превышает настроенные пороги. Временной порог представляет собой скользящее окно, рассчитываемое назад от момента транзакции. Риск срабатывает на транзакции после установленного порога. Поэтому, если установить порог в 10 кредитных карт за 6 часов, он сработает на 11-й уникальной кредитной карте за 6 часов. Учитывает уникальные номера исходных кредитных карт для транзакций Transfer в любом статусе текущего Торговца.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|---------------------------|--------------------------------------------------------------|------------------------------------------------------|
| Интервал проверки в часах | время frame to calculate unique кредитная карта номерs count | Тип: Decimal Default: 12.000 |
| maximum карта номер count | Максимальное количество уникальных кредитных карт | Тип: Int Default: 5 |

**Коды ошибок**

| # | Код | Название |
|-------|-------|----------------------------------------------------------------------|
| 10093 | 1103 | Слишком много карт источника использовано для одной карты получателя |

##### Частота использования номера исходной кредитной карты для адреса электронной почты или IP-адреса

Эта проверка срабатывает, когда количество исходных кредитных карт, связанных с точным адресом электронной почты или IP-адресом, превышает настроенные пороги. Временной порог представляет собой скользящее окно, рассчитываемое назад от момента транзакции. Риск срабатывает на транзакции после установленного порога. Поэтому, если установить порог в 10 кредитных карт за 6 часов, он сработает на 11-й уникальной кредитной карте за 6 часов. Учитывает уникальные номера исходных кредитных карт для транзакций Sale, Preauth или Transfer в статусе Approved текущего Торговца.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|---------------------------|--------------------------------------------------------------|----------------------------------------------|
| Интервал проверки в часах | время frame to calculate unique кредитная карта номерs count | Тип: Int Default: 24 |
| maximum карта номер count | Максимальное количество уникальных кредитных карт | Тип: Int Default: 4 |

**Коды ошибок**

| # | Код | Название |
|-------|-------|---------------------------------------------------------------------------------------------|
| 10026 | 1036 | Слишком много карт источника использовано для одного адреса электронной почты или IP-адреса |

##### Частота использования номера исходной кредитной карты

Эта проверка срабатывает, когда количество запросов, связанных с точной кредитной картой источника, превышает настроенные пороги. Временной порог — это скользящее окно, рассчитываемое назад от момента транзакции. Риск срабатывает на транзакции после достижения установленного порога. Так, если установить порог в 10 запросов за 6 часов, он сработает на 11-м запросе за 6 часов. Учитывается количество запросов для транзакций Account verification, Sale, Preauth или Transfer со статусом Approved или Declined текущего торговца.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|----------------------------------|----------------------------------------------------|----------------------------------------------|
| Интервал проверки в часах | Временной интервал для расчёта количества запросов | Тип: Int Default: 24 |
| Максимальное количество запросов | Максимальное допустимое количество запросов | Тип: Int Default: 5 |

**Коды ошибок**

| # | Код | Название |
|-------|-------|--------------------------------------------------|
| 10072 | 1082 | Слишком много запросов для одной кредитной карты |

##### Частота использования IP-адреса клиента

Эта проверка срабатывает, когда количество запросов, связанных с точным IP-адресом Клиента, превышает настроенные пороги. Такой IP-адрес Клиента автоматически добавляется в чёрный список IP Торговца и Менеджера. Временной порог представляет собой скользящее окно, рассчитываемое назад от момента транзакции. Риск срабатывает на транзакции после установленного порога. Поэтому, если установить порог в 10 запросов за 60 минут, он сработает на 11-м запросе за 60 минут. Учитывает количество запросов для транзакций Account verification, Sale, Preauth или Transfer в статусах Approved или Declined текущего Торговца. Локальные IP-адреса игнорируются. Запросы с IP-адресов из списка «Merchant API IP address» игнорируются; то есть, если Торговец инициирует запрос с IP-адреса X.X.X.X и намеренно задаёт customer_ip_address как Y.Y.Y.Y для каждой транзакции, но адрес X.X.X.X классифицирован для этого Торговца как «API IP address», эта проверка будет проигнорирована.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|----------------------------------|----------------------------------------------------|----------------------------------------------|
| Интервал проверки в минутах | Временной интервал для расчёта количества запросов | Тип: Int Default: 10 |
| Максимальное количество запросов | Максимальное допустимое количество запросов | Тип: Int Default: 5 |

**Коды ошибок**

| # | Код | Название |
|-------|-------|-------------------------------------------|
| 10115 | 1125 | Слишком много запросов с одного IP-адреса |

##### Кредитная карта номер already used from another IP-адрес

Эта проверка срабатывает, когда номер кредитной карты уже был успешно использован с другого IP-адреса. Временной порог представляет собой скользящее окно, рассчитываемое назад от момента транзакции. Эта проверка сопоставляет только транзакции в рамках одного аккаунта Торговца. Анализирует транзакции Sale, Preauth или Transfer в статусе Approved. Запросы с IP-адресов, указанных в «Merchant API IP address», игнорируют эту проверку.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|-----------------------------|-------------------------------------------------------------------------------------------------------------------|----------------------------------------------|
| Интервал проверки в минутах | Временной интервал в минутах для анализа одобренных транзакций; установите 0 для бесконечности (не рекомендуется) | Тип: Int Default: 30 |

**Коды ошибок**

| # | Код | Название |
|-------|-------|--------------------------------------------------------|
| 10008 | 1006 | Too many IP-адресes for the same кредитная карта номер |

##### Кредитная карта номер already used from another Страна

Эта проверка срабатывает, когда номер кредитной карты уже был успешно использован из другой страны. IP-адрес используется для расчёта кода страны клиента. Проверка сопоставляет только транзакции в пределах одной учётной записи Merchant. Анализирует Sale, Preauth или Transfer в статусе Approved. Запросы с IP-адресов, указанных в «Merchant API IP address», игнорируют эту проверку.

Оценка: Да

Включено по умолчанию: N

**Коды ошибок**

| # | Код | Название |
|-------|-------|-------------------------------------------------------|
| 10079 | 1089 | Too many countries for the same кредитная карта номер |

##### Кредитная карта номер already used with another Email

Эта проверка срабатывает, когда номер кредитной карты уже был успешно использован с другим адресом электронной почты. Временной порог представляет собой скользящее окно, рассчитываемое назад от момента транзакции. Эта проверка сопоставляет только транзакции в рамках одного аккаунта Торговца. Анализирует транзакции Sale, Preauth или Transfer в статусе Approved. Запросы с IP-адресов, указанных в «Merchant API IP address», игнорируют эту проверку.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|-----------------------------|-------------------------------------------------------------------------------------------------------------------|----------------------------------------------|
| Интервал проверки в минутах | Временной интервал в минутах для анализа одобренных транзакций; установите 0 для бесконечности (не рекомендуется) | Тип: Int Default: 30 |

**Коды ошибок**

| # | Код | Название |
|-------|-------|----------------------------------------------------|
| 10007 | 1005 | Too many Emails for the same кредитная карта номер |

##### Кредитная карта номер already used with another Purpose

Эта проверка срабатывает, когда номер кредитной карты уже был успешно использован с другим назначением. Временной порог представляет собой скользящее окно, рассчитываемое назад от момента транзакции. Эта проверка сопоставляет только транзакции в рамках одного аккаунта Торговца. Анализирует транзакции Account verification, Sale, Preauth или Transfer в статусе Approved. Запросы с IP-адресов, указанных в «Merchant API IP address», игнорируют эту проверку.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|-----------------------------|-------------------------------------------------------------------------------------------------------------------|----------------------------------------------|
| Интервал проверки в минутах | Временной интервал в минутах для анализа одобренных транзакций; установите 0 для бесконечности (не рекомендуется) | Тип: Int Default: 30 |

**Коды ошибок**

| # | Код | Название |
|-------|-------|-----------------------------------------------------------------|
| 10081 | 1091 | Too many назначение платежаs for the same кредитная карта номер |

##### Кредитная карта номер already used with another Держатель карты название

Эта проверка срабатывает, когда номер кредитной карты уже был успешно использован с другим именем держателя карты. Расстояния между текущим именем держателя карты и существующими именами рассчитываются по алгоритму Левенштейна. Эта проверка сопоставляет только транзакции в пределах одной учётной записи Merchant. Анализирует транзакции Sale, Preauth или Transfer в статусе Approved.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|-----------------------------------|------------------------------------------------------------------------------------|----------------------------------------------|
| Интервал проверки в часах | время frame to analyse approved транзакцияs in hours | Тип: Int Default: 30 |
| Наибольшее расстояние Левенштейна | Наибольшее расстояние Левенштейна to consider both держатель карты названиеs equal | Тип: Int Default: 3 |

**Коды ошибок**

| # | Код | Название |
|-------|-------|-----------------------------------------------------------------------|
| 10089 | 1099 | Too many держатель карты названиеs for the same кредитная карта номер |

##### Клиент IP-адрес already used by another Держатель карты

Эта проверка срабатывает, когда IP-адрес клиента уже был успешно использован клиентом с другим именем держателя карты. Порог времени представляет собой скользящее окно, рассчитываемое назад от момента транзакции. Эта проверка сопоставляет только транзакции в пределах одной учётной записи Merchant. Анализирует транзакции Sale, Preauth или Transfer в статусе Approved.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|-----------------------------|--------------------------------------------------------|----------------------------------------------|
| Интервал проверки в минутах | время frame to analyse approved транзакцияs in minutes | Тип: Int Default: 30 |

**Коды ошибок**

| # | Код | Название |
|-------|-------|--------------------------------------------------|
| 10006 | 1004 | Слишком много держателей карт с одного IP-адреса |

##### Электронная почта клиента уже используется другим держателем карты

Эта проверка срабатывает, когда Customer Email уже был успешно использован клиентом с другим именем держателя карты. Порог времени представляет собой скользящее окно, рассчитываемое назад от момента транзакции. Эта проверка сопоставляет только транзакции в пределах одной учётной записи Merchant. Анализирует транзакции Sale, Preauth или Transfer в статусе Approved.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|-----------------------------|--------------------------------------------------------|----------------------------------------------|
| Интервал проверки в минутах | время frame to analyse approved транзакцияs in minutes | Тип: Int Default: 30 |

**Коды ошибок**

| # | Код | Название |
|-------|-------|-------------------------------------------------------------------|
| 10005 | 1003 | Слишком много держателей карт для одного адреса электронной почты |

##### Интервал одобреных транзакций для номера исходной кредитной карты

Эта проверка срабатывает, когда интервал после последней одобренной транзакции, связанной с точным номером исходной кредитной карты, меньше настроенных порогов. Временной порог — это окно времени, рассчитываемое назад от момента транзакции. Риск срабатывает на транзакции ниже установленного порога. Например, если установить порог 10 минут, а время последней одобренной транзакции — 10:00:00, он будет срабатывать до 10:10:01. Учитывает транзакции Sale, Preauth или Transfer в статусе Approved.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|-----------------------------|-----------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------|
| Интервал проверки в минутах | время frame to analyse approved транзакцияs in minutes | Тип: Int Default: 30 |
| for all торговец проектs | Y — для проверки транзакций по всем проектам текущего торговца; в противном случае проверяются транзакции только текущего проекта | Type: Enum Default: N |

**Коды ошибок**

| # | Код | Название |
|-------|-------|------------------------------------------------------------------|
| 10023 | 1033 | Too many approved транзакцияs for the same кредитная карта номер |

##### Source Кредитная карта Number declined транзакция interval

Эта проверка срабатывает, когда интервал после последней отклонённой транзакции, связанной с точным номером исходной кредитной карты, меньше настроенных порогов. Временной порог — это окно времени, рассчитываемое назад от момента транзакции. Риск срабатывает на транзакции ниже установленного порога. Например, если установить порог 10 минут, а время последней отклонённой транзакции — 10:00:00, он будет срабатывать до 10:10:01. Учитывает транзакции Account verification, Sale, Preauth или Transfer в статусах Declined и Filtered.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|-----------------------------|-----------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------|
| Интервал проверки в минутах | время frame to analyse approved транзакцияs in minutes | Тип: Int Default: 30 |
| for all торговец проектs | Y — для проверки транзакций по всем проектам текущего торговца; в противном случае проверяются транзакции только текущего проекта | Type: Enum Default: N |

**Коды ошибок**

| # | Код | Название |
|-------|-------|------------------------------------------------------------------|
| 10085 | 1095 | Too many declined транзакцияs for the same кредитная карта номер |

##### Source Кредитная карта Number Issuer Страна change частота for current Purpose

Эта проверка срабатывает, когда количество стран эмитента номера исходной кредитной карты, связанных с точным назначением, превышает настроенные пороги. Временной порог представляет собой скользящее окно, рассчитываемое назад от момента транзакции. Риск срабатывает на транзакции после установленного порога. Поэтому, если установить порог в 2 страны за 24 часа, он сработает на третьей уникальной стране за 24 часа для того же назначения. Учитывает уникальные страны эмитента номера исходной кредитной карты для транзакций Sale, Preauth или Transfer в статусе Approved текущего Торговца. Запросы с IP-адресов, указанных в «Merchant API IP address», игнорируют эту проверку.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|-------------------------------|---------------------------------------------------------------|--------------------------------------------------|
| Интервал проверки в часах | Временной интервал для расчёта количества стран | Тип: Int Default: 24 |
| Описание: ignore BINs | Запросы для перечисленных BIN игнорируют эту проверку | Тип: String Default: N/A |
| Максимальное количество стран | maximum номер of countries per one назначение платежа allowed | Тип: Int Default: 5 |

**Коды ошибок**

| # | Код | Название |
|-------|-------|----------------------------------------------|
| 10122 | 1132 | Слишком много стран для одной учётной записи |

##### Описание: Reversal frequency

Эта проверка срабатывает, когда количество или соотношение транзакций Reversal, рассчитанных для всего Торговца или точного проекта Торговца, превышает настроенные пороги. Соотношение рассчитывается за весь срок существования, а абсолютное число может быть ограничено за весь срок существования или ежедневно с 00:00:00 до 23:59:59. Риск срабатывает на транзакции после установленного порога. Поэтому, если установить порог в 5 транзакций Reversal, он сработает на шестой. Расчёт соотношения основан на количестве транзакций: общее число транзакций Reversal делится на общее число транзакций Sale. Учитывает транзакции Sale и Capture в статусе Approved, а также транзакции Reversal и Void.

Оценка: Нет

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|-----------------------------|-----------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------|
| absolute номер | maximum allowable номер of reversal транзакцияs | Тип: Int Default: 99999 |
| Ежедневное абсолютное число | maximum allowable номер of reversal транзакцияs per day | Тип: Int Default: 9999 |
| for all торговец проектs | Y — для проверки транзакций по всем проектам текущего торговца; в противном случае проверяются транзакции только текущего проекта | Type: Enum Default: N |
| Описание: percentage ratio | максимальный allowable ratio of reversal транзакцияs calculated by транзакция count in percent (from 0 to 100) | Тип: Decimal Default: 101.000 |

**Коды ошибок**

| # | Код | Название |
|-------|-------|-----------------------------------------|
| 10036 | 1046 | Слишком высокий коэффициент Reversal |
| 10037 | 1047 | Описание: Too many reversals |
| 10038 | 1048 | Слишком много операций Reversal сегодня |

##### Fingerprint использование частота for last 24 hours (дневной limit)

Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным отпечатком, превышает настроенные пороги. Временной порог — это окно в 24 часа, рассчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до часов. Риск срабатывает на транзакции после достижения установленного порога. Так, если установить порог в 10 транзакций, он сработает на 11-й транзакции за 24 часа. Учитываются транзакции Sale, Preauth или Transfer со статусом approved.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------|
| Лимит суммы | максимальный total транзакцияs сумма for the last 24 hours for this Fingerprint | Тип: Decimal Default: 999999999 |
| for all торговец проектs | Y — для проверки транзакций по всем проектам текущего торговца; в противном случае проверяются транзакции только текущего проекта | Type: Enum Default: Y |
| Лимит количества | максимальный total транзакцияs count for the last 24 hours for this Fingerprint | Тип: Int Default: 99999 |
| Исключить транзакции Cancel | Вычитает отменённые транзакции из рассчитанных порогов количества и суммы | Type: Enum Default: N |
| Описание: Использовать календарный деньs | «Y» — для расчёта по календарным дням вместо расчёта от момента включения фильтра; «N» — для расчёта от момента включения фильтра | Type: Enum Default: N |

**Коды ошибок**

| # | Код | Название |
|-------|-------|-------------------------------------------------|
| 10170 | 1180 | Превышен дневной лимит суммы для отпечатка |
| 10171 | 1181 | Превышен дневной лимит количества для отпечатка |

##### Fingerprint использование частота for last 7 days (недельный limit)

Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным отпечатком, превышает настроенные пороги. Временной порог — это окно в 7 дней, рассчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до часов. Риск срабатывает на транзакции после достижения установленного порога. Так, если установить порог в 10 транзакций, он сработает на 11-й транзакции за 168 часов. Учитываются транзакции Sale, Preauth или Transfer со статусом approved.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|---------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------|
| Лимит суммы | максимальный total транзакцияs сумма for the last 7 days for this Fingerprint | Тип: Decimal Default: 99999999 |
| Календарная неделя начинается с воскресенья | «Y»: календарная неделя начинается с воскресенья, «N»: календарная неделя начинается с понедельника | Type: Enum Default: N |
| for all торговец проектs | Y — для проверки транзакций по всем проектам текущего торговца; в противном случае проверяются транзакции только текущего проекта | Type: Enum Default: Y |
| Лимит количества | максимальный total транзакцияs count for the last 7 days for this credit Fingerprint | Тип: Int Default: 99999 |
| Исключить транзакции Cancel | Вычитает отменённые транзакции из рассчитанных порогов количества и суммы | Type: Enum Default: N |
| Описание: Использовать календарный деньs | «Y» — для расчёта по календарным дням вместо расчёта от момента включения фильтра; «N» — для расчёта от момента включения фильтра | Type: Enum Default: N |

**Коды ошибок**

| # | Код | Название |
|-------|-------|---------------------------------------------------|
| 10172 | 1182 | Превышен недельный лимит суммы для отпечатка |
| 10173 | 1183 | Превышен недельный лимит количества для отпечатка |

##### Fingerprint использование частота for last month (месячный limit)

Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным отпечатком, превышает настроенные пороги. Временной порог — это окно в один месяц, рассчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до дней. Риск срабатывает на 11-й транзакции в одном месяце при пороге 10 транзакций. Расчёт месяца основан на календаре: даты 28, 29, 30 и 31 марта будут приведены к 28 февраля. Учитываются транзакции Sale, Preauth или Transfer со статусом approved.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------|
| Лимит суммы | максимальный total транзакцияs сумма for the last one month for this Fingerprint | Тип: Decimal Default: 999999999 |
| for all торговец проектs | Y — для проверки транзакций по всем проектам текущего торговца; в противном случае проверяются транзакции только текущего проекта | Type: Enum Default: Y |
| Лимит количества | Максимальное общее количество транзакций за последний месяц для этого отпечатка карты | Тип: Int Default: 99999 |
| Исключить транзакции Cancel | Вычитает отменённые транзакции из рассчитанных порогов количества и суммы | Type: Enum Default: N |
| Описание: Использовать календарный деньs | «Y» — для расчёта по календарным дням вместо расчёта от момента включения фильтра; «N» — для расчёта от момента включения фильтра | Type: Enum Default: N |

**Коды ошибок**

| # | Код | Название |
|-------|-------|--------------------------------------------------|
| 10174 | 1184 | Превышен месячный лимит суммы для отпечатка |
| 10175 | 1185 | Превышен месячный лимит количества для отпечатка |

##### Source Кредитная карта Number использование частота for Fingerprint

Эта проверка срабатывает, когда количество кредитных карт источника, связанных с точным отпечатком, превышает настроенные пороги. Временной порог — это скользящее окно, рассчитываемое назад от момента транзакции. Риск срабатывает на транзакции после достижения установленного порога. Так, если установить порог в 10 кредитных карт за 6 часов, он сработает на 11-й уникальной кредитной карте за 6 часов. Учитываются уникальные номера кредитных карт источника для транзакций Account verification, Sale, Preauth или Transfer с любым статусом текущего торговца.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|------------------------------|---------------------------------------------------|----------------------------------------------|
| Интервал проверки в часах | время frame to calculate unique карта номер count | Тип: Int Default: 12 |
| Максимальное количество карт | Максимальное количество уникальных номеров карт | Тип: Int Default: 5 |

**Коды ошибок**

| # | Код | Название |
|-------|-------|--------------------------------------------------------------------------|
| 10176 | 1186 | Слишком много кредитных карт источника использовано для одного отпечатка |

##### Source Кредитная карта номер Issuer Страна change частота for current Device Fingerprint

Эта проверка срабатывает, когда количество стран эмитента кредитной карты источника, связанных с точным отпечатком, превышает настроенные пороги. Временной порог — скользящее окно, рассчитываемое назад от момента транзакции. Риск срабатывает на третьей уникальной стране за 24 часа для того же назначения при пороге 2 стран. Учитываются уникальные страны эмитента карт источника для транзакций Sale, Preauth или Transfer со статусом Approved текущего торговца. Запросы с IP-адресов из «Merchant API IP address» игнорируют эту проверку.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|-------------------------------|----------------------------------------------------|----------------------------------------------|
| Интервал проверки в часах | время frame to calculate unique карта номер count | Тип: Int Default: 24 |
| Максимальное количество стран | Максимальное количество стран для одного отпечатка | Тип: Int Default: 5 |

**Коды ошибок**

| # | Код | Название |
|-------|-------|------------------------------------------|
| 10177 | 1187 | Слишком много стран для одного отпечатка |

##### Destination Кредитная карта Number использование частота for Device fingerprint

Эта проверка срабатывает, когда количество кредитных карт получателя, связанных с точным отпечатком устройства, превышает настроенные пороги. Временной порог — это скользящее окно, рассчитываемое назад от момента транзакции. Риск срабатывает на транзакции после достижения установленного порога. Так, если установить порог в 10 кредитных карт за 6 часов, он сработает на 11-й уникальной кредитной карте за 6 часов. Учитываются уникальные номера кредитных карт получателя для транзакций Transfer с любым статусом текущего торговца.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|------------------------------|--------------------------------------------------------------------------|----------------------------------------------|
| Интервал проверки в часах | время frame to calculate unique destination кредитная карта номерs count | Тип: Int Default: 12 |
| Максимальное количество карт | maximum номер of unique destination кредитная картаs | Тип: Int Default: 5 |

**Коды ошибок**

| # | Код | Название |
|-------|-------|---------------------------------------------------------------------------|
| 10178 | 1188 | Слишком много кредитных карт получателя использовано для одного отпечатка |

##### Destination Кредитная карта номер Issuer Страна change частота for current Device fingerprint

Эта проверка срабатывает, когда количество стран эмитента кредитной карты получателя, связанных с точным отпечатком устройства, превышает настроенные пороги. Временной порог — скользящее окно, рассчитываемое назад от момента транзакции. Риск срабатывает на третьей уникальной стране за 24 часа для того же отпечатка при пороге 2 стран. Учитываются уникальные страны эмитента карт получателя для транзакций Sale, Preauth или Transfer со статусом Approved текущего торговца. Запросы с IP-адресов из «Merchant API IP address» игнорируют эту проверку.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|-------------------------------|---------------------------------------------------------------|----------------------------------------------|
| Интервал проверки в часах | время frame to calculate unique карта номер count | Тип: Int Default: 24 |
| Максимальное количество стран | Максимальное количество стран получателя для одного отпечатка | Тип: Int Default: 5 |

**Коды ошибок**

| # | Код | Название |
|-------|-------|---------------------------------------------------------------------------------|
| 10179 | 1189 | Слишком много стран кредитных карт получателя использовано для одного отпечатка |

##### Email использование частота for Device fingerprint

Эта проверка срабатывает, когда количество адресов электронной почты, связанных с точным отпечатком устройства, превышает настроенные пороги. Временной порог представляет собой скользящее окно, рассчитываемое назад от момента транзакции. Риск срабатывает на транзакции после установленного порога. Поэтому, если установить порог в 2 адреса электронной почты за 24 часа, он сработает на третьем уникальном адресе электронной почты за 24 часа для того же отпечатка. Учитывает уникальные адреса электронной почты для всех типов транзакций текущего Торговца.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|---------------------------------------------------|--------------------------------------------------------------------------------|----------------------------------------------|
| Интервал проверки в часах | Временной интервал для расчёта количества уникальных адресов электронной почты | Тип: Int Default: 24 |
| Максимальное количество адресов электронной почты | Максимальное количество адресов электронной почты для одного отпечатка | Тип: Int Default: 5 |

**Коды ошибок**

| # | Код | Название |
|-------|-------|---------------------------------------------------------------------------|
| 10180 | 1190 | Слишком много адресов электронной почты используется для одного отпечатка |

##### Purpose использование частота for Device fingerprint

Эта проверка срабатывает, когда количество назначений, связанных с точным отпечатком устройства, превышает настроенные пороги. Временной порог — это скользящее окно, рассчитываемое назад от момента транзакции. Риск срабатывает на транзакции после достижения установленного порога. Так, если установить порог в 2 назначения за 24 часа, он сработает на третьем уникальном назначении за 24 часа для того же отпечатка. Учитываются уникальные назначения для всех типов транзакций текущего торговца.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|------------------------------------|-----------------------------------------------------------|----------------------------------------------|
| Интервал проверки в часах | время frame to calculate unique назначение платежаs count | Тип: Int Default: 24 |
| Максимальное количество назначений | maximum номер of назначение платежаs for one fingerprint | Тип: Int Default: 5 |

**Коды ошибок**

| # | Код | Название |
|-------|-------|------------------------------------------------------------|
| 10181 | 1191 | Too many назначение платежаs used for the same fingerprint |

##### Account Number использование частота for last 24 hours (дневной limit)

Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным номером счёта, превышает настроенные пороги. Временной порог — это окно в 24 часа, рассчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до часов. Риск срабатывает на транзакции после достижения установленного порога. Так, если установить порог в 10 транзакций, он сработает на 11-й транзакции за 24 часа. Учитываются транзакции Sale, Preauth, Payout или Transfer со статусом approved.

Оценка: Нет

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|-------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------|
| Лимит суммы | maximum total транзакцияs сумма for the last 24 hours for this account номер | Тип: Decimal Default: 999999999 |
| for all торговец проектs | Будет рассчитана текущая общая сумма или количество транзакций за последние 24 часа для этого значения кредитной карты: Y — для всех проектов; 3D — только для 3D-шлюзов; Non3D — только для не-3D-шлюзов; N — только для текущего проекта текущего торговца; затем значение будет конвертировано в валюту текущего проекта для сравнения с лимитами суммы или количества. | Type: Enum Default: Y |
| Лимит количества | максимальный total транзакцияs count for the last 24 hours for this account номер | Тип: Int Default: 99999999 |
| Описание: skip payouts | Описание: ignore payouts | Type: Enum Default: N |
| Исключить транзакции Cancel | Игнорировать транзакции Cancel для двухэтапных платежей | Type: Enum Default: N |
| Использовать календарный день | «Y» — для расчёта по календарным дням вместо расчёта от момента включения фильтра; «N» — для расчёта от момента включения фильтра | Type: Enum Default: N |

**Коды ошибок**

| # | Код | Название |
|-------|-------|-----------------------------------------------------------|
| 10187 | 1197 | Daily сумма лимит превышен for account номер address |
| 10188 | 1198 | Daily количество лимит превышен for account номер address |

##### Account Number использование частота for last 7 days (недельный limit)

Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным номером счёта, превышает настроенные пороги. Временной порог — это окно в 7 дней, рассчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до часов. Риск срабатывает на транзакции после достижения установленного порога. Так, если установить порог в 10 транзакций, он сработает на 11-й транзакции за 168 часов. Учитываются транзакции Sale, Preauth, Payout или Transfer со статусом approved.

Оценка: Нет

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|---------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------|
| Лимит суммы | maximum total транзакцияs сумма for the last 7 days for this account номер | Тип: Decimal Default: 999999999 |
| Календарная неделя начинается с воскресенья | «Y»: календарная неделя начинается с воскресенья, «N»: календарная неделя начинается с понедельника | Type: Enum Default: N |
| for all торговец проектs | Будет рассчитана текущая общая сумма или количество транзакций за последние 7 дней для этого значения кредитной карты: Y — для всех проектов; 3D — только для 3D-шлюзов; Non3D — только для не-3D-шлюзов; N — только для текущего проекта текущего торговца; затем значение будет конвертировано в валюту текущего проекта для сравнения с лимитами суммы или количества. | Type: Enum Default: Y |
| Лимит количества | максимальный total транзакцияs count for the last 7 days for this account номер calculated | Тип: Int Default: 99999999 |
| Описание: skip payouts | Описание: ignore payouts | Type: Enum Default: N |
| Исключить транзакции Cancel | Игнорировать транзакции Cancel для двухэтапных платежей | Type: Enum Default: N |
| Описание: use calendar week | «Y» — для расчёта по календарной неделе вместо расчёта от момента включения фильтра; «N» — для расчёта от момента включения фильтра | Type: Enum Default: N |

**Коды ошибок**

| # | Код | Название |
|-------|-------|------------------------------------------------------------|
| 10189 | 1199 | Weekly сумма лимит превышен for account номер address |
| 10190 | 1200 | Weekly количество лимит превышен for account номер address |

##### Account Number использование частота for last month (месячный limit)

Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным номером счёта, превышает настроенные пороги. Временной порог — это окно в один месяц, рассчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до дней. Риск срабатывает на 11-й транзакции в одном месяце при пороге 10 транзакций. Расчёт месяца основан на календаре: даты 28, 29, 30 и 31 марта будут приведены к 28 февраля. Учитываются транзакции Sale, Preauth, Payout или Transfer со статусом approved.

Оценка: Нет

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------|
| Лимит суммы | maximum total транзакцияs сумма for the last one month for this account номер | Тип: Decimal Default: 999999999 |
| for all торговец проектs | Будет рассчитана текущая общая сумма или количество транзакций за последний месяц для этого значения кредитной карты: Y — для всех проектов; 3D — только для 3D-шлюзов; Non3D — только для не-3D-шлюзов; N — только для текущего проекта текущего торговца; затем значение будет конвертировано в валюту текущего проекта для сравнения с лимитами суммы или количества. | Type: Enum Default: Y |
| Лимит количества | максимальный total транзакцияs count for the last one month for this account номер | Тип: Int Default: 99999999 |
| Описание: skip payouts | Описание: ignore payouts | Type: Enum Default: N |
| Исключить транзакции Cancel | Игнорировать транзакции Cancel для двухэтапных платежей | Type: Enum Default: N |
| Описание: use calendar month | «Y» — для расчёта по календарному месяцу вместо расчёта от момента включения фильтра; «N» — для расчёта от момента включения фильтра | Type: Enum Default: N |

**Коды ошибок**

| # | Код | Название |
|-------|-------|-------------------------------------------------------------|
| 10191 | 1201 | Monthly сумма лимит превышен for account номер address |
| 10192 | 1202 | Monthly количество лимит превышен for account номер address |

##### Предотвращение транзакции с той же суммой

Эта проверка срабатывает, когда за временной порог (в секундах) выполняется более одной транзакции с одинаковой суммой. Максимальный временной порог — это окно в 300 секунд, рассчитываемое назад от момента первой транзакции. Риск срабатывает на второй транзакции с той же суммой в течение установленного временного порога. Учитываются транзакции Sale, Preauth, Payout или Transfer.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|-----------------------------------|----------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------|
| Интервал проверки в секундах | максимальный интервал в секундах для проверки запросов с одинаковой суммой; значения более 300 секунд или менее 10 секунд игнорируются | Тип: int Default: 60 |
| Пропустить отклонённые транзакции | Y — пропускать сессии со статусом Filtered или Declined, Описание: N - otherwise | Type: Enum Default: N |

**Коды ошибок**

| # | Код | Название |
|-------|-------|-----------------------------------------------------------------------------|
| 10198 | 1208 | Такая сумма транзакции уже была обработана в установленном временном пороге |

##### Частота использования страны эмитента

Эта проверка срабатывает, когда количество транзакций, связанных с одной страной эмитента карты, превышает настроенные пороги. Максимальный временной порог — это окно в 300 секунд, рассчитываемое назад от момента первой транзакции. Риск срабатывает на транзакции после достижения установленного порога. Так, если установить порог в 10 транзакций, он сработает на 11-й транзакции за 300 секунд. Учитываются транзакции Sale, Preauth, Payout или Transfer.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|-----------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------|
| Интервал проверки в секундах | максимальный интервал в секундах для проверки транзакций, связанных с одной и той же страной эмитента карты; значения более 300 секунд или менее 10 секунд игнорируются | Тип: int Default: 60 |
| Описание: Quantity limit | Выберите значение количества транзакций, при котором сработает фильтр | Тип: int Default: 10 |
| Пропустить идентификатор страны | Выберите страны, к которым будет применяться фильтр | Type: List Default: \* |
| Пропустить отклонённые транзакции | Y — пропускать сессии со статусом Filtered или Declined, Описание: N - otherwise | Type: Enum Default: N |

**Коды ошибок**

| # | Код | Название |
|-------|-------|---------------------------------------------------|
| 10199 | 1209 | Превышение лимита карт, выпущенных в одной стране |

##### Частота использования назначения за последний год (годовой лимит)

Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным назначением, превышает настроенные пороги. Временной порог — окно в один год, рассчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до дней. Риск срабатывает на 101-й транзакции за год при пороге 100. Расчёт года может начинаться с начала календарного года или с момента активации фильтра, усечённого до месяца, минус 12 месяцев. Например, если фильтр активирован 15 мая 2021 года, будут учитываться транзакции с мая 2020 года. Учитываются транзакции Sale, Preauth или Transfer со статусом approved.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|-----------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------|
| Лимит суммы | Максимальная общая сумма транзакций за последний год для этого назначения | Тип: int Default: 999999999 |
| for all торговец проектs | будет рассчитана текущая общая сумма или количество транзакций за последний год для этого значения Purpose: Y — для всех проектов; 3D — только для 3D-шлюзов; Non3D — только для нешлюзов 3D; N — только для текущего проекта текущего Торговца с конвертацией в валюту текущего проекта для сравнения с ограничениями суммы или количества. | Type: Enum Default: Y |
| Лимит количества | Максимальное общее количество транзакций за последний год для этого назначения | Тип: int Default: 99999 |
| Исключить транзакции Cancel | \* | Type: Enum Default: N |
| Описание: use calendar year | \* | Type: Enum Default: N |

**Коды ошибок**

| # | Код | Название |
|-------|-------|--------------------------------------------------|
| 10200 | 1210 | Превышен годовой лимит суммы для назначения |
| 10201 | 1211 | Превышен годовой лимит количества для назначения |

##### Частота использования диапазона BIN

Эта проверка срабатывает, когда количество транзакций, связанных с определённым диапазоном BIN карты, превышает настроенные пороги. Максимальный временной порог составляет окно в 300 секунд, рассчитываемое назад от момента первой транзакции. Риск срабатывает на транзакции после установленного порога. Поэтому, если установить порог в 10 транзакций, он сработает на 11-й транзакции за 300 секунд. Учитывает транзакции Sale, Preauth, Payout или Transfer.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|-----------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------|
| Описание: BIN range exceptions | Список диапазонов BIN карт, для которых проверки не выполняются | Type: \* Default: \* |
| Интервал проверки в секундах | максимальный интервал в секундах для проверки транзакций, связанных с одной и той же страной эмитента карты; значения более 300 секунд или менее 10 секунд игнорируются | Тип: int Default: 60 |
| Лимит количества | Выберите значение количества транзакций, при котором сработает фильтр | Тип: int Default: 10 |
| Пропустить отклонённые транзакции | Y — пропускать сессии со статусом Filtered или Declined, Описание: N - otherwise | Type: Enum Default: N |

**Коды ошибок**

| # | Код | Название |
|-------|-------|-----------------------------------------------------------------|
| 10202 | 1212 | Превышение лимита карт, связанных с тем же диапазоном BIN карты |

##### Аномальное время транзакции

Эта проверка срабатывает, когда транзакции получены за пределами заданного временного интервала. Так, если установить интервал с 10:00 до 20:00, она сработает для любой транзакции с 0:00 до 9:59 и с 20:00 до 0:00. Время задаётся в часовом поясе GMT+3. Учитываются транзакции Sale, Preauth, Payout или Transfer.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Значение |
|----------------------------|----------------------------------------------------|
| Описание: Time period from | Тип: String Default: 10:00 |
| Описание: Time period to | Тип: String Default: 19:00 |
| Описание: Time zone | Тип: Int Default: 3 |

**Коды ошибок**

| # | Код | Название |
|-------|-------|------------------------------------------------------------------------------------------------|
| 10203 | 1213 | Транзакция в аномальное время |
| 10204 | 1214 | Проверка данных клиента не удалась (имя, фамилия, держатель карты, электронная почта, телефон) |

##### Source Кредитная карта Number decline частота for last week (недельный decline limit)

Эта проверка срабатывает, когда количество или сумма отклонённых транзакций, связанных с точным номером кредитной карты источника, превышает настроенные пороги. Временной порог — это окно в 7 дней, рассчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до дней. Риск срабатывает на транзакции после достижения установленного порога. Так, если установить порог в 10 транзакций, он сработает на 11-й транзакции за 168 часов. Учитываются транзакции Account verification, Sale, Preauth или Transfer со статусом Declined.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|---------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------|
| Лимит суммы | maximum total транзакцияs сумма for the last 7 days for this кредитная карта used as Source карта | Тип: Decimal Default: 999999999 |
| Календарная неделя начинается с воскресенья | «Y»: календарная неделя начинается с воскресенья, «N»: календарная неделя начинается с понедельника | Type: Enum Default: N |
| for all торговец проектs | Будет рассчитана текущая общая сумма или количество транзакций за последние 7 дней для этой кредитной карты: Y — для всех проектов; 3D — только для 3D-шлюзов; Non3D — только для не-3D-шлюзов; N — только для текущего проекта текущего торговца; затем значение будет конвертировано в валюту текущего проекта для сравнения с лимитами суммы | Type: Enum Default: N |
| Лимит количества | maximum total транзакцияs count for the last 7 days for this кредитная карта used as Source карта | Тип: Int Default: 99999 |
| Описание: use calendar week | «Y» — для расчёта по календарной неделе вместо расчёта от момента включения фильтра; «N» — для расчёта от момента включения фильтра | Type: Enum Default: N |

**Коды ошибок**

| # | Код | Название |
|-------|-------|----------------------------------------------------------|
| 10206 | 1216 | Weekly decline сумма лимит превышен for отправитель |
| 10207 | 1217 | Weekly decline количество лимит превышен for отправитель |

##### Source Кредитная карта Number использование частота per Email address for last 24 hours (дневной limit)

This check fires when the number of Source Credit Cards associated with exact Email address exceeds the configured thresholds. The time threshold is a moving window calculated backwards from the moment of the transaction.
The risk fires on the transaction after the set threshold. So, if you set a threshold of 10 Credit Cards, it fires on the 11th unique Credit Card in 24 hours.
Counts unique Source Credit Card numbers for Sale or Preauth transactions in any status for the current Merchant.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|-------------------------------|-----------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------|
| Описание: approved only | counts unique Source Кредитная карта номерs for Sale or Preauth транзакцияs in approved статус | Type: Enum Default: N |
| maximum карта номер count | максимальный total карта номер count for the last 24 hours for this Email address | Тип: Int Default: 99999 |
| Использовать календарный день | «Y» — для расчёта по календарным дням вместо расчёта от момента включения фильтра; «N» — для расчёта от момента включения фильтра | Type: Enum Default: N |

**Коды ошибок**

| # | Код | Название |
|-------|-------|----------------------------------------------------------|
| 10208 | 1218 | Daily карта номер count лимит превышен for email address |

##### Source Кредитная карта Number использование частота per Email address for last 7 days (недельный limit)

This check fires when the number of Source Credit Cards associated with exact Email address exceeds the configured thresholds. The time threshold is a moving window calculated backwards from the moment of the transaction.
The risk fires on the transaction after the set threshold. So, if you set a threshold of 10 Credit Cards, it fires on the 11th unique Credit Card in 7 days.
Counts unique Source Credit Card numbers for Sale or Preauth transactions in any status for the current Merchant.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|---------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------|
| Описание: approved only | counts unique Source Кредитная карта номерs for Sale or Preauth транзакцияs in approved статус | Type: Enum Default: N |
| Календарная неделя начинается с воскресенья | «Y»: календарная неделя начинается с воскресенья, «N»: календарная неделя начинается с понедельника | Type: Enum Default: N |
| maximum карта номер count | максимальный total карта номер count for the last 7 days for this Email address | Тип: Int Default: 99999 |
| Описание: use calendar week | «Y» — для расчёта по календарной неделе вместо расчёта от момента включения фильтра; «N» — для расчёта от момента включения фильтра | Type: Enum Default: N |

**Коды ошибок**

| # | Код | Название |
|-------|-------|-----------------------------------------------------------|
| 10209 | 1219 | Weekly карта номер count лимит превышен for email address |

##### Source Кредитная карта Number использование частота per Email address for last month (месячный limit)

This check fires when the number of Source Credit Cards associated with exact Email address exceeds the configured thresholds. The time threshold is a moving window calculated backwards from the moment of the transaction.
The risk fires on the transaction after the set threshold. So, if you set a threshold of 10 Credit Cards, it fires on the 11th unique Credit Card in 1 month.
Counts unique Source Credit Card numbers for Sale or Preauth transactions in any status for the current Merchant.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|------------------------------|--------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------|
| Описание: approved only | counts unique Source Кредитная карта номерs for Sale or Preauth транзакцияs in approved статус | Type: Enum Default: N |
| maximum карта номер count | максимальный total карта номер count for the last month for this Email address | Тип: Int Default: 99999 |
| Описание: use calendar month | «Y» — для расчёта по календарному месяцу вместо расчёта от момента включения фильтра; «N» — для расчёта от момента включения фильтра | Type: Enum Default: N |

**Коды ошибок**

| # | Код | Название |
|-------|-------|------------------------------------------------------------|
| 10210 | 1220 | Monthly карта номер count лимит превышен for email address |

##### Source Кредитная карта Number использование частота for последние N дней

Thявляется check fires when номер или сумма транзакцияs associated с exact Source credit карта номер exceeds configured thresholds. время threshold является a N days window calculated backwards из moment транзакция. N parameter (дата period) может be set из 1 в 30. For window calculation all транзакция датаs являются truncated в days. risk fires on транзакция after set threshold. So, if you set a threshold 10 транзакцияs, it fires on 11th транзакция in N days. Counts Sale, Preauth или Transfer транзакцияs in approved статус.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|-----------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------|
| Лимит суммы | maximum total транзакцияs сумма for the последние N дней for this кредитная карта used as Source карта | Тип: Decimal Default: 999999999 |
| for all торговец проектs | Будет рассчитана текущая общая сумма или количество транзакций за последние N дней для этого значения кредитной карты: Y — для всех проектов; 3D — только для 3D-шлюзов; Non3D — только для не-3D-шлюзов; N — только для текущего проекта текущего торговца; затем значение будет конвертировано в валюту текущего проекта для сравнения с лимитами суммы | Type: Enum Default: N |
| Описание: for last N days | Период дат можно задать от 1 до 30 дней | Тип: Int Default: 1 |
| Лимит количества | maximum total транзакцияs count for the последние N дней for this кредитная карта used as Source карта | Тип: Int Default: 99999 |
| Исключить транзакции Cancel | Игнорировать транзакции Cancel для двухэтапных платежей | Type: Enum Default: N |

**Коды ошибок**

| # | Код | Название |
|-------|-------|------------------------------------------------------------|
| 10211 | 1221 | Specified period сумма лимит превышен for отправитель |
| 10212 | 1222 | Specified period количество лимит превышен for отправитель |

##### Destination Кредитная карта Number использование частота for последние N дней

Thявляется check fires when номер или сумма транзакцияs associated с exact Destination credit карта номер exceeds configured thresholds. время threshold является a N days window calculated backwards из moment транзакция. N parameter (дата period) может be set из 1 в 30. For window calculation all транзакция датаs являются truncated в days. risk fires on транзакция after set threshold. So, if you set a threshold 10 транзакцияs, it fires on 11th транзакция in N days. Counts Transfer транзакцияs in approved статус.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|-----------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------|
| Лимит суммы | maximum total транзакцияs сумма for the последние N дней for this кредитная карта used as Destination карта | Тип: Decimal Default: 999999999 |
| for all торговец проектs | Будет рассчитана текущая общая сумма или количество транзакций за последние N дней для этого значения карты получателя: Y — для всех проектов; 3D — только для 3D-шлюзов; Non3D — только для не-3D-шлюзов; N — только для текущего проекта текущего торговца; затем значение будет конвертировано в валюту текущего проекта для сравнения с лимитами суммы. | Type: Enum Default: N |
| Описание: for last N days | Период дат можно задать от 1 до 30 дней | Тип: Int Default: 1 |
| Лимит количества | maximum total транзакцияs count for the последние N дней for this кредитная карта used as Destination карта | Тип: Int Default: 99999 |
| Исключить транзакции Cancel | Игнорировать транзакции Cancel для двухэтапных платежей | Type: Enum Default: N |

**Коды ошибок**

| # | Код | Название |
|-------|-------|-----------------------------------------------------------|
| 10213 | 1223 | Specified period сумма лимит превышен for получатель |
| 10214 | 1224 | Specified period количество лимит превышен for получатель |

##### Total Кредитная карта Number использование частота for последние N дней

Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным номером кредитной карты, используемым как источник или получатель, превышает настроенные пороги. Временной порог — это окно в N дней, рассчитываемое назад от момента транзакции. Параметр N можно установить от 1 до 30. При расчёте окна все даты транзакций усекаются до дней. Риск срабатывает на 11-й транзакции за N дней при пороге 10 транзакций. Учитываются транзакции Sale, Preauth или Transfer со статусом approved.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|-----------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------|
| Лимит суммы | maximum total транзакцияs сумма for the последние N дней for this кредитная карта used as Source or Destination карта | Тип: Decimal Default: 999999999 |
| for all торговец проектs | Будет рассчитана текущая общая сумма или количество транзакций за последние N дней для этого значения кредитной карты: Y — для всех проектов; 3D — только для 3D-шлюзов; Non3D — только для не-3D-шлюзов; N — только для текущего проекта текущего торговца; затем значение будет конвертировано в валюту текущего проекта для сравнения с лимитами суммы | Type: Enum Default: N |
| Описание: for last N days | Период дат можно задать от 1 до 30 дней | Тип: Int Default: 1 |
| Лимит количества | maximum total транзакцияs count for the последние N дней for this кредитная карта used as Source or Destination карта | Тип: Int Default: 99999 |
| Исключить транзакции Cancel | Игнорировать транзакции Cancel для двухэтапных платежей | Type: Enum Default: N |

**Коды ошибок**

| # | Код | Название |
|-------|-------|------------------------------------------------------------------|
| 10215 | 1225 | Specified period total сумма лимит превышен for отправитель |
| 10216 | 1226 | Specified period total количество лимит превышен for отправитель |
| 10217 | 1227 | Specified period total сумма лимит превышен for получатель |
| 10218 | 1228 | Specified period total количество лимит превышен for получатель |

##### Частота использования назначения платежа за последние N дней

Thявляется check fires when номер или сумма транзакцияs associated с exact Purpose exceeds configured thresholds. время threshold является a N days window calculated backwards из moment транзакция. N parameter (дата period) может be set из 1 в 30. For window calculation all транзакция датаs являются truncated в days. risk fires on транзакция after set threshold. So, if you set a threshold 10 транзакцияs, it fires on 11th транзакция in N days. Counts Sale, Preauth или Transfer транзакцияs in approved статус.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|-----------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------|
| Лимит суммы | maximum total транзакцияs сумма for the последние N дней for this Purpose | Тип: Decimal Default: 999999999 |
| for all торговец проектs | Будет рассчитана текущая общая сумма или количество транзакций за последние N дней для этого назначения: Y — для всех проектов; 3D — только для 3D-шлюзов; Non3D — только для не-3D-шлюзов; N — только для текущего проекта текущего торговца; затем значение будет конвертировано в валюту текущего проекта для сравнения с лимитами суммы | Type: Enum Default: N |
| Описание: for last N days | Период дат можно задать от 1 до 30 дней | Тип: Int Default: 1 |
| Лимит количества | maximum total транзакцияs count for the последние N дней for this Purpose | Тип: Int Default: 99999 |
| Исключить транзакции Cancel | Игнорировать транзакции Cancel для двухэтапных платежей | Type: Enum Default: N |

**Коды ошибок**

| # | Код | Название |
|-------|-------|-------------------------------------------------------------------|
| 10219 | 1229 | Specified period сумма лимит превышен for назначение платежа |
| 10220 | 1230 | Specified period количество лимит превышен for назначение платежа |

##### Частота использования электронной почты за последние N дней

Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным адресом электронной почты, превышает настроенные пороги. Временной порог — это окно в N дней, рассчитываемое назад от момента транзакции. Параметр N (период дат) можно установить от 1 до 30. При расчёте окна все даты транзакций усекаются до дней. Риск срабатывает на транзакции после достижения установленного порога. Так, если установить порог в 10 транзакций, он сработает на 11-й транзакции за N дней. Учитываются транзакции Sale, Preauth или Transfer со статусом approved.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|-----------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------|
| Лимит суммы | maximum total транзакцияs сумма for the последние N дней for this Email | Тип: Decimal Default: 999999999 |
| for all торговец проектs | Будет рассчитана текущая общая сумма или количество транзакций за последние N дней для этого адреса электронной почты: Y — для всех проектов; 3D — только для 3D-шлюзов; Non3D — только для не-3D-шлюзов; N — только для текущего проекта текущего торговца; затем значение будет конвертировано в валюту текущего проекта для сравнения с лимитами суммы | Type: Enum Default: N |
| Описание: for last N days | Период дат можно задать от 1 до 30 дней | Тип: Int Default: 1 |
| Лимит количества | maximum total транзакцияs count for the последние N дней for this Email | Тип: Int Default: 99999 |
| Исключить транзакции Cancel | Игнорировать транзакции Cancel для двухэтапных платежей | Type: Enum Default: N |

**Коды ошибок**

| # | Код | Название |
|-------|-------|--------------------------------------------------------------|
| 10221 | 1231 | Specified period сумма лимит превышен for email address |
| 10222 | 1232 | Specified period количество лимит превышен for email address |

##### Частота использования IP-адреса за последние N дней

Thявляется check fires when номер или сумма транзакцияs associated с exact IP address exceeds configured thresholds. время threshold является a N days window calculated backwards из moment транзакция. N parameter (дата period) может be set из 1 в 30. For window calculation all транзакция датаs являются truncated в days. risk fires on транзакция after set threshold. So, if you set a threshold 10 транзакцияs, it fires on 11th транзакция in N days. Counts Sale, Preauth или Transfer транзакцияs in approved статус.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|-----------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------|
| Лимит суммы | maximum total транзакцияs сумма for the последние N дней for this IP-адрес | Тип: Decimal Default: 999999999 |
| for all торговец проектs | Будет рассчитана текущая общая сумма или количество транзакций за последние N дней для этого IP-адреса: Y — для всех проектов; 3D — только для 3D-шлюзов; Non3D — только для не-3D-шлюзов; N — только для текущего проекта текущего торговца; затем значение будет конвертировано в валюту текущего проекта для сравнения с лимитами суммы | Type: Enum Default: N |
| Описание: for last N days | Период дат можно задать от 1 до 30 дней | Тип: Int Default: 1 |
| Лимит количества | maximum total транзакцияs count for the последние N дней for this IP-адрес | Тип: Int Default: 99999 |
| Исключить транзакции Cancel | Игнорировать транзакции Cancel для двухэтапных платежей | Type: Enum Default: N |

**Коды ошибок**

| # | Код | Название |
|-------|-------|---------------------------------------------------------|
| 10223 | 1233 | Specified period сумма лимит превышен for IP-адрес |
| 10224 | 1234 | Specified period количество лимит превышен for IP-адрес |

##### Fingerprint использование частота for последние N дней

Thявляется check fires when номер или сумма транзакцияs associated с exact Fingerprint exceeds configured thresholds. время threshold является a N days window calculated backwards из moment транзакция. N parameter (дата period) может be set из 1 в 30. For window calculation all транзакция датаs являются truncated в days. risk fires on транзакция after set threshold. So, if you set a threshold 10 транзакцияs, it fires on 11th транзакция in N days. Counts Sale, Preauth или Transfer транзакцияs in approved статус.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|-----------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------|
| Лимит суммы | maximum total транзакцияs сумма for the последние N дней for this Fingerprint | Тип: Decimal Default: 999999999 |
| for all торговец проектs | Будет рассчитана текущая общая сумма или количество транзакций за последние N дней для этого отпечатка: Y — для всех проектов; 3D — только для 3D-шлюзов; Non3D — только для не-3D-шлюзов; N — только для текущего проекта текущего торговца; затем значение будет конвертировано в валюту текущего проекта для сравнения с лимитами суммы | Type: Enum Default: N |
| Описание: for last N days | Период дат можно задать от 1 до 30 дней | Тип: Int Default: 1 |
| Лимит количества | maximum total транзакцияs count for the последние N дней for this Fingerprint | Тип: Int Default: 99999 |
| Исключить транзакции Cancel | Игнорировать транзакции Cancel для двухэтапных платежей | Type: Enum Default: N |

**Коды ошибок**

| # | Код | Название |
|-------|-------|------------------------------------------------------------|
| 10225 | 1235 | Specified period сумма лимит превышен for fingerprint |
| 10226 | 1236 | Specified period количество лимит превышен for fingerprint |

##### Account Number использование частота for последние N дней

Эта проверка срабатывает, когда количество или сумма транзакций, связанных с точным номером счёта, превышает настроенные пороги. Временной порог составляет окно в N дней, рассчитываемое назад от момента транзакции. Параметр N (период дат) можно задать от 1 до 30. Для расчёта окна все даты транзакций усекаются до дней. Риск срабатывает на транзакции после установленного порога. Поэтому, если установить порог в 10 транзакций, он сработает на 11-й транзакции за N дней. Учитывает транзакции Sale, Preauth, Payout или Transfer в одобренном статусе.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|-----------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------|
| Лимит суммы | maximum total транзакцияs сумма for the последние N дней for this Account Number | Тип: Decimal Default: 999999999 |
| for all торговец проектs | Будет рассчитана текущая общая сумма или количество транзакций за последние N дней для этого номера счёта: Y — для всех проектов; 3D — только для 3D-шлюзов; Non3D — только для не-3D-шлюзов; N — только для текущего проекта текущего торговца; затем значение будет конвертировано в валюту текущего проекта для сравнения с лимитами суммы | Type: Enum Default: N |
| Описание: for last N days | Период дат можно задать от 1 до 30 дней | Тип: Int Default: 1 |
| Лимит количества | maximum total транзакцияs count for the последние N дней for this Account Number | Тип: Int Default: 99999 |
| Исключить транзакции Cancel | Игнорировать транзакции Cancel для двухэтапных платежей | Type: Enum Default: N |

**Коды ошибок**

| # | Код | Название |
|-------|-------|--------------------------------------------------------------|
| 10227 | 1237 | Specified period сумма лимит превышен for account номер |
| 10228 | 1238 | Specified period количество лимит превышен for account номер |

##### Source Кредитная карта Number decline частота for last month (месячный decline limit)

Эта проверка срабатывает, когда количество или сумма отклонённых транзакций, связанных с точным номером кредитной карты источника, превышает настроенные пороги. Временной порог — это окно в один месяц, рассчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до дней. Риск срабатывает на транзакции после достижения установленного порога. Так, если установить порог в 10 транзакций, он сработает на 11-й транзакции в течение одного месяца. Расчёт месяца основан на календаре: даты 28, 29, 30 и 31 марта при расчёте окна будут приведены к 28 февраля. Учитываются транзакции Account verification, Sale, Preauth или Transfer со статусом Declined.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------|
| Лимит суммы | maximum total транзакцияs сумма for the last month for this кредитная карта used as Source карта | Тип: Decimal Default: 999999999 |
| for all торговец проектs | Будет рассчитана текущая общая сумма или количество транзакций за последний месяц для этой кредитной карты: Y — для всех проектов; 3D — только для 3D-шлюзов; Non3D — только для не-3D-шлюзов; N — только для текущего проекта текущего торговца; затем значение будет конвертировано в валюту текущего проекта для сравнения с лимитами суммы | Type: Enum Default: N |
| Лимит количества | maximum total транзакцияs count for the last month for this кредитная карта used as Source карта | Тип: Int Default: 99999 |
| Описание: use calendar month | «Y» — для расчёта по календарному месяцу вместо расчёта от момента включения фильтра; «N» — для расчёта от момента включения фильтра | Type: Enum Default: N |

**Коды ошибок**

| # | Код | Название |
|-------|-------|-----------------------------------------------------------|
| 10229 | 1239 | Monthly decline сумма лимит превышен for отправитель |
| 10230 | 1240 | Monthly decline количество лимит превышен for отправитель |

##### Destination Кредитная карта Number decline частота for last 24 hours (дневной decline limit)

Thявляется check fires when номер или сумма declined транзакцияs associated с exact Destination credit карта номер exceeds configured thresholds. время threshold является a 24 hours window calculated backwards из moment транзакция. For window calculation all транзакция датаs являются truncated в hours. risk fires on транзакция after set threshold. So, if you set a threshold 10 транзакцияs, it fires on 11th транзакция in 24 hours. Counts Transfer транзакцияs in Declined статус.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|-------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------|
| Лимит суммы | maximum total транзакцияs сумма for the last 24 hours for this кредитная карта used as Destination карта | Тип: Decimal Default: 999999999 |
| for all торговец проектs | Будет рассчитана текущая общая сумма или количество транзакций за последний день для этой кредитной карты: Y — для всех проектов; 3D — только для 3D-шлюзов; Non3D — только для не-3D-шлюзов; N — только для текущего проекта текущего торговца; затем значение будет конвертировано в валюту текущего проекта для сравнения с лимитами суммы | Type: Enum Default: N |
| Лимит количества | maximum total транзакцияs count for the last day for this кредитная карта used as Destination карта | Тип: Int Default: 99999 |
| Использовать календарный день | «Y» — для расчёта по календарному дню вместо расчёта от момента включения фильтра; «N» — для расчёта от момента включения фильтра | Type: Enum Default: N |

**Коды ошибок**

| # | Код | Название |
|-------|-------|--------------------------------------------------------|
| 10231 | 1241 | Daily decline сумма лимит превышен for получатель |
| 10232 | 1242 | Daily decline количество лимит превышен for получатель |

##### Destination Кредитная карта Number decline частота for last week (недельный decline limit)

Thявляется check fires when номер или сумма declined транзакцияs associated с exact Destination credit карта номер exceeds configured thresholds. время threshold является a 7 days window calculated backwards из moment транзакция. For window calculation all транзакция датаs являются truncated в days. risk fires on транзакция after set threshold. So, if you set a threshold 10 транзакцияs, it fires on 11th транзакция in 168 hours. Counts Transfer транзакцияs in Declined статус.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|---------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------|
| Лимит суммы | maximum total транзакцияs сумма for the last week for this кредитная карта used as Destination карта | Тип: Decimal Default: 999999999 |
| Календарная неделя начинается с воскресенья | «Y»: календарная неделя начинается с воскресенья, «N»: календарная неделя начинается с понедельника | Type: Enum Default: N |
| for all торговец проектs | Будет рассчитана текущая общая сумма или количество транзакций за последнюю неделю для этой кредитной карты: Y — для всех проектов; 3D — только для 3D-шлюзов; Non3D — только для не-3D-шлюзов; N — только для текущего проекта текущего торговца; затем значение будет конвертировано в валюту текущего проекта для сравнения с лимитами суммы | Type: Enum Default: N |
| Лимит количества | maximum total транзакцияs count for the last week for this кредитная карта used as Destination карта | Тип: Int Default: 99999 |
| Описание: use calendar week | «Y» — для расчёта по календарной неделе вместо расчёта от момента включения фильтра; «N» — для расчёта от момента включения фильтра | Type: Enum Default: N |

**Коды ошибок**

| # | Код | Название |
|-------|-------|---------------------------------------------------------|
| 10233 | 1243 | Weekly decline сумма лимит превышен for получатель |
| 10234 | 1244 | Weekly decline количество лимит превышен for получатель |

##### Destination Кредитная карта Number decline частота for last month (месячный decline limit)

Эта проверка срабатывает, когда количество или сумма отклонённых транзакций, связанных с точным номером кредитной карты получателя, превышает настроенные пороги. Временной порог — это окно в один месяц, рассчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до дней. Риск срабатывает на транзакции после достижения установленного порога. Так, если установить порог в 10 транзакций, он сработает на 11-й транзакции в течение одного месяца. Расчёт месяца основан на календаре: даты 28, 29, 30 и 31 марта при расчёте окна будут приведены к 28 февраля. Учитываются транзакции Transfer со статусом Declined.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------|
| Лимит суммы | maximum total транзакцияs сумма for the last month for this кредитная карта used as Destination карта | Тип: Decimal Default: 999999999 |
| for all торговец проектs | Будет рассчитана текущая общая сумма или количество транзакций за последний месяц для этой кредитной карты: Y — для всех проектов; 3D — только для 3D-шлюзов; Non3D — только для не-3D-шлюзов; N — только для текущего проекта текущего торговца; затем значение будет конвертировано в валюту текущего проекта для сравнения с лимитами суммы | Type: Enum Default: N |
| Лимит количества | maximum total транзакцияs count for the last month for this кредитная карта used as Destination карта | Тип: Int Default: 99999 |
| Описание: use calendar month | «Y» — для расчёта по календарному месяцу вместо расчёта от момента включения фильтра; «N» — для расчёта от момента включения фильтра | Type: Enum Default: N |

**Коды ошибок**

| # | Код | Название |
|-------|-------|--------------------------------------------------------------|
| 10235 | 1245 | Превышен месячный лимит суммы отклонений для получателя |
| 10236 | 1246 | Превышен месячный лимит количества отклонений для получателя |

##### Total Кредитная карта Number decline частота for last 24 hours (дневной decline limit)

Thявляется check fires when номер или сумма declined транзакцияs associated с exact Source или Destination credit карта номер exceeds configured thresholds. время threshold является a 24 hours window calculated backwards из moment транзакция. For window calculation all транзакция датаs являются truncated в hours. risk fires on транзакция after set threshold. So, if you set a threshold 10 транзакцияs, it fires on 11th транзакция in 24 hours. Counts Account verification, Sale, Preauth или Transfer транзакцияs in Declined статус.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|-------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------|
| Лимит суммы | maximum total транзакцияs сумма for the last 24 hours for this кредитная карта | Тип: Decimal Default: 999999999 |
| for all торговец проектs | Будет рассчитана текущая общая сумма или количество транзакций за последний день для этой кредитной карты: Y — для всех проектов; 3D — только для 3D-шлюзов; Non3D — только для не-3D-шлюзов; N — только для текущего проекта текущего торговца; затем значение будет конвертировано в валюту текущего проекта для сравнения с лимитами суммы | Type: Enum Default: N |
| Лимит количества | maximum total транзакцияs count for the last day for this кредитная карта | Тип: Int Default: 99999 |
| Использовать календарный день | «Y» — для расчёта по календарному дню вместо расчёта от момента включения фильтра; «N» — для расчёта от момента включения фильтра | Type: Enum Default: N |

**Коды ошибок**

| # | Код | Название |
|-------|-------|---------------------------------------------------------------|
| 10237 | 1247 | Daily decline total сумма лимит превышен for отправитель |
| 10238 | 1248 | Daily decline total количество лимит превышен for отправитель |
| 10239 | 1249 | Daily decline total сумма лимит превышен for получатель |
| 10240 | 1250 | Daily decline total количество лимит превышен for получатель |

##### Total Кредитная карта Number decline частота for last week (недельный decline limit)

Thявляется check fires when номер или сумма declined транзакцияs associated с exact Source или Destination credit карта номер exceeds configured thresholds. время threshold является a 7 days window calculated backwards из moment транзакция. For window calculation all транзакция датаs являются truncated в days. risk fires on транзакция after set threshold. So, if you set a threshold 10 транзакцияs, it fires on 11th транзакция in 168 hours. Counts Account verification, Sale, Preauth или Transfer транзакцияs in Declined статус.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|---------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------|
| Лимит суммы | maximum total транзакцияs сумма for the last week for this кредитная карта | Тип: Decimal Default: 999999999 |
| Календарная неделя начинается с воскресенья | «Y»: календарная неделя начинается с воскресенья, «N»: календарная неделя начинается с понедельника | Type: Enum Default: N |
| for all торговец проектs | Будет рассчитана текущая общая сумма или количество транзакций за последнюю неделю для этой кредитной карты: Y — для всех проектов; 3D — только для 3D-шлюзов; Non3D — только для не-3D-шлюзов; N — только для текущего проекта текущего торговца; затем значение будет конвертировано в валюту текущего проекта для сравнения с лимитами суммы | Type: Enum Default: N |
| Лимит количества | maximum total транзакцияs count for the last week for this кредитная карта | Тип: Int Default: 99999 |
| Описание: use calendar week | «Y» — для расчёта по календарной неделе вместо расчёта от момента включения фильтра; «N» — для расчёта от момента включения фильтра | Type: Enum Default: N |

**Коды ошибок**

| # | Код | Название |
|-------|-------|----------------------------------------------------------------|
| 10241 | 1251 | Weekly decline total сумма лимит превышен for отправитель |
| 10242 | 1252 | Weekly decline total количество лимит превышен for отправитель |
| 10243 | 1253 | Weekly decline total сумма лимит превышен for получатель |
| 10244 | 1254 | Weekly decline total количество лимит превышен for получатель |

##### Total Кредитная карта Number decline частота for last month (месячный decline limit)

Эта проверка срабатывает, когда количество или сумма отклонённых транзакций, связанных с точным номером кредитной карты источника или получателя, превышает настроенные пороги. Временной порог — это окно в один месяц, рассчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до дней. Риск срабатывает на транзакции после достижения установленного порога. Так, если установить порог в 10 транзакций, он сработает на 11-й транзакции в течение одного месяца. Расчёт месяца основан на календаре: даты 28, 29, 30 и 31 марта при расчёте окна будут приведены к 28 февраля. Учитываются транзакции Account verification, Sale, Preauth или Transfer со статусом Declined.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------|
| Лимит суммы | maximum total транзакцияs сумма for the last month for this кредитная карта | Тип: Decimal Default: 999999999 |
| for all торговец проектs | Будет рассчитана текущая общая сумма или количество транзакций за последний месяц для этой кредитной карты: Y — для всех проектов; 3D — только для 3D-шлюзов; Non3D — только для не-3D-шлюзов; N — только для текущего проекта текущего торговца; затем значение будет конвертировано в валюту текущего проекта для сравнения с лимитами суммы | Type: Enum Default: N |
| Лимит количества | maximum total транзакцияs count for the last month for this кредитная карта | Тип: Int Default: 99999 |
| Описание: use calendar month | «Y» — для расчёта по календарному месяцу вместо расчёта от момента включения фильтра; «N» — для расчёта от момента включения фильтра | Type: Enum Default: N |

**Коды ошибок**

| # | Код | Название |
|-------|-------|-----------------------------------------------------------------|
| 10245 | 1255 | Monthly decline total сумма лимит превышен for отправитель |
| 10246 | 1256 | Monthly decline total количество лимит превышен for отправитель |
| 10247 | 1257 | Monthly decline total сумма лимит превышен for получатель |
| 10248 | 1258 | Monthly decline total количество лимит превышен for получатель |

##### IP-адрес клиента является анонимным VPN

Эта проверка срабатывает, когда служба Max Mind считает IP-адрес клиента анонимной VPN. Учитываются транзакции Sale, Preauth или Transfer.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|----------------------------|----------------------------------------------------------------------------------------------------|-----------------------------------------------|
| Значение параметра фильтра | Y — фильтровать, если условие истинно, N — фильтровать, если условие ложно | Type: Enum Default: Y |

**Коды ошибок**

| # | Код | Название |
|-------|-------|--------------------------------------------|
| 10250 | 1260 | IP-адрес клиента относится к анонимной VPN |

##### IP-адрес клиента анонимный

Эта проверка срабатывает, когда служба Max Mind считает IP-адрес клиента анонимным. Учитываются транзакции Sale, Preauth или Transfer.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|----------------------------|----------------------------------------------------------------------------------------------------|-----------------------------------------------|
| Значение параметра фильтра | Y — фильтровать, если условие истинно, N — фильтровать, если условие ложно | Type: Enum Default: Y |

**Коды ошибок**

| # | Код | Название |
|-------|-------|-------------------------------------|
| 10251 | 1261 | IP-адрес клиента является анонимным |

##### Customer IP Hosting Provider

Эта проверка срабатывает, когда служба Max Mind считает IP-адрес клиента принадлежащим провайдеру хостинга или VPN. Учитываются транзакции Sale, Preauth или Transfer.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|----------------------------|----------------------------------------------------------------------------------------------------|-----------------------------------------------|
| Значение параметра фильтра | Y — фильтровать, если условие истинно, N — фильтровать, если условие ложно | Type: Enum Default: Y |

**Коды ошибок**

| # | Код | Название |
|-------|-------|-------------------------------------------------|
| 10252 | 1262 | IP-адрес клиента принадлежит хостинг-провайдеру |

##### Клиент IP Public Proxy

Эта проверка срабатывает, когда служба Max Mind считает IP-адрес клиента общедоступным прокси. Учитываются транзакции Sale, Preauth или Transfer.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|----------------------------|----------------------------------------------------------------------------------------------------|-----------------------------------------------|
| Значение параметра фильтра | Y — фильтровать, если условие истинно, N — фильтровать, если условие ложно | Type: Enum Default: Y |

**Коды ошибок**

| # | Код | Название |
|-------|-------|--------------------------------------------|
| 10253 | 1263 | IP-адрес клиента является публичным прокси |

##### Customer IP Residential Proxy

Эта проверка срабатывает, когда служба Max Mind считает IP-адрес клиента принадлежащим провайдеру хостинга или VPN. Учитываются транзакции Sale, Preauth или Transfer.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|----------------------------|----------------------------------------------------------------------------------------------------|-----------------------------------------------|
| Значение параметра фильтра | Y — фильтровать, если условие истинно, N — фильтровать, если условие ложно | Type: Enum Default: Y |

**Коды ошибок**

| # | Код | Название |
|-------|-------|-----------------------------------------------|
| 10254 | 1264 | IP-адрес клиента является резидентским прокси |

##### Клиент IP Tor Exit Node

Эта проверка срабатывает, когда служба Max Mind считает IP-адрес клиента выходным узлом Tor. Учитываются транзакции Sale, Preauth или Transfer.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|----------------------------|----------------------------------------------------------------------------------------------------|-----------------------------------------------|
| Значение параметра фильтра | Y — фильтровать, если условие истинно, N — фильтровать, если условие ложно | Type: Enum Default: Y |

**Коды ошибок**

| # | Код | Название |
|-------|-------|----------------------------------------------|
| 10255 | 1265 | IP-адрес клиента является выходным узлом Tor |

##### Клиент static IP score

Эта проверка срабатывает, когда оценка статического IP-адреса клиента, определяемая службой Max Mind, меньше или равна установленному пороговому значению. Более высокие значения означают более сильную статическую связь. Например, многие IP-адреса с типом пользователя cellular имеют оценку меньше единицы. Широкополосные IP-адреса, которые меняются не очень часто, обычно имеют оценку выше тридцати. Этот индикатор может быть полезен для определения того, представляет ли IP-адрес одного и того же пользователя с течением времени. Значение находится в диапазоне от 0 до 99,99. Учитываются транзакции Sale, Preauth или Transfer.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|----------------------------|---------------------------------------------------|------------------------------------------------------|
| Пороговое значение фильтра | Значения, меньшие или равные, будут отфильтрованы | Тип: Decimal Default: 20.000 |

**Коды ошибок**

| # | Код | Название |
|-------|-------|----------------------------------------------------------------------------|
| 10256 | 1266 | Оценка статического IP-адреса клиента меньше или равна настроенному порогу |

##### Клиент IP user count

Эта проверка срабатывает, когда количество пользователей IP-адреса клиента по оценке службы Max Mind больше или равно установленному пороговому значению. Это оценочное количество пользователей, использовавших один IP-адрес или сеть за последние 24 часа. Для IPv4 количество указывается для отдельного IP-адреса. Для IPv6 количество указывается для сети /64. Учитываются транзакции Sale, Preauth или Transfer.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|----------------------------|--------------------------------------------------------------|---------------------------------------------|
| Пороговое значение фильтра | Значения, превышающие или равные порогу, будут отфильтрованы | Тип: Int Default: 3 |

**Коды ошибок**

| # | Код | Название |
|-------|-------|------------------------------------------------------------------------------------|
| 10257 | 1267 | Количество пользователей по IP-адресу клиента больше или равно настроенному порогу |

##### Клиент IP user тип

Эта проверка срабатывает, когда тип пользователя IP-адреса клиента по оценке службы Max Mind находится в списке заблокированных типов пользователей. Возможные значения: business, cafe, cellular, college, consumer_privacy_network, content_delivery_network, government, hosting, library, military, residential, router, school, search_engine_spider, traveler. Учитываются транзакции Sale, Preauth или Transfer.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|------------------------------|-------------------------------------------------------------------------------------|---------------------------------------------------|
| Описание: blocked user types | Заблокированные типы пользователей будут отфильтрованы; разделяйте значения запятой | Тип: String Default: None |

**Коды ошибок**

| # | Код | Название |
|-------|-------|--------------------------------------------------------------------------------|
| 10258 | 1268 | Тип пользователя по IP-адресу клиента находится в списке заблокированных типов |

##### Частота использования номера кредитной карты за последние N часов

Эта проверка срабатывает, когда количество транзакций, связанных с точным номером кредитной карты, превышает настроенные пороги. Временной порог составляет окно в N часов, рассчитываемое назад от момента транзакции. Параметр N (период дат) можно задать от 1 до 24. Для расчёта окна все даты транзакций усекаются до часов. Риск срабатывает на транзакции после установленного порога. Поэтому, если установить порог в 10 транзакций, он сработает на 11-й транзакции за N часов. Этот фильтр учитывает полные часы. Учитывает транзакции Sale, Preauth или Transfer в одобренном статусе. Исходная и получающая карты рассматриваются отдельно.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|------------------------------------|------------------------------------------------------------------------|-----------------------------------------------|
| Описание: for last N hours | Временной интервал для расчёта количества уникальных кредитных карт | Тип: Int Default: 24 |
| Максимальное количество транзакций | Максимальное количество транзакций для одного номера кредитной карты | Тип: Int Default: 2 |
| Пропустить отклонённые транзакции | «Y» — пропускать сессии со статусом Declined, «N» — в противном случае | Type: Enum Default: N |

**Коды ошибок**

| # | Код | Название |
|-------|-------|-----------------------------------------------|
| 10269 | 1280 | Превышен лимит количества за указанный период |

##### Предотвращение транзакции с той же суммой в течение 24 часов

Эта проверка срабатывает, когда количество транзакций с одинаковой суммой, связанных с точным номером кредитной карты, превышает настроенные пороги. Временной порог составляет окно в 24 часа, рассчитываемое назад от момента транзакции. Для расчёта окна все даты транзакций усекаются до часов. Риск срабатывает на транзакции после установленного порога. Поэтому, если установить порог в 10 транзакций, он сработает на 11-й транзакции за 24 часа. Также можно задать значение суммы, начиная с которого транзакции будут учитываться фильтром. Учитывает транзакции Sale, Preauth или Transfer в одобренном статусе. Исходная и получающая карты рассматриваются отдельно.

Оценка: Да

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|------------------------------------|-------------------------------------------------------------------------------------|----------------------------------------------------|
| Максимальное количество транзакций | Максимальное количество транзакций с одинаковой суммой | Тип: Int Default: 2 |
| Описание: min amount to filter | значение суммы транзакции, начиная с которого транзакция будет учитываться фильтром | Type: Float Default: 0.000 |
| Пропустить отклонённые транзакции | «Y» — пропускать сессии со статусом Declined, «N» — в противном случае | Type: Enum Default: N |

**Коды ошибок**

| # | Код | Название |
|-------|-------|----------------------------------------------------------------|
| 10270 | 1281 | Превышен лимит транзакций с одинаковой суммой для точной карты |

##### Customer Email declined transaction interval

This check fires when the interval for the last declined transaction associated with exact customer email lesser the configured thresholds. The time threshold is time window calculated backwards from the moment of the transaction. The risk fires on the transaction below the set threshold. So, if you set a threshold of 10 minutes and the last declined transaction time is 10:00:00, it fires untill 10:10:01. Counts Account verification, Sale, Preauth or Transfer transactions in the Declined status.

Оценка: Нет

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|-----------------------------|---------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------|
| Интервал проверки в минутах | max interval in minutes to check declines for this email | Тип: Int Default: 30 |
| For all торговец проектs | Y - to check transactions for all projects of the current merchant N - check transactions for current project only | Type: Enum Default: No |

**Коды ошибок**

| # | Код | Название |
|-------|-------|-------------------------|
| 10274 | 1285 | Decline interval exceed |

##### Customer email decline frequency for last 24 hours (daily decline limit)

This check fires when the number or amount of declined transactions associated with exact customer email exceeds the configured thresholds. The time threshold is a 24 hours window calculated backwards from the moment of the transaction. For window calculation all transaction dates are truncated to hours. The risk fires on the transaction after the set threshold. So, if you set a threshold of 10 transactions, it fires on the 11th transaction in 24 hours. Counts Account verification, Sale, Preauth or Transfer transactions in the Declined status.

Оценка: Нет

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|-------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------|
| Amount limit | maximum total transactions amount for the last 24 hours for this customer email | Тип: Int Default: 99999999 |
| For all торговец проектs | current total declines for the last 24 hours for this email would be calculated - Y: for all projects - 3D: for 3D gates only - Non3D: for non 3D gates only - N: for current project only of the current merchant and converted to current project currency to compare with Лимит суммы values | Type: Enum Default: Yes |
| Описание: Quantity limit | maximum total transactions count for the last 24 hours for this customer email | Тип: Int Default: 99999 |
| Использовать календарный день | Y - For calculation using calendar days instead of calculation from moment when filter check is triggered N - for calculation from moment when filter check is triggered | Type: Enum Default: N |

**Коды ошибок**

| # | Код | Название |
|-------|-------|-------------------------------|
| 10275 | 1286 | Daily Лимит суммы exceed |
| 10276 | 1287 | Daily Лимит количества exceed |

##### Customer email usage frequency Описание: for last N hours

This check fires when the number of transactions associated with exact customer email exceeds the configured thresholds.
The time threshold is a N hours window calculated backwards from the moment of the transaction. The N parameter (date period) can be set from 1 to 24. For window calculation all transaction dates are truncated to hours.
The risk fires on the transaction after the set threshold. So, if you set a threshold of 10 transactions, it fires on the 11th transaction in N hours. This filter takes into account full hours. Counts Sale, Preauth or Transfer transactions in the approved and declined status.

Оценка: Нет

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|------------------------------------|------------------------------------------------------------------------------------------|------------------------------------------------|
| Описание: for last N hours | time frame to calculate unique customer email count | Тип: Int Default: 24 |
| Максимальное количество транзакций | maximum number of transactions for one customer email | Тип: Int Default: 2 |
| Пропустить отклонённые транзакции | Y - to skip sessions in Declined status Описание: N - otherwise | Type: Enum Default: No |

**Коды ошибок**

| # | Код | Название |
|-------|-------|-----------------------------------------------|
| 10277 | 1288 | Превышен лимит количества за указанный период |

##### Customer email declines frequency Описание: for last N hours

This check fires when the number of declines associated with exact customer email exceeds the configured thresholds.
The time threshold is a N hours window calculated backwards from the moment of the transaction. The N parameter (date period) can be set from 1 to 24. For window calculation all transaction dates are truncated to hours.
The risk fires on the transaction after the set threshold. So, if you set a threshold of 10 transactions, it fires on the 11th transaction in N hours. This filter takes into account full hours. Counts Sale, Preauth or Transfer transactions in the declined status.

Оценка: Нет

Включено по умолчанию: N

**Parameters**

| Название | Описание | Значение |
|------------------------------------|-------------------------------------------------------|----------------------------------------------|
| Описание: for last N hours | time frame to calculate unique customer email count | Тип: Int Default: 24 |
| Максимальное количество транзакций | maximum number of transactions for one customer email | Тип: Int Default: 2 |

**Коды ошибок**

| # | Код | Название |
|-------|-------|--------------------------------------------------------------------------------|
| 10278 | 1289 | Specified period decline Лимит количества exceeded for the same customer email |

### Fx Rate

#### Введение

Fx Rate — сервис, позволяющий получать курсы обмена от различных поставщиков.

#### Fx Rate Setup

Экран находится в разделе «Инструменты» — «Fx Rate».

В Fx Rate есть два раздела:
: - Terminals
 - Providers

 
`Описание: fxrate setup`
 
`Описание: fxrate setup`
 
Раздел терминалов показывает все доступные терминалы и позволяет настраивать их параметры.
 
Раздел поставщиков показывает всех доступных поставщиков и позволяет добавить новый терминал к любому поставщику.
 
 

> **Note:** Чтобы добавить нового поставщика, обратитесь в службу поддержки Payneteasy.

 
Чтобы создать новый Терминал для Provider, нажмите кнопку “+ Add terminal”. Появится новое окно с параметрами, как показано ниже:
 
 
`Описание: fxrate setup`
 
В открывшемся окне можно:
 
- Описание: Name the Terminal
- Выберите доступного поставщика из списка
- Выберите один из двух типов ставок: покупка или продажа
- Выберите, из какой валюты в какую будет применена конвертация
- Добавить коэффициент (дополнительный модификатор % к курсу конвертации)
- Добавить абсолютное значение (которое будет добавляться после каждой конвертации к итоговой сумме)
- Добавить описание терминала

После создания нового терминала его можно будет увидеть в разделе «Терминалы».
 
Терминал можно удалить или отредактировать в любое время. Однако редактировать можно не все поля уже существующего терминала. Чтобы изменить настройки терминала, нажмите на три точки, как показано ниже:
 
 
`Описание: fxrate setup`
 
Это все поля, которые можно изменить:
 
 
`Описание: fxrate setup`

### Gate Details Report

Отображает сумму успешных транзакций в контексте шлюзов.
 
При необходимости можно добавить дополнительные критерии, нажав Criteria: endpoints, projects, merchants, gates, processors и т. д. Настроенные критерии поиска можно сохранить как шаблон для последующего использования.
 
Данные можно скачать, нажав кнопку Сгенерировать.
 
Пример полученного отчета показан ниже:

### Шлюз

**Шлюз Overview**
 
Гейт — это набор параметров, идентифицирующих учётную запись, зарегистрированную во внешней системе обработки. Эти параметры могут использоваться для обработки платёжных данных во внешней системе посредством протокола обмена сообщениями, реализованного в Процессоре. Экран списка гейтов расположен в Settings -> Configuration -> Шлюзs. Он содержит все гейты, созданные для Manager в системе.
 
 
`Изображение gatesearch manager faq`
 
Описание: - Шлюз is enabled.
 
Описание: - Шлюз is disabled.
 
 
Чтобы добавить новые фильтры поиска, нажмите кнопку Add filter. Поиск шлюзов можно фильтровать по следующим параметрам: статус, валюта, 3D, endpoint, Merchant, Processor, Project, Reseller и Company.
 
 
`Изображение gatefilter manager faq`
 
Для мониторинга активности шлюза используются ключевые показатели эффективности (KPI), например доходы Менеджера, средняя стоимость заказа и другие. Подменю KPI открывается кнопкой Detailed на экране поиска шлюза. Подробнее см. [Подробный просмотр KPI](https://doc.payneteasy.ru/manager/reference/kpi.html.md).
 
Нажмите название шлюза, чтобы открыть подробную информацию об этом шлюзе.
 
Шлюз можно добавить только в проект с той же валютой.
 
Для работы с другими параметрами конфигурации см. информацию ниже.
 

> **Note:** Важно отметить, что настройки Шлюз (такие как лимиты, ставки, определение клиента и т.д.) переопределяют настройки Processor.

**Шлюз Settings**
 

| [Создать, клонировать, редактировать шлюз](https://doc.payneteasy.ru/manager/gate/gatecreate.html.md) | Этот экран показывает, как создавать и редактировать шлюз. |
|----------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------|
| [Сведения о шлюзе](https://doc.payneteasy.ru/manager/gate/gatedetails.html.md) | Этот экран показывает все параметры и сведения о шлюзе. |
| [Ограничения эквайера](https://doc.payneteasy.ru/manager/gate/acquirerrestrictions.html.md) | Настраиваемые наборы правил, позволяющие ограничивать трафик по определённым критериям (уровни Шлюз и Processor). |
| [Сведения о стратегии цепочки](https://doc.payneteasy.ru/manager/gate/chainstrategydetails.html.md) | Вся информация о настройке дополнительных каскадных цепочек. |
| [Пропуски стратегии цепочки](https://doc.payneteasy.ru/manager/gate/chainstrategyskips.html.md) | Вся информация о настройке дополнительных каскадных цепочек. |
| [Закрыть день](https://doc.payneteasy.ru/manager/gate/closeday.html.md) | Отображает информацию о процедуре закрытия дня. |
| [Пакетные операции для шлюзов](https://doc.payneteasy.ru/manager/gate/batch_operations.html.md) | Этот экран показывает, как выполнять пакетные операции со шлюзами. |

### Create, Clone, Edit Gate

#### Gate Creation

 
Чтобы создать шлюз, перейдите Settings -> Configuration -> Gates и нажмите + New Gate в правом верхнем углу.
 
См. таблицу [сведений о шлюзе](https://doc.payneteasy.ru/manager/gatedetails.html.md), чтобы правильно указать конфигурацию нового шлюза.
 

#### Gate Editing And Cloning

 
Нажмите кнопку Редактировать, чтобы редактировать шлюз, или Клонировать, чтобы клонировать его.
 
 

 

Шлюзы клонируются для одного и того же процессора. Обязательные параметры для нового шлюза — его название и валюта.
 
Остальные настройки шлюза будут унаследованы автоматически. Чтобы сбросить параметры к значениям по умолчанию, выберите Reset to default.
 
Чтобы увидеть, какие изменения будут клонированы для нового шлюза, нажмите кнопку изменения.
 
Для клонирования/создания нескольких шлюзов сразу нажмите кнопку Add. Также можно автоматически присвоить имена новым шлюзам, нажав Auto-name.
 
 

 
Чтобы клонировать ограничения эквайера в новый шлюз, нажмите Клонировать фильтры.
 
Чтобы преобразовать все настройки с суммой в новую валюту, нажмите Convert currency Gate settings

### Gate Details

| Название параметра | Описание | Необходимость создания |
|------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------|
| Статус | Показывает, включён или отключён шлюз. Может быть изменён позже. | Обязательное |
| 3D | Можно включить, если на этом шлюзе ожидается поток 3DS. Может быть изменено позже. | Опционально |
| Описание | Отображает описание шлюза. Может быть изменено позже. | Опционально |
| MID | Отображает идентификационный номер торговца. Может быть изменён позже. | Опционально |
| Теги | Показывает теги для этого шлюза. При поиске шлюзов по тегу будут показаны все шлюзы с тем же тегом. Может быть изменено позже. | Опционально |
| Процессор | Показывает, к какому именно Процессору привязан этот шлюз. НЕ МОЖЕТ быть изменено позже. | Обязательное |
| Менеджер | Показывает, к какому именно менеджеру привязан этот шлюз. НЕ МОЖЕТ быть изменено позже. | Обязательное |
| Параметр Bank rate plan | Показывает, какой тарифный план банка-эквайера в настоящее время указан на шлюзе. Может быть изменён позже. | Обязательное |
| Dealer | Показывает, какой Dealer указан на этом шлюзе. Можно выбрать только Dealers, связанных с Processor. НЕВОЗМОЖНО изменить позже. | Обязательное Описание: for Processors Описание: with Dealers |
| Параметр Dealer rate plan | Показывает, какой тарифный план дилера сейчас установлен на шлюзе. Может быть изменён позже. | Обязательное Описание: for Processors Описание: with Dealers |
| Company | Отображает компанию, к которой относится этот шлюз. Может быть изменено позже. | Опционально |
| Сервис лояльности | Показывает, какой внешний сервис лояльности выбран. Позднее его можно изменить. | Опционально |
| Закрывать день автоматически | Предоставляет возможность настроить время для автоматической процедуры закрытия дня. Может быть изменено позже. | Опционально |
| Использовать внешнюю форму | Включите, если предполагается использовать логику внешней формы (перенаправление на процессор). Может быть изменено позже. | Опционально |
| Фильтровать по чёрному списку | Включите, если требуется фильтрация по чёрному списку. Может быть изменено позже. | Опционально |
| Дескриптор API | Дескриптор шлюза, который, если задан, будет отправляться в callback’ах и ответах о статусе Торговцу. Может быть изменено позже. | Опционально |
| Минимальная сумма транзакции | Минимальная сумма одной транзакции, разрешённая через шлюз. Может быть изменена позже. | Опционально |
| Максимальная сумма транзакции | Максимальная сумма одной транзакции, разрешённая через шлюз. Может быть изменена позже. | Опционально |
| Method | Дополнительный параметр для группировки шлюзов по определённому маркеру, при необходимости. Это поле присутствует в отчёте по транзакциям. Может быть изменено позже. | Опционально |
| Дата закрытия последнего дня | Показывает, когда была инициирована последняя процедура закрытия дня. | |
| Максимальная задержка закрытия дня (дни) | Выберите, на сколько дней допустимо отложить процедуру закрытия дня. Может быть изменено позже. | Опционально |
| Автоматический выбор закрытия дня | Если этот параметр включён, система будет автоматически выбирать время процедуры закрытия дня. Может быть изменено позже. | Опционально |
| Разрешить закрытие дня через API | Если этот параметр включён, будет возможно выполнять запросы “Close day” через API. Может быть изменено позже. | Опционально |
| Параметр Method 2 | Дополнительный параметр для группировки шлюзов по определённому маркеру, при необходимости. Это поле присутствует в отчёте по транзакциям. Может быть изменено позже. | Опционально |
| Финансовый инструмент | Для внутреннего использования. Может быть изменено позже. | Опционально |

### Глоссарий

Для целей данного руководства используются следующие термины и их определения:

| Аппаратно-программный комплекс Payneteasy (Платёжный шлюз Payneteasy). | Информационная система, предназначенная для автоматизированной и безопасной обработки платежных операций и их хранения. |
|--------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Система управления платежами Payneteasy (Payneteasy UI) | Пользовательский интерфейс управления платежами и аналитическая платформа Платежного шлюза Payneteasy. |
| Торговец | Компания, предоставляющая услуги, работы или реализующая товары через Электронную коммерцию, мобильную коммерцию или каналы mPOS. |
| Менеджер | Организация, предоставляющая услуги по обработке транзакций Торговцев в Процессорах с использованием платежного шлюза Payneteasy и учету транзакций в пользовательском интерфейсе Payneteasy. |
| Процессор | Сущность системы, представляющая собой техническую интеграцию с конкретным банком-эквайером или другим поставщиком платежных услуг для обработки транзакций. |
| Аккаунт | Идентификационные данные в пользовательском интерфейсе Payneteasy, позволяющие пользователю взаимодействовать с системой от своего имени. То же, что учётная запись. |
| Транзакция | Соглашение о проведении финансовой операции между покупателем и Торговцем по оплате услуг, работ или товаров, возврату денежных средств за ранее оплаченные услуги, работы или товары, переводу денег с карты на карту либо удержанию денежных средств для будущей оплаты. |
| Антифрод фильтры | Алгоритм технического анализа транзакций для выявления подозрительных и мошеннических транзакций, основанный на опыте сотрудников Payneteasy и международной практике мониторинга мошенничества. |
| БИН | Идентификатор банка, первые 6 цифр номера карты. |

### Guides

### Интеграционая панель

The screen is located in “Tools” – “Интеграционая панель” section.
The Интеграционая панель displays requests sent to the system and system responses to these requests, as well as information about possible errors in the requests. This allows to quickly eliminate errors during integration. The panel also helps to view initiating requests for which, as a result of the error, orders were not created.

В панели интеграции доступны следующие критерии поиска:

- по идентификатору конечной точки или группы конечных точек, на которую был отправлен запрос,
- по идентификатору заказа, назначенному транзакции системой Payneteasy,
- по серийному номеру запроса и ответа.

Для поиска также можно указать диапазон дат.

### Подробный просмотр KPI

#### Введение

Ключевые показатели эффективности (KPI) — модуль анализа, помогающий пользователю быстро визуализировать подробную бизнес-информацию по каждой основной сущности системы, например Endpoint, User, Project, Gate и т. д.
 

Чтобы просмотреть подробную информацию о соответствующем элементе, откройте общий экран соответствующего элемента и выберите KPI в раскрывающемся меню Подробности. Порядок отображения KPI в подробном представлении соответствует порядку выбора KPI в раскрывающемся списке. Первый выбранный KPI размещается слева, затем второй и т.д. Пользователь может выбрать до 5 KPI.
 
Критерии поиска (элемент 1 на рисунке выше) влияют только на список отображаемых элементов, а не на расчетное значение KPI.
 
Значение KPI может быть рассчитано за период времени (элементы управления 2\` на рисунке выше). Период времени игнорируется, когда смысл KPI противоречит выбранному диапазону дат или KPI находится вне цели.
 
По каждому KPI может быть применена сортировка для предоставления наиболее ценных данных. Пользователь может выбрать сортировку, нажав на KPI (элемент управления 3 на рисунке выше). Пожалуйста, имейте в виду, что если выбрана сортировка по KPI, а затем KPI удален, сортировка все равно останется применённой.
 

#### KPI

##### Оборот

Показывает: Общую сумму одобренных транзакций следующих типов: успешная оплата, списание, оспаривание и перевод.
 
Частота Обновления: В режиме реального времени с задержкой не более 10 секунд).
 
График: Показывает сумму оборота ежечасно в случае выбора диапазона дат — сегодняшний или вчерашний день; Показывает сумму оборота ежедневно в случае выбора диапазона дат — настоящий или прошлый месяц.
 

`grosstraff`

Пример оборота ежечасно за 7 Декабря.
 

`grosstraff2`

Пример оборота ежедневно за Ноябрь.
 

##### Заработок

Shows: доход для Bank, Dealer, Manager, Reseller или Merchant без холдов для любого типа транзакции в любом статусе
 
Частота обновления: практически в реальном времени (задержка не более 10 секунд)
 
График: Показывает общий заработок ежечасно в случае выбора диапазона дат — сегодняшний или вчерашний день; Показывает сумму оборота ежедневно в случае выбора диапазона дат — настоящий или прошлый месяц.
 

`earing1`

Пример заработка Торговца ежечасно за 7 Декабря.
 

`earing2`

Доход банка за день в ноябре.
 

##### Переходящий остаток

Показывает: Значение Переходящий остаток на текущую дату без учёта выбранного диапазона дат. Каждый тип пользователя видит соответствующее значение Переходящий остаток. Единственное исключение — Superior, который может видеть Переходящий остаток для менеджера.
 
Частота обновления: ежедневно в 00:00
 
График: показывает значение переноса, начиная с выбранной даты плюс 2 месяца; отображаются общая сумма переноса, причитающаяся пользователю (положительная), и сумма, которую пользователь должен (отрицательная). Также отображается баланс переноса — сумма этих значений.
 

`carryover`

Перенос для Manager начинается с 1 декабря. Как видно, по состоянию на 21 декабря переноса от Bank к Manager нет, при этом имеется задолженность по переносу Merchant, поэтому баланс переноса отрицательный. С 22 декабря Bank начинает выплачивать перенос Manager, но этих средств недостаточно для покрытия переноса Merchant. Этот вид позволяет прогнозировать будущую задолженность по переносам.
 

##### Даты первой и последней транзакции

Показывает: Дату первой и последней обработанной транзакции независимо от выбранного диапазона дат. Позволяет быстро находить неактивные экземпляры элементов инфологической модели.
 
Частота обновления: практически в реальном времени (задержка не более 10 секунд)
 
График: Н/Д
 

##### Средняя сумма транзакции

Показывает: Среднюю сумму транзакции: оплаты, списания, оспаривания и перевода с успешным статусом. Позволяет выявлять отклонения от нормы, когда Торговец меняет источник входящего платежного трафика или продаваемые товары.
 
Частота обновления: практически в реальном времени (задержка не более 10 секунд)
 
График: Минимальная, максимальная и средняя сумма транзакций ежечасно в случае выбора диапозона дат — сегодняшний или вчерашний день; Минимальная, максимальная и средняя сумма транзакции ежедневно в случае выбора диапазона дат - настоящий или прошлый месяц.
 

`average1`

Минимальная, максимальная и средняя сумма транзакций в час за 7 декабря
 

`average2`

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

##### Количество заказов на одного Клиента в месяц

Показывает: Среднее количество транзакций любого типа и в любом статусе за месяц, попадающий в выбранный диапазон дат. KPI рассчитывается только для Терминалов и Проектов. Определение Клиента задается на уровне Проекта, по умолчанию одна карточка означает одного Клиента. Клиент на Терминале отличается от Клиента на Проекте, что позволяет изучать источники платежного трафика.
 
Частота обновления: практически в реальном времени (задержка не более 10 секунд)
 
График: Количество заказов, произведенных клиентом за месяц, заканчивающийся выбранной датой и начинающийся с даты 12 месяцев назад.
 

`order`

Количество заказов, произведенных Клиентом за месяц. Разное количество заказов отмечено разными цветами. Клиенты с количеством заказов: 5-6, 7-10 и больше 10 объединяются в группы.
 

##### Конверсия постоянных клиентов

Показывает: Соотношение повторных транзакций, совершённых конкретным клиентом, к общему количеству транзакций, совершённых этим клиентом за месяц, попадающий в выбранный диапазон дат. Транзакция считается повторной для выбранного месяца, если клиент ранее в любое время совершал транзакцию. KPI рассчитывается только для Эндпоинтов и Проектов. Определение клиента задаётся на уровне Проекта; по умолчанию одна карта означает одного клиента. Клиент на уровне Эндпоинта отличается от клиента на уровне Проекта, чтобы можно было анализировать различные источники платёжного трафика.
 
Частота обновления: практически в реальном времени (задержка не более 10 секунд)
 
График: Отношение повторных транзакций, совершенных конкретным Клиентом, к общему количеству транзакций, совершенных Клиентом за месяц, заканчивающийся выбранной датой и начинающийся с даты 12 месяцев назад.
 

`conversion`

Отношение повторных транзакций, совершенных конкретным Клиентом, к общему количеству транзакций, совершенных Клиентом в месяц за последний год.
 

##### Транзакции по стране IP-адреса Клиента

Показывает: Страну, определяемую по IP-адресу Клиента. Учитываются транзакции любого типа в любом статусе. Параметр не зависит от диапазона дат и рассчитывается за весь срок работы.
 
Частота обновления: ежедневно в 00:45
 
График: Количество транзакций любого типа в любом статусе по странам, определяемым по IP-адресу клиента, за указанный диапазон дат; обновляется каждые 10 секунд
 

`trans_by_country`

Количество транзакций для топ 10 стран, полученных с IP-адреса клиента
 

##### Транзакции по стране БИН

Показывает: Страну, определяюмую на основе БИН карты Клиента. Принимаются во внимание транзакции любого типа и в любом статусе. Параметр не зависит от диапазона дат и рассчитывается за весь срок работы.
 
Частота обновления: ежедневно в 00:45
 
График: количество транзакций любого типа в любом статусе по странам, определяемым по BIN карты клиента за заданный диапазон дат; обновляется каждые 10 секунд.
 

`bin_country`

Количество транзакций для топ 10 стран, рассчитанное на основе БИН карты клиента.
 

##### Средний доход за транзакцию

Shows: Средний доход на транзакцию для Bank, Dealer, Manager, Reseller или Merchant без холдов для любого типа транзакции в любом статусе.
 
Частота обновления: практически в реальном времени (задержка не более 10 секунд)
 
График: Средний доход на транзакцию ежечасно в случае выбора диапазона дат — сегодняшний или вчерашний день; Средний доход на транзакцию ежедневно в случае выбора диапазона дат — настоящий или прошлый месяц.
 

`kpi_average_earing1`

Пример среднего дохода Торговца за транзакцию ежечасно на 7 Декабря.
 

`kpi_average_earing2`

Средний доход банка за транзакцию в месяц за ноябрь.
 

##### Соотношение 3DS/non3DS

Показывает: Отношение 3DS/non3DS для транзакций продажи, предавторизации и переводов, в подтверждённом, отфильтрованном и отклоненном статусе за указанный диапазон дат.
 
Частота обновления: практически в реальном времени (задержка не более 10 секунд)
 
График: Отношение 3DS/non3DS для транзакций продажи, предавторизации и переводов, в подтверждённом, отфильтрованном и отклоненном статусе за указанный диапазон дат ежедневно, начиная с первого числа месяца до конечной даты указанного диапазона дат.
 
История:
 

`colors1`

`3d_1`

Пример соотношения количества транзакций в разных статусах для 3DS шлюза за Ноябрь.
 

`3d_2`

Пример соотношения количества транзакций в разных статусах для non3DS шлюза за Ноябрь.
 

`3d_3`

Пример соотношения количества транзакций в разных статусах за Ноябрь.
 

##### Cоотношение 3DS/non3DS для отклоненых транзакций

Показывает: отношение количества транзакций 3DS со статусом declined, обработанных шлюзом 3DS, для карт Enrolled со статусом MPI Y или A к общему количеству транзакций типов sale, preauth или transfer за указанный период.
 
Частота обновления: практически в реальном времени (задержка не более 10 секунд)
 
График: Соотношение количества транзакций 3DS/без 3DS со статусом declined за день для заданного диапазона дат, начиная с первого дня месяца и до конечной даты диапазона.
 
История:
 

`colors2`

`3d_approve_1`

Соотношение количества транзакций со статусом declined для 3DS-шлюза за ноябрь.
 

`3d_approve_2`

Соотношение количества транзакций со статусом declined для шлюза без 3DS за ноябрь.
 

`3d_approve_3`

Соотношение количества транзакций со статусом declined для смешанного трафика за ноябрь
 

##### Соотношение 3DS/non3DS для подтвержденых транзакций

Показывает: отношение количества транзакций 3DS со статусом approved, обработанных шлюзом 3DS, для карт Enrolled со статусом MPI Y или A к общему количеству транзакций типов sale, preauth или transfer за указанный период.
 
Частота обновления: практически в реальном времени (задержка не более 10 секунд)
 
График: Соотношение количества транзакций 3DS/без 3DS со статусом approved за день для заданного диапазона дат, начиная с первого дня месяца и до конечной даты диапазона.
 

`colors2`

`3d_decline_1`

Соотношение количества транзакций со статусом approved для 3DS-шлюза за ноябрь.
 

`3d_decline_2`

Соотношение количества транзакций со статусом approved для шлюза без 3DS за ноябрь.
 

`3d_decline_3`

Соотношение количества транзакций со статусом approved для смешанного трафика за ноябрь
 

> **Warning:** Статус MPI и статус регистрации карты в программе 3DS могут быть определены только в случае использования плагина MPI Payneteasy или в случае правильного возврата процессором данных после проверки 3DS.

### Черные, белые и списки лояльности (BWL)

#### Введение

There are 3 types of access control lists, which work as filter checks in Payment Шлюзway. Списки проверяются при обработке транзакции, когда применяется соответствующий фильтр. BWL screen is designed to manage white, black and loyalty customer lists. This screen is located in Tools -> Black & White lists. It makes the process of putting the transactions’ attributes to respective lists faster and easier. It also has quick search which helps to find the exact transaction attribute added previously.
 

Чтобы выбрать записи из списка, укажите менеджера и merchant/gate/processor для соответствующих списков из выпадающего меню.

 

Можно отобразить любую конкретную категорию из определенного списка, щелкнув по ней в списке категорий справа.

 

> **Note:** Списки проверяются при обработке транзакции, когда применяется соответствующий фильтр.

Processor lists will be available for choosing only after you set up gate with this processor in Project Strategy/Balancing Beta.
Шлюз lists will be available after setting up this gate in Project Strategy/Balancing Beta.

##### Чёрные списки

Первый фильтр, проверяющий атрибуты транзакции (электронную почту, IP, адрес и т. д.), — «Manager/Торговец black list». Управлять этими атрибутами (кроме BIN) можно на экране сведений о заказе. Атрибуты могут иметь следующие статусы:
 
 
> * атрибут в чёрном списке;
> * атрибут не в чёрном списке;
 
Если какой-либо атрибут транзакции соответствует атрибуту в списках и соответствующий фильтр включён на уровне проекта, статус транзакции устанавливается в Filtered, а причина фильтрации сохраняется в данных транзакции (см. раздел [Коды ошибок в фильтрах транзакций](https://doc.payneteasy.ru/integration/reference/transaction_filters.html.md) в документации по интеграции).
 
При внесении IP-адресов в черный список важно отметить, что большинство клиентов имеют динамический IP-адрес, который может принадлежать разным клиентам одного и того же интернет-провайдера. Пользователи мобильного интернета меняют IP-адрес каждый раз при создании сеанса. Также известно, что клиенты, использующие сервисы сжатия трафика (например, Opera Mobile), заходят через IP-адрес прокси-сервера, предоставляемого сервисами, большинство из которых расположены в Европе. По статистике, если IP-адрес заблокирован более 10 часов, то в 80% случаев фильтрация будет ложноположительной. По этой причине не рекомендуется фильтровать транзакции по IP-адресу без должного контроля. Настоятельно рекомендуется перед добавлением IP-адреса в черный список уточнить у интернет-провайдера, какой максимальный срок блокировки IP-адреса может быть применен. Также важно проверить, присутствует ли данный IP-адрес в каких-либо сторонних антиспамовых системах.
 

##### Белые списки

Белый список позволяет пропустить дополнительные проверки фильтров для транзакций с атрибутами из этого списка. Единственными атрибутами для внесения в белый список являются: номер карты и цифровой отпечаток клиента.
 
 

> **Note:** Если атрибут обнаружен в каком-либо белом списке, то проверки сторонних систем контроля мошенничества также исключаются.

##### Списки лояльности

Loyalty list is designed for merchants who work with the predefined set of customers. Database with customers can be managed on merchant side with PCI DSS certification, or on Payneteasy side. The system allows to manage the following several types of predefined clients lists such as names, emails, phones etc.
 
Если какой-либо атрибут транзакции не соответствует атрибуту в списках и соответствующий фильтр включён на уровне проекта, статус транзакции устанавливается в Filtered, а причина фильтрации сохраняется в данных транзакции (см. раздел [Коды ошибок в фильтрах транзакций](https://doc.payneteasy.ru/integration/reference/transaction_filters.html.md) в документации по интеграции).
 
Флаг Однократно служит для автоматического удаления клиента из списка лояльности после его первой оплаты.
 

#### Добавление новых элементов в BWL

To add new elements, click on the ADD button. The type of the added criteria will be automatically identified. Ambiguous criteria type can be manually changed, as presented below. It is also possible to use `changebutton` button to switch between available options.

#### Загрузка списков

In order to add many attributes to one of the lists at once, use IMPORT LIST feature.
 

Например, чтобы добавить номер карты в список, для каждой строки необходимо использовать следующий порядок: (5555514066237247,12,2019) с разделителем ‘,’ между строками.
 
Для некоторых списков требуется код страны. См. код Alpha-2 в справочном разделе документации по интеграции: [коды стран](https://doc.payneteasy.ru/integration/reference/country_codes.html.md).
 
 

> **Note:** В случае разрыва соединения или других технических проблем в процессе загрузки обратитесь в службу технической поддержки.

 
Импортированные файлы отображаются в отдельной таблице и отсортированы по ID в разделе “Last Imported from Files”.
 

#### Выгрузка в файл

In order to export your data into CSV file, use EXPORT LIST feature.
 

Данные будут проанализированы в соответствии с заданными параметрами.
 
Выгрузка будет содержать номера карты отправителя и номера карты получателя в формате 6+4. Для получения полных данных обратитесь в службу поддержки.
 

#### Synchronizing Lists

##### Торговец

To synchronize two merchant lists, administrator can use SYNC feature. After synchronizing, lists from both merchants will filter transactions as if you joined your two lists.
 
 

> **Note:** Торговцы не имеют доступа к просмотру записей из синхронизированных списков.

 

 

Синхронизацию можно отменить, нажав кнопку X рядом с записью синхронизированных списков.

##### Шлюз

To synchronize two gate lists, administrator can use SYNC feature. After synchronizing, lists from both gates will filter transactions as if you joined your two lists.
 
 

> **Note:** Торговцы не имеют доступа к просмотру записей из синхронизированных списков.

 

 

Синхронизацию можно отменить, нажав кнопку X рядом с записью синхронизированных списков.

#### Доступные списки для каждой роли

#### Комментарии

Присутствует возможность прикрепления комментариев при добавлении новых записей в списки BWL по желанию.
 
When adding records from order page, a comment will automatically be added with transaction id.
 
Для отображения комментария наведите курсор на «…» рядом с записью в списке.
 

#### Подробности заказа: настройка списков BWL

Атрибуты также можно добавлять и удалять из списков BWL на экране сведений о заказе, как показано ниже:
 
 
- Выберите Торговец или Manager, чтобы переключиться между добавлением BWL-списка для Торговец или Manager.

 

 
- Нажмите ДОБАВИТЬ В СПИСОК и выберите один из показанных списков:

- После выбора любого списка выберите критерий, по которому будет занесена в список:

 
Карта, занесенная в черный список, будет отображаться черным цветом:
 
 

 
Карта, внесенная в белый список, будет отображаться зеленым цветом:
 
 

 
Карта, внесенная в список лояльности будет отображаться в цвете Payneteasy:
 
 

 
- Одновременно можно выбрать несколько критериев:

 

 
- Дополнительные критерии можно добавить через раздел, как показано ниже:

 

 
После добавления критериев через раздел, описанный выше, параметры будут иметь цвета в зависимости от выбранного списка:

### Endpoint Groups

Группа Endpoint — сущность, объединяющая несколько Endpoint и Master Endpoint в разных валютах. Endpoint Group упрощает интеграцию бизнеса Присоединяющейся стороны с Платёжным Шлюзом Payneteasy при работе с различными валютами. Этот экран позволяет просматривать настроенные Endpoint Group.

 
Здесь показаны структура и логика группы конечных точек:
 
```plantuml
title Options for multi-currency processing integration
package "Integration to Endpoint Group" {
  class "layoutHelper1" #ffe6cc;line:black;line.dotted
  class "Project\n currency A" #dae8fc;line:black;line.dotted
  class "Project\n currency B" #dae8fc;line:black;line.dotted
  class "Endpoint\n currency A" #ffe6cc;line:black;line.dotted
  class "Endpoint\n currency B" #ffe6cc;line:black;line.dotted
  class "Endpoint\nGroup" #ffe6cc;line:black;line.dotted
}
package "Integration to multiple Endpoints" {
class "layoutHelper2\n" #ffe6cc;line:black;line.dotted
  class "Project\n currency C" #dae8fc;line:black;line.dotted
  class "Project\n currency D" #dae8fc;line:black;line.dotted
  class "Endpoint\n currency C" #ffe6cc;line:black;line.dotted
  class "Endpoint\n currency D" #ffe6cc;line:black;line.dotted
}
class "layoutHelper3" #ffe6cc;line:black;line.dotted
class "Connecting Party\n (Merchant)" #e1d5e7;line:black;line.dotted

"Connecting Party\n (Merchant)" -left-> "Endpoint\nGroup"
"Connecting Party\n (Merchant)" -down-> "layoutHelper3"
"Connecting Party\n (Merchant)" -down-> "Endpoint\n currency C"
"Connecting Party\n (Merchant)" -down-> "Endpoint\n currency D"

"Endpoint\nGroup" -down- "Endpoint\n currency A"
"Endpoint\nGroup" -down- "Endpoint\n currency B"
"Endpoint\n currency C" -down- "Project\n currency C"
"Endpoint\n currency D" -down- "Project\n currency D"
"Endpoint\n currency A" -down- "Project\n currency A"
"Endpoint\n currency B" -down- "Project\n currency B"
"Connecting Party\n (Merchant)" -left[hidden]- "layoutHelper1"
"Connecting Party\n (Merchant)" -right[hidden]- "layoutHelper2\n"
"layoutHelper1" -[hidden]- "Endpoint\n currency A"
"layoutHelper1" -[hidden]- "Endpoint\n currency B"
"layoutHelper2\n" -[hidden]- "Endpoint\n currency C"
"layoutHelper2\n" -[hidden]- "Endpoint\n currency D"
hide members
hide circle
hide layoutHelper1
hide layoutHelper2\n
hide layoutHelper3
```

### Мастер терминалы

#### Master Endpoint Overview

Главный Эндпоинт — это сущность, позволяющая настроить параллельную форму, также известную как [Платёжная касса](https://doc.payneteasy.ru/integration/api_use_cases/payment_cashier.html.md). Платёжная касса, размещённая на стороне Платёжного Шлюза, может отображать несколько способов оплаты для выбора Плательщиком. Экран Главного Эндпоинта позволяет Торговцам настроить такую форму и выбрать, какие способы оплаты и в каком порядке будут доступны каждому Плательщику в зависимости от страны Плательщика.
 
Каждый способ оплаты настраивается на отдельном Терминале, и эти специально настроенные Терминалы подключаются к Мастер Терминалу. Такие Терминалы называются вспомогательными Терминалами. Валюта Мастер Терминала наследуется от Проекта, с которым он связан, но вспомогательные Терминалы не обязательно должны быть в той же валюте, что и Мастер Терминал.
 

#### Конфигурация мастер терминала

Чтобы создать Мастер Терминал перейдите в раздел “Настройки” -> “Конфигурация” -> “Мастер-терминалы” и нажмите на кнопку “+Мастер-терминал”.
 
 

 
После выбора Мастер-терминала появится данное окно:
 
 

 
Нажмите на кнопку К деталям, чтобы просмотреть сам Мастер-терминал (фильтры, платёжную форму, название и т. д.).
 
Нажмите кнопку Изменить, для настройки:
 
• доступные способы оплаты и их порядок на форме (удалить, переместить и т. д.);
 
• инициированный тип транзакции для каждого способа оплаты (продажа или предавторизация с последующим списанием);
 
• список стран для каждого способа оплаты, который будет отображаться.
 
Чтобы скрыть или показать способ оплаты, используйте кнопку включить/выключить. Отключение способа оплаты отключит его только для текущего мастер-терминала.
 
Дополнительную информацию см. в [конфигурации Payment Cashier](https://doc.payneteasy.ru/manager/guides/payment_cashier_manager.html.md).
 

#### Настройка параллельной формы

Можно настроить пользовательские платёжные формы для Мастер-терминала и каждому подключенному вспомогательному Терминалу. Для настройки см. раздел [Настройка форм](https://doc.payneteasy.ru/integration/reference/forms_customization.html.md) в интеграционой документации. Предоставьте настроенные формы менеджеру службы поддержки Payneteasy для установки.

### Заказы

#### Поиск заказов

На экране “Поиск Заказов” отображается информация по всем совершенным транзакциям Payneteasy. Экран расположен в разделе “Заказы” – “Поиск заказов”. Связанные транзакции сгруппированы в Заказы. Заказ имеет несколько идентификаторов: назначенный Payneteasy, присвоенный Торговцем или Присоединяющейся Стороной, а также присвоенный внешним процессором (в случае обработки транзакции внешним процессором).

##### Найти заказы

Базовый поиск осуществляется по дате и точным критериям:

 

Точные критерии могут быть использованы для поиска конкретного заказа:

| `Основные` | • идентификатор счета Торговца • идентификатор заказа в Payneteasy • идентификатор заказа процессора • назначение • сумма • токен сессии |
|---------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `Клиент` | • телефонный номер • электронная почта • IP адрес • Страна IP адреса • страна Плательщика |
| `Карта Отправителя` | • название банка • страна • карта с идентификатора заказа • BIN • Диапазон BIN из заказа • последние 4 цифры • 6+4 • код подтверждения • ARN • RRN • держатель карты • карта ref id |
| `Карта Получателя` | • название банка • страна • карта с идентификатора заказа • BIN • Диапазон BIN из заказа • последние 4 цифры • 6+4 • код подтверждения • ARN • RRN • карта ref id |
| `Wire` | • номер счёта • номер маршрута |
| `Card Present API` | • идентификатор ридера • серийный номер ключа ридера • серийный номер устройства ридера |
| `Мобильный API` | • серийный номер устройства • серийный номер телефона • IMEI телефона |

Наиболее удобными критериями для поиска точной транзакции являются:

* 6+4 - позволяет наиболее точно искать конкретную карту;
* код подтверждения и RRN (можно получить из банковской выписки или из квитанции о переводе);
* идентификатор транзакции.

Дополнительные критерии поиска используются для облегчения выбора списка соответствующих заказов.
 
Доступны следующие критерии:
 

| `Типы карт` | Позволяет просматривать транзакции с определенным типом карт и способами оплаты. |
|---------------------|------------------------------------------------------------------------------------------------------|
| `Валюта` | Позволяет выбрать одну или более валют. |
| `Типы транзакций` | Позволяет отобразить все транзакции указанного типа. |
| `Статусы транзаций` | Позволяет отобразить все транзакции с указанным статусом. |
| `Статус заказа` | Если транзакцию не удается найти, данный критерий позволяет отслеживать её на всех этапах обработки. |
| `Терминал` | Позволяет отобразить все транзакции на выбранных терминалах. |
| `Проект` | Позволяет отобразить все транзакции по конкретному проекту или по нескольким проектам. |
| `Gate` | Позволяет отображать все транзакции на выбранных платёжных шлюзах |
| `Processor` | Позволяет отображать все транзакции для конкретного Процессора или нескольких Процессоров |
| `Company` | Позволяет отображать все транзакции для выбранных компаний |
| `Торговец` | Позволяет отображать все транзакции для конкретного торговца или нескольких торговцев |
| `Reseller` | Позволяет отображать все транзакции для конкретного реселлера или нескольких реселлеров |
| `Код ошибки` | Позволяет отобразить все транзакции с определённой ошибкой. |
После выбора одного или нескольких критериев поиска нажмите Поиск.
 

##### Просмотр заказов

По умолчанию заказы в Платёжном Шлюзе отображаются следующим образом:
 
 

 
Заказы can be presented in a Brief or Detailed view. This can be switched with the following button:
 
 

 
В подробном виде заказы будут отображаться следующим образом:
 
 

 
Количество заказов, отображаемых на одной странице, можно изменить кнопками в столбце “Строки”:
 
 

 
Кнопка Дата выполняет сортировку по дате. По умолчанию последние транзакции отображаются сверху.
 

##### Загрузка отчета о выбранных транзакциях

Чтобы выгрузить список отсортированных транзакций, нажмите одну из следующих кнопок:
 
- скачать в Excel формате.
 
- скачать в CSV формате.
 
Для управления полями выгрузки можно использовать дополнительное меню:
 
 

 
В раскрывающемся окне выберите необходимые данные и сохраните список:
 
 

##### Экран деталей заказа

Экран сведений о заказе открывается нажатием на идентификатор заказа на экране поиска.
 
Order details, such as IDs and order creation time, are displayed on the left side of this screen:
 
 

 
На карте отображаются первые шесть и последние четыре цифры номера карты, дата окончания срока действия карты и имя владельца карты. Также присутствует информация о стране, банке, типе карты и платежной системе карты.
 
 

 
Рядом с картами отправителя и получателя расположены кнопки для добавления реквизитов карты в чёрный, белый и лояльный списки.
 
 

 
Additional customer data sent by the Merchant or submitted by customer on the form is displayed under the card or other payment method indicator. Clicking on cardholder or customer data parameter (for example, e-mail address) initiates a search for all transactions with a selected parameter.
 
`search торговец faq`
Дополнительные данные о Клиенте, отправленные Торговцем или предоставленные Клиентом на платёжной форме, отображаются под индикатором карты или индикатором другого способа оплаты. Клик по значению такого параметра вызовет поиск всех транзакций, содержащих такое же значение.Клик по значку + возле значения параметра (обведены красным на изображении ниже) добавит его в чёрный, белый список или список лояльности. Повторный клик по значку исключит значение из списка.
 
 

Если Торговец добавлен в модуль Customer Management, новый клиент CMS может быть создан вручную:
 
 

 
После нажатия Create CMS customer заполните нужные поля, назначьте новый “Merchant customer ID” и нажмите Create. Новый клиент не будет создан, если “Merchant customer ID” не уникален.
 
 

 
If the client already has a CMS level, it will be indicated in the transaction details and client details
 
 

 

 
All transactions within the order are grouped and the commission for each operation is calculated.
 
Данный экран имеет функцию добавления заметок. Например, заметки для документов по транзакции, контактов клиентов или любая другая информация, связанная с этим заказом.
 
 

 
Текущий статус транзакции находится в правой верхней части экрана заказа:
 
 

 
Общая информация обо всех транзакциях, связанных с предоставленными данными клиента, отображается на верхней панели:
 
Общая сумма всех транзакций, совершенных указанным держателем карты, и количество одобренных/отклоненных/отфильтрованных и т. д. транзакций:
 
 

 
Общая сумма транзакций и количество одобренных/отклоненных/отфильтрованных транзакций с указаной электронной почтой:
 
 

 
Общая сумма транзакций и количество одобренных/отклоненных/отфильтрованных транзакций с указаным IP адресом:
 
 

 
Общая сумма транзакций и количество одобренных/отклоненных/отфильтрованных транзакций с указаным номером карты (PAN):
 
 

##### Процедура Списания и Отмены из личного кабинета

If Preauth has final successful status, the Merchant can initiate cancel which cancels the deduction and returns locked amount back to customer’s card or the Merchant can initiate capture which deducts the locked amount from customer’s card.
To start a cancellation or capturing (deduction) of the transaction, go to the details of the relevant order.
On the order details page, click the Cancel order button for cancellation of deducting and Capture order for deducting the locked amount.

##### Процедура Возврата из личного кабинета

If the order has final successful status, the Manager can return the money to the customer, on their request, for instance.
To start a refund (reversal) transaction to the customer card, go to the details of the relevant order.
On the order details page, click the Reverse order button.

 

Диалоговое окно откроется как показано ниже:

 

In this dialog box specify the amount of reversal. It can be the entire amount of the order, or only a part of it for cases where the Merchant refunds payment for certain goods that are part of one order.
In the Comment field a description of this refund can be added.

> **Warning:** Торговцам следует быть предельно внимательными при возврате средств! Запросы на возврат немедленно отправляются в банк и отменить эту транзакцию из системы Payneteasy будет невозможно.

##### Процедура Возврата из личного кабинета

If the order has final status and had server_callback_url in the initial request, the Merchant can re-send the final callback.
To send a callback to the Connecting Party, go to the details of the relevant order.
On the order details page, click the Callbacks button.

Диалоговое окно откроется как показано ниже:

 

In this dialog box click Send Again to resend the callback to the Connecting Party. If the
callback is not sent successfully, click Send Again to retry, or click Cancel to cancel the callback.

 

| Callback Fields | Описание |
|-------------------------------|--------------------------------------------|
| Event ID | Идентификатор события обратного вызова |
| Callback URL | URL получателя обратного вызова |
| Транзакция тип | Тип транзакции |
| Описание: Transaction status | Описание: Transaction status |
| Описание: Last fire date | Время последней попытки обратного вызова |
| Описание: Next fire date | Время следующей попытки обратного вызова |
| Описание: Retry count current | Оставшиеся попытки автоматического повтора |
| Описание: Job processed | Статус обработки задачи обратного вызова |
 

Callback Sending Logic

| Параметр `Описание: Job processed = N` | • отправка обратного вызова активна • будут выполнены автоматические повторные попытки • доступна кнопка Отмена |
|------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Параметр `Описание: Job processed = Y` | • отправка обратного вызова остановлена • автоматические повторные попытки не будут выполнены • кнопка Отмена недоступна |

When the Send button is pressed, a single manual callback is sent and the `Описание: Retry count current` will decrease by 1.
The status will change from: Y → N if the callback attempt fails.

Можно остановить обратные вызовы, нажав Отмена.

When the Cancel is pressed:
The status will change from: N → Y, callback will stop and no further automatic attempts will occur.

> **Note:** Отмена callback предотвращает любые дальнейшие автоматические попытки повтора, пока callback не будет запущен вручную снова.

##### Change Status From Back Office

If the order has final status, the Manager can change the status from declined to approved (and the other way around).
To change the order’s status manually, without requesting a status from provider, go to the details of the relevant order.
On the order details page, click the Change Transaction Status button.

 

Диалоговое окно откроется как показано ниже:

 

| `Transaction Date and Time` | Allows to change date and time of transaction. Leave it blank to keep existing date and time without change. |
|-------------------------------|--------------------------------------------------------------------------------------------------------------------------|
| `Amount` | Allows to change the order’s amount. |
| `Result Status` | An order’s status (DECLINED/APPROVED) should be chosen. |
| `External ID` | Allows to change External Order ID. |
| `RRN` | Allows to add a retrieval reference number of the transaction. |

If there is more than one completed transaction (Gate) in the session, the user will be presented with a list of
transactions and can select which one to update.

 

Only transactions with a final status will appear in this selection list.
Transactions with a non-final status will not be included.
If there is only one transaction with a final status in the session, the transaction selection list will not be displayed in the context window.

> **Warning:** Please note that once the needed gate is chosen, all the subsequent gates after this gate will be deleted from the transaction.

If the order has a final declined status and there is more than one gate in the chain, the Manager can use the
Rollback transaction & query status button to request the latest transaction status from the provider.

 

By pressing this button, a status request will be sent to the provider, and the transaction will be updated with the provider’s latest status.

#### Рекуррентные платежи

Данный экран находится в “Заказы”.
 
На данном экране отображаются регулярные платежи (например, подписки).
 
Базовый поиск осуществляется по дате и точным критериям:
 
 

 
Кнопка Критерии сожержит дополнительные параметры поиска:
 
 

| `Статус рекуррента` | Позволяет выбрать указанный статус повторения регулярной транзакции: Failed - неудачная попытка; Scheduled - запланированная попытка; Stopped - временно приостановленная или отмененная попытка. |
|-----------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `Тип рекуррента` | Позволяет выбрать указанный тип повторения регулярной транзакции: Manual - регулярные платежи инициируются вручную; Auto - регулярные платежи инициируются автоматически в соответствии с установленным графиком; Native - регулярные платежи используют специальную интеграцию в банке Эквайере. |
| `Терминал` | Позволяет выбрать конкретный терминал или несколько терминалов, если таковые имеются. |
| `Проект` | Позволяет выбрать конкретный проект или несколько проектов, если таковые имеются; Выберите один или несколько критериев и нажмите Поиск чтобы найти нужную транзакцию. |

#### Оповещения Ethoca

Эта секция позволяет увидеть оповещения от Ethoca, которые помогают предотвратить чарджбэки:

#### Chargeback Help

Эта секция позволяет увидеть оповещения от Verifi, которые помогают предотвратить чарджбэки:

### Статусы и типы транзакций

#### Типы транзакций

Платформа обработки Payneteasy делит все транзакции на несколько типов в зависимости от назначения каждой транзакции. Каждая транзакция имеет определённый статус.

| `Продажа` | Приём платежа за предоставленные товары или услуги в рамках одной операции; |
|------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `Предавторизация` | Блокировка фиксированной суммы денег на карте для последующего снятия (финансовый залог). Держатель карты не сможет воспользоваться удержанными средствами, однако эти деньги не будут сняты с банковского счета до тех пор, пока от Торговца не поступит последующий запрос (списание). По истечении определенного периода времени, если от Торговца не поступит последующий запрос, удержание этой суммы средств отменяется, и она снова станет доступной для использования. |
| `Списание` | Снятие ранее удержанных денежных средств по транзакции “предавторизация” с банковского счета держателя карты. |
| `Отмена` | Отмена удержания средств транзакцией «preauth». |
| `Возврат` | Операция Refund для ранее одобренной транзакции («sale» или «preauth» с последующим «capture»). Например, отмена заказа клиентом или частичный возврат товара в магазин. |
| `Перевод` | Транзакция peer-to-peer (p2p) перевода между 2 картами. В некоторых случаях эта транзакция может быть разделена на 2 шага — card2account и deposit2card. |
| `Чарджбэк` | Принудительная операция возврата средств, инициированная держателем карты или банком-Эмитентом в случае мошенничества. |
| `Мошенничество` | Специальный маркер для мошеннических транзакций. |
| `Запрос подтверждающих документов` | Запрос дополнительных документов по спорному или подозрительному платежу. Документы могут быть запрошены у Торговца или у его агента (поставщика услуг). |
| `Верификация аккаунта` | Валидация данных карточного счета Плательщика. |
| `Выплата` | Перевод средств с банковского счёта Присоединяющейся стороны на банковский счёт клиента (получателя) или в цифровой кошелёк. |

#### Статусы транзакций

Все транзакции отмечены в соответствии с их статусами:

| | `Успешная транзакция` | Транзакция успешно обработана эквайером (платёж был выполнен в рамках транзакции), финальный статус. |
|----------------------------------------------|------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| | `Отклонённая транзакция` | По любой технической причине эквайер не может обработать транзакцию. Например, причиной может быть недостаток средств на карте или счёте клиента; окончательный статус. |
| | `Отфильтрованная транзакция` | Транзакция была отфильтрована Платёжным Шлюзом Payneteasy и не была обработана, финальный статус. |
| | `Ошибка` | Не удалось обработать транзакцию. Можно повторить попытку обработки. Если ошибка возникнет снова, обратитесь в службу поддержки Payneteasy; окончательный статус. |
| | `Неизвестно` | Платёжный Шлюз не смог получить финальный статус транзакции. Обратитесь в службу поддержки Payneteasy для уточнения статуса транзакции, нефинальный статус |
| | `Сбой` | Внутренний статус системы. Означает, что в системе нет доступных настроек для маршрутизации транзакции из-за ограничений фильтров, финальный статус. |
| | `Обработка` | Транзакция обрабатывается, следует продолжать опрос. Если статус транзакции не изменился в течение часа, что-то пошло не так; прекратите опрос и сообщите менеджеру Платёжного Шлюза. Статус не является окончательным. |

> **Note:** После сверки статус транзакции может измениться, даже если транзакция имеет окончательный статус

### MCP-сервер Payneteasy

#### Введение

Пошаговое руководство по подключению stateless Streamable HTTP MCP-сервера Payneteasy к Claude Desktop, Claude Code и другим AI-агентам с авторизацией по ограниченному токену доступа.

| Ключевые понятия | |
|---------------------|-------------------------------------|
| Эндпоинт production | `https://gate.payneteasy.ru/mcp-ui` |
| Authorization | `Authorization: Bearer <token ` |
| Транспорт | `Streamable HTTP (stateless)` |
| Права токена | `MCP Read Only` |

> **Note:** Сервер работает **только на чтение**. Токен `MCP Read Only` не может изменять состояние платформы — каждый доступный инструмент помечен `read Only Hint: true`.

#### URL MCP-сервера

Выберите эндпоинт, соответствующий вашей среде. Во всех примерах конфигурации в этом руководстве используется **production**-URL — при необходимости замените его на URL песочницы.

| Среда | Эндпоинт MCP | Назначение |
|----------------|----------------------------------------|--------------------------------------|
| **Production** | `https://gate.payneteasy.ru/mcp-ui` | Реальный платёжный трафик |
| **Sandbox** | `https://sandbox.payneteasy.ru/mcp-ui` | Безопасное тестирование и интеграция |

> **Warning:** Ограниченный токен доступа выпускается **отдельно для каждой среды**. Создавайте токен в профиле той среды, к которой собираетесь подключаться. Токен одной среды не будет работать в другой.

#### Получение ограниченного токена доступа

Доступ к MCP-серверу выполняется по Bearer-токену. В Payneteasy используется **ограниченный токен доступа** — он даёт права только на выбранный набор операций. Для подключения MCP достаточно профиля `MCP Read Only`.

##### Шаг 1 — Откройте профиль пользователя

Перейдите в раздел *Ограниченные токены*: Профиль → Ограниченные токены.

`Профиль пользователя с разделом «Ограниченные токены»`

##### Шаг 2 — Нажмите «Создать токен»

Чтобы создать токен, нажмите кнопку Создать токен в правом верхнем углу страницы «Ограниченные токены».

`Страница «Ограниченные токены» с кнопкой «Создать токен»`

##### Шаг 3 — Заполните параметры токена

| Поле | Значение |
|----------------------|---------------------------------------------|
| Название | любое название токена, например `mcp-1` (1) |
| Срок действия в днях | до `180` |
| Права доступа | отметьте флажок `MCP Read Only` (2) |
`Форма создания токена с названием, сроком действия и флажком MCP Read Only`

##### Шаг 4 — Создайте и скопируйте токен

Нажмите Создать токен (справа вверху формы), затем скопируйте значение токена и сохраните его.

`Окно с созданным токеном и кнопкой «Скопировать в буфер обмена»`

> **Warning:** Токен показывается **только один раз**. Нажмите Скопировать в буфер обмена и сохраните его в надёжном месте. Посмотреть значение повторно нельзя. Это длинная JWT-строка вида `eyJ…`.

#### Claude Desktop

Чтобы подключение к MCP прошло успешно, сначала установите **Node.js**.

##### Установка Node.js

1. Скачайте LTS-установщик для вашей операционной системы с [nodejs.org](https://nodejs.org).
2. Запустите установщик, оставив параметры по умолчанию.
3. Перезапустите терминал (и Claude Desktop), чтобы подхватился новый `PATH`.
4. Проверьте установку:
   ```bash
   node -v
   npx -v
   ```

 Обе команды должны вывести номер версии, например `v20.11.0`. Если `npx` не найден, откройте терминал заново или перезагрузите компьютер.

##### Настройка: через mcp-remote

**Расположение файла**

Claude Desktop подключается к удалённым MCP-серверам через файл конфигурации. Поскольку сервер Payneteasy использует HTTP-транспорт, он добавляется в секцию `mcp Servers`.

| OS | Путь |
|---------|-------------------------------------------------------------------|
| macOS | `~/Library/Application Support/Claude/claude_desktop_config.json` |
| Windows | `%APPDATA%\Claude\claude_desktop_config.json` |
Его также можно открыть из приложения: Settings → Developer → Edit Config.
 
Затем **закройте приложение Claude**.
 

> **Note:** Во всех конфигурациях ниже замените `<ACCESS_TOKEN>` на скопированное значение. Токен передаётся на сервер в заголовке `Authorization: Bearer <ACCESS_TOKEN>`.

##### claude_desktop_config.json — mcp-remote

```json
{
  "mcpServers": {
    "Payneteasy": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://gate.payneteasy.ru/mcp-ui",
        "--header",
        "Authorization: Bearer <ACCESS_TOKEN>"
      ]
    }
  }
}
```

##### Windows: устранение проблемы с запуском

В Windows запуск `npx` по абсолютному пути часто ломается из-за пробела в `C:\Program Files\nodejs`. Решение — запускать его через `cmd /c npx`, указав просто `npx`: он берётся из `PATH`, и пробел больше не ломает разбор аргументов:

##### claude_desktop_config.json — Windows

```json
{
  "mcpServers": {
    "Payneteasy": {
      "command": "cmd",
      "args": [
        "/c",
        "npx",
        "-y",
        "mcp-remote",
        "https://gate.payneteasy.ru/mcp-ui",
        "--header",
        "Authorization: Bearer <ACCESS_TOKEN>"
      ]
    }
  }
}
```

То есть `command` = `cmd`, а `npx` становится первым аргументом после `/c`. Итоговая командная строка — `cmd /c npx -y mcp-remote …`, и пробел в «Program Files» больше не имеет значения.

> **Note:** Если проблема сохраняется, в качестве запасного варианта укажите короткий путь 8.3: `"command": "C:\PROGRA~1\nodejs\npx.cmd"`. Но обычно достаточно варианта `cmd /c npx`.

##### Настройка: через HTTP

Если версия Claude Desktop не поддерживает прямой HTTP-транспорт, используйте мост `mcp-remote`:

##### claude_desktop_config.json

```json
{
  "mcpServers": {
    "Payneteasy": {
      "type": "http",
      "url": "https://gate.payneteasy.ru/mcp-ui",
      "headers": {
        "Authorization": "Bearer <ACCESS_TOKEN>"
      }
    }
  }
}
```

> **Note:** После сохранения файла **полностью перезапустите Claude Desktop**. Подключённый сервер появится в меню инструментов (иконка “🔌 / Search and tools”).

#### Claude Code

В Claude Code MCP-серверы добавляются одной командой `claude mcp add` или через файл `.mcp.json` в корне проекта.

##### Через CLI

Быстрее всего добавить HTTP-сервер вместе с заголовком авторизации:

##### Терминал

```bash
# transport http, server name Payneteasy
claude mcp add --transport http Payneteasy \
  https://gate.payneteasy.ru/mcp-ui \
  --header "Authorization: Bearer <ACCESS_TOKEN>"
```

Видимость задаётся флагом `--scope`:

| Scope | Описание |
|-----------|-------------------------------------------------|
| `local` | только для вас в текущем проекте (по умолчанию) |
| `project` | в `.mcp.json`, доступен команде через git |
| `user` | доступен во всех проектах |

##### Проверка подключения

##### Терминал

```bash
claude mcp list           # list servers and their status
claude mcp get Payneteasy # server details
```

Внутри сессии Claude Code статус проверяется командой `/mcp`.

##### Через файл проекта

Чтобы сервер был доступен всей команде, добавьте `.mcp.json` в корень репозитория. Токен лучше не коммитить — вынесите его в переменную окружения:

##### .mcp.json

```json
{
  "mcpServers": {
    "Payneteasy": {
      "type": "http",
      "url": "https://gate.payneteasy.ru/mcp-ui",
      "headers": {
        "Authorization": "Bearer ${PAYNET_MCP_TOKEN}"
      }
    }
  }
}
```

##### Терминал

```bash
export PAYNET_MCP_TOKEN="<ACCESS_TOKEN>"
```

> **Note:** Claude Code подставляет `${VAR}` из окружения при запуске. `.mcp.json` коммитьте в репозиторий, а сам токен держите в локальном `.env` или менеджере секретов.

#### Другие AI-агенты

Принцип одинаков для всех клиентов: укажите эндпоинт `https://gate.payneteasy.ru/mcp-ui`, используйте транспорт **Streamable HTTP** и заголовок `Authorization: Bearer <ACCESS_TOKEN>`. Ниже приведены готовые конфигурации для популярных агентов.

##### Cursor

Файл: `~/.cursor/mcp.json` или `.cursor/mcp.json` в проекте.

##### .cursor/mcp.json

```json
{
  "mcpServers": {
    "Payneteasy": {
      "url": "https://gate.payneteasy.ru/mcp-ui",
      "headers": {
        "Authorization": "Bearer <ACCESS_TOKEN>"
      }
    }
  }
}
```

Затем: **Settings → MCP → Enable** для сервера `Payneteasy`.

##### VS Code (Git Hub Copilot / Agent Mode)

Файл: `.vscode/mcp.json`.

##### .vscode/mcp.json

```json
{
  "servers": {
    "Payneteasy": {
      "type": "http",
      "url": "https://gate.payneteasy.ru/mcp-ui",
      "headers": {
        "Authorization": "Bearer <ACCESS_TOKEN>"
      }
    }
  }
}
```

Запустите сервер кнопкой *Start* над блоком в `mcp.json` или командой `MCP: List Servers`.

##### Cline · Windsurf · другие MCP-клиенты

Большинство клиентов используют единый формат. Если клиент поддерживает только stdio, оберните HTTP-сервер в `mcp-remote`:

##### настройки mcp (общий вид)

```json
{
  "mcpServers": {
    "Payneteasy": {
      "command": "npx",
      "args": [
        "-y", "mcp-remote",
        "https://gate.payneteasy.ru/mcp-ui",
        "--header",
        "Authorization: Bearer <ACCESS_TOKEN>"
      ]
    }
  }
}
```

##### Ручная проверка (curl)

Перед настройкой агента можно убедиться, что токен работает:

##### Терминал

```bash
curl https://gate.payneteasy.ru/mcp-ui \
  -H "Authorization: Bearer <ACCESS_TOKEN>" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
```

В ответе должен прийти список доступных инструментов — значит, сервер и токен настроены верно.

#### Доменная модель

Сервер отдаёт доменную модель в поле `instructions`, чтобы агент понимал связи между сущностями ещё до вызова инструментов. Ниже она приведена целиком.

##### Заказы и транзакции

* **Заказ** — это попытка покупки со стороны клиента. Он содержит одну или несколько **транзакций**: преавторизацию, списание, возврат, чарджбэк.
* Статусы транзакций: **approved**, **declined** и **filtered** (*filtered* — заблокирована правилами фрод-мониторинга до обработки).

##### Инструменты статистики

Инструменты `stats_*` возвращают **агрегаты** (количества и суммы), но никогда не отдельные заказы. Для поиска конкретных заказов используйте `orders_search`.

| Scope | Описание |
|----------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| stats_get_transaction_timeseries | Возвращает количество и сумму по временным интервалам (день / неделя / месяц) с разбивкой по статусу транзакции. |
| stats_get_transaction_summary | Возвращает продажи / отмены / чарджбэки / фроды / диспуты (количества, суммы и доли) за период с разбивкой по типу карты и общим итогом. |
| stats_list_top_entities | Ранжирует мерчантов / компании / процессоры по метрике за период (по убыванию); полученные идентификаторы можно передавать в инструменты `*_get_details` или использовать как фильтры статистики. |
| stats_get_breakdown | Разбивает метрику за период (столбчатая диаграмма) по статусу транзакции, стране банка-эмитента или IP, а также по причине отказа / чарджбэка / фрода. Фильтры те же, что и у инструмента временных рядов. |

##### Инструменты заказов

| Scope | Описание |
|--------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| orders_get_details | Возвращает один заказ по идентификатору: сводку по заказу и транзакциям, метаданные карты и маскированные контакты клиента, а также маршрутизацию мерчанта. Разделы отображаются только для тех API заказа, которые доступны токену. |
| orders_search | Ищет заказы по периоду изменения с необязательными фильтрами по статусу и сущностям и с постраничной выдачей; возвращает безопасные сводки заказов. Для полной информации по одному заказу используйте `orders_get_details`. |
| orders_get_logs | Возвращает стадии сессии обработки заказа (журнал) — каждую со своим сообщением; `mode=UNLIMITED` отдаёт полный набор. |

##### Разрешение идентификаторов

Идентификаторы валют и типов карт получайте через `refs_list_*`, а идентификаторы мерчантов, процессоров, менеджеров и т.д. — через инструменты `*_search`, прежде чем использовать их как фильтры статистики.

### Торговецs

#### Creating Торговец

Чтобы просмотреть и найти всех Торговцев, перейдите Settings -> Users -> Торговецs, затем, чтобы создать нового Торговца, нажмите кнопку + New Торговец:

Ниже перечислены все поля, доступные для заполнения:

| Название поля | Описание | Необходимость |
|----------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------|
| Login | Логин, необходимый для входа в систему. **Не может быть изменён после создания**. | Обязательное |
| Password | Пароль для входа. Чтобы изменить его, обратитесь в службу поддержки. | Обязательное |
| Отображаемое имя | Название торговца, которое будет отображаться. | Обязательное |
| E-mail | Контактный адрес электронной почты, который будет добавлен к этой учётной записи торговца. | Обязательное |
| Контрольный ключ | Секретный ключ, который будет использоваться для подписания запросов. | Обязательное |
| Платёжная группа | В настоящее время не используется. «Common» — значение по умолчанию. **Не может быть изменено после создания**. | Обязательное |
| Name | Отображает имя контактного лица торговца. Оно будет показано только в сведениях о торговце. | Обязательное |
| Surname | Отображает фамилию контактного лица торговца. Это имя будет показано только в сведениях о торговце. | Обязательное |
| Параметр Business type | Покажет тип бизнеса торговца. | Необязательное |
| Количество одобренных сессий для возвращающегося клиента | Показывает, после скольких одобренных транзакций плательщик будет считаться возвращающимся для торговца. | Необязательное |
| Страна регистрации | Отображает страну торговца. | Необязательное |
| URL сайта торговца | URL сайта Торговца теперь можно задать на экране деталей Торговца и включить в email-уведомления (макрос MERCHANT_SITE_URL). | Необязательное |
| Organization | Отображает название организации торговца. | Необязательное |
| Теги | Отображает теги, по которым торговца можно найти в системе позже. | Необязательное |
| Дескриптор API | Менеджер может задать параметр API descriptor в профиле Торговец. Это значение будет возвращаться вместо значений шлюза, указанных в [Gate Details](https://doc.payneteasy.ru/manager/configuration/gate/gatedetails.html.md). | Необязательное |
| Email for Notifications | Торговец email addresses for automated notifications regarding transaction status changes to Fraud or Chargeback. Supports multiple recipients. | Необязательное |

#### Описание: Торговец details

Экран позволяет просматривать все детали созданного торговца, изменять настройки, настраивать баланс торговца и просматривать связанные endpoint’ы.
 

##### Linked Endpoints

В этом разделе по умолчанию отображаются включённые конечные точки, связанные с торговцем. При выборе Show disabled endpoints таблица будет заменена и отобразит отключённые связанные конечные точки.
 
 
`Описание: linked endpoints`

#### Описание: Account balance

##### Введение

Менеджер может настраивать и просматривать несколько балансов для каждой учётной записи Торговец и [запрашивать балансы через API с доступом Менеджер](https://doc.payneteasy.ru/integration/API_commands/api_v2_get_balance_manager.html.md). Эти балансы рассчитывают общие накопленные средства от транзакций, связанных с Торговец. Расчёт балансов поддерживает настроенные тарифные планы, включая STH — краткосрочный холд и RR — Rolling Reserve.
 
Менеджер может добавлять корректировки к балансам Торговца в интерфейсе или с помощью [API корректировок](https://doc.payneteasy.ru/integration/API_commands/api_v2_get_balance_merchant.html.md), чтобы отразить нетранзакционные изменения баланса Торговца. См. [Получение корректировок баланса](https://doc.payneteasy.ru/integration/API_commands/accounts_adjustments.html.md).
 
По умолчанию Торговцы не могут видеть свои балансы в интерфейсе или [запрашивать балансы через API с доступом торговца](https://doc.payneteasy.ru/integration/API_commands/api_v2_get_balance_merchant.html.md), однако эту функцию можно предоставить каждому Торговцу отдельно.
 
 
Балансы торговца можно настроить на вкладке Accounts экрана сведений о торговце.
 
Для настройки расчёта балансов выполните следующие действия:
 
1. Установите [конфигурацию учётной записи](#account-configuration), чтобы определить, как и какие транзакции и тарифы должны влиять на [балансы](#account-configuration).
 
2. Установите [Balances](#balances) для нужных [currencies](#currencies-balances) и [endpoints](#endpoint-setting).
 
3. Установите [переопределение конфигурации учётной записи](#account-configuration-override) для конкретных [балансов](#balances) (при необходимости).
 

First balance is funded by sale transactions and defunded by payout transactions and is set up for USD currency, also Торговец rates applied for sale transactions.
Second balance has override for sale transactions which will deduct balance with amount calculated from manager rate plan.

Ниже приведён пример полностью настроенного баланса с выделенными шагами.

`Описание: configured balance`

##### Конфигурация учётной записи

Счета Торговца можно настроить через вкладку Accounts. Пример окна счетов см. ниже:

`Описание: accounts tab`

###### Application Rate Direction

Для транзакций с rate only можно выбрать как ADD, так и DEDUCT. Для каждой транзакции ставка применения может задаваться по-разному. Например, если для транзакции Payout необходимо списать комиссию помимо списания суммы самого Payout, выберите DEDUCT в настройке Apply direction.

###### Application Impact on Balance

Разные типы транзакций учитываются по-разному при расчёте балансов. Список влияния операций на баланс приведён в таблице ниже:

| Транзакция тип | Описание: Impact on balance |
|------------------------|-------------------------------|
| sale | Add |
| capture | Add |
| dispute | Add |
| chargeback_reversal | Add |
| arbitration | Add |
| payout_cancel | Add |
| chargeback | Deduct |
| prearbitration | Deduct |
| reversal | Deduct |
| payout | Deduct |
| перевод (deposit2card) | Deduct |
| preauth | Описание: Rate only |
| cancel | Описание: Rate only |
| fraud | Описание: Rate only |
| retrieval | Описание: Rate only |
| pan_eligibility | Описание: Rate only |
| create_card_mapping | Описание: Rate only |
| update_card_mapping | Описание: Rate only |
| inquire_card_mapping | Описание: Rate only |
| delete_card_mapping | Описание: Rate only |
| mfo_scoring | Описание: Rate only |
| account_verification | Описание: Rate only |
| void | Описание: Rate only |

###### Rate Types

Для каждого типа транзакции Менеджер может отдельно применить ставку (комиссию). Возможные типы ставок:

* Ничего
* Торговец
* Реселлер
* Менеджер
* Dealer
* Acquirer

###### Date Bumping Functions

Функции сдвига даты позволяют выбрать, когда средства будут зачислены на счёт. Возможные значения:
 
> * ASAP — зачисление средств без задержки. Не включает STH и Rolling Reserve.
> * ASAP_plus_RR — зачисление средств ASAP с учётом Rolling reserve. Не включает STH.
> * DAY + n — зачисление средств с STH после указанного количества дней + Rolling Reserve.
> * BDAY + n — зачисление средств с STH после указанного количества рабочих дней + Rolling Reserve.
 
`Описание: date bump`

###### Добавить конфигурацию учётной записи

Чтобы создать новый баланс учётной записи, добавьте конфигурацию учётной записи и баланс:

1. Чтобы добавить новую конфигурацию учётной записи, нажмите +Add в поле конфигурации и настройте тип транзакции и ставки, которые будут зачислять или списывать средства с баланса согласно настройкам, описанным в [Accounts Configuration](#account-configuration). При необходимости можно выбрать гейт и endpoint: если оставить их пустыми, конфигурация баланса будет работать для всех гейтов и endpoint выбранного Торговец.

 
`Описание: add conf`

##### Balances

###### Описание: Add balance

1. Чтобы добавить новый баланс учётной записи, нажмите кнопку +Add в поле балансов учётной записи и задайте баланс, имя менеджера и валюту. Подробная настройка баланса описана ниже в этом разделе.

 
`Добавление баланса учётной записи`

###### Types

Для каждого баланса существуют четыре типа средств:

###### Balance Total

Balance Total — сумма средств, рассчитанная на основе конфигурации, включая STH и RR.

 
`Описание: balance total`

###### Balance Live

Balance Live — сумма средств, рассчитанная на основе конфигурации, исключая STH и RR.

 
`Описание: live balance`
 

###### Short-Term Holds

Краткосрочные удержания — сумма средств, рассчитанная на основе функции переноса даты.

 
`sth`
 

###### Rolling Reserve

Rolling Reserve (Long-Term Holds or Holds from Rate Plan) - amount of funds calculated based on the rate plan hold.
Max Rolling Reserve - a limit on the amount of Rolling Reserve.

 
`Max Rolling Reserve`
 

Max Rolling Reserve можно изменить в появившемся окне «Изменить Max Rolling Reserve». Чтобы установить или отредактировать Max Rolling Reserve, нажмите значение -.

 
`Change Max Rolling Reserve`

> **Warning:** Rolling reserve will be credited to balance on Transaction Date + Period from Rate Plan + 1 day. When the Max Rolling Reserve limit is reached, the total amount of hold funds will not increase and the Rolling Reserve calculated from next transactions will be added to balance live instead. Also, If the Max Rolling Reserve is set later and is less than the current accumulated Rolling Reserve, then the Rolling Reserve calculated from next transactions will be added to the balance live.

###### Endpoint Setting

Существует возможность выбрать один или несколько endpoint’ов для каждого баланса, по которым будет рассчитываться баланс.

Конечную точку можно добавить при создании баланса:

 
`Описание: add acc balance`
 

Либо её можно указать для существующего баланса, нажав на одну из областей, выделенных на рисунке:

 
`Описание: acc debit`
 

На этом рисунке также показана разница между балансами, настроенными с указанным Endpoint и без него.

###### Multiple Balances In One Валюта

Для одной валюты может быть настроено несколько балансов.

In this case, only one of the balances can be without the specified Endpoints.
When creating all subsequent balances, it is mandatory to specify the Endpoint.
The calculation is made for each balance separately: the balance without the specified Endpoints is counted only for those Endpoints for which a separate balance has not been created.

 
`Описание: edit balance`

##### Переопределение конфигурации учётной записи

Существует возможность изменить конфигурацию для каждого баланса (не для всех балансов Торговца).

В этом случае нужно нажать кнопку Конфигурация, как на рисунке ниже:

 
`Описание: conf over ride`
 

После этого нажмите кнопку Добавить:

`Описание: over ride add`
 

В этом окне можно изменить настройки баланса, как и в Конфигурации

> **Warning:** Если переопределён хотя бы один тип операции, баланс рассчитывается по переопределённой конфигурации и только для переопределённых операций. Если для типов операций нет переопределения, баланс рассчитывается по основной конфигурации.

Пример: для баланса 191 операции Sale и Payout переопределены, что означает, что для этого баланса основная конфигурация не действует.

`Описание: Описание: conf over ride done`

Чтобы удалить переопределение конфигурации, нажмите кнопку Удалить всё и подтвердите удаление.

###### Creation Date Changing

Чтобы изменить дату создания баланса, нажмите кнопку Изменить дату создания:

`Дата изменения баланса учётной записи`

Выберите дату создания и нажмите кнопку Обновить:

 
`Дата изменения подтверждения баланса учётной записи`
 

После изменения даты создания используйте [reconciliation](#accounts-reconciliation) для перерасчёта баланса.

###### Export Balance Transactions

Чтобы использовать сверку баланса, нажмите кнопку Сверка баланса:

`Описание: rece xbut`
 
Чтобы экспортировать транзакции баланса, нажмите кнопку Export Transactions и выберите период транзакций:
 
 
`Описание: rece xbut`
 
`Описание: period field`
 

> **Note:** Максимальный период — 31 день.

> **Note:** Дата отсчитывается как [day_From, day_To), поэтому последний день не будет включён в интервал.

Файл CSV содержит следующие поля:

 
`Описание: balance exp`
 

> **Warning:** Поля «Reserve date» и «STH date» содержат дату и время, когда сумма повлияет на баланс. Дата STH в отчёте не учитывает часовой период, описанный в типах баланса.

###### Balance Reconciliation

Сверка позволяет пересчитать баланс после изменений.

Чтобы сверить баланс, нажмите 3 точки рядом с балансом, затем кнопку Reconciliation Balance и после кнопку Reconcile:

 
`Описание: rece xbut`
 

> **Note:** Сверяются только общий и доступный балансы. RR и STH нельзя сверить; их сумма будет зачислена на доступный баланс согласно конфигурации на момент создания транзакции.

Move Rolling Reserve позволяет вручную перевести скользящий резерв на активный баланс до даты освобождения удержания. Чтобы переместить скользящий резерв, нажмите три точки рядом с балансом, затем Move Rolling Reserve:

 
`Описание: rece xbut`
 

##### Adjustments

Корректировки позволяют изменять сумму балансов без выполнения транзакций.

Список корректировок и полную сумму корректировки можно просмотреть, нажав кнопку Adjustments:

 
`adj`
 

Для удобства пользователей корректировки можно отсортировать по ID с помощью кнопки ниже:

 
`Описание: adj ID filter`

###### Manual Adjustment

Сумма корректировки и внешний источник корректировки обязательны. Adjustments для баланса можно выполнить через кнопку Add+:

 
`Описание: adj click`
 

При добавлении корректировки можно указать следующие поля:

* Описание: Adjustment amount
* External ID
* Описание: External source
* Описание: External info

> **Note:** Сумма корректировки и Внешний источник являются обязательными полями:

 
`Добавить корректировку`

###### Adjustment API

Помимо ручных корректировок, можно выполнять корректировки через API.

Для этого необходимо создать tsv, заархивировать его и отправить через API. Команда API с примерами указана в [документации по интеграции](https://doc.payneteasy.ru/integration/API_commands/accounts_adjustments.html.md).

###### Export Adjustments

Чтобы экспортировать все корректировки для определённого баланса, нажмите Export, укажите период времени и снова нажмите Export. CSV-файл корректировок будет скачан автоматически.

> **Note:** Максимальный период — 31 день

Загруженный файл содержит следующие поля:

* Create Date
* Adjustment Сумма
* Adjustment Application Date
* External Adjustment Unique Id
* External Source Name
* External Adjustment Info

Первая строка файла содержит период и сумму всех корректировок.

`Описание: adj ex`

###### Scheduled Adjustment

Эта функция помогает настроить ежемесячную/еженедельную комиссию, которую можно устанавливать в назначенные даты каждого месяца/недели. Scheduled корректировки баланса можно создать кнопкой Add+:

 
`Описание: scheduled add`
 

При добавлении корректировки можно указать следующие поля:

* Дата первой корректировки
* Дата последней корректировки
* Сумма
* Валюта
* Автоматически прекращать создание корректировок при отключении торговца
* Автоматически прекращать корректировки, когда баланс становится отрицательным или нулевым
* Я осознаю, что создание такой корректировки может существенно повлиять на баланс Торговца и привести к его неконтролируемому изменению в долгосрочной перспективе, что может вызвать финансовые потери из-за возможности неограниченного вывода средств вследствие неконтролируемого увеличения баланса Торговца. **Этот флажок обязателен**

 
`Описание: Описание: scheduled add1`

Status указывает, активна ли корректировка. Её также можно включить или выключить, нажав на неё:

 
`Описание: scheduled status`
 

ID — уникальный идентификатор запланированной корректировки:

 
`Описание: scheduled id`
 

Период показывает, какое расписание выбрано для следующей корректировки:

 
`Описание: scheduled period`
 

Дата показывает интервал времени от первой до последней корректировки:

 
`Описание: scheduled date`
 

Дата следующего расписания показывает, когда будет следующая запланированная корректировка:

 
`Описание: scheduled next date`
 

Дата последнего запуска показывает, когда была последняя запланированная корректировка:

 
`Описание: scheduled lastate`
 

Сумма показывает сумму корректировки:

 
`Описание: scheduled amount`
 

Автоматически показывает, при каких условиях запланированная корректировка будет остановлена:

 
`Описание: scheduleda utomatic`
 

Редактировать можно использовать для изменения запланированной корректировки:

 
`Описание: scheduled edit`
 

Удалить можно использовать для удаления запланированной корректировки:

 
`Описание: scheduled delete`

### Отчет о движении денежных средств торговца

Этот отчёт рассчитывает обороты транзакций: Sale, Chargeback и возвращённые средства. Он показывает распределение оборота с комиссиями и приблизительную прибыль за выбранный период, а также доход по дням.
 
При необходимости можно добавить дополнительные критерии, нажав Criteria: endpoints, projects, merchants, gates, processors и т. д. Настроенные критерии поиска можно сохранить как шаблон для последующего использования.
 
Данные можно скачать, нажав кнопку Сгенерировать.
 
Пример полученного отчета показан ниже:

### Ежедневный отчёт о деятельности торговца

В этом отчёте отображается ежедневный финансовый поток за определенный период.
 
При необходимости можно добавить дополнительные критерии, нажав Criteria: endpoints, projects, merchants, gates, processors и т. д. Настроенные критерии поиска можно сохранить как шаблон для последующего использования.
 
Отчет можно загрузить, нажав на кнопку Сгенерировать.
 
Пример полученного отчета показан ниже:

### Merchant Online Balance Reconciliation

В этом разделе отображается информация обо всех сверках Торговцев. Чтобы отключить все уведомления о сверке, нажмите кнопку `unmute`.

 

> **Note:** Оповещение придёт только если параметр “DIFF” будет больше 1000$ (эквивалент для других валют)

### Monitoring

### Payment Cashier Configuration

#### Введение

Для интеграции с Платёжной кассой требуется настроенный Главный Эндпоинт для отображения формы Кассы (также называемой Параллельной формой) и настроенные Вспомогательные Эндпоинты для каждого способа оплаты, отображаемого в Параллельной форме. Менеджер может настроить в Главном Эндпоинте, какой тип транзакции (sale, preauth) будет инициироваться для каждого способа оплаты и для какого списка стран этот способ оплаты будет отображаться. В одной Параллельной форме может быть несколько способов оплаты, например кредитная карта, банковский перевод и т. д., доступных Плательщику для выбора.

#### Parallel Form Master Endpoint Settings

Существует инструкция по конфигурации проекта для использования Parallel Form:

1. Чтобы настроить параллельную форму со способами оплаты в разных валютах, необходимо создать как минимум один проект для каждой валюты. Например, для обработки платежей в USD, EUR и JPY следует создать 3 разных проекта.
 
 
2. После создания проектов необходимо создать и подключить к соответствующим проектам все требуемые конечные точки для указанных способов оплаты. Эти конечные точки будут вспомогательными по отношению к основной конечной точке и будут называться вспомогательными.
 
 
3. Чтобы создать Master Endpoint, перейдите (Settings -> Configuration -> Master Endpoints -> + Master Endpoint).
 
 
4. Вспомогательные Эндпоинты, представляющие способы оплаты, должны быть подключены к Главному Эндпоинту, чтобы отображаться в Параллельной форме. Это можно сделать в настройках Главного Эндпоинта. Чтобы добавить новый Вспомогательный Эндпоинт, нажмите кнопку Добавить. Заполните форму с тремя полями: «Эндпоинт», «Способ оплаты» и «Справочное имя способа оплаты». В поле «Эндпоинт» следует выбрать один из доступных Эндпоинтов. Поле «Способ оплаты» определяет название способа оплаты, отображаемое на соответствующей вкладке Параллельной формы. Поле «Справочное имя способа оплаты» определяет внутреннее справочное имя этого способа оплаты, которое можно использовать для настройки стиля его отображения в шаблоне Параллельной формы.
 
 
5. После добавления Auxiliary Endpoint Менеджер также может выбрать тип инициируемой транзакции (sale, preauth) и задать список стран, в которых этот способ оплаты будет доступен. Чтобы выбрать список стран, нажмите кнопку с тремя точками напротив поля Auxiliary Endpoint.
 
 
6. Чтобы изменить шаблон Параллельной формы по умолчанию, перейдите к Главному Эндпоинту (Главный эндпоинт → Общие → Изменить → Шаблон платёжной формы). Чтобы изменить шаблон платёжной формы по умолчанию для конкретного способа оплаты, перейдите к экрану сведений соответствующего Вспомогательного Эндпоинта и задайте нужный Шаблон платёжной формы. Этот алгоритм возврата шаблона формы используется для всех типов шаблонов форм: оплаты, ожидания и завершения. Подробнее см. раздел «Логика отображения страницы оплаты» далее.
 

> **Note:** Шаблон платёжной формы также можно задать в настройках Проекта (Проект → Общие → Изменить → Шаблон платёжной формы). Когда запрос отправляется на Главный Эндпоинт без указанного шаблона Параллельной формы, Главный Эндпоинт наследует шаблон Параллельной формы из настроек Проекта. Этот вариант не рекомендуется, поскольку обычно Главный Эндпоинт и Вспомогательные Эндпоинты подключены к одному Проекту, и таким образом все Эндпоинты унаследуют один и тот же шаблон формы.

 
Ниже приведён пример настроенного Master Endpoint с несколькими доступными способами оплаты, представленными подключёнными к нему Auxiliary Endpoints:
 
 
`Master Endpoint`
 
Ниже приведён пример успешной транзакции через Master Endpoint. Когда Плательщик открыл Parallel Form, основная транзакция инициировала вспомогательную транзакцию для способа оплаты, выбранного в форме. После получения вспомогательной транзакцией финального успешного статуса он вызвал финальный успешный статус основной транзакции:
 
 
`Master Endpoint Transaction Example`

#### Платёж Page Display Logic

Транзакции Платёжной кассы можно инициировать API-запросами или через Виртуальный терминал в интерфейсе. Когда Присоединяющаяся сторона (Торговец или платёжный посредник, представляющий Торговца) отправляет запрос на Главный Эндпоинт, система Payneteasy возвращает URL Параллельной формы, HTML-содержимое которой определяется на уровне Главного Эндпоинта. Когда в Параллельной форме выбран способ оплаты, система Payneteasy возвращает HTML-содержимое шаблона формы этого способа оплаты, заданного на уровне соответствующего Вспомогательного Эндпоинта (или вместо него отображает внешнюю платёжную форму).
 
У каждого способа оплаты своя логика отображения страницы оплаты. Payment Cashier может содержать несколько транзакций, инициированных в рамках одного платёжного сеанса, поскольку для Плательщика может быть доступно несколько способов оплаты. Когда Плательщик выбирает вкладку оплаты, инициируется соответствующая вспомогательная транзакция.
 
```plantuml
  skinparam ConditionEndStyle hline
  : (1) Initiate transaction;
  if ((2) Additional Payer input required?) then (yes)
  : (3) return input form;
  : (4) submit form;
  else (no)
  endif
  if ((5) External form required?) then (yes)
  : (6) request external form from the payment provider;
  : (7) redirect to external form;
  : (8) submit form on payment provider side;
  else (no)
  endif
  : (9) show wait form;
  : (10) process transaction;
  : (11) show finish form or redirect \nto Connecting Party website;
```

(1) Транзакции могут инициироваться API-запросами, пакетной загрузкой или через виртуальный терминал в UI. Для каждого метода оплаты предусмотрена собственная логика отображения платёжной страницы.
 

> **Note:** Payment Cashier может иметь несколько транзакций, инициированных в одном платёжном сеансе, поскольку для плательщика может быть доступно несколько способов оплаты. Когда плательщик выбирает вкладку оплаты, инициируется соответствующая вспомогательная транзакция.

(3) Для оплаты кредитной картой форма отображается на стороне Платёжного Шлюза и может настраиваться. См. Payment Page Customization. Некоторые другие способы оплаты могут иметь дополнительные формы на стороне Платёжного Шлюза. Обратитесь в поддержку за подробностями.
 
(7) Некоторые методы оплаты требуют перенаправления плательщика на собственную форму. Эта форма не размещается Платёжным Шлюзом и не может быть настроена.
 
(9) Пока транзакция не достигнет финального статуса, Платёжный Шлюз отображает Wait Form для Плательщика.
 
(11) После того как транзакция достигает финального статуса, Платёжный Шлюз отображает Finish Form для Плательщика или Redirect на сайт Присоединяющейся стороны.
 

> **Note:** Все шаблоны и макросы для кастомизации см. [Forms Customization](https://doc.payneteasy.ru/integration/reference/forms_customization.html.md)

### Отчёт о производительности

Этот отчёт отображает финансовый поток за указанный период. Он также позволяет просматривать число успешных и неуспешных транзакций. Гибкая настройка критериев позволяет получить нужные данные: диапазон и тип дат, валюты, типы карт, группировку данных.
 
При необходимости можно добавить дополнительные критерии, нажав Criteria: endpoints, projects, merchants, gates, processors и т. д. Настроенные критерии поиска можно сохранить как шаблон для последующего использования.
 
Возможно произвести предварительный просмотр отчета, нажав на кнопку Предварительный просмотр.
 
Отчет можно создать, нажав на кнопку Сгенерировать.
 
Пример полученного отчета показан ниже:

### Лимиты Обработки

#### Лимиты Обработки

Строгие и мягкие лимиты, а также совокупные лимиты обработки можно найти в меню Инструменты—Лимиты Обработки. Этот экран содержит все ранее настроенные лимиты по умолчанию и лимиты по странам, разделенные по вкладкам.

`Изображение pic1 processinglimits`
 

Основные возможности:

> • Визуализация
> • Гибкие настройки
> • Мультивалютность
> • Оповещение по электронной почте
> • Предупредительные лимиты (несколько пороговых значений)
> • Стоп-лимит
> • Прогноз по дневным и месячным лимитам в контексте одного периода
> • Тренд по дневным лимитам в контексте нескольких дней

Лимит можно найти по его ID или названию. Поиск нескольких лимитов осуществляется с помощью критериев поиска. Критерии поиска можно сохранить в виде шаблона для последующего использования. Список созданных лимитов можно отсортировать по их ID (сначала новые или сначала старые).

`Фильтр processinglimits`

#### Настройка нового лимита

##### Лимиты по умолчанию

Настройте новый лимит, нажав «+Default limit»:

`Изображение pic1 processinglimits`

Новый лимит можно настроить с помощью нескольких параметров:

`Изображение pic1 processinglimits`
• Менеджер
• Вид транзакции
• Пользовательский — может быть Общим (Total), 3-D Secure, без 3-D Secure или Выплатой (Payout).
• Дополнительные критерии:

- Терминал — после выбора терминала невозможно выбрать Мерчанта;
- Торговец — после выбора Торговца невозможно выбрать конечную точку;
- Шлюз — после выбора шлюза невозможно выбрать процессор;
- Процессор — после выбора процессора невозможно выбрать шлюз;
- Компания (группа шлюзов);
- Типы карт.

• Период времени:

- Ежедневно/Еженедельно/Ежемесячно/Ежечасно — параметр, зависящий от даты. Ежемесячно — лимиты обновляются первого числа каждого месяца. Еженедельно — лимиты обновляются каждый понедельник. Ежедневно — лимиты обновляются в 00:00. Ежечасно — лимиты обновляются каждый час;
- Смещение времени (Time shift). В данный момент не поддерживается, будет добавлено позже.

• Расчет:

- Значение для суммирования — можно установить по сумме транзакций или по количеству транзакций;
- Рассчетная валюта — необходимо указать валюту для расчета лимита;
- Учитывать валюты (необязательное поле) — в каких валютах транзакции будут включены в расчет лимита;
- Приостановить трафик — «да» или «нет». Что делать с транзакциями при достижении лимита: останавливать трафик или нет;
- Значение лимита — для Суммы введите общую сумму или количество транзакций для данного лимита. Лимит не включает установленное значение: если лимит должен составлять 15000, то для включения этого порога значение должно быть 15000.01. Диапазон (Range) используется, чтобы сделать сумму лимита менее прозрачной.

##### Лимиты по странам

Лимиты по странам are available under separate “Countries” tab.

`Вкладки по умолчанию и по странам`

Перейдите на вкладку стран и настройте новый лимит, нажав «+Countries limit»:

`Лимиты по странам processinglimits`

Новый лимит можно настроить с помощью нескольких параметров:

`Экран лимитов стран processinglimits`
• Менеджер
• Пользовательский — может быть Общим (Total), 3-D Secure или без 3-D Secure.
• Страны
• Дополнительные критерии:

- Шлюз — после выбора шлюза невозможно выбрать процессор;
- Процессор — после выбора процессора невозможно выбрать шлюз;
- Типы карт.

• Период времени:

- Ежедневно/Еженедельно/Ежемесячно/Ежечасно — параметр, зависящий от даты. Ежемесячно — лимиты обновляются первого числа каждого месяца. Еженедельно — лимиты обновляются каждый понедельник. Ежедневно — лимиты обновляются в 00:00. Ежечасно — лимиты обновляются каждый час;
- Смещение времени (Time shift). В данный момент не поддерживается, будет добавлено позже.

• Расчет

- Значение для суммирования — можно установить по сумме транзакций или по количеству транзакций;
- Рассчетная валюта — необходимо указать валюту для расчета лимита;
- Учитывать валюты (необязательное поле) — в каких валютах транзакции будут включены в расчет лимита;
- Приостановить трафик — «да» или «нет». Что делать с транзакциями при достижении лимита: останавливать трафик или нет;
- Значение лимита — для суммы введите общую сумму или количество транзакций для данного лимита. Лимит не включает установленное значение: если лимит должен составлять 15000, то для его включения значение должно быть 15000.01. Диапазон (Range) используется, чтобы сделать сумму лимита менее прозрачной.

##### Warnings and Notification

Also, it’s possible to set different warnings for limits by choosing Limits reached percentage:

> `Изображение pic1 processinglimits`
 
- Warnings when limit reaches 50%, 75%, 95%, 100% and for traffic suspension with notifications by e-mail and Telegram to address specified in user account ;

К лимитам можно добавить комментарий, введя текст в поле для комментариев.

 
> `Комментарий processinglimits`

Комментарий можно найти на странице Инструменты—Лимиты обработки.

 
> `Комментарий к примеру processinglimits`

### Chain Strategy Details

Chain strategy details allows to select which Declines (negative processing results) will continue or stop the chain.

If the configured routing has such balancing types as: Chain by Sequence, Chain by Equivalently on Tx Count, Chain by Coefficient on Tx Count, it’s possible to go to the “Chain
Strategy Details” tab on the gate level and select the criteria to continue or stop the chain.

> `processor_Chain Strategy Details`

The number and name of the processor is at the top of the page.
The active line “Continue the chain” is located below and the choice of criteria is to the right of it.
“Independently of the decline reason” is selected by default.

Two active columns – “Unavailable” and “Available” – are located below.
The reasons for decline are located in the “Unavailable” field.
The chain can continue:

> - Independently of the decline reason - the chain will continue regardless of the received decline codes.
> - Only for the selected decline reasons - the chain will continue only for the specified decline reasons. Select the reasons from the “Unavailable” column with the check boxes next to them, and add them to the “Available” column by clicking the “Add” button. Remove the unwanted reasons by selecting them with the check boxes and clicking the “Remove” button.
> Confirm the parameters with the “Save” button.
> - For any decline reason except the selected ones - the chain will continue for all reasons, EXCEPT for the specified ones. Select the reasons from the “Unavailable” column with the check boxes next to them, and add them to the “Available” column by clicking the “Add” button.
> Remove the unwanted reasons by selecting them with the check boxes and clicking the “Remove” button. Confirm the parameters with the “Save” button.

### Processor Detailed Report

Отображает сведения о доходах, сгруппированные по Процессору.
 
При необходимости можно добавить дополнительные критерии, нажав Criteria: endpoints, projects, merchants, gates, processors и т. д. Настроенные критерии поиска можно сохранить как шаблон для последующего использования.
 
Данные можно загрузить, нажав на кнопку Сгенерировать.
 
Пример полученного отчета показан ниже:

### Коды ошибок Процессора

Коды ошибок процессора позволяют менеджерам назначить выбранную ошибку как [опасное отклонение](https://doc.payneteasy.ru/manager/tools/monitoring/tasks_man.html.md). Если один из кодов, выбранных как опасное отклонение, получен от процессора:
 
1. Соответствующее уведомление появится на экране [monitoring process](https://doc.payneteasy.ru/manager/tools/monitoring/tasks_man.html.md).
 
2. Соответствующий маркер будет прикреплён к транзакции и отображён на экране [Order Details](https://doc.payneteasy.ru/manager/manager_orders.html.md).
 
 
`коды ошибок процессора`

### Процессор

**Процессор Overview**
 
Процессор — внутренняя сущность Платёжного Шлюза, инкапсулирующая взаимодействие со сторонней системой обработки, например эквайером. Экран списка Процессоров находится в разделе Settings → Configuration → Процессорs. Он содержит все Процессоры, созданные в системе.
 
 

**Процессор Settings**
 

| [Коды ошибок Процессора](https://doc.payneteasy.ru/manager/processor/processor_errors.html.md) | Этот экран показывает, как использовать коды ошибок Процессора. |
|----------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|
| [Сведения о Процессоре](https://doc.payneteasy.ru/manager/processor/processordetails.html.md) | Этот экран показывает все параметры и сведения о Процессоре. |
| [Процессор Acquirer restrictions](https://doc.payneteasy.ru/manager/processor/processoracquirerrestrictions.html.md) | Configurable sets of rules which allow to restrict the traffic by certain criteria. |
| [Процессор Chain Strategy Details](https://doc.payneteasy.ru/manager/processor/processor_chainstrategydetails.html.md) | This screen shows information about additional cascading chains setup. |

### Ограничения эквайера процессора

Этот функционал позволяет предотвратить неуспешную обработку транзакций на всех гейтах одного процессора, имеющих определённые ограничения. Чтобы включить их, перейдите к нужному процессору и нажмите на вкладку “Acquirer restrictions”. Вкладка доступна только для аккаунта менеджера и связанных вышестоящих аккаунтов.

> `Вкладка ACQ процессора`
Существуют следующие ограничения:
 
 

| Restriction Name | Comment | Код UI и причина |
|----------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Whitelist check (WL) | Позволяет игнорировать все прочие ограничения эквайера для выбранных номеров кредитных карт-источников и отпечатков устройств. Иногда поведение клиента может привести к неприятной ситуации, когда покупатель полностью не может проводить транзакции. Вы можете добавить данные клиента в белый список, чтобы он мог успешно провести свою транзакцию. Белый список может быть задан менеджером для конкретного номера карты-источника и для конкретного отпечатка устройства. | |
| Predefined loyalty lists check | Позволяет проводить обработку только для доверенных клиентов. У разных эквайеров разные определения доверенного клиента; этот фильтр разрешает обработку только для клиентов с email, картой источника/получателя или назначением в соответствующих списках лояльности. Транзакции клиентов, не включённых ни в один список лояльности, будут отфильтрованы. | 18042 18043 18110 18111 |
| Destination Credit Card type check | Этот реферальный список позволяет блокировать обработку транзакций для выбранных типов кредитных карт-получателей (Business, Corporate и т.д.) | 18112 |
| Source Credit Card type check | Этот реферальный список позволяет блокировать обработку транзакций для выбранных типов кредитных карт-источников (Business, Corporate и т.д.) | 18113 |
| Source Credit Card external check | Этот процесс проверки позволяет выполнять внешние запросы для подтверждения того, доступна ли карта-источник для депозитов | 18114 |
| Destination Credit Card external check | Этот процесс проверки позволяет выполнять внешние запросы для подтверждения того, доступна ли карта-получатель для выводов | 18115 |
| Check client approve count for merchant | Проверка срабатывает, когда количество транзакций, связанных с конкретным клиентом для этого мерчанта, не достигает заданных пороговых значений. Клиент может быть идентифицирован по карте или адресу электронной почты. Учитываются транзакции Sale, Preauth или Transfer в статусе approved. | 18116 |
| Check client approve count for manager | Проверка срабатывает, когда количество транзакций, связанных с конкретным клиентом для этого менеджера, не достигает заданных пороговых значений. Клиент может быть идентифицирован по карте или адресу электронной почты. Учитываются транзакции Sale, Preauth или Transfer в статусе approved. | 18117 |
| Customer name differs from Cardholder name | Проверка срабатывает, когда указанное имя клиента не совпадает с именем держателя карты. | 18120 |
| Customer billing address Country differs from Issuing Country | Эта риск-проверка срабатывает, когда у транзакции страна платёжного адреса клиента отличается от страны-эмитента карты. | 18121 |
| Processor lockout by specified declines | Фильтр позволяет блокировать процессор на период блокировки (Lockout) на основе заданного лимита отклонённых транзакций с конкретными анализируемыми кодами отклонения, произошедших за анализируемый период времени. | 19100 |
| Billing Country blacklist | Фильтр позволяет блокировать выбранные страны | 19104 |
| Check client approve date for manager | Проверка срабатывает, если срок с момента первой одобренной транзакции клиента меньше требуемого количества дней. Клиент идентифицируется по определению клиента, заданному на уровне endpoint/проекта, где endpoint переопределяет настройку проекта. Учитываются транзакции Preauth, Sale, Transfer, Payout в статусе approved. | 19103 |
| Source Credit Card Number usage frequency for last 24 hours (daily limit) | Проверка срабатывает, когда количество или сумма транзакций, связанных с конкретным номером кредитной карты-источника, превышает заданные пороговые значения. Временной порог — окно 24 часа, отсчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до часов. Риск срабатывает на транзакции после достижения заданного порога. Так, если задать порог в 10 транзакций, он срабатывает на 11-й транзакции за 24 часа. Учитываются транзакции Sale, Preauth или Transfer в статусе approved. Временной интервал можно задать как календарный день вместо окна в 24 часа. | 18004 — Достигнут почасовой лимит суммы одобренных транзакций 18005 — Достигнут почасовой лимит количества одобренных транзакций |
| Source Credit Card Number usage frequency for last 7 days (weekly limit) | Проверка срабатывает, когда количество или сумма транзакций, связанных с конкретным номером кредитной карты-источника, превышает заданные пороговые значения. Временной порог — окно 7 дней, отсчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до часов. Риск срабатывает на транзакции после достижения заданного порога. Так, если задать порог в 10 транзакций, он срабатывает на 11-й транзакции за 168 часов. Учитываются транзакции Sale, Preauth или Transfer в статусе approved. | 18002 — Достигнут недельный лимит суммы одобренных транзакций 18003 — Достигнут недельный лимит количества одобренных транзакций |
| Source Credit Card Number usage frequency for last month (monthly limit) | Проверка срабатывает, когда количество или сумма транзакций, связанных с конкретным номером кредитной карты-источника, превышает заданные пороговые значения. Временной порог — окно один месяц, отсчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до дней. Риск срабатывает на транзакции после достижения заданного порога. Так, если задать порог в 10 транзакций, он срабатывает на 11-й транзакции за один месяц. Расчёт месяца основан на календаре, т.е. 28, 29, 30 и 31 марта при расчёте окна будут смещены к 28 февраля. Учитываются транзакции Sale, Preauth или Transfer в статусе approved. | 18000 — Достигнут месячный лимит суммы одобренных транзакций 18001 — Достигнут месячный лимит количества одобренных транзакций |
| Destination Credit Card Number usage frequency for last 24 hours (daily limit) | Проверка срабатывает, когда количество или сумма транзакций, связанных с конкретным номером кредитной карты-получателя, превышает заданные пороговые значения. Временной порог — окно 24 часа, отсчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до часов. Риск срабатывает на транзакции после достижения заданного порога. Так, если задать порог в 10 транзакций, он срабатывает на 11-й транзакции за 24 часа. Учитываются только транзакции Transfer в статусе approved. | 18032 — Достигнут почасовой лимит суммы одобренных транзакций для получателя 18033 — Достигнут почасовой лимит количества одобренных транзакций для получателя |
| Destination Credit Card Number usage frequency for last 7 days (weekly limit) | Проверка срабатывает, когда количество или сумма транзакций, связанных с конкретным номером кредитной карты-получателя, превышает заданные пороговые значения. Временной порог — окно 7 дней, отсчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до часов. Риск срабатывает на транзакции после достижения заданного порога. Так, если задать порог в 10 транзакций, он срабатывает на 11-й транзакции за 168 часов. Учитываются только транзакции Transfer в статусе approved. | 18030 — Достигнут недельный лимит суммы одобренных транзакций для получателя 18031 — Достигнут недельный лимит количества одобренных транзакций для получателя |
| Destination Credit Card Number usage frequency for last month (monthly limit) | Проверка срабатывает, когда количество или сумма транзакций, связанных с конкретным номером кредитной карты-получателя, превышает заданные пороговые значения. Временной порог — окно один месяц, отсчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до дней. Риск срабатывает на транзакции после достижения заданного порога. Так, если задать порог в 10 транзакций, он срабатывает на 11-й транзакции за один месяц. Расчёт месяца основан на календаре, т.е. 28, 29, 30 и 31 марта при расчёте окна будут смещены к 28 февраля. Учитываются только транзакции Transfer в статусе approved. | 18028 — Достигнут месячный лимит суммы одобренных транзакций для получателя 18029 — Достигнут месячный лимит количества одобренных транзакций для получателя |
| Total Credit Card Number usage frequency for last 24 hours (daily limit) | Проверка срабатывает, когда количество или сумма транзакций, связанных с конкретным номером кредитной карты, использованной как источник или получатель, превышает заданные пороговые значения. Временной порог — окно 24 часа, отсчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до часов. Риск срабатывает на транзакции после достижения заданного порога. Так, если задать порог в 10 транзакций, он срабатывает на 11-й транзакции за 24 часа. Учитываются транзакции Sale, Preauth или Transfer в статусе approved. | 18038 — Достигнут почасовой лимит общей суммы одобренных транзакций 18039 — Достигнут почасовой лимит общего количества одобренных транзакций |
| Total Credit Card Number usage frequency for last 7 days (weekly limit) | Проверка срабатывает, когда количество или сумма транзакций, связанных с конкретным номером кредитной карты, использованной как источник или получатель, превышает заданные пороговые значения. Временной порог — окно 7 дней, отсчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до часов. Риск срабатывает на транзакции после достижения заданного порога. Так, если задать порог в 10 транзакций, он срабатывает на 11-й транзакции за 168 часов. Учитываются транзакции Sale, Preauth или Transfer в статусе approved. | 18036 — Достигнут недельный лимит общей суммы одобренных транзакций 18037 — Достигнут недельный лимит общего количества одобренных транзакций |
| Total Credit Card Number usage frequency for last month (monthly limit) | Проверка срабатывает, когда количество или сумма транзакций, связанных с конкретным номером кредитной карты, использованной как источник или получатель, превышает заданные пороговые значения. Временной порог — окно один месяц, отсчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до дней. Риск срабатывает на транзакции после достижения заданного порога. Так, если задать порог в 10 транзакций, он срабатывает на 11-й транзакции за один месяц. Расчёт месяца основан на календаре, т.е. 28, 29, 30 и 31 марта при расчёте окна будут смещены к 28 февраля. Учитываются транзакции Sale, Preauth или Transfer в статусе approved. | 18034 — Достигнут месячный лимит общей суммы одобренных транзакций 18035 — Достигнут месячный лимит общего количества одобренных транзакций |
| Email usage frequency for last 24 hours (daily limit) | Проверка срабатывает, когда количество или сумма транзакций, связанных с конкретным Email-адресом, превышает заданные пороговые значения. Временной порог — окно 24 часа, отсчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до часов. Риск срабатывает на транзакции после достижения заданного порога. Так, если задать порог в 10 транзакций, он срабатывает на 11-й транзакции за 24 часа. Учитываются транзакции Sale, Preauth или Transfer в статусе approved. | 18010 — Достигнут почасовой лимит суммы одобренных транзакций по email 18011 — Достигнут почасовой лимит количества одобренных транзакций по email |
| Email usage frequency for last 7 days (weekly limit) | Проверка срабатывает, когда количество или сумма транзакций, связанных с конкретным Email-адресом, превышает заданные пороговые значения. Временной порог — окно 7 дней, отсчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до часов. Риск срабатывает на транзакции после достижения заданного порога. Так, если задать порог в 10 транзакций, он срабатывает на 11-й транзакции за 168 часов. Учитываются транзакции Sale, Preauth или Transfer в статусе approved. | 18008 — Достигнут недельный лимит суммы одобренных транзакций по email 18009 — Достигнут недельный лимит количества одобренных транзакций по email |
| Email usage frequency for last month (monthly limit) | Проверка срабатывает, когда количество или сумма транзакций, связанных с конкретным Email-адресом, превышает заданные пороговые значения. Временной порог — окно один месяц, отсчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до дней. Риск срабатывает на транзакции после достижения заданного порога. Так, если задать порог в 10 транзакций, он срабатывает на 11-й транзакции за один месяц. Расчёт месяца основан на календаре, т.е. 28, 29, 30 и 31 марта при расчёте окна будут смещены к 28 февраля. Учитываются транзакции Sale, Preauth или Transfer в статусе approved. | 18006 — Достигнут месячный лимит суммы одобренных транзакций по email 18007 — Достигнут месячный лимит количества одобренных транзакций по email |
| Email usage lifetime | Позволяет ограничить количество и сумму транзакций, доступных отдельному клиенту, и задать лимит на процессоре за ВСЁ время существования. Клиент определяется по E-Mail. Проверка срабатывает, когда количество или сумма транзакций, связанных с конкретным Email-адресом, превышает заданные пороговые значения. Период времени — весь срок (lifetime). Риск срабатывает на транзакции после достижения заданного порога. Так, если задать порог в 10 транзакций, он срабатывает на 11-й транзакции. Учитываются транзакции Sale, Preauth или Transfer в статусе approved. | 18048 — Достигнут лимит суммы одобренных транзакций по email за всё время 18049 — Достигнут лимит количества одобренных транзакций по email за всё время |
| Customer IP usage frequency for last 24 hours (daily limit) | Проверка срабатывает, когда количество или сумма транзакций, связанных с конкретным IP-адресом клиента, превышает заданные пороговые значения. Временной порог — окно 24 часа, отсчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до часов. Риск срабатывает на транзакции после достижения заданного порога. Так, если задать порог в 10 транзакций, он срабатывает на 11-й транзакции за 24 часа. Учитываются транзакции Sale, Preauth или Transfer в статусе approved. | 18022 — Достигнут почасовой лимит суммы одобренных транзакций по IP клиента 18023 — Достигнут почасовой лимит количества одобренных транзакций по IP клиента |
| Customer IP usage frequency for last 7 days (weekly limit) | Проверка срабатывает, когда количество или сумма транзакций, связанных с конкретным IP-адресом клиента, превышает заданные пороговые значения. Временной порог — окно 7 дней, отсчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до часов. Риск срабатывает на транзакции после достижения заданного порога. Так, если задать порог в 10 транзакций, он срабатывает на 11-й транзакции за 168 часов. Учитываются транзакции Sale, Preauth или Transfer в статусе approved. | 18020 — Достигнут недельный лимит суммы одобренных транзакций по IP клиента 18021 — Достигнут недельный лимит количества одобренных транзакций по IP клиента |
| Customer IP usage frequency for last month (monthly limit) | Проверка срабатывает, когда количество или сумма транзакций, связанных с конкретным IP-адресом клиента, превышает заданные пороговые значения. Временной порог — окно один месяц, отсчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до дней. Риск срабатывает на транзакции после достижения заданного порога. Так, если задать порог в 10 транзакций, он срабатывает на 11-й транзакции за один месяц. Расчёт месяца основан на календаре, т.е. 28, 29, 30 и 31 марта при расчёте окна будут смещены к 28 февраля. Учитываются транзакции Sale, Preauth или Transfer в статусе approved. | 18018 — Достигнут месячный лимит суммы одобренных транзакций по IP клиента 18019 — Достигнут месячный лимит количества одобренных транзакций по IP клиента |
| Purpose usage frequency for last 24 hours (daily limit) | Проверка срабатывает, когда количество или сумма транзакций, связанных с конкретным назначением (Purpose), превышает заданные пороговые значения. Временной порог — окно 24 часа, отсчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до часов. Риск срабатывает на транзакции после достижения заданного порога. Так, если задать порог в 10 транзакций, он срабатывает на 11-й транзакции за 24 часа. Учитываются транзакции Sale, Preauth или Transfer в статусе approved. | 18016 — Достигнут почасовой лимит суммы одобренных транзакций по назначению (Purpose) 18017 — Достигнут почасовой лимит количества одобренных транзакций по назначению (Purpose) |
| Purpose usage frequency for last 7 days (weekly limit) | Проверка срабатывает, когда количество или сумма транзакций, связанных с конкретным назначением (Purpose), превышает заданные пороговые значения. Временной порог — окно 7 дней, отсчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до часов. Риск срабатывает на транзакции после достижения заданного порога. Так, если задать порог в 10 транзакций, он срабатывает на 11-й транзакции за 168 часов. Учитываются транзакции Sale, Preauth или Transfer в статусе approved. | 18014 — Достигнут недельный лимит суммы одобренных транзакций по назначению (Purpose) 18015 — Достигнут недельный лимит количества одобренных транзакций по назначению (Purpose) |
| Purpose usage frequency for last month (monthly limit) | Проверка срабатывает, когда количество или сумма транзакций, связанных с конкретным назначением (Purpose), превышает заданные пороговые значения. Временной порог — окно один месяц, отсчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до дней. Риск срабатывает на транзакции после достижения заданного порога. Так, если задать порог в 10 транзакций, он срабатывает на 11-й транзакции за один месяц. Расчёт месяца основан на календаре, т.е. 28, 29, 30 и 31 марта при расчёте окна будут смещены к 28 февраля. Учитываются транзакции Sale, Preauth или Transfer в статусе approved. | 18012 — Достигнут месячный лимит суммы одобренных транзакций по назначению (Purpose) 18013 — Достигнут месячный лимит количества одобренных транзакций по назначению (Purpose) |
| Preventing transaction with the same amount | Проверка срабатывает, когда более одной транзакции совершается с одинаковой суммой в пределах временного порога (в секундах). Максимальный временной порог — окно 300 секунд, отсчитываемое назад от момента первой транзакции. Риск срабатывает на второй транзакции с той же суммой в пределах заданного временного порога. Учитываются транзакции Sale, Preauth, Payouts или Transfer. | 18052 — Запрос с одинаковой суммой на процессоре |
| Issuer country usage frequency | Проверка срабатывает, когда количество транзакций, связанных с одной и той же страной-эмитентом карты, превышает заданные пороговые значения. Максимальный временной порог — окно 300 секунд, отсчитываемое назад от момента первой транзакции. Риск срабатывает на транзакции после достижения заданного порога. Так, если задать порог в 10 транзакций, он срабатывает на 11-й транзакции за 300 секунд. Учитываются транзакции Sale, Preauth, Payouts или Transfer. | 18053 — Превышен лимит количества транзакций по стране на процессоре |
| BIN range usage frequency | Проверка срабатывает, когда количество транзакций, связанных с конкретным диапазоном BIN карты, превышает заданные пороговые значения; также можно указать список исключений диапазонов BIN карт, для которых проверки не выполняются. Максимальный временной порог — окно 300 секунд, отсчитываемое назад от момента первой транзакции. Риск срабатывает на транзакции после достижения заданного порога. Так, если задать порог в 10 транзакций, он срабатывает на 11-й транзакции за 300 секунд. Учитываются транзакции Sale, Preauth, Payouts или Transfer. | 18056 — Превышен лимит количества транзакций по диапазону BIN на процессоре |
| Transaction number per period | Проверка срабатывает, когда количество транзакций превышает заданные пороговые значения. Максимальный временной порог — окно 600 секунд, отсчитываемое назад от момента первой транзакции. Риск срабатывает на транзакции после достижения заданного порога. Так, если задать порог в 10 транзакций, он срабатывает на 11-й транзакции в течение 600 секунд. Учитываются транзакции Sale, Preauth, Payouts или Transfer. | 18057 — Обнаружена транзакция в заданном пороге времени |
| Source Credit Card Number decline frequency for last 24 hours (daily decline limit) | Проверка срабатывает, когда количество или сумма отклонённых транзакций, связанных с конкретным номером кредитной карты-источника, превышает заданные пороговые значения. Временной порог — окно 24 часа, отсчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до часов. Риск срабатывает на транзакции после достижения заданного порога. Так, если задать порог в 10 транзакций, он срабатывает на 11-й транзакции за 24 часа. Учитываются транзакции Account verification, Sale, Preauth или Transfer в статусе Declined. | 18054 — Превышен дневной лимит количества отклонений для одного и того же номера кредитной карты на процессоре 18055 — Превышен дневной лимит суммы отклонений для одного и того же номера кредитной карты на процессоре |
| Source Credit Card Number decline frequency for last 7 days (decline weekly limit) | Проверка срабатывает, когда количество отклонённых транзакций, связанных с конкретным номером кредитной карты-источника, превышает заданные пороговые значения. Временной порог — окно 7 дней, отсчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до часов. Риск срабатывает на транзакции после достижения заданного порога. Так, если задать порог в 10 транзакций, он срабатывает на 11-й транзакции за 168 часов. Учитываются транзакции Sale, Preauth или Transfer в статусе Declined. | 18058 — Превышен недельный лимит количества отклонений для одного и того же номера кредитной карты на процессоре 18059 — Превышен недельный лимит суммы отклонений для одного и того же номера кредитной карты на процессоре |
| Source Credit Card Number decline frequency for last month (decline monthly limit) | Проверка срабатывает, когда количество отклонённых транзакций, связанных с конкретным номером кредитной карты-источника, превышает заданные пороговые значения. Временной порог — окно 7 дней, отсчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до дней. Риск срабатывает на транзакции после достижения заданного порога. Так, если задать порог в 10 транзакций, он срабатывает на 11-й транзакции за один месяц. Расчёт месяца основан на календаре, т.е. 28, 29, 30 и 31 марта при расчёте окна будут смещены к 28 февраля. Учитываются транзакции Sale, Preauth или Transfer в статусе approved. | 18060 — Превышен месячный лимит количества отклонений для одного и того же номера кредитной карты на процессоре 18061 — Превышен месячный лимит суммы отклонений для одного и того же номера кредитной карты на процессоре |
| Account Number usage frequency for last 24 hours (daily limit) | Проверка срабатывает, когда количество или сумма транзакций, связанных с конкретным номером счёта, превышает заданные пороговые значения. Временной порог — окно 24 часа, отсчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до часов. Риск срабатывает на транзакции после достижения заданного порога. Так, если задать порог в 10 транзакций, он срабатывает на 11-й транзакции за 24 часа. Учитываются транзакции Sale, Preauth, Payout или Transfer в статусе approved. | 18062 18063 |
| Account Number usage frequency for last 7 days (weekly limit) | Проверка срабатывает, когда количество или сумма транзакций, связанных с конкретным номером счёта, превышает заданные пороговые значения. Временной порог — окно 7 дней, отсчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до часов. Риск срабатывает на транзакции после достижения заданного порога. Так, если задать порог в 10 транзакций, он срабатывает на 11-й транзакции за 168 часов. Учитываются транзакции Sale, Preauth, Payout или Transfer в статусе approved. | 18064 18065 |
| Account Number usage frequency for last month (monthly limit) | Проверка срабатывает, когда количество или сумма транзакций, связанных с конкретным номером счёта, превышает заданные пороговые значения. Временной порог — окно один месяц, отсчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до дней. Риск срабатывает на транзакции после достижения заданного порога. Так, если задать порог в 10 транзакций, он срабатывает на 11-й транзакции за один месяц. Расчёт месяца основан на календаре, т.е. 28, 29, 30 и 31 марта при расчёте окна будут смещены к 28 февраля. Учитываются транзакции Sale, Preauth, Payout или Transfer в статусе approved. | 18066 18067 |
| Destination Credit Card Number decline frequency for last 24 hours (daily decline limit) | Проверка срабатывает, когда количество или сумма отклонённых транзакций, связанных с конкретным номером кредитной карты-получателя, превышает заданные пороговые значения. Временной порог — окно 24 часа, отсчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до часов. Риск срабатывает на транзакции после достижения заданного порога. Так, если задать порог в 10 транзакций, он срабатывает на 11-й транзакции за 24 часа. Учитываются транзакции Transfer в статусе Declined. | 18068 — Превышен дневной лимит суммы отклонений для получателя на процессоре 18069 — Превышен дневной лимит количества отклонений для получателя на процессоре |
| Destination Credit Card Number decline frequency for last week (weekly decline limit) | Проверка срабатывает, когда количество или сумма отклонённых транзакций, связанных с конкретным номером кредитной карты-получателя, превышает заданные пороговые значения. Временной порог — окно 7 дней, отсчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до дней. Риск срабатывает на транзакции после достижения заданного порога. Так, если задать порог в 10 транзакций, он срабатывает на 11-й транзакции за 168 часов. Учитываются транзакции Transfer в статусе Declined. | 18070 — Превышен недельный лимит суммы отклонений для получателя на процессоре 18071 — Превышен недельный лимит количества отклонений для получателя на процессоре |
| Destination Credit Card Number decline frequency for last month (monthly decline limit) | Проверка срабатывает, когда количество или сумма отклонённых транзакций, связанных с конкретным номером кредитной карты-получателя, превышает заданные пороговые значения. Временной порог — окно один месяц, отсчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до дней. Риск срабатывает на транзакции после достижения заданного порога. Так, если задать порог в 10 транзакций, он срабатывает на 11-й транзакции за один месяц. Расчёт месяца основан на календаре, т.е. 28, 29, 30 и 31 марта при расчёте окна будут смещены к 28 февраля. Учитываются транзакции Transfer в статусе Declined. | 18072 — Превышен месячный лимит суммы отклонений для получателя на процессоре 18073 — Превышен месячный лимит количества отклонений для получателя на процессоре |
| Total Credit Card Number decline frequency for last 24 hours (daily decline limit) | Проверка срабатывает, когда количество или сумма отклонённых транзакций, связанных с конкретным номером кредитной карты-источника или получателя, превышает заданные пороговые значения. Временной порог — окно 24 часа, отсчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до часов. Риск срабатывает на транзакции после достижения заданного порога. Так, если задать порог в 10 транзакций, он срабатывает на 11-й транзакции за 24 часа. Учитываются транзакции Account verification, Sale, Preauth или Transfer в статусе Declined. | 18074 — Превышен дневной лимит общей суммы отклонений для отправителя на процессоре 18075 — Превышен дневной лимит общего количества отклонений для отправителя на процессоре 18076 — Превышен дневной лимит общей суммы отклонений для получателя на процессоре 18077 — Превышен дневной лимит общего количества отклонений для получателя на процессоре |
| Total Credit Card Number decline frequency for last week (weekly decline limit) | Проверка срабатывает, когда количество или сумма отклонённых транзакций, связанных с конкретным номером кредитной карты-источника или получателя, превышает заданные пороговые значения. Временной порог — окно 7 дней, отсчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до дней. Риск срабатывает на транзакции после достижения заданного порога. Так, если задать порог в 10 транзакций, он срабатывает на 11-й транзакции за 168 часов. Учитываются транзакции Account verification, Sale, Preauth или Transfer в статусе Declined. | 18078 — Превышен недельный лимит общей суммы отклонений для отправителя на процессоре 18079 — Превышен недельный лимит общего количества отклонений для отправителя на процессоре 18080 — Превышен недельный лимит общей суммы отклонений для получателя на процессоре 18081 — Превышен недельный лимит общего количества отклонений для получателя на процессоре |
| Total Credit Card Number decline frequency for last month (monthly decline limit) | Проверка срабатывает, когда количество или сумма отклонённых транзакций, связанных с конкретным номером кредитной карты-источника или получателя, превышает заданные пороговые значения. Временной порог — окно один месяц, отсчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до дней. Риск срабатывает на транзакции после достижения заданного порога. Так, если задать порог в 10 транзакций, он срабатывает на 11-й транзакции за один месяц. Расчёт месяца основан на календаре, т.е. 28, 29, 30 и 31 марта при расчёте окна будут смещены к 28 февраля. Учитываются транзакции Account verification, Sale, Preauth или Transfer в статусе Declined. | 18082 — Превышен месячный лимит общей суммы отклонений для отправителя на процессоре 18083 — Превышен месячный лимит общего количества отклонений для отправителя на процессоре 18084 — Превышен месячный лимит общей суммы отклонений для получателя на процессоре 18085 — Превышен месячный лимит общего количества отклонений для получателя на процессоре |
| Source Credit Card Number usage frequency for last N days | Проверка срабатывает, когда количество или сумма транзакций, связанных с конкретным номером кредитной карты-источника, превышает заданные пороговые значения. Временной порог — окно N дней, отсчитываемое назад от момента транзакции. Параметр N (период в днях) можно задать от 1 до 30. При расчёте окна все даты транзакций усекаются до дней. Риск срабатывает на транзакции после достижения заданного порога. Так, если задать порог в 10 транзакций, он срабатывает на 11-й транзакции за N дней. Учитываются транзакции Sale, Preauth или Transfer в статусе approved. | 18086 — Достигнут лимит суммы одобренных транзакций за указанный период 18087 — Достигнут лимит количества одобренных транзакций за указанный период |
| Destination Credit Card Number usage frequency for last N days | Проверка срабатывает, когда количество или сумма транзакций, связанных с конкретным номером кредитной карты-получателя, превышает заданные пороговые значения. Временной порог — окно N дней, отсчитываемое назад от момента транзакции. Параметр N (период в днях) можно задать от 1 до 30. При расчёте окна все даты транзакций усекаются до дней. Риск срабатывает на транзакции после достижения заданного порога. Так, если задать порог в 10 транзакций, он срабатывает на 11-й транзакции за N дней. Учитываются транзакции Transfer в статусе approved. | 18088 — Достигнут лимит суммы одобренных транзакций за указанный период, 18089 — Достигнут лимит количества одобренных транзакций за указанный период |
| Total Credit Card Number usage frequency for last N days | Проверка срабатывает, когда количество или сумма транзакций, связанных с конкретным номером кредитной карты-источника или получателя, превышает заданные пороговые значения. Временной порог — окно N дней, отсчитываемое назад от момента транзакции. Параметр N (период в днях) можно задать от 1 до 30. При расчёте окна все даты транзакций усекаются до дней. Риск срабатывает на транзакции после достижения заданного порога. Так, если задать порог в 10 транзакций, он срабатывает на 11-й транзакции за N дней. Учитываются транзакции Sale, Preauth или Transfer в статусе approved. | 18090 — Достигнут лимит общей суммы за указанный период 18091 — Достигнут лимит общего количества за указанный период 18092 — Достигнут лимит общей суммы за указанный период для получателя 18093 — Достигнут лимит общего количества за указанный период для получателя |
| Purpose usage frequency for last N days | Проверка срабатывает, когда количество или сумма транзакций, связанных с конкретным назначением (Purpose), превышает заданные пороговые значения. Временной порог — окно N дней, отсчитываемое назад от момента транзакции. Параметр N (период в днях) можно задать от 1 до 30. При расчёте окна все даты транзакций усекаются до дней. Риск срабатывает на транзакции после достижения заданного порога. Так, если задать порог в 10 транзакций, он срабатывает на 11-й транзакции за N дней. Учитываются транзакции Sale, Preauth или Transfer в статусе approved. | 18094 — Достигнут лимит суммы одобренных транзакций за указанный период по назначению (Purpose) 18095 — Достигнут лимит количества одобренных транзакций за указанный период по назначению (Purpose) |
| Email usage frequency for last N days | Проверка срабатывает, когда количество или сумма транзакций, связанных с конкретным Email-адресом, превышает заданные пороговые значения. Временной порог — окно N дней, отсчитываемое назад от момента транзакции. Параметр N (период в днях) можно задать от 1 до 30. При расчёте окна все даты транзакций усекаются до дней. Риск срабатывает на транзакции после достижения заданного порога. Так, если задать порог в 10 транзакций, он срабатывает на 11-й транзакции за N дней. Учитываются транзакции Sale, Preauth или Transfer в статусе approved. | 18096 — Достигнут лимит суммы одобренных транзакций за указанный период по email 18097 — Достигнут лимит количества одобренных транзакций за указанный период по email |
| IP address usage frequency for last N days | Проверка срабатывает, когда количество или сумма транзакций, связанных с конкретным IP-адресом, превышает заданные пороговые значения. Временной порог — окно N дней, отсчитываемое назад от момента транзакции. Параметр N (период в днях) можно задать от 1 до 30. При расчёте окна все даты транзакций усекаются до дней. Риск срабатывает на транзакции после достижения заданного порога. Так, если задать порог в 10 транзакций, он срабатывает на 11-й транзакции за N дней. Учитываются транзакции Sale, Preauth или Transfer в статусе approved. | 18098 — Достигнут лимит суммы одобренных транзакций за указанный период по IP-адресу 18099 — Достигнут лимит количества одобренных транзакций за указанный период по IP-адресу |
| Fingerprint usage frequency for last N days | Проверка срабатывает, когда количество или сумма транзакций, связанных с конкретным отпечатком (Fingerprint), превышает заданные пороговые значения. Временной порог — окно N дней, отсчитываемое назад от момента транзакции. Параметр N (период в днях) можно задать от 1 до 30. При расчёте окна все даты транзакций усекаются до дней. Риск срабатывает на транзакции после достижения заданного порога. Так, если задать порог в 10 транзакций, он срабатывает на 11-й транзакции за N дней. Учитываются транзакции Sale, Preauth или Transfer в статусе approved. | 18100 — Достигнут лимит суммы одобренных транзакций за указанный период по отпечатку (Fingerprint), 18101 — Достигнут лимит количества одобренных транзакций за указанный период по отпечатку (Fingerprint) |
| Account Number usage frequency for last N days | Проверка срабатывает, когда количество или сумма транзакций, связанных с конкретным номером счёта (Account Number), превышает заданные пороговые значения. Временной порог — окно N дней, отсчитываемое назад от момента транзакции. Параметр N (период в днях) можно задать от 1 до 30. При расчёте окна все даты транзакций усекаются до дней. Риск срабатывает на транзакции после достижения заданного порога. Так, если задать порог в 10 транзакций, он срабатывает на 11-й транзакции за N дней. Учитываются транзакции Sale, Preauth или Transfer в статусе approved. | 18102 — Превышен лимит суммы за указанный период для номера счёта на процессоре 18103 — Превышен лимит количества за указанный период для номера счёта на процессоре |
| Declined Email usage frequency for last 24 hours (decline daily limit) | Проверка срабатывает, когда количество или сумма транзакций, связанных с конкретным Email-адресом, превышает заданные пороговые значения. Временной порог — окно 24 часа, отсчитываемое назад от момента транзакции. При расчёте окна все даты транзакций усекаются до часов. Риск срабатывает на транзакции после достижения заданного порога. Так, если задать порог в 10 транзакций, он срабатывает на 11-й транзакции за 24 часа. Учитываются транзакции Sale, Preauth или Transfer в статусе Declined. | 19101 — Достигнут почасовой лимит суммы отклонений по email 19102 — Достигнут почасовой лимит количества отклонений по email |

Below is the example of configuration for “Email usage frequency for last month (monthly limit)” restriction.
To switch this restriction on, click on the toggle button near it’s name:

> `балансировка emailusage 2.0`

Это ограничение поддерживает следующие настройки:

> 1. Параметр Amount limit — максимальная суммарная сумма транзакций за последний месяц для этого email-адреса. Value: значение суммарной суммы.
> 2. For all gates with the same descriptor – текущая суммарная сумма или количество транзакций за последний месяц для значения этого email-адреса будет рассчитана и сконвертирована в валюту текущего гейта для сравнения с лимитом суммы или количества. Укажите значение “Y” (Да) вместо “N” (Нет), чтобы включить. Values: Y: для всех гейтов с тем же дескриптором, N: только для текущего гейта.
> 3. Параметр quantity limit задаёт лимиты количества транзакций. Value: значение суммарного количества.
> 4. Use calendar month : Value: Y/N.

Выбор “Country Identifier” будет доступен в конфигурациях ограничения “Deny”.

Каждой стране присвоен собственный числовой идентификатор. Нужную страну можно выбрать из списка.

### Processor Details

| Название параметра | Описание |
|---------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Статус | Показывает, включён или отключён Процессор. |
| Created | Отображает точные дату и время создания Процессора. |
| Описание | Показывает описание процессора. Можно редактировать после создания процессора. Для изменения описания, пожалуйста, обратитесь в службу поддержки. |
| Теги | Показывает тег процессора. При поиске процессора по тегу отображаются все процессоры с тем же тегом. После создания процессора его можно редактировать. Чтобы изменить тег, обратитесь в службу поддержки. |
| Параметр Spring bean id | Показывает, под каким id Spring bean находится процессор. Представляет логику процессора для внутреннего использования службой поддержки Платёжного Шлюза. |
| Идентификатор группы Процессора | Показывает, под каким идентификатором группы находится Процессор для внутреннего использования службой поддержки Платёжного Шлюза. |
| Type | Общая логика обработки (например, CC) |
| Тип карты по умолчанию | Отображает тип карты по умолчанию на Процессоре. |
| Code | Короткий код для процессора. Можно редактировать после создания процессора. Для изменения кода, пожалуйста, обратитесь в службу поддержки. |
| Dealer | Показывает, какой Dealer подключён к процессору. Невозможно добавить Dealer после создания процессора. |
| Фильтровать по чёрному списку | Разрешение фильтра чёрного списка на уровне Процессора. |
| Типы транзакций | Sale, Sale 3D, Reversal, Auth, Auth 3D, Capture, Cancel, Refund, Void, Chargeback, Chargeback Reversal, Prearbitration, Arbitration, Retrieval, Fraud, Pan Eligibility, Payout Cancel, CUP Payout. Если для типа транзакции указан маркер YES, это означает, что Процессор может обрабатывать этот тип транзакций; если указан маркер NO, Процессор не может их обрабатывать. Если необходимо добавить или активировать какой-либо тип транзакции, обратитесь в службу поддержки. |
| MPI | Показывает, находится ли MPI на стороне Процессора. |
| Параметр Close Day | Показывает, доступна ли функция закрытия дня на Процессоре. |

### Проект

**Проект Overview**
 
 
Проект — сущность Платёжного Шлюза, определяющая условия получения платёжного сообщения и его дальнейшей маршрутизации к подключённому Процессору. Экран списка проектов расположен в Settings -> Configuration -> Проектs. Этот экран содержит все Проекты, созданные для всех Торговцев в системе.
 
 

 
Описание: - Проект is enabled.
 
Описание: - Проект is disabled.
 
 
Для мониторинга активности проекта используются ключевые показатели эффективности (KPI), например доходы Торговца, средняя стоимость заказа и другие. Подменю KPI открывается кнопкой Detailed на экране поиска проекта. Подробнее см. [Подробный просмотр KPI](https://doc.payneteasy.ru/manager/reference/kpi.html.md).
 
Нажмите на название Проекта, чтобы открыть подробную информацию о нем.
 
Для работы с другими параметрами конфигурации см. информацию ниже.
 
 
**Проект Settings**
 
 

| [Создать, клонировать, редактировать проект](https://doc.payneteasy.ru/manager/project/projectcreate.html.md) | Этот экран показывает, как создавать и редактировать проект. |
|----------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [Шаблоны сообщений](https://doc.payneteasy.ru/manager/project/projectmessage.html.md) | Отображает всю информацию о шаблонах сообщений, отправляемых клиентам после транзакций. |
| [Сведения о проекте](https://doc.payneteasy.ru/manager/project/projectdetails.html.md) | Экран с деталями проекта содержит информацию о настроенных параметрах данного Проекта, его ID и лимитах. |
| [Маршрутизация и балансировка](https://doc.payneteasy.ru/manager/project/routingandbalancing.html.md) | Система маршрутизации и балансировки позволяет гибко распределять трафик между платёжными шлюзами в зависимости от заданных критериев и данных транзакции клиента. |
| [Фильтры защиты от мошенничества](https://doc.payneteasy.ru/manager/project/fraudprotectionfilters.html.md) | Вся информация о фильтрах. |

### Create, Clone, Edit Project

#### Project Creation

 
Чтобы создать Проект, перейдите Settings -> Configuration -> Projects и нажмите + Project в правом верхнем углу.
 
 

#### Project Editing And Cloning

 
Нажмите кнопку Редактировать, чтобы редактировать проект, и Клонировать, чтобы клонировать проект.
 
 

 
Выберите новое название и валюту.
 
 

 
Нажмите на Gate и выберите, какие шлюзы клонировать вместе с проектом, затем выберите новые названия для этих шлюзов.
 
 

 
Нажмите конечную точку и выберите, какие конечные точки клонировать вместе с проектом, затем выберите новые названия и торговца, которому будут назначены эти конечные точки.
 
 

> **Note:** If no specific merchants are selected, the previously set merchant will be applied to all new endpoints by default.

 
Нажмите Other Settings, чтобы выбрать, конвертировать ли валюту и копировать ли все доступные фильтры на новые сущности или сбросить их к значениям по умолчанию.
 
 

 
Чтобы увидеть, какие изменения будут применены к клонированной сущности, нажмите кнопку изменения.

### Project Details

| Название параметра | Описание | Необходимость Описание: for creation |
|----------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------|
| Статус | Показывает, включён или отключён проект. Может быть изменён позже. | Обязательное |
| Менеджер | Показывает, к какому именно менеджеру привязан этот проект. НЕ МОЖЕТ быть изменено позже. | Обязательное |
| Тарифный план Менеджера | Позволяет задать тарифный план Менеджера. Позднее его можно изменить. | Обязательное |
| Описание | Отображает описание проекта. Может быть изменено позже. | Необязательное |
| Тарифный план реселлера | Позволяет установить тарифный план реселлера, если выбран реселлер. Его можно изменить позже. | Необязательное |
| Шаблон платёжной формы | Позволяет добавить платёжную форму, которая будет отображаться после инициирования транзакции. | Необязательное |
| Шаблон формы ожидания | Позволяет добавить форму ожидания, которая будет отображаться до достижения транзакцией окончательного статуса. | Необязательное |
| Шаблон завершающей формы | Позволяет добавить завершающую форму, которая будет отображаться после достижения транзакцией окончательного статуса. | Необязательное |
| Теги | Показывает тег Проекта. При поиске Проектов по тегу будут показаны все Проекты с тем же тегом. Может быть изменено позже. | Необязательное |
| Сервис лояльности | Показывает, какой внешний сервис лояльности выбран. Позднее его можно изменить. | Необязательное |
| Минимальная сумма транзакции | Можно установить любую минимальную сумму, которая будет проходить через проект. Может быть изменено позже. | Необязательное |
| Максимальная сумма транзакции | Можно установить любую максимальную сумму, которая будет проходить через проект. Может быть изменено позже. | Необязательное |
| Включить автоматический Capture | Включает автоматический Capture. | Необязательное |
| Период автоматического Capture (часы) | Устанавливает время в часах, после которого предавторизованная сумма будет автоматически списана. | Необязательное |
| Сервер сообщений | Позволяет выбрать сервер сообщений. | Необязательное |
| Количество одобренных сессий для возвращающегося клиента | Показывает, после скольких транзакций с финальным статусом approved клиент будет считаться возвращающимся для проекта. | Необязательное |
| Определение клиента | Показывает, по каким критериям клиент будет считаться новым или возвращающимся для проекта. | Необязательное |

#### Настройки удержания предавторизации до Capture

Этот раздел позволяет настроить лимиты для транзакций Preauth до этапа Capture. После достижения заданных лимитов последующие транзакции Preauth автоматически удерживаются в статусе processing.

#### Описание: Operating mode

Параметр Описание: Operating mode определяет область действия лимитов. Можно выбрать между PROJECT и MERCHANT.

* ПРОЕКТ — лимиты рассчитываются по всему проекту.
* ТОРГОВЕЦ — лимиты применяются отдельно для каждого торговца.

#### Время жизни предавторизации, лимит количества, сумма

Время действия Preauth — продолжительность (в часах), по истечении которой заканчивается период блокировки. После этого новые транзакции pre-auth снова будут обрабатываться обычно.
 
 
Лимит количества — максимальное допустимое число транзакций Preauth. После достижения лимита новые транзакции будут получать статус processing до ручного отклонения или сброса лимита.
 
 
Сумма — максимально допустимый общий объём (сумма) транзакций Preauth. Любая транзакция, из-за которой сумма превысит это значение, останется в статусе processing.
 

> **Note:** Все транзакции, превысившие лимит, получат статус после истечения длительности лимита.

### Шаблоны сообщений

Шаблоны сообщений можно использовать для отправки Клиенту SMS-сообщений или оповещений по электронной почте после каждой успешной транзакции. Для отправки таких сообщений с адреса Торговца, Торговец должен предоставить менеджеру службы поддержки Payneteasy свои учетные данные сервера сообщений. Шаблоны создаются с помощью кнопки Шаблон. После нажатия откроется окно с данными нового шаблона:
 
 

 

Созданный шаблон появится в списке:

Отправка сообщений включена.
 
Отправка сообщений отключена.
 
 

> **Note:** После клонирования проекта шаблоны сообщений нужно будет создать вручную заново для клонированного проекта.

### Rate Plans

> **Warning:** Описание: Add page

### Справочник

### Отчеты

Payneteasy имеет несколько форматов отчетов для просмотра движения денежных средств и эффективности, проведения сверки и использования во внешних системах, а также возможность гибкой настройки данных, отображаемых в отчетах. В данном разделе подробно рассматриваются функциональные возможности системы по отображению и выгрузке отчетов в форматах Excel и CSV.

Пользовательский интерфейс Payneteasy позволяет создавать следующие типы отчетов:

| [Отчёт о движении средств](https://doc.payneteasy.ru/manager/reports/cashflow_report.html.md) | Рассчитывает продажи, оборот менеджера, возвраты, чарджбэки и удержания. Показывает распределение оборота по тарифам. Показывает прибыль за период и в разбивке по дням. |
|----------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [Транзакционный отчёт](https://doc.payneteasy.ru/manager/reports/transaction_report.html.md) | Список транзакций за определенный период времени. Данный тип отчета наиболее удобен в случаях, когда необходимо провести сверку операций с банком. |
| [Отчет о движении денежных средств Торговца](https://doc.payneteasy.ru/manager/reports/merchant_cashflow_report.html.md) | Рассчитывает обороты и прибыль торговца по датам. |
| [Отчет о производительности](https://doc.payneteasy.ru/manager/reports/performance_report.html.md) | Рассчитывает количество и общий объём одобренных и отклонённых транзакций, Reversal, Chargeback, транзакций с применённым маркером мошенничества, а также процент всех неуспешных финансовых транзакций (отклонённых, Reversal, Chargeback, мошеннических) по отношению к одобренным транзакциям. |
| [Ежедневный отчёт о деятельности Торговца](https://doc.payneteasy.ru/manager/reports/merchant_daily_performance_report.html.md) | Данный отчет позволяет сформировать сводный список транзакций по датам следующих типов: продажа, возврат и чарджбэк. |
| [Статистика отказов](https://doc.payneteasy.ru/manager/reports/decline_statistics.html.md) | Отображает статистику отклоненных транзакций, разделенную на следующие группы: отклоненные банками-Эквайерами, отклоненные внутренней системой мошенничества Payneteasy и отклоненные из-за различных ошибок в обработке, если таковые возникли. |
| [Отчёт о соотношении мошенничества/Chargeback](https://doc.payneteasy.ru/manager/reports/fraud_chargeback_ratio_report.html.md) | Коэффициент chargeback рассчитывает показатели негативной статистики по терминалам торговца. |
| [Отчёт о причинах мошенничества/Chargeback](https://doc.payneteasy.ru/manager/reports/fraud_chargeback_reasons_report.html.md) | Создаёт отчёт о причинах Chargeback торговца. |
| [Отчёт о сведениях о шлюзе](https://doc.payneteasy.ru/manager/reports/gate_details_report.html.md) | Отчёт отображает подробную информацию о суммах транзакций в разрезе платёжных шлюзов. |
| [Подробный отчёт Процессора](https://doc.payneteasy.ru/manager/reports/processor_detailed_report.html.md) | Отчёт отображает сведения о доходах, сгруппированные по Процессору. |
| [Отчёт о закрытии дня](https://doc.payneteasy.ru/manager/reports/close_day_report.html.md) | Отчёт по закрытым дням отображает точное время, когда расчётный день был закрыт на шлюзах. |
| [Statements](https://doc.payneteasy.ru/manager/reports/statements.html.md) | Интегрированная система, рассчитывающая выписки по каждому торговцу и указывающая точную сумму, которую необходимо получить от банка на каждую дату выписки. Альтернативный подход к расчёту баланса торговца. |

### Request Endpoint Statistics

Менеджеры могут отслеживать запросы к конечным точкам, получая эту статистическую таблицу:

 

 

Все параметры этого экрана описаны ниже:

| Название параметра | Описание |
|------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ID | Идентификационный номер конечной точки. |
| ENDPOINT NAME | Имя Endpoint, используемого как точка входа для входящих транзакций Торговца при одновалютной интеграции. Нажатие на имя endpoint перенаправляет пользователя в Integration Panel https://gate.payneteasy.ru/paynet-ui/tools/integration-panel с выбранным endpoint. Доступно для статистики Request endpoint. |
| КОЛИЧЕСТВО ЗАПРОСОВ | Общее количество входящих запросов. |
| КОЛИЧЕСТВО ОШИБОК | Общее количество ошибок. |
| КОЛИЧЕСТВО HTTP-ОШИБОК | Total номер of http ошибкаs only. |
| ПОСЛЕДНЯЯ ОШИБКА | Поле, в котором отображается последняя возникшая ошибка. |

### Request Group Statistics

Менеджеры могут отслеживать запросы к группам конечных точек, получая эту статистическую таблицу:

 

 

Все параметры этого экрана описаны ниже:

| Название параметра | Описание |
|------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ID | Идентификационный номер группы конечных точек. |
| ENDPOINT GROUP NAME | Название группы Endpoint, используемой в качестве точки входа для входящих транзакций Merchant при мультивалютной интеграции. При нажатии на название группы endpoint пользователь перенаправляется в Integration Panel https://gate.payneteasy.ru/paynet-ui/tools/integration-panel с выбранным endpoint. Доступно для статистики группы запросов. |
| КОЛИЧЕСТВО ЗАПРОСОВ | Общее количество входящих запросов. |
| КОЛИЧЕСТВО ОШИБОК | Общее количество ошибок. |
| КОЛИЧЕСТВО HTTP-ОШИБОК | Total номер of http ошибкаs only. |
| ПОСЛЕДНЯЯ ОШИБКА | Поле, в котором отображается последняя возникшая ошибка. |

### Resellers

#### Creating Reseller

Чтобы просмотреть и найти всех Reseller’ов, перейдите Settings -> Users -> Resellers, затем, чтобы создать нового Reseller, нажмите кнопку + New Reseller:

Ниже перечислены все поля, доступные для заполнения:

| Название поля | Описание | Необходимость |
|------------------|-----------------------------------------------------------------------------------------------------------------------------------------|-----------------|
| Login | Логин, необходимый для входа в систему. Не может быть изменён после создания. | Обязательное |
| Password | Пароль для входа. Чтобы изменить его, обратитесь в службу поддержки. | Обязательное |
| Отображаемое имя | Название реселлера, которое будет отображаться. Может быть изменено после создания. | Обязательное |
| E-mail | Контактный адрес электронной почты, который будет добавлен к учётной записи реселлера. Может быть изменён после создания. | Обязательное |
| Контрольный ключ | Секретный ключ, который будет использоваться для подписания запросов. Может быть изменён после создания. | Обязательное |
| Платёжная группа | В настоящее время не используется. «Common» — значение по умолчанию. Не может быть изменено после создания. | Обязательное |
| Name | Показывает имя контактного лица Reseller. Это имя будет отображаться только в деталях Reseller. Может быть изменено после создания. | Обязательное |
| Surname | Показывает фамилию контактного лица Reseller. Это имя будет отображаться только в деталях Reseller. Может быть изменено после создания. | Обязательное |
| Logo | Логотип реселлера. Может быть изменён после создания. | Необязательное |
| Organization | Отображает название организации реселлера. Может быть изменено после создания. | Необязательное |
| Теги | Отображает теги, по которым реселлера можно найти в системе позже. Может быть изменено после создания. | Необязательное |

### Routing & Balancing

#### General Information

The routing & balancing system allows to distribute traffic between payment gates flexibly depending on the defined criteria and customer’s transaction data.
Traffic can be routed to a specific group of gates/processors and distributed between them in accordance with the specified balancing.
The balancing is configured on the system Project level in the Routing & Balancing tab.

 

Для начала конфигурации необходимо выбрать один из типов маршрутизации:

> `Описание: pic1 balancing 2.0`

New routing block will be created. Each routing block has it’s own ID for easier navigation in big projects.
The Source Card Type routing type is taken as an example:

> `Описание: pic2 balancing 2.0`

Наведите курсор на название этого блока, чтобы выбрать одно из следующих действий:

> — Добавить строку маршрутизации — добавить опции для этого блока:

> `Описание: pic2 balancing 2.0`

Выберите типы карт из предоставленного списка:

> `Описание: pic2 balancing 2.0`
 
> `Описание: pic2 balancing 2.0`
 
— Удалить узел — выбрать другой блок маршрутизации или балансировки вместо этого.
 

Наведите курсор на любой критерий этого блока, чтобы выбрать одно из следующих действий:

— Продолжить маршрутизацию — выбрать новый блок маршрутизации и продолжить стратегию маршрутизации.
 
 
> `Описание: pic2 balancing 2.0`
 
> `Описание: pic2 balancing 2.0`
 
— Добавить балансировку — остановить маршрутизацию и добавить блок балансировки.
 
 
> `Описание: pic2 balancing 2.0`
 
> `Описание: pic2 balancing 2.0`
 
— включить, отключить или удалить опцию маршрутизации.
 
 
> `Описание: pic2 balancing 2.0`
 
> `Описание: pic2 balancing 2.0`
 

Опция по умолчанию с именем OTHERS присутствует всегда, она применяется к транзакциям, которые не соответствуют всем остальным созданным опциям.

Если созданных вариантов маршрутизации достаточно, нажмите кнопку Add balancing , чтобы добавить один из типов балансировки с платёжными шлюзами.

В качестве примера используется Баланс по коэффициенту на основе суммы транзакции:

 
> `Описание: pic8 balancing 2.0`

Blocks are connected by arrows to improve the visual presentation. An arrow is directed from a certain routing option to the block created from it.
If the transaction parameters match the specified routing option, it is forwarded further along the arrow.

Наведите курсор на название этого блока, чтобы выбрать одно из следующих действий:

— Добавить строку балансировки — добавляет строку с активными полями для указания шлюза:
 
 
> `Описание: pic9 balancing 2.0`
 
> `Описание: pic9 balancing 2.0`
 
> - Платёжный шлюз — самое длинное поле используется для выбора одного из доступных платёжных шлюзов.
> - Процент вероятности — крайнее левое поле. Этот процент определяет вероятность направления транзакции в данный шлюз. Поле существует только для типов балансировки с указанным коэффициентом.
> - Три пустых поля внизу используются для переопределения тарифов оплаты.
— Удалить узел — выбрать другой блок маршрутизации или балансировки вместо этого.
 
 
> `Описание: pic1 balancing 2.0``Описание: pic1 balancing 2.0`
— Создать группу — создать группу балансировки.
 
 
> `Описание: pic1 balancing 2.0`

Выберите группу балансировки из предоставленного списка:

 
> `Описание: pic1 balancing 2.0`
 
> `Описание: pic1 balancing 2.0`
 
> `Описание: pic9 balancing 2.0`

If the transaction meets the created route conditions, it will be forwarded to the balancing block with this payment gate.
For more routing criteria, click the Add routing row of the required criterion, then create the subsequent transaction path from it. New block appears to the right of the selected criterion with a new number and routing type name.

 

В качестве примера используется тип маршрутизации BIN карты источника:

 
> `Описание: pic10 balancing 2.0`
 

There is already an “OTHERS” default criterion below. As in the first case, click the Add routing row to add the appropriate criterion.
Depending on the required routing strategy and the traffic separation level, go on building the routes or finish the route by adding one of the Balancing types and clicking Add balancing row to add the payment gate. The final configuration might look as the following:

 
`Описание: pic11 balancing 2.0`
 

> **Note:** См. информацию ниже, чтобы узнать, какие типы [маршрутизации](#routing-types) и [балансировки](#balancing-types) доступны и какая [дополнительная конфигурация](#additional-configuration) может применяться.

After the Routing & Balancing configuration is set, enable it by going to the “Project” menu, clicking the “Edit” button and selecting the “Use new balancing” check box at the bottom of the page.
To confirm the selection, click “Update”.

 
> `Описание: pic11 balancing 2.0`

Теперь применяется Routing & Balancing, и весь трафик будет проходить через неё.

#### Routing Types

В Routing & Balancing используется несколько “типов маршрутизации” для более гибкой настройки маршрутов транзакций.

Типы маршрутизации Routing types — это фильтры, позволяющие задать разделение трафика. В зависимости от выбранного типа маршрутизации поток транзакций будет проверяться относительно его параметров.

В Routing & Balancing такие типы маршрутизации представлены следующим образом:

##### Source Card

> 1. Тип маршрутизации Source Card Type позволяет сортировать транзакции по типу карты отправителя. Выберите подходящие способы оплаты отправителя и постройте на их основе дальнейший маршрут.

> > `Описание: pic12 balancing 2.0`
 
> 2) The Card Range routing type allows to sort transactions by the sender’s card BIN value. Specify bin and choose the needed BIN range of the sender and build a further route based on it. Several BIN ranges can be found for the specified BIN value. Select the one with lower priority.
> There is an option to search cards by their BINs. System can search for up to 500 entered card BINs listed one after another and separated by commas. They can be chosen by pressing the BINs - button.

> > `Описание: card range balancing 2.0`
 
> `Выбрать BIN источника balancing 2.0`
 
> `Выбрать BIN источника balancing 2.0`
 
> 3) The Source Card Bank routing type allows to sort transactions by the sender’s Issuer Bank name. Select the needed names of sender’s Issuer Banks and build a further route based on them.
> There is an option to search Banks by their names. System can search for up to 500 entered Bank names listed one after another and separated by commas. They can be chosen by pressing the “By name -” button.

> > `Описание: pic14 balancing 2.0`
 
> `Описание: pic64 balancing 2.0`
 
> > `Описание: pic66 balancing 2.0`
> 1. Тип маршрутизации Source Card Country позволяет сортировать транзакции по стране карты отправителя. Выберите нужные страны отправителя и постройте на их основе дальнейший маршрут.

> > `Описание: pic15 balancing 2.0`
> 1. Тип маршрутизации Source Card Credit Source позволяет сортировать транзакции по типу карты отправителя. Выберите нужные типы карт отправителя и постройте на их основе дальнейший маршрут.

> `Описание: sccs balancing 2.0`

##### Destination Card

> 1. Тип маршрутизации Destination Card Type позволяет сортировать транзакции по типу карты получателя. Выберите нужные типы карт получателя и постройте на их основе дальнейший маршрут.

> > `Описание: pic17 balancing 2.0`
 
> 2) The Card Range routing type allows to sort transactions by the receiver’s card BIN value. Specify bin and choose the needed BIN range of the receiver and build a further route based on it. Several BIN ranges can be found for the specified BIN value. Select the one with lower priority.
> There is an option to search cards by their BINs. System can search for up to 500 entered card BINs listed one after another and separated by commas. They can be chosen by pressing the “BINs -” button.

> > `Диапазон карт получателя balancing 2.0`
 
> `Выбрать BIN получателя balancing 2.0`
 
> `Выбрать BIN получателя balancing 2.0`
 
> 3) The Destination Card Bank routing type allows to sort transactions by the receiver’s Issuer Bank name. Select the needed Issuer Bank names of the receiver and build a further route based on them.
> There is an option to search Banks by their names. System can search for up to 500 entered Bank names listed one after another and separated by commas. They can be chosen by pressing the “By name -” button.

> > `Описание: pic19 balancing 2.0`
 
> `Описание: pic64 balancing 2.0`
 
> `Описание: pic66 balancing 2.0`
 
> 1. Тип маршрутизации Destination Card Country позволяет сортировать транзакции по стране карты получателя. Выберите требуемые страны карт получателя и постройте на их основе дальнейший маршрут.

> > `Описание: pic20 balancing 2.0`
 
> 1. Тип маршрутизации Destination Card Credit Source позволяет сортировать транзакции по типу карты получателя. Выберите нужные типы карт получателя и постройте на их основе дальнейший маршрут.

> `Описание: rccs balancing 2.0`

##### Customer

> 1. Тип маршрутизации Customer Account Number Country позволяет сортировать транзакции, подключая выбранные страны к одному провайдеру, а остальные — к другому. Этот тип маршрутизации используется для транзакций Payout. Страна и банк определяются по IBAN (International Bank Account Number), сформированному в соответствии с [ISO 13616](https://www.iso.org/standard/81090.html).

> `Описание: pic61_new balancing 2.0`
> 1. Тип маршрутизации Customer IP Country позволяет сортировать транзакции по стране IP-адреса клиента. Выберите страны, IP-адреса которых будут проверяться, и постройте на их основе дальнейший маршрут.

> > `Описание: pic22 balancing 2.0`
> 1. Тип маршрутизации Customer IP Range позволяет сортировать транзакции, значения IP-адресов которых находятся в указанном диапазоне. Укажите подходящий диапазон IP и постройте на его основе дальнейший маршрут. Допускаются IPv4 и IPv6.

> > `Описание: pic23 balancing 2.0`
> 1. Тип маршрутизации Customer Billing Country позволяет сортировать транзакции по стране из платёжного адреса клиента. Выберите нужные страны и постройте на их основе дальнейший маршрут.

> > `Описание: pic24 balancing 2.0`
> 1. Тип маршрутизации Лояльность клиента разделён на эндпоинт, проект, торговец, менеджер. На каждом из этих уровней есть поле Количество сессий одобрения возвращающегося клиента, которое могут задавать для Менеджеров пользователи с ролью Superior, а для Проектов, Эндпоинтов и Торговцев — пользователи с ролью Менеджер. Это значение задаёт количество транзакций, после которого клиент будет считаться «ВОЗВРАЩАЮЩИМСЯ».

> > > По умолчанию Клиент определяется по карте. Определение возможно по номеру карты, адресу электронной почты, держателю карты и адресу электронной почты, держателю карты и назначению, держателю карты и телефону. Подсчёт транзакций начинается после изменения определения (для каждого типа определения хранится собственное количество транзакций). Определение клиента задаётся в соответствующем поле Определение клиента на уровне Проекта или Эндпоинта (настройка Эндпоинта имеет приоритет над настройкой Проекта).

> > > Summary:

> > > - RETURNING_FOR_MANAGER — подсчёт одобрений на уровне Manager, определение клиента на уровне Project/Endpoint.
> > > - RETURNING_FOR_MERCHANT — подсчёт одобрений на уровне Merchant, определение клиента на уровне Project/Endpoint.
> > > - RETURNING_FOR_ENDPOINT — подсчёт одобрений на уровне Endpoint, определение клиента на уровне Project/Endpoint.
> > > - RETURNING_FOR_PROJECT — подсчёт одобрений на уровне Project, определение клиента на уровне Project/Endpoint.
> > `Описание: pic25 balancing 2.0`

> > Логика маршрутизации проверяется последовательно, поэтому транзакция проходит по первому маршруту, удовлетворяющему условию.

> > Например, следующий маршрут сначала проверит лояльность merchant, а затем manager.

> > `Описание: pic26 balancing 2.0`
> 1. The CMS Trust Level routing type allows to sort transactions by the customer’s trust status recorded in CMS (Customer Management System). Select the needed trust levels and build a further route based on them. This routing type is only available for merchants connected to CMS.

> > > CMS Trust Level reflects whether the customer has previously completed an approved transaction, and takes one of three values:

> > > - CONFIRMED_FOR_MANAGER - the customer has an approved transaction on at least one project among the merchants of the same manager that share the same client definition value and have Automatic level change (auto-leveling) enabled.
> > > - CONFIRMED_FOR_MERCHANT - the customer has an approved transaction on at least one project of the current merchant that shares the same client definition value.
> > > - OTHERS - neither of the above conditions is met.
> > 

> > This value is not driven by a configurable approve-sessions-count field — a single approved transaction is enough to move the customer out of OTHERS, and the value is calculated automatically from the customer’s transaction history in CMS. It is also shown as the Cms Trust Level field on the order details page and in the transaction dump report.
> 1. типы маршрутизации Recurring и Non_recurring позволяют сортировать транзакции в зависимости от того, является ли тип транзакции рекуррентным.

> > `Описание: pic28 balancing 2.0`
> 1. Тип маршрутизации по purpose позволяет сортировать транзакции по назначению. В каждую строку маршрутизации можно ввести несколько значений назначения. Новые значения добавляются кнопкой Add при редактировании или создании. Назначение ограничено 128 символами.

> View:

> > `Описание: purpose value 2.0`

> Edit:

> `Описание: purpose value edit 2.0`
> 1. by Phone IMEI (IMEI or International Mobile Equipment Identity) — this is the individual number of the mobile equipment. It is possible to enter more than one IMEI value to each routing row. IMEI limited to 32 symbols.

> View:

> `Описание: phone imei 2.0`

> Edit:

> `Описание: phone imei edit 2.0`
> 1. by Customer Instance routing type allows to sort transactions based on Customer payment history for the whole instance. Please contact tech Support manager to enable this functionality.

> Select the Customer type for instance and build a further route based on them.
> The client is defined as NEW or RETURNING based on criteria set on the Project level (by default) or Endpoint level (if specified).
> This option is called Client definition.
> Definition is possible by card number, email, card holder and email, card holder and purpose, card holder and phone.

> > `customerinstance 1.0`

> #### NOTE
> This option should only be used together with internal KYC procedures as it checks for existing payment history and doesn’t count any negative activity.

> 1. by Customer site url routing type allows to sort transactions based on customer’s site URL. It is possible to enter more than one site url value to each routing row. Site URL is limited to 128 symbols.

> View:

> `routing by site URL`

> Edit:

> `routing by site URL edit`

> **Note:** The Customer Site URL routing type does not account for formatting differences. The URL in the initial request must exactly match the URL specified in the routing node.

##### Транзакция

> 1. Тип маршрутизации Транзакция Amount позволяет сортировать транзакции по суммам. Число в квадратной скобке включается в диапазон, а число в круглой скобке не включается. Например, чтобы указать сумму от 0 до 100 (включая 100), используйте [0, 100.01). Транзакции, суммы которых соответствуют указанному диапазону, пройдут через этот критерий маршрутизации.

> > `Описание: amount balancing 2.0`
> 1. Тип маршрутизации Тип транзакции позволяет сортировать транзакции по их типу. Выберите нужные типы транзакций и постройте дальнейший маршрут на их основе.

> > `Описание: pic27 balancing 2.0`
> 1. Тип маршрутизации Кратность суммы позволяет сортировать транзакции по их суммам, соответствующим указанным множителям. Добавьте кратность суммы, и транзакция будет маршрутизироваться по наибольшей сумме, кратной ей. Пример: если сумма транзакции равна 1000, а «Кратность суммы» задана как 1000 и 500, транзакция будет направлена на 1000; если сумма транзакции равна 1500 — на 500, а если 2000 — на 1000.

> > `Кратность balancing 2.0`
> 1. Тип маршрутизации Транзакция Time позволяет сортировать транзакции по времени их создания в системе. Часовой пояс GMT+3. Этот тип сортировки можно использовать для технических перерывов Процессора или в иных случаях, когда для маршрута необходимо время. Например, чтобы задать время с 22:00 до 06:00, установите его так: [22:00:00, 23:59:59], [00:00:00, 06:00:00].

> `Описание: time balancing 2.0`
> 1. Тип маршрутизации День недели позволяет сортировать транзакции по дню недели. Выберите нужный день недели и часовой пояс для дальнейшего маршрута на их основе.

> > `Описание: Day of week 2.0`

##### Transfer

> 1. Тип маршрутизации Transfer Direction позволяет сортировать транзакции Transfer по типам карт или банкам-эмитентам отправителя и получателя. Выберите нужные параметры и постройте на их основе дальнейший маршрут.

> > `Описание: pic28 balancing 2.0`

##### IP Intelligence

> **Warning:** If Fraud Service - “Max Mind IP check service” is selected on project level, then regardless of whether “fraud filters” or “routing&balancing” are set up - all requests will be sent to Max Mind.

 
> 1. Тип маршрутизации Anonymous vpn позволяет проверить, считается ли IP-адрес Плательщика анонимным VPN по данным Max Mind. YES — если условие истинно, NO — если ложно. Выберите необходимые параметры и настройте маршрут.

> > `anonymous_vpn`
> 1. Тип маршрутизации Anonymous IP address позволяет проверить, считается ли IP-адрес Плательщика анонимным по данным Max Mind. YES — если условие истинно, NO — если ложно. Выберите необходимые параметры и настройте маршрут.

> > `anonymous_ip_address`
> 1. Тип маршрутизации Hosting provider позволяет проверить, принадлежит ли IP-адрес Плательщика хостинг- или VPN-провайдеру, определённому сервисом Max Mind. YES — если условие истинно, NO — если условие ложно. Выберите необходимые параметры и настройте дальнейшую маршрутизацию на их основе.

> > `hosting_provider`
> 1. Тип маршрутизации Public proxy позволяет проверить, принадлежит ли IP-адрес Плательщика публичному прокси по данным Max Mind. YES — если условие истинно, NO — если ложно. Выберите необходимые параметры и настройте маршрут.

> > `public_proxy`
> 1. Тип маршрутизации Residential proxy позволяет проверить, принадлежит ли IP-адрес Плательщика хостинг- или VPN-провайдеру, определённому сервисом Max Mind. YES — если условие истинно, NO — если условие ложно. Выберите необходимые параметры и настройте дальнейшую маршрутизацию на их основе.

> > `residential_proxy`
> 1. Tor exit node routing type allows to check when Payer IP address is Tor exit node considered by Max Mind service. YES - if condition is true, NO - if condition is false. Select the needed parameters and build a further route based on them.

> > `tor_exit_node`
> 1. Static IP score routing type allows to check when Payer IP address Static IP score which is considered by Max Mind service is lower or equal to the settled threshold value. Higher values mean a greater static association. For example, many IP addresses with a user type of cellular have a score under one. Broadband IPs that don’t change very often typically have a score above thirty. This indicator can be useful for deciding whether an IP address represents the same user over time. The value ranges from 0 to 99.99. Select the needed parameters and build a further route based on them.

> > `static_ip_score`
> 1. Тип маршрутизации User count позволяет проверить, превышает ли или равняется ли количество пользователей IP-адреса плательщика, определённое службой Max Mind, заданному пороговому значению. Это оценочное количество пользователей, использовавших IP-адрес/сеть за последние 24 часа. Для IPv4 учитывается отдельный IP-адрес, для IPv6 — сеть /64. Выберите нужные параметры и постройте дальнейший маршрут на их основе.

> > `user_count`

#### Balancing Types

Balancing type — это функция, которая позволяет распределять транзакции между платёжными шлюзами в соответствии с настроенными параметрами.

> **Note:** Шлюз также можно указать непосредственно в конечной точке. Однако он всё равно будет подчиняться стратегии маршрутизации, но будет выбираться для всех транзакций, поступающих из этой конечной точки по данному маршруту.

В системе представлены следующие типы балансировки:

##### Balance By Coefficient

> 1. Balance by coefficient Based on Tx Amount позволяет сортировать транзакции по шлюзам в зависимости от суммы и указанного процента вероятности.

> > `Описание: pic29 balancing 2.0`

> For example, 3 gates have 20%, 30% and 50% coefficients set for them.
> In this case, 50% of the first several processed transactions will be forwarded to the gate with the probability of 50%, then the traffic will try to reach the distribution of the amount between the gates in accordance with the specified percentages.
> If the processed amount on a gate exceeds the amounts on the other gates, the transactions will not be forwarded to the gate with the exceeding amount until the amounts on all the gates become equal to the percentages set for the gates.

> 1. Balance by coefficient Based on Tx Count позволяет сортировать транзакции по шлюзам в зависимости от их количества и указанного процента вероятности.

> > `Описание: pic30 balancing 2.0`

> For example, 3 gates have 20%, 30% and 50% coefficients set for them. In this case, 50% of the processed transactions will be forwarded to the gate with the probability of 50%.
> The transaction amounts are not considered, only their quantity is.

##### Balance Equally

> 1. Balance equally Based on Tx Amount позволяет сортировать транзакции по шлюзам в зависимости от суммы с равным процентом вероятности.

> > `Описание: pic31 balancing 2.0`

> If there are e.g. 4 gates, “Balance equally on Tx Amount” will set an equal probability percentage of 25% for each gate. The first several transactions can be forwarded to any of them as the percentages are equal, then the traffic will try to reach the equal distribution of the amount between the gates.
> If the processed amount on a gate exceeds the amounts on the other gates, the transactions will not be forwarded to the gate with the exceeding amount until the amounts on all the gates become equal.

> 1. Balance equally Based on Tx Count позволяет сортировать транзакции по шлюзам в зависимости от количества с равным процентом вероятности.

> > `Описание: pic32 balancing 2.0`

> If there are e.g. 4 gates, “Balance equally on Tx Count” will set an equal probability percentage of 25% for each gate.
> The first several transactions can be forwarded to any of them as the percentages are equal, then the traffic will try to reach the equal distribution between the gates based on the quantity of transactions.

##### Cascading Chain

> 1. Тип Chain by Coefficient Based on Tx Count позволяет сортировать транзакции по гейтам с использованием указанного процента вероятности и принципа цепочки. Если входящая транзакция будет отфильтрована или превысит лимиты на некоторых гейтах, алгоритм балансировки исключит эти гейты, а затем сформирует цепочку из оставшихся согласно их коэффициентам.

> > `Описание: pic33 balancing 2.0`

> For example, 3 gates have 20%, 30% and 50% coefficients set for them. In this case, the gate with 50% coefficient has the 50% probability of becoming the first gate in the formed chain.
> If for some reason the first gate in chain was unable to process the transaction, it goes to the next gate in chain. If the second gate was not able to process the transaction as well, it moves on until one of the subsequent gates in chain processes it.
> The traffic will try to reach the distribution between the gates according to their coefficients based on the quantity of transactions.

> 1. Тип Chain by Equivalently Based on Tx Count позволяет сортировать транзакции по гейтам с использованием принципа цепочки и равного процента вероятности. Если входящая транзакция будет отфильтрована или превысит лимиты на некоторых гейтах, алгоритм балансировки исключит эти гейты, а затем сформирует цепочку из оставшихся на основе равного процента вероятности.

> > `Описание: pic34 balancing 2.0`

> If there are e.g. 4 gates, “Chain by equivalently on Tx Count” will set an equal probability percentage of 25% for each gate.
> In this case, each gate has the 25% probability of becoming the first gate in the formed chain.
> If for some reason the first gate in chain was unable to process the transaction, it goes to the next gate in chain.
> If the second gate was not able to process the transaction as well, it moves on until one of the subsequent gates in chain processes it.
> The traffic will try to reach the equal distribution between the gates based on the quantity of transactions.

> 1. Цепочка по последовательности позволяет сортировать транзакции по принципу каскадной цепочки.

> > `Описание: pic35 balancing 2.0`

> Транзакцияs will be processed by gates only in a priority order.
> If for some reason the first gate in the chain was not able to process the transaction, it moves further along the chain until one of the subsequent gates in chain processes it.
> The gate priority can be changed in “Chain by Sequence” using drag’n’drop.

> 1. Chain by Last Customer Tx Status on Acquirer позволяет сортировать транзакции по итоговому статусу транзакции и принципу цепочки.

> > `Описание: pic59 balancing 2.0`

> Все транзакции Клиента (определяемого по адресу электронной почты) проверяются в рамках конкретного Процессора, а не среди всех; следующая транзакция направляется на Шлюз с последней успешной транзакцией этого Клиента. Если попытка на этом Шлюзе была отклонена, транзакция перемещается дальше по цепочке, пока один из последующих Шлюзов не обработает её.

##### Others

> > 1. First in Sequence позволяет сортировать транзакции, выбирая для них первый подходящий шлюз.

> > > `Описание: pic36 balancing 2.0`

> > If the incoming transaction is going to be filtered or exceed the limits on certain gates, the “First in Sequence” algorithm excludes these gates and then it sends the transaction to the highest gate of the remaining ones.
> > The gate priority can be changed by dragging it up and down.

> > 1. First in Sequence by Last Customer Tx Status on Acquirer позволяет сортировать транзакции по итоговому статусу транзакции.

> > > `Описание: pic58 balancing 2.0`

> > All client (by e-mail) transactions for all projects are checked and the next transaction is routed to the gate with processor of the last successful transaction project-wide. If a transaction is in declined status, gate is moved to the bottom of the sequence and receives lowest priority. Also, all gates belonging to the same processor as the gate on which the rejection status occurred receive low priority.
> > Gate with processor with last approved transaction will be first in sequence, a gate with processor with earlier approves or no approves will be last.

> > 1. First in Sequence by Last Customer Tx Status on Gate позволяет сортировать транзакции по итоговому статусу транзакции.

> > `Описание: pic58 balancing 2.0`

> > All client (by e-mail) transactions are checked and the next transaction is routed to the gate of the last successful transaction project-wide. If a transaction is in declined status, gate is moved to the bottom of the sequence and receives lowest priority. Unlike First in Sequence by Last Customer Tx Status on Acquirer balancing type, the gates belonging to the same processor as the gate on which the declined status occurred do not lose priority and do not fall at the end of the sequence.
> > Gate with last approved transaction will be first in sequence, a gate with earlier approves or no approves will be last.
> 1. First in Sequence with Approval Overrides allows to sort transactions by how the client’s last transaction performed on each acquirer.

> > `Описание: pic58 balancing 2.0`

> > The strategy distributes transactions across gates based on how the client’s last transaction performed on each acquirer: if the last transaction on an acquirer was approved, that acquirer gets priority for the client’s next transaction; if it was declined, the acquirer’s priority is lowered and the next acquirer in the sequence is used instead. This effect fades over time — the longer since the last transaction, the smaller its influence on gate priority.

#### Additional Configurations

##### Gate Skips

Шлюзы в блоке балансировки могут быть пропущены при обработке транзакции в следующих случаях:

> 1.) Если срабатывает [ограничение эквайера](https://doc.payneteasy.ru/manager/gate/acquirerrestrictions.html.md) на уровне шлюза;

> 2.) Для параметров цепочки Cascading: если получено сообщение об отклонении, указанное в [Chain Strategy Details](https://doc.payneteasy.ru/manager/gate/chainstrategydetails.html.md) или [Chain Strategy Skips](https://doc.payneteasy.ru/manager/gate/chainstrategyskips.html.md), цепочка будет остановлена;

> 3.) Если шлюз отключён на уровне шлюза;

> 4.) Если шлюз отключён в блоке балансировки;

> 5.) Если шлюз настроен на игнорирование, поскольку он предназначен только для прямой обработки с определённых Endpoints (см. [Ignore Gates For Direct Processing](#ignoring-gates) ниже).

##### Ignore Gates For Direct Processing

Игнорирование шлюзов — игнорирует выбранный шлюз для всего узла.
|
Если необходимо использовать шлюз только для определённой конечной точки без изменений в маршрутизации, используйте Ignoring gates: тогда этот шлюз будет игнорироваться для остального трафика и использоваться только с указанной конечной точкой.
|

`Описание: pic11 balancing 3.0`

##### Rates

Тарифы — система платёжных комиссий за услуги всех участников.

Система поддерживает таких участников, как:

Merchant, Reseller, Manager, Dealer, Bank.

In the current model, the fees are incrementally increasing, from the Bank to the Merchant.
The following rate plan will count the value of the previous one. Thus, the higher the participant’s level is, the greater his total fee is in the system. The Bank and Dealer rate plans can be set on the gate level. Manager, Reseller, and Merchant rate plans can be set on the project level, with the option to override them on the endpoint level.
The presence of some participants in the payment rates model is optional.

In Routing & Balancing the Rates can be redefined directly on the gates configuration in balancing blocks.
These Rates settings override the ones on project or endpoint level.

> `Описание: pic38 balancing 2.0`

There are 3 active fields below at the gate’s name, which are responsible for redefining rate plans for Manager, Reseller and Merchant, from left to right respectively.
All rate plans can be selected from the dropdown list of already created ones.

##### Copy, Paste, Cut, Delete

Узлы маршрутизации и балансировки можно удалить вместе со всеми дочерними узлами:

> `Описание: pic40 balancing 2.0`

Каждое удаление требует подтверждения:

> `Описание: pic40 balancing 2.0`

Фрагменты дерева балансировки также можно вырезать и вставлять:

> `Описание: pic40 balancing 2.0`

Выберите место для вставки вырезанного фрагмента:

> `Описание: pic40 balancing 2.0`

Результат:

> `Описание: pic40 balancing 2.0`

Части дерева балансировки также можно копировать аналогичным образом:

Описание: Tap on Copy node.

> `Описание: pic40 balancing 2.0`

Выберите место для вставки скопированного фрагмента:

> `Описание: pic40 balancing 2.0`

Результат:

> `Описание: pic40 balancing 2.0`

Тот же процесс можно повторить для последней части дерева балансировки:

> `Описание: pic40 balancing 2.0`

Результат:

> `Описание: pic40 balancing 2.0`

##### Import And Export

Можно импортировать и экспортировать дерево балансировки:

> `Описание: pic40 balancing 2.0`

Файл дерева балансировки создаётся в формате xml и имеет следующую структуру:

```http
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<strategy>
    <projectId>4947</projectId>
    <projectDisplayName>Recur AUD</projectDisplayName>
    <routingNodes>
    <routingNode>
            <id>8572</id>
            <routingId>1</routingId>
            <enabled>true</enabled>
            <routes>
                <route>
                    <id>23277</id>
                    <enabled>true</enabled>
                    <nextRoutingNodeId>8573</nextRoutingNodeId>
                    <others>true</others>
                    <criteria>
                        <criterion>
                            <value>OTHERS</value>
                        </criterion>
                    </criteria>
                    <order>0</order>
                </route>
            </routes>
            <root>true</root>
        </routingNode>
        <routingNode>
            <id>8573</id>
            <routingId>2</routingId>
            <enabled>true</enabled>
            <routes>
                <route>
                    <id>23279</id>
                    <enabled>true</enabled>
                    <nextRoutingNodeId>8574</nextRoutingNodeId>
                    <others>false</others>
                    <criteria>
                        <criterion>
                            <entityId>8104</entityId>
                            <entityName>213100</entityName>
                        </criterion>
                    </criteria>
                    <order>0</order>
                </route>
                <route>
                    <id>23278</id>
                    <enabled>true</enabled>
                    <others>true</others>
                    <criteria>
                        <criterion>
                            <value>OTHERS</value>
                        </criterion>
                    </criteria>
                    <order>1</order>
                </route>
            </routes>
            <root>false</root>
        </routingNode>
        <routingNode>
            <id>8574</id>
            <routingId>3</routingId>
            <enabled>true</enabled>
            <routes>
                <route>
                    <id>23281</id>
                    <enabled>true</enabled>
                    <nextRoutingNodeId>8575</nextRoutingNodeId>
                    <others>false</others>
                    <criteria>
                        <criterion>
                            <entityId>1825</entityId>
                            <entityName>DEMO BANK</entityName>
                        </criterion>
                    </criteria>
                    <order>0</order>
                </route>
                <route>
                    <id>23280</id>
                    <enabled>true</enabled>
                    <others>true</others>
                    <criteria>
                        <criterion>
                            <value>OTHERS</value>
                        </criterion>
                    </criteria>
                    <order>1</order>
                </route>
            </routes>
            <root>false</root>
        </routingNode>
        <routingNode>
            <id>8575</id>
            <routingId>4</routingId>
            <enabled>true</enabled>
            <routes>
                <route>
                    <id>23282</id>
                    <enabled>true</enabled>
                    <balancingNodeId>8750</balancingNodeId>
                    <others>true</others>
                    <criteria>
                        <criterion>
                            <value>OTHERS</value>
                        </criterion>
                    </criteria>
                    <order>0</order>
                </route>
            </routes>
            <root>false</root>
        </routingNode>
    </routingNodes>
    <balancingNodes>
        <balancingNode>
            <id>8750</id>
            <enabled>true</enabled>
            <balancingId>1</balancingId>
            <rows>
                <row>
                    <id>0</id>
                    <enabled>false</enabled>
                </row>
            </rows>
        </balancingNode>
    </balancingNodes>
</strategy>
```

### Настройки

### Поиск настроек

Экран предназначен для поиска проектов, endpoint’ов и других сущностей по их имени или ID и расположен в разделе “Settings” – “Поиск настроек”.

 

Диапазон поиска можно указать для конечных точек, проектов или других сущностей.

### Statements

#### Main Information

> `Изображение picbig statements_eng`

Payneteasy platform contains integrated calculation system to reflect the tariffication between business process partners. Calculation happens on each level, from dealer to merchant. Bank fees are calculated for tariffication and settlement, but statements for settlement with the bank are not provided by the system.
Instead, the system calculates statements per Merchant and indicates which exact amount should be received from the bank. Statement is individually generated for each manager or each merchant of this manager. Statement date is called business day. Statement for business day contains all projects for chosen manager.
Statements will be calculated for manager if such option is enabled. If statement should be calculated, enable the Default calculate statements flag in manager account details. If this option is not enabled, statements setting in projects of exact manager will be unavailable and statements are not calculated.

> `pic2 statements_eng`

Statements can be calculated manually or automatically. Automatic statements calculation starts every 2 hours. Statements menu also has options to create new statement or delete statement that already exists.

> **Note:** After deleting the statement, all information about payed and frozen amounts is lost forever. Only last business day can be deleted. Deleted statements must be recalculated sequentially from a lesser date to the next. Otherwise, if statements are recalculated by jumping over several dates, then intermediate business periods will be included in one.

`pic3 statements_eng`

Managers are able to count statements only for themselves and their merchants, superiors are also able to calculate statements for their managers.
Positive balances from previous months do not carry over. Negative balances are taken into account in the current period as a balance for the beginning of the period. A separate statement is generated for each currency. If the counterparty has projects in different currencies, then several statements will be generated for each currency.

#### Statements Calculation Parameters

Расчёт выписок начинается с определения списка транзакций, включённых в указанный операционный период. Все транзакции условно разделяются на следующие типы:

1. Уменьшение баланса торговца (chargeback, reversal и т. д.)
2. Увеличение баланса торговца (sale, capture и т. д.)

Система поддерживает механизм Hold для определения списка успешных транзакций, которые будут включены в выписку, и механизм Delay для снижения рисков при расчётах с контрагентами.

#### Delay

Delay — механизм краткосрочной отсрочки выплат при положительных объёмах транзакций, позволяющий сформировать резерв, равный среднему обороту Торговца за оплаченный период. Он позволяет минимизировать риски негативной активности в процессе работы Торговца.

> `pic4 statements_eng`

Стратегия выплат, её частота и задержка могут быть настроены на уровне endpoint. Поддерживаются следующие стратегии:

1. Ежедневные платежи, периоды платежей и задержка определяются в днях,
2. еженедельные выплаты, платёжные периоды и задержки определяются в неделях, выписки формируются по понедельникам,
3. ежемесячные выплаты, платёжные периоды и задержки определяются в месяцах, выписки формируются в первый день каждого месяца.

Дата начала платёжного периода, как и любые другие производные даты, полученные при формировании выписок, не может быть раньше даты регистрации endpoint.

**Период** платежа определяет регулярность операционных дней. Например, если платёжная стратегия еженедельная, а период равен двум, выписки формируются каждые две недели. Минимальный период — один.

**Задержка** выплаты определяет количество периодов, на которые будут задержаны средства, полученные по положительным транзакциям, перед выплатой контрагенту. Например, если выписки рассчитываются ежемесячно с периодом выплаты раз в месяц, то при задержке в один период Торговец получит деньги за предпоследний месяц вместо последнего. Деньги за последний месяц Торговец сможет получить только в следующем месяце. Отрицательные транзакции, учтённые в выписке, игнорируют период задержки для минимизации рисков.

Выписки рассчитываются с использованием последних параметров задержки, настроенных в конечной точке. Это позволяет пересчитывать выписки за предыдущие операционные дни с новыми параметрами.

#### Холдинг

Холдинг — механизм средне- и долгосрочной отсрочки платежей для положительных объёмов транзакций. Он позволяет сформировать резерв для погашения отрицательных сумм, полученных после окончания работы торговца.

> `pic5 statements_eng`

Сумма к выплате по положительным транзакциям, включённая в выписку, может быть частично удержана на периоды, сопоставимые со сроками рассмотрения споров и претензий о мошенничестве. Для этого используются механизмы удержания. Период и сумма удержания указываются в тарифном плане. Период удержания задаётся в днях, а его величина — в процентах. Эти значения невозможно изменить после расчёта тарифов для обработанной транзакции. Каждая транзакция имеет уникальный период и процент удержания, рассчитанные на дату её обработки.

> `pic6 statements_eng`

При указании длительности задержки учитывайте, что период удержания, заданный в тарифном плане при выплате переноса, не включает период задержки выплаты, заданный в настройках эндпоинта. Это сделано, чтобы избежать удержания выплат до выплаты основной суммы при большой задержке выплат и небольшой задержке удержания. То есть, если период удержания для транзакции составляет один день при ежедневных выплатах с периодичностью один день и задержкой три дня, перенос по транзакции будет выплачен через 4 дня с момента её обработки.

> `pic7 statements_eng`

#### Preliminary Review Of Future Statements

Можно просматривать выписки за будущие даты до их формирования, чтобы прогнозировать необходимые суммы для оплаты на счетах компании. Число периодов, для которых доступен предварительный просмотр, задаётся в профиле пользователя.

> `pic8 statements_eng`

Расчёт дат выплат при формировании выписки и её предварительном просмотре различается. При расчёте дат предварительного просмотра строго учитываются параметры задержки, заданные для эндпоинта. При расчёте дат во время планового формирования выписки дата начала рабочего периода переносится на дату окончания последнего доступного рабочего периода. Эта функция полезна при формировании выписок, включающих несколько периодов выплат, а также при изменении периода выплат или задержки. Если сетка дат, полученная при расчёте периодов выплат, отличается от фактических дат выплат, например когда изменены параметры расчёта выписок, а выписки за предыдущие рабочие дни не пересчитаны, предварительный просмотр может быть недоступен для будущей даты или даты начала периода будут неверными.

#### Statement Adjustments

Statements can take into account not only the transaction commission. The statement balance can be changed by means of adjustments that can be accrued for any counterparty from the dealer to the merchant.
Adjustments can be applied to the statement on a special screen in the menu “Reports” – “Statements” – “Adjustments”.

> `pic_cor statements_eng`

Существует два типа корректировок:

1. корректировка дохода — однозначно изменяет баланс клиента в текущей выписке на полную сумму корректировки,
2. корректировка переноса — изменяет сумму оплаченного переноса за выбранное количество периодов.

#### Earnings Adjustments

> `pic9 statements_eng`

The adjustment of earnings can both reduce the statement balance in case of fines, and increase it in case of erroneous billing. The statement takes into account adjustments whose date is less than the date of the statement formation, which were not taken into account in earlier statements. The adjustment can be initiated with the indication of the endpoint. In this case, it will be displayed in the details of the endpoint in the statement, changing its balance. If the endpoint is not specified, the adjustment will be listed in the statement header.
Statements for the merchant are generated on behalf of the reseller, if it is available on the project, for the reseller to manage the merchant’s statements. If there is no reseller, statements are generated directly from the manager. Similarly, an adjustment can be made for the merchant. If a reseller is selected when creating an adjustment, an extract will be generated on behalf of the reseller, indicating this adjustment. If the earnings adjustment is included in the statement, then it cannot be changed (except for the comment) or deleted.

#### Carryover Adjustments

> `pic10 statements_eng`

The second type of adjustments can only reduce the statement balance. Carryover adjustments, according to the name, are deducted from the paid hold. If an endpoint is specified when creating an adjustment, the adjustment will be deducted exclusively from the carryover of this endpoint. If the endpoint is not specified, the adjustment will reduce the entire available carryover of the merchant in exact statement.
Unlike earnings adjustments, carryover adjustments can be accounted for in multiple statements. The unaccounted part of the adjustment is transferred to the calculation in the next period. The maximum number of business days in which the adjustment should be taken into account is set by the “Max deduction periods”parameter. If this parameter is zero, the number of business days to be debited is assumed to be equal to infinity. The maximum amount of application of the carryover adjustment in the current billing period is limited to the maximum amount of the carryover, if the current number of statements in which this adjustment was taken into account does not exceed the “Max deduction periods”parameter. If this parameter is exceeded, the unaccounted amount of the adjustment is converted into an earnings adjustment. Creating positive carryover adjustments in the system is prohibited.

#### Statements Calculation Sequence

Выписки рассчитываются в следующем порядке:

1. Формируются выписки Дилера. Сначала выписки Дилера детализируются по шлюзам. Затем применяются корректировки переноса, выплаченного Дилеру Банком. После этого рассчитываются корректировки доходов. Итоговый баланс текущего периода рассчитывается следующим образом: к разнице удержаний Банка и Дилера добавляется разница применённых комиссий Банка и Дилера за транзакции. В итоге добавляется перенос Банка за вычетом корректировок переноса и вычитается перенос, выплаченный Дилером.
2. Формируются выписки Менеджера с детализацией по шлюзам; применяются корректировки переноса, выплаченного Менеджеру Дилером или Банком при отсутствии Дилера; рассчитываются корректировки доходов; итоговый баланс текущего периода рассчитывается как разница удержаний Дилера (Банка) и Менеджера плюс разница применённых комиссий Дилера (Банка) и Менеджера за транзакции; в итоге добавляется перенос Дилера (Банка) за вычетом корректировок переноса и вычитается перенос, выплаченный Менеджером.
3. Формируются выписки реселлера с детализацией по эндпоинтам; применяются корректировки переноса, выплаченного реселлеру менеджером; начисляются корректировки доходов; итоговый баланс текущего периода рассчитывается как разница удержаний менеджера и реселлера плюс разница применённых комиссий менеджера и реселлера за транзакции; в итоге добавляется перенос менеджера за вычетом корректировок переноса и вычитается перенос, выплаченный реселлером.
4. Формируются выписки Торговца с детализацией по терминалам и указанием реселлера; применяются корректировки переноса, выплаченного Торговцу реселлером или Менеджером при отсутствии реселлера; начисляются корректировки доходов; итоговый баланс текущего периода рассчитывается как разница применённых комиссий реселлера (Менеджера) и Торговца за транзакции; в итоге добавляется перенос реселлера (Менеджера) за вычетом корректировок переноса и сумма транзакций Торговца без сумм сервисных операций и операций типа Money Transfer.
5. После формирования выписки по всем контрагентам объединяются в выписки по компаниям; выписки по компаниям детализируются по Merchant, reseller, dealer и Manager для учёта выплаченных средств на балансе компании; из всех переносов и холдов в выписках компании учитываются только перенос и холд банка.

> `pic11 statements_eng`

The calculated balance of the current period for each type of user is added to its current balance. The balance is maintained individually for each currency. For merchants, the balance is also detailed by the reseller, if available. The company’s balance sheet is not taken into account.
The counterparty’s current balance is defined as the sum of the current balance of all its statements, minus paid and frozen funds.

> `pic12 statements_eng`

#### Viewing Statements

The statements are viewed in **“Reports” – “Statements”**. On this screen, statements can be sorted by currencies, merchants, resellers and dealers, as well as by the payment status (“All”, “Frozen”, “Not paid”) and date range.
Using the date range, you can select the date of the statement that you want to upload.

> `pic_statement_check statements_eng`

Выписку можно скачать в форматах XLS или PDF. Чтобы скачать её, нажмите на имя торговца и выберите значок соответствующего формата.

> `pic_format statements_eng`

#### Freezing Of Payments

Frozen payment status in the advanced search can be used to manage statements for which payments have been suspended. The mechanism for freezing payments is used in cases of detecting suspicious activity of the counterparty, or receiving information from the bank about the impossibility of making payments on the current statement for unspecified reasons for an indefinite period, until any disputed issues are resolved.
Frozen funds reduce the counterparty’s balance for payment. Frozen funds are managed within one business period. The amount of the frozen funds can not exceed the amount of payment of the current statement.

#### Making Payments

Чтобы минимизировать возможные потери, в окне оплаты отображается соответствующая информация.

> `pic13 statements_eng`

После нажатия на сумму к оплате отображается первый графический компонент панели аналитики со следующими условиями:

1. Описание: chart type-negatives,
2. Диапазон дат: от начала периода положительных транзакций, включённых в одну из предыдущих выписок, до текущей даты — всего не менее 5 последних периодов при оплате за последний рабочий день и больше при оплате за предыдущие рабочие дни.
3. Описание: axes — sum, quantity,
4. Расширенный поиск — для всех, кроме торговца: трафик всех торговцев, включённых в эту выписку; для торговца — непосредственно его трафик; всё с учётом валюты,
5. на графике показан интервал, отображающий период положительных транзакций, включённых в эту выписку,
6. В информационных целях отображаются следующие данные: согласно текущей выписке — период положительных транзакций, сумма транзакций типа Sale (Capture), сумма транзакций типа Transfer, количество транзакций типа Service, удержанный холд. Итого — невыплаченный баланс, выплаченная сумма, замороженный баланс. Также отображается список всех Payout с комментарием.

### Онлайн мониторинг

#### Введение

The screen is located in “Tools” – “Monitoring” section. This screen displays information about various errors that usually require quick response, as well as the options to subscribe for notifications about any errors via Telegram `icon_telegram` or Email `icon_email`. E-mail address are taken from the personal account (Manager or its employee account).

 

 

#### Perilous Decline

Этот раздел расположен в [Введение](#manager-online-monitor). В этом разделе отображаются сработавшие опасные отклонения, выбранные Менеджером.
 
Чтобы создать список опасных отклонений, используйте [экран кодов ошибок Процессора](https://doc.payneteasy.ru/manager/settings/configuration/processor/processor_errors.html.md).
 
Если список опасных отклонений пуст, обратитесь в службу поддержки.
 
 

#### Важные фильтры

Уведомления могут быть созданы для случаев, когда транзакции были отфильтрованы по одному из следующих фильтров:

| Название поля | Описание |
|-----------------|-------------------------------------------------------------------------------------------------------------------------------------------------|
| Дата | Дата создания оповещения. |
| ID | Идентификационный номер оповещения. |
| Название | Имя Торговца. |
| ТорговецID | Идентификационный номер Торговца. |
| Описание ошибки | Описание ошибки фильтра проекта с кодом ошибки. Пример: [1033] Слишком много одобренных транзакций для одного и того же номера кредитной карты. |

### Инструменты

### Маркеры Транзакций

Transaction markers are created to notify users about specific issues that might happen to transactions and usually require quick response or additional business process (for example, manual review or communication with the customer). This screen allows to view all created transaction markers and work with them, by adding comments to markers and set them as “processed” if the issue has been resolved.
Notifications about new markers can be sent by e-mail, this functionality is configured on “Transaction Marker Notification” screen.
Transaction markers can be sorted with search criteria by marker type and status. The list of markers contains information about each marker type, status and linked order ID:

### Уведомления о маркерах транзакций

#### Введение

Инструмент уведомления о маркерах транзакций используется для уведомления пользователей о конкретных проблемах, которые могут возникнуть с транзакциями и обычно требуют быстрого реагирования. Каждый раз при срабатывании указанного маркера транзакции на адрес электронной почты пользователя будет отправляться уведомление. Например, если включены уведомления о чарджбэках, пользователь будет получать новое уведомление по электронной почте для каждого чарджбэка, примененного к обработанной транзакции. Содержимое электронного письма можно настраивать.

На главном экране отображается список всех уведомлений, их статус, идентификатор, тема, язык, имя Торговца, тип сообщения и тип маркера.

#### Конфигурация

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

 

| Параметр | Описание |
|---------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Статус | Enabled/Disabled |
| Тип маркера | * Чарджбэк * Чарджбэк после возврата Ethoca * Чарджбэк после возврата * Дублированный чарджбэк * Неуспешная отмена * Неуспешное списание * Неуспешная проверка PAN * Неуспешная инициация сессии оплаты * Неуспешная инициация сессии выплаты * Неуспешный возврат * Неуспешная оценка риска * Мошенничество * Непоследовательный статус заказа * Неправильный код отклонения транзакции * Несколько мастер подтверждений * Проверка по телефону * Уведомление об обратном вызове от процессора * Отклонённая выплата * Отклонённый возрат * Запрос подтверждающих документов * Определяется пользователем |
| Торговец | Чтобы выбрать Торговца, введите имя или идентификатор Торговца. |
| Тема | Все письма для этого маркера будут иметь эту тему. |
| Тип сообщения | * Электронная почта — электронное письмо с обычным текстом. * Электронная почта (HTML) — электронная почта с поддержкой HTML. |
| Сообщение | Все электронные письма для этого маркера будут содержать это текстовое сообщение. Уведомления о маркерах транзакций поддерживают [Шаблоны сообщений](https://doc.payneteasy.ru/integration/common_utilities/receipt_message.html.md). Кроме того, поддерживается $!{MARKER_TYPE_NAME}. |

### Транзакционный отчёт

Этот отчёт содержит список транзакций за указанный период времени. Для выгрузки необходимых данных используются следующие критерии: даты, тип даты, типы транзакций, изменение статуса, типы карт, идентификатор транзакции, рекуррентный фильтр, часовой пояс, кодировка CSV. Этот отчёт также можно выгрузить через API для автоматизированной сверки или анализа: [Удалённый отчёт по транзакциям](https://doc.payneteasy.ru/integration/common_utilities/reports.html.md#remote-transactions-report). Дополнительные критерии можно добавить, нажав кнопку Критерии: статус заказа, валюта, эндпоинты, проекты и т. д.
 
Максимальный период выгрузки отчета составляет 93 дня. Если требуется выгрузка данных за шесть месяцев и более, разделите требуемый период на части.
 
Чтобы изменить шаблон, воспользуйтесь инструментом управления шаблонами:
 
 

 
Выберите критерии для этого отчета во всплывающем окне:
 
 

 
После выбора необходимых параметров введите имя шаблона и нажмите кнопку Сохранить. Для выгрузки отчета нажмите на кнопку CSV.
 
Пример полученной таблицы показан ниже:
 
 

 

> **Note:** Сформированный отчет имеет правильно сформированный формат (well-formed) CSV. В соответствии с поля [RFC 4180](https://datatracker.ietf.org/doc/html/rfc4180), содержащие переносы строк (CRLF, CR, LF), двойные кавычки и запятые заключаются в двойные кавычки.

### Users

Экран «Пользователи» находится в разделе «Настройки» → «Пользователи». На этом экране можно просматривать, настраивать и создавать учётные записи пользователей в системе. С каждой учётной записью может быть связано несколько сотрудников.
 

| [Merchants](https://doc.payneteasy.ru/manager/users/merchant.html.md) | Этот экран позволяет создавать, настраивать и просматривать все учётные записи торговцев, созданные в системе. |
|-----------------------------------------------|------------------------------------------------------------------------------------------------------------------|
| [Resellers](https://doc.payneteasy.ru/manager/users/reseller.html.md) | Этот экран позволяет создавать, настраивать и просматривать все учётные записи реселлеров, созданные в системе. |

### Виртуальный терминал

#### Введение

Виртуальный терминал (VT) — технологическое решение, позволяющее обрабатывать транзакции из личного кабинета Торговца в пользовательском интерфейсе. Эта функция не требует API-интеграции Торговца с Payneteasy. VT сразу предоставляет полнофункциональное рабочее место менеджера платежей. VT используется для удалённой обработки транзакций без присутствия клиента, например если клиент оформляет заказ или оплачивает услуги, находясь в другом городе или стране. Рабочий процесс VT полностью настраивается под потребности бизнеса. Гибкие шаблоны помогают сократить время заполнения данных клиента. Виртуальный терминал поддерживает рекуррентные платежи (по рекуррентному ID). Если клиент ранее предоставил данные держателя карты системе обработки gate.payneteasy.ru, а Торговец зарегистрировал такой платёж для получения рекуррентного ID, последующие платежи можно выполнять по рекуррентному ID вместо данных держателя карты. VT также позволяет сгенерировать ссылку для передачи клиентом данных держателя карты в защищённой среде и, при необходимости, прохождения проверки 3-D Secure.
 
 
VT обеспечивает безопасный способ обработки MOTO-транзакций с поддержкой асимметричной криптографии. Для этого выполните [Генерация пары публичного и приватного ключей](#man-public-private-keys-vt), затем передайте открытый ключ службе поддержки Payneteasy и загрузите закрытый ключ в Browser Console ([Импорт приватного ключа в консоль браузера](#man-import-private-keys-to-bc-vt)) или User Interface ([Импорт приватного ключа в пользовательский интерфейс](#man-private-key-to-ui-vt)).
 
Доступные операции для ВТ:
 
 
• принимать платежи как от новых, так и от ранее зарегистрированных клиентов ([Продажа](#man-sale-vt));
 
• удерживать средства как у новых, так и у ранее зарегистрированных клиентов ([Предавторизация](#man-preauth-vt));
 
• перевод средств с карты на карту как для новых, так и для ранее зарегистрированных клиентов ([Перевод между картами](#man-transfer-vt));
 
• выдача средств на карты как новых, так и ранее зарегистрированных клиентов ([Перевод на карту (D2C)](#man-d2c-vt));
 
• перевод средств с одного банковского счёта на другой ([Перевод на счёт](#man-payout-vt)).
 
 
Экран ВТ находится в меню “Инструменты” – “Виртуальный терминал (ВТ)”.
 
 

#### Асимметричная криптография

Большим преимуществом нового виртуального терминала является использование системы асимметричной криптографии. Асимметричная криптография (криптография с публичным ключом) представляет собой криптографическую систему, использующую пары ключей: публичные ключи, которые могут быть свободно распространены, и приватные ключи, которые известны только владельцу. Генерация таких ключей основана на криптографических алгоритмах, использующих математические задачи по созданию односторонних функций. В результате, для безопасности требуется лишь сохранять конфиденциальность приватного ключа. Публичный ключ может распространяться открыто без ущерба для безопасности.
 
 
Виртуальный терминал персонализируется. Пользователь подписывает запрос на транзакцию своим приватным ключом, а система использует публичный ключ для проверки того, что запрос сделан владельцем соответствующего приватного ключа.
 

##### Генерация пары публичного и приватного ключей

Для авторизации запросов виртуальному терминалу требуется пара публичного и приватного ключей от пользователя. Для генерации ключей, перейдите на сайт [https://www.openssl.org/](https://www.openssl.org/) ( [https://slproweb.com/products/Win32OpenSSL.html](https://slproweb.com/products/Win32OpenSSL.html) ), загрузите последнюю версию openssl и выполните следующие команды:
 
 
openssl genpkey -algorithm RSA -out private_key_pkcs_8.pem -pkeyopt rsa_keygen_bits:4096
 
 
openssl rsa -pubout -in private_key_pkcs_8.pem -out public_key.pem
 
 
Пожалуйста, не передавайте никому свой приватный ключ, это конфиденциальная информация, предназначенная только для личного использования. Публичный ключ, напротив, должен быть передан Payneteasy для настройки терминала. Во избежание компрометации используйте разные ключи для производственной и тестовой сред.
 
 
Незашифрованный закрытый ключ PKCS #8 RSA в формате PEM начинается с текста —– BEGIN PRIVATE KEY —–. Этот ключ необходимо импортировать в консоль браузера или пользовательский интерфейс. Подробнее см. ниже.
 

##### Импорт приватного ключа в консоль браузера

Приватный ключ выгружается в IndexedDB браузера с помощью скрипта, связанного с текущей открытой страницей. Этот скрипт использует только простые API браузера (API Web Crypt, API IndexedDB) и не использует никаких внешних скриптов, чтобы избежать компрометации приватного ключа.
 
Последовательность импорта:
 
1. Откройте страницу [https://gate.payneteasy.ru/paynet-ui/login-step1](https://gate.payneteasy.ru/paynet-ui/login-step1) в браузере (не входите в систему).
 
2. Откройте консоль браузера. В Chrome это делается с помощью Ctrl+Shift+J. В Safari, это делается с помощью Ctrl+Shift+I, Ctrl+Alt+C. Для Mac - Cmd, вместо Ctrl.
 
3. Замените демо ключ реальным приватным ключом в формате PEM (он должен иметь префикс **—–BEGIN PRIVATE KEY—–** в начале).
 
```http
var privateKeyPem = `-----BEGIN PRIVATE KEY-----\
     MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDJzUVnqQhDWF2H
     pxAMcyo7f+ucIEJS3AQHG0ET/dxJ0qssGymIjdzelJ3XI+oTq2y9TTimQjtujoeh
     6zl44WrXCbJLCUDWsNjlh7hmBorpU6tJVhw1466CAxkktPJHkMqJYF0efegIfOwU
     otTzwY4tGlN6iWK0aMJ5ZWhWpZDbgap72vrRXKfCN6/JeTUdsOI7PAeZw0me04jZ
     8Lova9FVIbVzOJaFGwSUroMvXevIB8rOD57c3VCLTxE3aGNMz+9DLl6GCm8WZ1US
     HmiHybqgvGLyQswBPFcVzFgd7BpgZs+JAzYDh8ZGANvjA5F9u0b6Ynb3Mpm3+9Rl
     CtvSxKwpAgMBAAECggEAZ6+hro5KIZggjleHRm5Rz7p9S33DtiE3rJMTT/tKmV+1
     9XaLU49YYcDIjMb2OV8GAwnPRpWXRcnT5J0grXxc0do4kpdRij3ZY63lT/6ilxoX
     Uxn8aq/udPy0iYizR5QcjJNHpSgZ9WqCPmQfuJLFw2TYaYh3f6yn54n0Hzj4gd9l
     tsol4xeTKQ47c/vUF7kHfD8IYzL8jv3a3++IqzCwJ3jIpTENsBYAgrkbYN9f9GHD
     BvX3sz6tgFaYU2R8YbDvA0Yq9tVPwYrPvbhwoht6PsjE/R0UK6yqnKPEADdzWvP8
     frXmmtJ35rAymqUWfpqx9RdZ0NMR7J8ut8C5365PJQKBgQD+UidVWut7d9qvhZKq
     +T5qtasH5qkD34idFl4Ay8xsSntqTrXr7q1Ff+FQY6R+f/8IzB4ZqgnV58+8AEMc
     gJzNmkf9L119SCQDxRV/TgW2eHrUrI9XS2AI5tmyzaGY1xL4fCQQMvqNAGERT6sS
     XJRt8WjuGmE4zeqxNB0XY7u1OwKBgQDLIlnksOrPw00lWUbXHSHwdfBzjYU97KVu
     GnOl5fsCmlKanqHUfd/4StnRXpl3l56hig8mYsHV5EcfUEX98PaSbTAy8Lk5y5E9
     ye2ENOgl/IyMgHPtT6spFKm7jRmpulqG4FVCGxQl3n6/nSmztA3S1zLZzi0guI0E
     oxXCbG796wKBgC8NSgOrr5eHRClnIAyL0nVxqPPsQ+bYi3Dsu3WQPwDmAtFXQKcm
     4F3UW/5AgSV6Ttf007jR0cIGglN5BPGYBeqwGZOJGNXd6/PambCU4c+xmKASUO7I
     njrnYu2Gx9f8KqFYbl+k3uAJauwF/lOGV1vD5zLuJICa8Enap2s1Y3wTAoGBAKrx
     QnLISyIB+XbXtVyrYHdJ2Mp1Ks6cye5pBi9y5RQgqCkEG62FLCh3XOvrTvysNEs+
     slccPoBv9UYtuGjmEanRhwEnQMiZPaWgu2dJWp8081X9dxEavS/5+oghSpphf3MH
     b9gMj5z6qvE3IfPfLs7iWCGgdquVgt6HG3Wc6J53AoGAc+ZYE8kMj2p9rtu1uJgX
     +VMbbdLEUqz3BPC9Tzq+eglUlYmwUK1xynKZfkEMcu5PncaBaNLU+GmYKKgw6wZS
     soEF1KvbBB4o6nZdlGo0BirOQ0ijHDWUvtuiaaWAQoQAhQwgqqV2IOC4UfkZ6ORf
     A/UW43A9wZq9kaEgb0YWOes=\
     -----END PRIVATE KEY-----`;

// Algorithm Object
var algorithmKeyGen = {
  name: "RSASSA-PKCS1-v1_5",
  // RsaHashedKeyGenParams
  modulusLength: 2048,
  publicExponent: new Uint8Array([0x01, 0x00, 0x01]),  // Equivalent to 65537
  hash: {
    name: "SHA-256"
  }
};

function parsePem(pemString, type) {
    const expectedPrefix = "-----BEGIN " + type + "-----";
    const expectedPosftix = "-----END " + type + "-----";

    pemString = pemString.trim();
    if (!pemString.startsWith(expectedPrefix)) {
        throw "Expected PEM to start with " + expectedPrefix;
    }
    if (!pemString.endsWith(expectedPosftix)) {
        throw "Expected PEM to end with " + expectedPosftix;
    }
    const base64 = pemString.substring(expectedPrefix.length, pemString.length - expectedPosftix.length).trim();
    return Uint8Array.from(atob(base64), c => c.charCodeAt(0))
}

function parsePrivateKeyPem(pem) {
    return parsePem(pem, 'PRIVATE KEY')
}

function storePrivateKey(privateKey) {
    var request = indexedDB.open("keys");

    request.onupgradeneeded = function() {
      // The database did not previously exist, so create object stores and indexes.
      var db = request.result;
      var store = db.createObjectStore("privateKeys", {keyPath: "name"});

      // Populate with initial data.
      store.put({name: "first", key: privateKey});
    };

    request.onsuccess = function() {
      db = request.result;
    };
}

var privateKeyArray = parsePrivateKeyPem(privateKeyPem);
var NON_EXTRACTABLE = false;
window.crypto.subtle.importKey("pkcs8", privateKeyArray, algorithmKeyGen, NON_EXTRACTABLE, ['sign'])
.then(function(privateKey) {
        storePrivateKey(privateKey);
        privateKeyPem = null;
        privateKeyArray = null;
    }
);
```

4. Скопируйте содержимое этого скрипта и вставьте его в консоль браузера.
 
5. Ключ был загружен в браузер неизвлекаемым способом.
 
 

> **Warning:** Если приватный ключ интегрирован в браузер, но совершить транзакцию не удается, очистите кэш браузера и попробуйте еще раз интегрировать приватный ключ.

 

> **Note:** Если предложенный код вам не подходит или требуется дополнительная информация о **Web Crypto API**, посетите официальный сайт [https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API](https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API).

##### Импорт приватного ключа в пользовательский интерфейс

Виртуальный терминал имеет функцию использования приватного ключа через пользовательский интерфейс.
 
 

 
Для более быстрого проведения большого количества тестовых транзакций установите флажок “Сохранить ключ в браузере”, и приватный ключ будет автоматически сохранен в браузере.
 
 

#### Подробности интерфейса ВТ

ВТ имеет кнопки управления, которые более подробно описаны ниже.
 
 

#### Управление шаблонами

1) Для упрощения работы оператора Виртуального терминала, поля данных можно сохранить в виде шаблона. Использование шаблонов позволяет работать только с индивидуальными атрибутами клиента.
 
 

 
2) После ввода данных в правой части страницы можно сохранить эти данные как шаблон, нажав ‘Сохранить как шаблон’ и указав имя нового шаблона.
 
 

 
3) Для редактирования, клонирования, удаления шаблонов или их распространения, нажмите на три точки возле имени шаблона и выберите нужный параметр. Шаблоном можно делиться с пользователями, обладающими доступом более низкого уровня. Таким образом, Торговец может поделиться шаблоном со своими сотрудниками.
 
 

 
Для всех выбранных пользователей созданный шаблон станет шаблоном по умолчанию при загрузке виртуального терминала.
 
Изменения по-прежнему можно вносить до проведения транзакции, но только создатель шаблона имеет право изменять шаблон. Пользователи, которым был предоставлен доступ к шаблону, могут только копировать его.
 
Количество созданных шаблонов, доступных для совместного использования, не ограничено. Все они будут отображаться пользователям в алфавитном порядке.
 
 

#### Спецификация транзакциий

##### Списания

В разделе депозита можно совершить транзакцию продажи и предавторизации (холдирования), которые описаны ниже.
 

###### Продажа

Продажа — это тип транзакции, при которой покупатель получает товары или услуги от Торговца в обмен на деньги или другие активы.
 
Чтобы инициировать транзакцию, отправьте следующие 3 типа информации:
 
1) Данные транзакции — терминал, сумма, валюта, описание, номер заказа должны быть заполнены непосредственно в ВТ.
 
2) Информация о карте — владелец карты, номер карты, срок действия:
 
- можно заполнить непосредственно в ВТ;
 
- может быть заполнено автоматически вместе с Личной информацией, если указан Идентификатор рекуррента. Если указан идентификатор рекуррентного платежа, а поле CVV пустое, используйте “Cкопировать ссылку”, чтобы отправить форму клиенту для дополнительного подтверждения. В случае, если CVV будет заполнен непосредственно в форме ВТ, транзакция будет обработана напрямую;
 
- может быть заполнено клиентом на форме.
 
3) Личная информация - имя, фамилия, город, адрес, почтовый индекс, телефон, адрес электронной почты, IP-адрес клиента, страна и т. д.:
 
- можно заполнить непосредственно в ВТ;
 
- может быть заполнено автоматически вместе с данными Карты, если указан идентификатор рекуррента;
 
- может быть заполнено автоматически, если указан идентификатор клиента.
 
 
Обработка транзакции:
 
- Используйте кнопку “Копировать ссылку” для генерации ссылки для оплаты и отправки ее клиенту. Данный сценарий актуален для транзакций, требующих предоставления клиентом дополнительной информации в форме (данные держателя карты, проверка 3DS и т. д.).
 
- Используйте кнопку “Провести” в случае, если транзакция не требует предоставления клиентом дополнительной информации (например, безакцептные списания noCVV и non3D).
 
На изображении показаны возможные варианты заполнения.
 
 

###### Предавторизация

Предавторизация — тип транзакции, при которой банк по запросу торговца блокирует указанную сумму на карточном счете клиента и не позволяет держателю карты использовать эту заблокированную сумму.
 
Важно знать, что блокировка сохраняется в течение определенного периода времени в зависимости от вида карты (обычно, максимальный срок блокировки составляет 7 дней для дебетовых карт и 28 дней для кредитных карт).
 
Чтобы инициировать транзакцию, отправьте следующие 3 типа информации:
 
1) Данные транзакции — терминал, сумма, валюта, описание, номер заказа должны быть заполнены непосредственно в ВТ.
 
2) Информация о карте — владелец карты, номер карты, срок действия:
 
- можно заполнить непосредственно в ВТ;
 
- может быть заполнено автоматически вместе с Личной информацией, если указан Идентификатор рекуррента. Если указан идентификатор рекуррентного платежа, а поле CVV пустое, используйте “Cкопировать ссылку”, чтобы отправить форму клиенту для дополнительного подтверждения. В случае, если CVV будет заполнен непосредственно в форме ВТ, транзакция будет обработана напрямую;
 
- может быть заполнено клиентом на форме.
 
3) Личная информация - имя, фамилия, город, адрес, почтовый индекс, телефон, адрес электронной почты, IP-адрес клиента, страна и т. д.:
 
- можно заполнить непосредственно в ВТ;
 
- может быть заполнено автоматически вместе с данными Карты, если указан идентификатор рекуррента;
 
- может быть заполнено автоматически, если указан идентификатор клиента.
 
 
Обработка транзакции:
 
- Используйте кнопку “Копировать ссылку” для генерации ссылки для оплаты и отправки ее клиенту. Данный сценарий актуален для транзакций, требующих предоставления клиентом дополнительной информации в форме (данные держателя карты, проверка 3DS и т. д.).
 
- Используйте кнопку “Провести” в случае, если транзакция не требует предоставления клиентом дополнительной информации (например, безакцептные списания noCVV и non3D).
 
 
На изображении показаны возможные варианты заполнения.
 
 

##### Перевод между картами

Перевод между картами — это транзакция перевода средств с карты на карту (C2C).
 
Возможны несколько сценариев:
 
1) Перевод денег с неизвестной карты на зарегистрированную карту.
 
Данные Получателя извлекаются из рекуррентного идентификатора назначения. Информация о карте получателя (владелец карты, номер карты, срок действия) и личная информация (имя, фамилия, город, адрес, почтовый индекс, мобильный номер, электронная почта, страна и другие необязательные данные клиента) будут заполнены автоматически. Для ускорения заполнения полей получателя используйте раздел “Последние использованные” рядом с полем “Рекуррентный идентификатор назначения”, в котором содержатся ранее использованные рекуррентные идентификаторы. Торговец создает специальную ссылку для отправителя при помощи кнопки “Копировать ссылку”. Отправитель получает ссылку на форму, в которой он указывает номер своей карты, дату окончания срока действия, имя держателя карты и CVV, а затем проходит проверку 3DS при необходимости.
 
2) Перевод денег с зарегистрированной карты на неизвестную карту.
 
Данные отправителя извлекаются из рекуррентного идентификатора. Разделы “Информация о карте отправителя” (владелец карты, номер карты, срок действия) и “личная информация” (имя, фамилия, город, адрес, почтовый индекс, мобильный номер, адрес электронной почты, IP-адрес клиента, страна и другие необязательные данные клиента) будут заполнены автоматически. CVV не сохраняется и должен быть запрошен у Отправителя. Для ускорения заполнения полей Отправителя используйте раздел “Последние использованные” в поле “рекуррентный идентификатор”, в котором содержатся ранее использованные рекуррентные идентификаторы. Торговец создает специальную ссылку для Отправителя с помощью кнопки “Копировать ссылку”. Отправитель получает ссылку на форму, в которой он указывает номер карты получателя, а затем проходит проверку 3DS при необходимости.
 
3) Перевод денег между известными или зарегистрированными картами.
 
Торговец заполняет данные держателя карты или использует рекуррентные идентификаторы как для Отправителя, так и для Получателя средств непосредственно в ВТ и инициирует обработку перевода кнопкой “Провести”. В этом случае транзакция должна быть обработана через non3D канал, что нетипично для переводов C2C.
 
 

> **Note:** При заполнении поля “Идентификатор клиента” разделы личной информации (Имя, Фамилия, Город, Адрес, Почтовый индекс, Мобильный номер, Электронная почта, Страна) будут заполнены автоматически.

 
На изображении показаны возможные варианты заполнения.
 
 

##### Выплаты

В разделе вывода средств возможно осуществить перевод на карту (D2C - deposit to card) и перевод на счёт, которые описаны ниже.
 

###### Перевод на карту (D2C)

Операция перевода на карту представляет собой перевод средств с банковского счета Торговца на банковскую карту Получателя.
 
Возможны несколько сценариев:
 
1) Перевод денег на известную карту.
 
Торговец заполняет данные держателя карты для получателя средств и совершает выплату непосредственно в ВТ с помощью кнопки “Провести”.
 
2) Перевод денег на зарегистрированную карту.
 
Данные Получателя извлекаются с использованием рекуррентного идентификатора назначения. Разделы “Информация о карте Получателя” (владелец карты, номер карты, срок действия) и “Личная информация” (имя, фамилия, город, адрес, почтовый индекс, мобильный номер, электронная почта, страна и другие необязательные данные клиента) будут заполнены автоматически. Для ускорения заполнения полей Получателя используйте раздел “Последние использованные” рядом с полем рекуррентного идентификатора назначения, в котором содержатся ранее использованные рекуррентные идентификаторы.
 
3) Перевод денег на неизвестную карту.
 
Торговец создает специальную ссылку для получателя средств при помощи кнопки “Копировать ссылку”. Получателю отправляется ссылка на форму, в которой он должен указать номер карты получателя.
 
 

> **Note:** При заполнении ячейки “Идентификатор клиента” разделы “Личной информации” (Имя, Фамилия, Город, Адрес, Почтовый индекс, Мобильный номер, Электронная почта, Страна) будут заполнены автоматически.

 
На изображении показаны возможные варианты заполнения.
 
 

###### Перевод на счёт

Транзакция перевода на счёт — это перечисление средств на номер счета Получателя, цифровой кошелек или другой тип счета. Торговец заполняет платежные данные для Получателя средств непосредственно в ВТ и инициирует выплату кнопкой “Провести”.
 
 

> **Note:** При заполнении поля “Идентификатор клиента” разделы личной информации (Имя, Фамилия, Город, Адрес, Почтовый индекс, Мобильный номер, Электронная почта, Страна) будут заполнены автоматически.

 
На изображении показаны возможные варианты заполнения.
