Оплата в одну стадию

Общая информация

В платежной платформе оплата в одну стадию проводится, как описано в разделе Схема и статусы разовой оплаты в одну стадию.

При проведении разовой оплаты в одну стадию реквизиты платежного инструмента могут указываться в одной из следующих форм:

  • Реквизиты (в явном виде) Это базовая форма, при использовании которой необходимо получить реквизиты у пользователя, а затем передать эти реквизиты в платежную платформу в запросе на платеж.
  • Идентификатор реквизитов В этом случае со стороны веб-сервиса передается идентификатор, однозначно ассоциированный с реквизитами платежного инструмента на стороне платежной платформы (подробнее — в разделе Сохранение платежных данных).
  • Токен реквизитов В отличие от базового способа, вместо полных реквизитов передается токен. Для использования этого способа необходимо провести первоначальный платеж. Подробная информация об использовании токена представлена в разделе Использование токенов.

Схема проведения

Для проведения оплаты в одну стадию через Gate со стороны веб-сервиса необходимо:

  1. Отправить запрос в конечную точку /v2/payment/{название метода}/sale[/форма указания реквизитов платежного инструмента].
  2. При необходимости выполнить вспомогательные процедуры, инициированные платежной платформой. Это может быть один из вариантов аутентификации пользователя или дополнение информации о платеже.
    • Аутентификация 3-D Secure обеспечивает безопасность оплаты с использованием платежных карт через Интернет. Подробнее об этой процедуре см. Аутентификация по протоколу 3‑D Secure 1.
    • Аутентификация по инициативе мерчанта обеспечивает дополнительную безопасность оплаты с использованием платежных карт. Подробнее об этой процедуре см. Аутентификация по инициативе мерчанта.
    • Дополнение информации о платеже используется, когда по запросу одной из сторон, участвующих в проведении платежа, требуется предоставить дополнительную информацию. Подробная информация о процедуре представлена в разделе Дополнение информации о платеже.
  3. Принять от платежной платформы оповещение о результате оплаты.
  4. При необходимости для проведенных оплат использовать дополнительную возможность — возврат средств по проведенной оплате. Возврат используется в ситуациях, когда в рамках проведенной оплаты необходимо частично или полностью вернуть средства пользователю. Подробная информация о возвратах представлена в разделе Возврат средств после оплаты.

Схема проведения оплаты в одну стадию в базовом случае — без выполнения дополнительных процедур — представлена далее.

Рис.: Оплата в одну стадию в базовом случае

  1. Пользователь на стороне веб-сервиса инициирует оплату.
  2. От веб-сервиса на заданный URL Rocketpay передается запрос на проведение оплаты в одну стадию.
  3. Запрос на проведение оплаты в одну стадию поступает в платежную платформу.
  4. В платежной платформе выполняется прием запроса с проверкой его корректности.
  5. Платежная платформа направляет в веб-сервис ответ с информацией о получении запроса и его корректности.
  6. В платежной платформе выполняется обработка этого запроса, его преобразование и отправка в платежную систему в соответствии с протоколом взаимодействия с ней.
  7. В платежной системе выполняется дальнейшая обработка запроса и его отправка эмитенту.
  8. На стороне эмитента выполняется обработка платежа и списание средств пользователя.
  9. От эмитента к платежной системе направляется уведомление о результате оплаты.
  10. От платежной системы к платежной платформе направляется уведомление о результате оплаты.
  11. Платежная платформа направляет в веб-сервис оповещение о результате оплаты.
  12. От веб-сервиса пользователю направляется результат оплаты.

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

Структура запроса

В этом разделе описана структура запросов для оплаты в одну стадию с использованием платежных карт. Далее описаны требования к запросам:

  1. POST-запрос должен отправляться в одну из следующих конечных точек:
  2. В запросе должны использоваться следующие объекты и параметры:
    • general — объект, содержащий основные идентификационные сведения запроса:
      • project_id — идентификатор проекта, полученный от Rocketpay при интеграции;
      • payment_id — идентификатор платежа, уникальный в рамках проекта мерчанта;
      • signature — подпись запроса, составленная после указания всех параметров запроса (подробнее см. Подписывание и проверка подписи);
    • customer — объект, содержащий сведения о пользователе:
      • ip_address — IP-адрес пользователя;
      • id — идентификатор пользователя в проекте мерчанта;
    • payment — объект, содержащий сведения о платеже:
      • amount — сумма оплаты в дробных единицах валюты без десятичной точки и пробелов за исключением случаев, когда у валюты нет дробной части. Если у валюты нет дробных единиц (то есть количество разрядов дробных единиц равно нулю), то в этом параметре нужно указывать сумму в основных единицах валюты. Подробнее о разрядах дробных единиц у валют см. Коды валют;
      • currency — валюта платежа в формате ISO-4217 alpha-3.
  3. В запросе должны содержаться сведения о платежной карте пользователя:
    • при передаче реквизитов карты в явном виде нужно передать следующие данные в объекте card:
      • pan — номер карты,
      • year — год окончания срока действия карты,
      • month — месяц окончания срока действия карты,
      • card_holder — имя держателя карты (в соответствии с указанным на карте),
      • cvv — код проверки подлинности карты (в соответствии с указанным на карте), если такой код у используемой карты есть.

        У некоторых карт код проверки подлинности (CVV) отсутствует, в таких случаях в платежах с применением таких карт параметр cvv не передается. Подробнее о наличии CVV у карт и обязательности параметра cvv узнавайте у своего курирующего менеджера Rocketpay.

    • при передаче идентификатора нужно передать идентификатор, связанный с реквизитами карты в платежной платформе, и код проверки подлинности карты в параметрах saved_account_id и cvv, если такой код поддерживается для используемой карты.

      У некоторых карт код проверки подлинности (CVV) отсутствует, в таких случаях в платежах с применением таких карт параметр cvv не передается. Подробнее о наличии CVV у карт и обязательности параметра cvv узнавайте у своего курирующего менеджера Rocketpay.

    • при передаче токена нужно передать токен и код проверки подлинности карты в параметрах token и cvv, если такой код у используемой карты есть.

      У некоторых карт код проверки подлинности (CVV) отсутствует, в таких случаях в платежах с применением таких карт параметр cvv не передается. Подробнее о наличии CVV у карт и обязательности параметра cvv узнавайте у своего курирующего менеджера Rocketpay.

  4. В запросе должен содержаться объект return_url с адресами для перенаправления пользователя в веб-сервис:
    • success — URL-адрес, на который перенаправляется пользователь в случае успешного завершения платежа;
    • decline — URL-адрес, на который перенаправляется пользователь в случае отклонения платежа;
    • return — URL-адрес, на который перенаправляется пользователь до завершения платежа независимо от его исхода. Этот же адрес используется, если не заданы параметры success и decline.
  5. При наличии особых региональных требований, а также от требований провайдеров и платежных систем, в запросе может понадобиться указать дополнительные сведения о пользователе:
    • first_name — имя пользователя;
    • last_name — фамилия;
    • middle_name — отчество или среднее имя;
    • day_of_birth — дата рождения;
    • phone — номер телефона с кодом страны;
    • email — адрес электронной почты;
    • zip — почтовый индекс адреса проживания;
    • address — адрес проживания (улица, номер дома);
    • city — город проживания (или иной населенный пункт);
    • district — округ (район, область и т. п.) проживания;
    • state — регион проживания (штат, графство, кантон и т. п.);
    • avs_post_code — почтовый индекс, зафиксированный эмитентом как актуальный для пользователя;
    • avs_street_address — улица и номер дома, зафиксированные эмитентом как актуальные для пользователя.

    За информацией о параметрах, требуемых в каждом конкретном случае, обращайтесь к своему курирующему менеджеру Rocketpay. Если вы не передадите в запросе необходимые сведения, вам потребуется выполнить процедуру дополнения информации о платеже.

  6. Дополнительно могут использоваться любые другие параметры, указанные в спецификации.

Вот пример запроса:

{
  "general": {
      "project_id": 42,
      "payment_id": "456789",
      "signature": "v7KNMpfogAxwRIL9tVftZ1ZZ5D/aZAeb0VMdeR+CqGrNxYyilUwSm...=="
  },
    "customer": {
      "ip_address": "248.121.176.220",
      "id": "customer_12"
  },
    "payment": {
      "amount": 400000,
      "currency": "USD"
  },
    "return_url": {
        "success": "http://example.com/return",
        "decline": "http://example.com/decline",
        "return": "http://example.com/return",
  },
//при передаче реквизитов карты в явном виде:
    "card": {
      "pan": "4242424242424243",
      "year": 2025,
      "month": 8,
      "card_holder": "JOHN SMITH",
      "cvv": "123"
  }
//при передаче идентификатора ранее сохраненной платежной карты:
    "saved_account_id": 2345678,
    "cvv": "123"

//при передаче токена ранее сохраненной платежной карты:
    "token": "f365bb1729f9b72fd9c09703a751c979f3becc679f29c3e35c91d18070d15654",
    "cvv": "123"   
}

Данные для перенаправления пользователей

Некоторые платежные системы, обрабатывающие платеж, для завершения оплаты требуют перенаправить пользователя из веб-сервиса на сайт платежной системы. В таком случае вам необходимо принять оповещение от платежной платформы Rocketpay, содержащее объект redirect_data со следующими параметрами:
  • url — ссылка для перенаправления пользователя,
  • body — данные для отправки запроса (может быть пустым).
  • method — метод отправки запроса.

Такие оповещения платежная платформа отправляет на URL-адрес, указанный в параметрах вашего проекта. А платеж переводится в статус awaiting redirect result до момента завершения оплаты пользователем.

Если параметр body не содержит данных, он представлен в оповещении как пустой массив, в противном случае он присутствует в оповещении как JSON-объект с данными. Далее приведены примеры представления body в оповещении.

Рис.: Пример объекта redirect_data с данными для перенаправления: пустой массив body

"redirect_data": {
              "body": [],    // Пустой массив 
              "method": "POST",
              "url": "https://example.com/redirect/absd1234",
}

Рис.: Пример объекта redirect_data с данными для перенаправления: объект body с данными

"redirect_data": {
            "body": {       // Объект с данными
                 "reference": "2000016"                 
              },
              "method": "POST",
              "url": "https://example.com/redirect/absd1234",
}

Структура оповещения

Для оповещения (callback) о результате оплаты в одну стадию с использованием платежных карт используется стандартая структура, описание которой представлено в разделе Оповещения (callbacks) в Gate.

В следующем примере содержится информация о том, что в проекте 42 для пользователя customer_12 была проведена оплата в одну стадию в размере 4000,00 USD с платежной карты №424242******4243.

Рис.: Пример данных о проведенной оплате в одну стадию

{
    "account": {
        "number": "424242******4243",
        "token": "f365bb1729f9b72fd9c09703a751c979f3becc679f29c3e35c91d18070d15654",
        "type": "visa",
        "card_holder": "JOHN SMITH",
        "id": 45678,
        "expiry_month": "08",
        "expiry_year": "2025"
    },
    "customer": {
        "id": "customer_12",
        "phone": "44991234567"
    },
    "payment": {
        "date": "2019-01-11T13:02:42+0000",
        "id": "456789",
        "method": "card",
        "status": "success",
        "sum": {
            "amount": 400000,
            "currency": "USD"
        },
        "type": "purchase",
        "description": ""
    },
    "project_id": 42,
    "operation": {
        "id": 969000002636,
        "type": "sale",
        "status": "success",
        "date": "2019-01-11T13:02:42+0000",
        "created_date": "2019-01-11T13:01:45+0000",
        "request_id": "c6eed1eb14c629b4ef20b3b8086d...d04132c34b0088cbc0be4667c",
        "sum_initial": {
            "amount": 400000,
            "currency": "USD"
        },
        "sum_converted": {
            "amount": 400000,
            "currency": "USD"
        },
        "provider": {
            "id": 408,
            "payment_id": "330157196",
            "date": "2019-01-11T13:02:32+0000",
            "auth_code": "",
            "endpoint_id": "612266625"
        },
        "code": "0",
        "message": "Success",
        "eci": "07"
    },
    "signature": "v7KNMpfogAxwRIL9tVftZ1ZZ5D/aZAeb0VMdeR+CqGrNxYyilUwSm...=="
}

Далее представлен пример данных из оповещения с информацией об отказе в проведении оплаты. Оплата отклонена из-за ввода некорректных данных карты.

Рис.: Пример данных об отказе в проведении оплаты в одну стадию

{
    "project_id": 42,
    "payment": {
        "id": "456789",
        "type": "purchase",
        "status": "decline",
        "date": "2019-01-11T14:11:33+0000",
        "method": "card",
        "sum": {
            "amount": 400000,
            "currency": "USD"
        },
        "description": ""
    },
    "account": {
        "number": "424242******4243",
        "type": "visa",
        "card_holder": "JOHN SMITH",
        "expiry_month": "08",
        "expiry_year": "2025"
    },
    "customer": {
        "id": "customer_12",
        "phone": "44991234567"
    },
    "operation": {
        "id": 13300000004505,
        "type": "sale",
        "status": "decline",
        "date": "2019-01-11T14:11:33+0000",
        "created_date": "2019-01-11T14:11:00+0000",
        "request_id": "c6eed1eb14c629b4ef20b3b8086d...d04132c34b0088cbc0be4667c",
        "sum_initial": {
            "amount": 400000,
            "currency": "USD"
        },
        "sum_converted": {
            "amount": 400000,
            "currency": "USD"
        },
        "provider": {
            "id": 12,
            "payment_id": "48219213050",
            "auth_code": "",
            "endpoint_id": 12
        },
        "code": "10102",
        "message": "Incorrect data entered",
        "eci": "05"
    },
    "signature": "v7KNMpfogAxwRIL9tVftZ1ZZ5D/aZAeb0VMdeR+CqGrNxYyilUwSm...=="
}