.. meta:: :description: API Perform Transfer в сценарии Mobile Device Payneteasy: выполнение peer-to-peer перевода, инициированного из мобильного приложения, после подтверждения transfer-check. .. _api_perform_transfer: Описание: Perform transfer ################ .. role:: ex .. role:: code Введение ^^^^^^^^^^^^ | Описание: Perform transfer инициируется через запрос :code:`HTTPS POST` с использованием :ref:`URL-адресов` и :ref:`параметров`. | На этом этапе приложение Присоединяющейся Стороны отправляет данные держателя карты, устройства, сессии и другие параметры напрямую в Payneteasy для выполнения перевода средств с карты на карту. | Может применяться множество проверок и фильтров по различным критериям, таким как BIN, валюта, страна, наличие в чёрном списке и т.д. В зависимости от интеграции эти настройки могут быть конфигурируемыми. .. _api_url_perform_transfer: API URL ^^^^^^^^ .. note:: | Путь API URL не должен быть задан фиксированным значением, т.к. он может быть изменён позднее. .. list-table:: :widths: 50, 50 :header-rows: 1 :class: longtable * - Интеграционная среда - Производственная среда * - :ex:`https://sandbox.payneteasy.ru/paynet/dapi/v1/transfer/{endpointId}/{invoiceId}` - :ex:`https://gate.payneteasy.ru/paynet/dapi/v1/transfer/{endpointId}/{invoiceId}` .. _api_parameters_perform_transfer: Параметры запроса ^^^^^^^^^^^^^^^^^^ .. list-table:: :widths: 30, 45, 25 :header-rows: 1 :class: longtable * - Название параметра - Описание - Значение * - :code:`consumer` - - | ``Необходимость``: Обязательно | ``Тип``: **Object** * - :code:`consumer.device` - - | ``Необходимость``: Обязательно | ``Тип``: **Object** * - :code:`consumer.device.serialNumber` - Серийный номер устройства потребителя. - | ``Необходимость``: Обязательно | ``Тип``: String | ``Длина``: 1-50 * - :code:`consumer.email` - Адрес электронной почты клиента, если он был отправлен в исходной транзакции сопоставления карты и вместо данных держателя карты используется ссылка на карту. - | ``Необходимость``: Обязательно | ``Тип``: String | ``Длина``: 3-128 * - :code:`destinationOfFunds` - - | ``Необходимость``: Обязательно | ``Тип``: **Object** * - :code:`destinationOfFunds.card` - Следует использовать только один из этих подтипов (card, reference). - | ``Необходимость``: Обязательно | ``Тип``: **Object** * - :code:`destinationOfFunds.card.number` - Destination карта номер (PAN). - | ``Необходимость``: Обязательно | ``Тип``: String | ``Length``: 9-19 * - :code:`destinationOfFunds.reference` - Следует использовать только один из этих подтипов (card, reference). - | ``Необходимость``: Обязательно | ``Тип``: **Object** * - :code:`destinationOfFunds.reference.clientCardId` - Идентификатор ссылки на карту получателя (на стороне клиента). - | ``Необходимость``: Обязательно | ``Тип``: String | ``Длина``: 1-128 * - :code:`session` - - | ``Необходимость``: Обязательно | ``Тип``: **Object** * - :code:`session.accessToken` - Ключ токена доступа, полученный при необязательной аутентификации потребителя. - | ``Необходимость``: Обязательно | ``Тип``: String | ``Длина``: 32-128 * - :code:`session.nonce` - Значение, полученное в ответе Initiate transfer. - | ``Необходимость``: Обязательно | ``Тип``: String | ``Длина``: 32-128 * - :code:`session.signature` - Значение, полученное в ответе Initiate transfer. - | ``Необходимость``: Обязательно | ``Тип``: String | ``Длина``: 32-128 * - :code:`sourceOfFunds` - - | ``Необходимость``: Обязательно | ``Тип``: **Object** * - :code:`sourceOfFunds.card` - Следует использовать только один из этих подтипов (card, reference). - | ``Необходимость``: Обязательно | ``Тип``: **Object** * - :code:`sourceOfFunds.card.expiry` - - | ``Необходимость``: Обязательно | ``Тип``: **Object** * - :code:`sourceOfFunds.card.expiry.month` - Месяц окончания срока действия исходной карты. - | ``Необходимость``: Обязательно | ``Тип``: Integer | ``Длина``: 2 * - :code:`sourceOfFunds.card.expiry.year` - Год окончания срока действия исходной карты. - | ``Необходимость``: Обязательно | ``Тип``: Integer | ``Длина``: 4 * - :code:`sourceOfFunds.card.holder` - - | ``Необходимость``: Обязательно | ``Тип``: **Object** * - :code:`sourceOfFunds.card.holder.firstName` - Название Cardholder's first. - | ``Необходимость``: Обязательно | ``Тип``: String | ``Длина``: 1-50 * - :code:`sourceOfFunds.card.holder.lastName` - Название Cardholder's last. - | ``Необходимость``: Обязательно | ``Тип``: String | ``Длина``: 1-50 * - :code:`sourceOfFunds.card.holder.printedName` - Имя держателя карты, напечатанное на карте (имя и фамилия вместе). Может использоваться вместо firstName + lastName. - | ``Необходимость``: Обязательно | ``Тип``: String | ``Длина``: 1-50 * - :code:`sourceOfFunds.card.number` - Номер исходной карты (PAN). - | ``Необходимость``: Обязательно | ``Тип``: String | ``Length``: 9-19 * - :code:`sourceOfFunds.card.securityCode` - Код безопасности исходной карты (CVV). - | ``Необходимость``: Обязательно | ``Тип``: String | ``Длина``: 3-4 * - :code:`sourceOfFunds.reference` - Следует использовать только один из этих подтипов (card, reference). - | ``Необходимость``: Обязательно | ``Тип``: **Object** * - :code:`sourceOfFunds.reference.clientCardId` - Ссылочный идентификатор исходной карты (на стороне клиента). - | ``Необходимость``: Обязательно | ``Тип``: String | ``Длина``: 1-128 * - :code:`sourceOfFunds.reference.securityCode` - Код безопасности исходной карты (CVV). - | ``Необходимость``: Обязательно | ``Тип``: String | ``Длина``: 3-4 * - :code:`transaction` - - | ``Необходимость``: Обязательно | ``Тип``: **Object** * - :code:`transaction.amountCentis` - Сумма транзакции: 1,00 EUR = 100 центов. - | ``Необходимость``: Обязательно | ``Тип``: Integer * - :code:`transaction.currency` - Буквы верхнего регистра (alpha-код по ISO 4217). - | ``Необходимость``: Обязательно | ``Тип``: String | ``Длина``: 3 * - :code:`location` - - | ``Необходимость``: Опционально | ``Тип``: **Object** * - :code:`location.lat` - Широта указывается в диапазоне от -90.0 до +90.0 включительно. - | ``Необходимость``: Опционально | ``Тип``: Double * - :code:`location.lng` - Долгота указывается в диапазоне от -180.0 до +180.0 включительно. - | ``Необходимость``: Опционально | ``Тип``: Double * - :code:`billing` - - | ``Необходимость``: Опционально | ``Тип``: **Object** * - :code:`billing.address` - - | ``Необходимость``: Опционально | ``Тип``: **Object** * - :code:`billing.address.city` - Название города. - | ``Необходимость``: Опционально | ``Тип``: String | ``Length``: 1-100 * - :code:`billing.address.country` - Трёхбуквенный код страны ISO. - | ``Необходимость``: Опционально | ``Тип``: String | ``Длина``: 3 * - :code:`billing.address.postcodeZip` - Почтовый индекс ZIP. - | ``Необходимость``: Опционально | ``Тип``: String | ``Length``: 1-10 * - :code:`billing.address.state` - Поле «Штат» используется при наличии. Например, Лос-Анджелес находится в штате CA. - | ``Необходимость``: Опционально | ``Тип``: String | ``Длина``: 2-3 * - :code:`billing.address.street` - Поле «Улица» используется для названий районов и улиц. - | ``Необходимость``: Опционально | ``Тип``: String | ``Длина``: 1-50 * - :code:`billing.address.street2` - Поле «Улица 2» используется для длинных адресов. Обычно оно содержит номер квартиры и здания. - | ``Необходимость``: Опционально | ``Тип``: String | ``Длина``: 1-50 * - :code:`billing.phone` - Контактный номер телефона потребителя. - | ``Необходимость``: Опционально | ``Тип``: String | ``Length``: 1-20 * - :code:`consumer.birthDay` - Дата рождения потребителя в формате "ddMMyyyy". - | ``Необходимость``: Опционально | ``Тип``: String | ``Длина``: 8 * - :code:`consumer.device.imei` - Международный идентификатор мобильного оборудования устройства потребителя. - | ``Необходимость``: Опционально | ``Тип``: String | ``Длина``: 14-16 * - :code:`consumer.ipAddresses` - IP-адреса потребителя. - | ``Необходимость``: Опционально | ``Тип``: List * - :code:`consumer.ipAddresses[]` - Адрес Сonsumer's IP. - | ``Необходимость``: Опционально | ``Тип``: String | ``Длина``: 7-15 * - :code:`order` - - | ``Необходимость``: Опционально | ``Тип``: **Object** * - :code:`order.description` - Краткое описание транзакции. Может быть обязательным для некоторых банков-эквайеров. - | ``Необходимость``: Опционально | ``Тип``: String | ``Длина``: 128 * - :code:`order.siteUrl` - URL веб-сайта, связанного с транзакцией. - | ``Необходимость``: Опционально | ``Тип``: String | ``Длина``: 128 * - :code:`order.purpose` - Может использоваться для более эффективного контроля транзакции или дополнительных проверок. - | ``Необходимость``: Опционально | ``Тип``: String | ``Длина``: 128 Параметры успешного ответа ^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. list-table:: :widths: 30, 45, 25 :header-rows: 1 :class: longtable * - Название параметра - Описание - Значение * - :code:`invoiceId` - Идентификатор транзакции transfer. - | ``Тип``: String * - :code:`session` - - | ``Тип``: **Object** * - :code:`session.token` - Token сессии транзакции transfer. - | ``Тип``: String Параметры неуспешного ответа ^^^^^^^^^^^^^^^^^^^^^^^^ .. list-table:: :widths: 30, 45, 25 :header-rows: 1 :class: longtable * - Название параметра - Описание - Значение * - :code:`error` - - | ``Тип``: **Object** * - :code:`error.cause` - Причина ошибки. Возможные значения: ``INVALID_REQUEST``, ``INVALID_CONFIGURATION``, ``INTERNAL_ERROR``, ``PROCESSING_FAILED``. - | ``Тип``: Enum * - :code:`error.code` - Уникальный код ошибки. - | ``Тип``: String * - :code:`error.message` - Описание ошибки. - | ``Тип``: String * - :code:`invoiceId` - Идентификатор транзакции transfer. - | ``Тип``: String Пример запроса ^^^^^^^^^^^^^^^ .. code-block:: 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" } } Пример успешного ответа ^^^^^^^^^^^^^^^^^^^^^^^^ .. code-block:: json { "invoiceId": "string", "session": { "token": "string" } } Пример неуспешного ответа ^^^^^^^^^^^^^^^^^^^^^ .. code-block:: json { "error": { "cause": "enum", "code": "string", "message": "string" }, "invoiceId": "string" } Конструктор запросов ^^^^^^^^^^^^^^^ | Для интеграции используйте :ref:`test_cards` для генерации случайных номеров карт. | .. raw:: html :file: ../../_static/examples/dapi_Perform_Transfer_Debug.html