QRIS

Обзор

Введение

QRIS — метод, позволяющий проводить платежи в индонезийских рупиях с использованием банковских счетов и электронных кошельков в Индонезии. Для работы с этим методом могут использоваться различные приложения, поддерживающие работу со стандартом QRIS (Quick Response Code Indonesian Standard). Для этого метода в платёжной платформе ecommpay поддерживаются оплаты.

В этой статье представлена информация о работе с методом QRIS: обзорный раздел с общими сведениями и последующие разделы с информацией о действиях, необходимых со стороны мерчанта для решения разных задач.

Характеристика

Тип платёжного метода платежи с помощью QR-кодов
Платёжные инструменты
  • банковские счета
  • электронные кошельки
Регионы использования ID
Валюты платежей IDR
Конвертация валют на стороне ecommpay
Разовые оплаты +
Повторяемые оплаты
Полные возвраты
Частичные возвраты
Выплаты
Опротестования +
Особенности при использовании валюты IDR не поддерживается обработка платежей, для которых сумма платежа указана с дробной частью. В запросе на оплату с указанием валюты IDR сумму оплаты необходимо округлять до целых чисел. Если в запросе указывается иная валюта, сумма платежа конвертируется на стороне ecommpay в эквивалентную сумму в валюте IDR и также округляется до целых чисел. Информацию об особенностях округления суммы следует уточнять у специалистов технической поддержки ecommpay.
Организация и стоимость подключения по согласованию с курирующим менеджером ecommpay

Схема работы

В проведении отдельного платежа с использованием метода QRIS задействуются веб-сервис мерчанта, один из интерфейсов и платёжная платформа ecommpay, а также технические средства сервиса провайдера.



Основные операции

Для проведения платежей и выполнения операций с использованием метода QRIS могут применяться различные интерфейсы платёжной платформы. Так, оплаты могут проводиться через Payment Page, Gate и Dashboard (с применением платёжных ссылок). При этом, независимо от используемых интерфейсов, для этого метода характерны следующие ограничения.

При работе с методом QRIS, независимо от используемых интерфейсов, актуальны следующие ограничения.

Суммы, IDR
минимум максимум
Оплаты 10 000,00 2 000 000,00

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

Проведение оплат с использованием метода QRIS осуществляется с отображением платёжной инструкции.

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

Общие сценарии проведения оплат можно представить следующим образом.

Оплаты через Payment Page

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

Для проведения оплаты через Payment Page с использованием метода QRIS со стороны веб-сервиса необходимо отправить запрос, содержащий требуемые параметры и подпись, на рабочий URL ecommpay и принять оповещение о результате. Полная схема проведения оплаты выглядит следующим образом.



Рис. 9. Проведение оплаты через Payment Page. Описание шагов
  1. Пользователь на стороне веб-сервиса инициирует оплату.
  2. От веб-сервиса на заданный URL ecommpay передаётся запрос на проведение оплаты через Payment Page.
  3. Запрос на проведение оплаты поступает в платёжную платформу.
  4. В платёжной платформе выполняется приём запроса с проверкой наличия обязательных параметров и корректной подписи.
  5. Осуществляется подготовка Payment Page согласно параметрам проекта и вызова.
  6. Пользователю отображается платёжная форма.
  7. Пользователь выбирает для оплаты метод QRIS.
  8. В платёжную платформу передаётся запрос на проведение оплаты с использованием метода QRIS.
  9. В платёжной платформе обеспечиваются обработка полученного запроса.
  10. Данные для отображения платёжной инструкции пользователю передаются к Payment Page.
  11. Пользователю отображается платёжная инструкция.
  12. Пользователь выполняет необходимые действия для оплаты согласно инструкции.
  13. В сервисе провайдера выполняется обработка платежа.
  14. От сервиса провайдера к платёжной платформе направляется информация о результате оплаты.
  15. От платёжной платформы к веб-сервису направляется оповещение о результате оплаты.
  16. От платёжной платформы к Payment Page направляется информация о результате оплаты.
  17. Информация о результате оплаты отображается пользователю на Payment Page.

Информация о форматах запросов и оповещений, используемых для проведения оплат методом QRIS через Payment Page, приведена далее в этом разделе; общая информация о работе с Payment Page API — в отдельной статье Организация взаимодействия.

Формат запросов

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

  1. Должен использоваться базовый минимум параметров, обязательный для любого платежа:
    • project_id — идентификатор проекта, полученный от ecommpay при интеграции.
    • payment_id — идентификатор платежа, уникальный в рамках проекта.
    • payment_currency — код валюты платежа в формате ISO-4217 alpha-3.
    • payment_amount — сумма платежа в дробных единицах валюты. При использовании валюты IDR в запросе на оплату сумму платежа необходимо округлять до целых чисел. Если в запросе указывается иная валюта, то сумма платежа конвертируется на стороне ecommpay в эквивалентную сумму в валюте IDR и также округляется до целых чисел. Информацию об особенностях округления суммы следует уточнять у специалистов технической поддержки ecommpay.
    • customer_id — идентификатор пользователя в рамках проекта.
  2. Должен использоваться базовый минимум параметров: project_id, payment_id, payment_currency, payment_amount, customer_id.
  3. Дополнительно может потребоваться указывать имя и фамилию пользователя в параметрах customer_first_name и customer_last_name. Необходимость использования этих параметров следует уточнять у курирующего менеджера ecommpay.
  4. Для предварительного выбора метода QRIS необходимо указывать код платёжного метода indonesia-qr в параметре force_payment_method.
  5. Дополнительно могут использоваться любые другие параметры из числа доступных для работы с Payment Page (подробнее).
  6. После указания всех целевых параметров необходимо составлять подпись (подробнее).

Таким образом, корректный запрос на открытие платёжной формы с применением метода QRIS должен содержать идентификатор проекта, базовые сведения о платеже (идентификатор, сумму и код валюты), информацию о пользователе и подпись.

{
   "project_id": 120,
   "payment_id": "580",
   "payment_amount": 1000000,
   "payment_currency": "IDR",
   "customer_id": "customer1",
   "customer_first_name": "John",
   "customer_first_name": "Doe",
   "signature": "kUi2x9dKHAVNU0FYldOcZzUCwX6R\/ekpZhkIQg=="
}
Рис. 10. Пример достаточного набора данных для запроса на оплату
{
   "project_id": 120,
   "payment_id": "580",
   "payment_amount": 1000000,
   "payment_currency": "IDR",
   "customer_id": "customer1",
   "customer_first_name": "John",
   "customer_first_name": "Doe",
   "signature": "kUi2x9dKHAVNU0FYldOcZzUCwX6R\/ekpZhkIQg=="
}

Формат оповещений

Для оповещений о результатах оплат с применением метода QRIS используется типовой формат, описание которого представлено в разделе Оповещения.

В следующем примере оповещение свидетельствует о том, что в рамках проекта 1234 была проведена оплата в размере 100 000,00 IDR.

Рис. 11. Пример данных из оповещения о проведении оплаты
{
        "project_id": 1234,
        "payment": {
            "id": "ABC12345",
            "type": "purchase",
            "status": "success",
            "date": "2021-06-03T09:18:49+0000",
            "method": "indonesia-qr",
            "sum": {
                "amount": 10000000,
                "currency": "IDR"
            },
            "description": ""
        },
        "customer": {
            "id": "customer1"
        },
        "operation": {
            "id": 66524010061681,
            "type": "sale",
            "status": "success",
            "date": "2021-06-03T09:18:49+0000",
            "created_date": "2021-06-03T09:04:56+0000",
            "request_id": "312be99ad68be48100c724ce274066525",
            "sum_initial": {
                "amount": 10000000,
                "currency": "IDR"
            },
            "sum_converted": {
                "amount": 10000000,
                "currency": "IDR"
            },
            "code": "0",
            "message": "Success",
            "provider": {
                "id": 5861,
                "payment_id": "32376801d1f6b6b6406...a02b4e45c",
                "auth_code": "",
                "date": "2021-06-03T09:18:39+0000"
            }
        },
        "signature": "LaWvR4EPqYRvsuU7Hl0H09l6uYR0trjaJxLAhCBsxA=="
    }
}

В следующем примере оповещение свидетельствует об отклонённой оплате.

Рис. 12. Пример данных из оповещения об отклонении оплаты
{
            "id": "7890",
            "type": "purchase",
            "status": "decline",
            "date": "2021-06-04T06:19:47+0000",
            "method": "indonesia-qr",
            "sum": {
                "amount": 1000000,
                "currency": "IDR"
            },
            "description": ""
        },
        "customer": {
            "id": "1"
        },
        "operation": {
            "id": 79864010068961,
            "type": "sale",
            "status": "decline",
            "date": "2021-06-04T06:19:47+0000",
            "created_date": "2021-06-03T06:19:31+0000",
            "request_id": "1504560d8c125cb12199c320ac41c...079865",
            "sum_initial": {
                "amount": 1000000,
                "currency": "IDR"
            },
            "sum_converted": {
                "amount": 1000000,
                "currency": "IDR"
            },
            "code": "20000",
            "message": "General decline",
            "provider": {
                "id": 5861,
                "payment_id": "3237eceb715dc5ac46eb80edbde6fe2e24d4",
                "auth_code": ""
            }
        },
        "signature": "/NAM67hU7V7/tOQHaWOIRg68e8jhN6GIyC5idy9hiQ=="
    }

Дополнительные материалы

Для организации работы с оплатами через Payment Page также могут быть полезны следующие материалы:

Оплаты через Gate

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

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

  1. Отправить запрос, содержащий требуемые параметры и подпись, на рабочий URL ecommpay.
  2. Принять промежуточное оповещение от платёжной платформы и отобразить платёжную инструкцию пользователю.
  3. Принять итоговое оповещение от платёжной платформы.

Полная схема проведения оплаты выглядит следующим образом.



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

Информация о форматах запросов и оповещений, используемых для проведения оплат методом QRIS через Gate, приведена далее в этом разделе; общая информация о работе с Gate API — в отдельной статье Организация взаимодействия.

Формат запросов

При работе с запросами на оплаты с применением метода QRIS необходимо учитывать следующее:

  1. Для инициирования каждой оплаты должен использоваться отдельный POST-запрос к конечной точке /v2/payment/banks/indonesia-qr/sale. Эта точка относится к группе /v2/payment/banks/{payment_method}/sale.
  2. В каждом запросе должны использоваться следующие объекты и параметры:
    • general — объект, содержащий основные идентификационные сведения запроса:
      • project_id — идентификатор проекта, полученный от ecommpay при интеграции.
      • payment_id — идентификатор платежа, уникальный в рамках проекта.
      • signature — подпись запроса, составленная после указания всех целевых параметров (подробнее — в разделе Работа с подписью) (подробнее).
    • payment — объект, содержащий сведения о платеже:
      • amount — сумма платежа в дробных единицах валюты; При использовании валюты IDR в запросе на оплату сумму платежа необходимо округлять до целых чисел. Если в запросе указывается иная валюта, то сумма платежа конвертируется на стороне ecommpay в эквивалентную сумму в валюте IDR и также округляется до целых чисел. Информацию об особенностях округления суммы следует уточнять у специалистов технической поддержки ecommpay.
      • currency — код валюты платежа в формате ISO-4217 alpha-3.
    • customer — объект, содержащий сведения о пользователе:
      • id — идентификатор пользователя, уникальный в рамках проекта.
      • ip_address — IP-адрес пользователя, актуальный для инициируемого платежа.
  3. Дополнительно может потребоваться указывать следующие объекты и параметры:
    • customer — объект, содержащий сведения о пользователе:
      • first_name — имя пользователя,
      • last_name — фамилия пользователя;
    • return_url — объект, содержащий URL для перенаправления пользователя в веб-сервис:
      • return — URL для перенаправления пользователя любом шаге оплаты.

    Необходимость использования этих параметров следует уточнять у курирующего менеджера ecommpay.

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

Таким образом, корректный запрос на оплату с применением метода QRIS должен содержать идентификатор проекта, базовые сведения о платеже (идентификатор, сумму и код валюты), информацию о пользователе, URL для перенаправления, а также подпись.

{
    "general": {
      "project_id": 1234567,
      "payment_id": "12278b5d662764c9506...c5c35",
      "signature": "GINgwlggTvpF9AnkT8rUUVC7JChDjj40xI5vOA7w=="
    },
    "customer": {
      "id": "customer1",
      "ip_address": "192.0.2.0"
      "first_name": "John",
      "last_name": "Doe"
    },
    "payment": {
      "amount": 1000000,
      "currency": "IDR"
    },
    "return_url": {
      "return": "https://example.com/return"
    }
}
Рис. 14. Пример достаточного набора данных для запроса на оплату
{
    "general": {
      "project_id": 1234567,
      "payment_id": "12278b5d662764c9506...c5c35",
      "signature": "GINgwlggTvpF9AnkT8rUUVC7JChDjj40xI5vOA7w=="
    },
    "customer": {
      "id": "customer1",
      "ip_address": "192.0.2.0"
      "first_name": "John",
      "last_name": "Doe"
    },
    "payment": {
      "amount": 1000000,
      "currency": "IDR"
    },
    "return_url": {
      "return": "https://example.com/return"
    }
}

Форматы данных для отображения платёжной инструкции

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

Массив display_data содержит следующие параметры:

  • type — тип передаваемых данных (в значении всегда передаётся qr_data);
  • title — название передаваемых данных, которые необходимо отобразить пользователю (в значении всегда передаётся qr_code_data);
  • data — строка с закодированным изображением QR-кода.

Далее приведён фрагмент оповещения, содержащего данные для отображения пользователю.

"display_data": [
            {
                "type": "qr_data",
                "title": "qr_code_data",
                "data": "00020101021226530012...40014ID.CO.QRIS.WWW0215ID20200311332370303URE5204323753033605405100005502015802ID5911TARGETWIRES6007jakarta61059999962470703A015036323777b2dadc0aa04fdb82a0cc2349be345c63048782"
            }
]

Формат итоговых оповещений

Для оповещений о результатах оплат с применением метода QRIS используется типовой формат, описание которого представлено в разделе Оповещения.

В следующем примере оповещение свидетельствует о том, что в рамках проекта 1234 была проведена оплата в размере 100 000,00 IDR.

Рис. 15. Пример данных из оповещения о проведении оплаты
{
        "project_id": 1234,
        "payment": {
            "id": "ABC12345",
            "type": "purchase",
            "status": "success",
            "date": "2021-06-03T09:18:49+0000",
            "method": "indonesia-qr",
            "sum": {
                "amount": 10000000,
                "currency": "IDR"
            },
            "description": ""
        },
        "customer": {
            "id": "customer1"
        },
        "operation": {
            "id": 66524010061681,
            "type": "sale",
            "status": "success",
            "date": "2021-06-03T09:18:49+0000",
            "created_date": "2021-06-03T09:04:56+0000",
            "request_id": "312be99ad68be48100c724ce274e...066525",
            "sum_initial": {
                "amount": 10000000,
                "currency": "IDR"
            },
            "sum_converted": {
                "amount": 10000000,
                "currency": "IDR"
            },
            "code": "0",
            "message": "Success",
            "provider": {
                "id": 5861,
                "payment_id": "32376801d1f6b6b6406...a02b4e45c",
                "auth_code": "",
                "date": "2021-06-03T09:18:39+0000"
            }
        },
        "signature": "LaWvR4EPqYRvsuU7Hl0H09l6uYR0dCIvFYSK...eiLtrjaJxLAhCBsxA=="
    }
}

В следующем примере оповещение свидетельствует об отклонённой оплате.

Рис. 16. Пример данных из оповещения об отклонении оплаты
{
            "id": "7890",
            "type": "purchase",
            "status": "decline",
            "date": "2021-06-04T06:19:47+0000",
            "method": "indonesia-qr",
            "sum": {
                "amount": 1000000,
                "currency": "IDR"
            },
            "description": ""
        },
        "customer": {
            "id": "1"
        },
        "operation": {
            "id": 79864010068961,
            "type": "sale",
            "status": "decline",
            "date": "2021-06-04T06:19:47+0000",
            "created_date": "2021-06-03T06:19:31+0000",
            "request_id": "1504560d8c125cb12199c320ac41c...079865",
            "sum_initial": {
                "amount": 1000000,
                "currency": "IDR"
            },
            "sum_converted": {
                "amount": 1000000,
                "currency": "IDR"
            },
            "code": "20000",
            "message": "General decline",
            "provider": {
                "id": 5861,
                "payment_id": "3237eceb715dc5ac46eb80edbde6fe2e24d4",
                "auth_code": ""
            }
        },
        "signature": "/NAM67hU7V7/tOQHaWOIRg68e8jhN6GIyC5idy9hiQ=="
    }

Дополнительные материалы

Для организации работы с оплатами через Gate также могут быть полезны следующие материалы:

Анализ результатов проведения платежей

Для анализа информации о платежах и операциях, как в отдельности по методу QRIS, так и в совокупности с другими методами, можно использовать:

  • инструментарий интерфейса Dashboard, с различными реестрами и аналитическими панелями;,
  • отчёты в формате CSV, выгружаемые (как разово, так и периодически) через раздел Отчёты интерфейса Dashboard;,
  • данные в формате JSON, получаемые по программным запросам через интерфейс Data API.

С вопросами по анализу информации можно обращаться к разделам документации (Dashboard и Использование Data API) и специалистам ecommpay.