Малайзия
Интернет-банкинг, электронные кошельки и DuitNow QR в MYR
Перед тем как начать
Авторизация
Как подписывать запросы API-токеном.
Создание платежа
Базовый запрос на создание заказа, который расширяет эта страница.
Этот способ оплаты доступен не всем мерчантам. Уточните доступность у вашего менеджера.
Обзор
| Валюта | Способ оплаты |
|---|---|
MYR | Интернет-банкинг, электронные кошельки, DuitNow QR |
Плательщик перенаправляется на paymentLink и завершает оплату в интернет-банке своего банка, в приложении электронного кошелька или сканированием QR-кода DuitNow — в зависимости от выбранного способа оплаты.
amount указывается в малайзийских ринггитах, допускается до двух знаков после запятой, например 150.00.
Способы оплаты
Способ оплаты определяется двумя параметрами: банком (код из таблицы ниже) и парой channelCode::wayCode (канал и способ оплаты). Для каждого банка пара однозначно следует из таблицы, поэтому обычно достаточно указать только банк.
| Код банка | Банк / кошелёк | channelCode::wayCode |
|---|---|---|
0001 | Affin Bank | NET_BANKING::BANK_TRANSFER |
0002 | AGRO Bank | NET_BANKING::BANK_TRANSFER |
0003 | Alliance Bank (Personal) | NET_BANKING::BANK_TRANSFER |
0004 | AmBank | NET_BANKING::BANK_TRANSFER |
0005 | Bank Islam | NET_BANKING::BANK_TRANSFER |
0006 | Bank Rakyat | NET_BANKING::BANK_TRANSFER |
0007 | Bank Muamalat | NET_BANKING::BANK_TRANSFER |
0008 | Bank Simpanan Nasional | NET_BANKING::BANK_TRANSFER |
0009 | CIMB Clicks | NET_BANKING::BANK_TRANSFER |
0010 | Hong Leong Bank | NET_BANKING::BANK_TRANSFER |
0011 | HSBC Bank | NET_BANKING::BANK_TRANSFER |
0012 | Kuwait Finance House | NET_BANKING::BANK_TRANSFER |
0013 | Maybank2U | NET_BANKING::BANK_TRANSFER |
0014 | OCBC Bank | NET_BANKING::BANK_TRANSFER |
0015 | Public Bank | NET_BANKING::BANK_TRANSFER |
0016 | RHB Bank | NET_BANKING::BANK_TRANSFER |
0017 | Standard Chartered Bank | NET_BANKING::BANK_TRANSFER |
0018 | UOB Bank | NET_BANKING::BANK_TRANSFER |
0019 | Bank of China | NET_BANKING::BANK_TRANSFER |
0020 | ShopeePay | EWALLET::SHOPPEE_PAY |
0021 | Boost | EWALLET::BOOST |
0022 | Touch 'n Go eWallet | EWALLET::TNG |
0023 | GrabPay | EWALLET::GRAB_PAY |
0024 | DuitNow QR | DNQR::DNQR |
Чем отличается от обычного заказа
Заказ создаётся через стандартный эндпоинт POST /v1/orders. Базовые поля (amount, currency, successUrl, failUrl, callbackUrl и т. д.) такие же, как у обычного заказа; дополнительно к ним передаётся объект customer с данными плательщика.
| Поле | Тип | Описание |
|---|---|---|
customer | object | Данные плательщика. Набор обязательных полей приведён ниже |
Для этого способа оплаты поле externalUserId обязательно.
Поля объекта customer
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
phone | string | ✅ Да | Малайзийский номер мобильного телефона: 10–11 цифр, начинается с 01 (например, 0123456789). Код страны +60 допускается и удаляется автоматически |
email | string | ✅ Да | Email плательщика |
firstName | string | ✅ Да | Имя, должно совпадать с владельцем банковского счёта или кошелька |
lastName | string | ✅ Да | Фамилия, должна совпадать с владельцем банковского счёта или кошелька |
Передавайте реальные данные плательщика. Имя и номер телефона сверяются с фактическим плательщиком на стороне провайдера; при несовпадении платежи отклоняются.
Варианты интеграции
Банк и channelCode::wayCode задаются в настройках терминала либо передаются в запросе. Какие значения закреплены за вашим терминалом и какие нужно передавать самостоятельно, уточните у менеджера.
Если на терминале разрешено несколько значений, они работают как список допустимых: значение из запроса должно входить в этот список, а без него заказ отклоняется. Если на терминале закреплено одно значение, оно подставляется автоматически, а другое значение в запросе приводит к ошибке.
Банк и способ оплаты закреплены за терминалом, в запросе они не передаются.
Пример запроса
{
"purpose": "Payment for order #1234",
"amount": "150.00",
"currency": "MYR",
"externalId": "23456789",
"externalUserId": "437568",
"successUrl": "https://example.com/success",
"failUrl": "https://example.com/fail",
"callbackUrl": "https://example.com/webhooks/payments",
"customer": {
"lastName": "Rahman",
"firstName": "Amir",
"email": "amir.rahman@example.com",
"phone": "0123456789"
}
}Банк закреплён за терминалом, а канал и способ оплаты передаются в поле extraParams. Используйте вариант, когда на одном терминале доступно несколько способов оплаты, например разные электронные кошельки.
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
extraParams | string | ✅ Да | Канал и способ оплаты в формате channelCode::wayCode, например EWALLET::TNG |
Пример запроса
{
"purpose": "Payment for order #1234",
"amount": "150.00",
"currency": "MYR",
"externalId": "23456789",
"externalUserId": "437568",
"successUrl": "https://example.com/success",
"failUrl": "https://example.com/fail",
"callbackUrl": "https://example.com/webhooks/payments",
"extraParams": "EWALLET::TNG",
"customer": {
"lastName": "Rahman",
"firstName": "Amir",
"email": "amir.rahman@example.com",
"phone": "0123456789"
}
}Банк передаётся в поле additional.bank, канал и способ оплаты определяются по нему автоматически согласно таблице.
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
additional.bank | string | ✅ Да | Код банка из таблицы способов оплаты, например 0022 |
Пример запроса
{
"purpose": "Payment for order #1234",
"amount": "150.00",
"currency": "MYR",
"externalId": "23456789",
"externalUserId": "437568",
"successUrl": "https://example.com/success",
"failUrl": "https://example.com/fail",
"callbackUrl": "https://example.com/webhooks/payments",
"additional": {
"bank": "0022"
},
"customer": {
"lastName": "Rahman",
"firstName": "Amir",
"email": "amir.rahman@example.com",
"phone": "0123456789"
}
}Банк передаётся в поле additional.bank, а канал и способ оплаты — в поле extraParams. Значение extraParams имеет приоритет над таблицей.
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
extraParams | string | ✅ Да | Канал и способ оплаты в формате channelCode::wayCode, например EWALLET::TNG |
additional.bank | string | ✅ Да | Код банка из таблицы способов оплаты, например 0022 |
Пример запроса
{
"purpose": "Payment for order #1234",
"amount": "150.00",
"currency": "MYR",
"externalId": "23456789",
"externalUserId": "437568",
"successUrl": "https://example.com/success",
"failUrl": "https://example.com/fail",
"callbackUrl": "https://example.com/webhooks/payments",
"extraParams": "EWALLET::TNG",
"additional": {
"bank": "0022"
},
"customer": {
"lastName": "Rahman",
"firstName": "Amir",
"email": "amir.rahman@example.com",
"phone": "0123456789"
}
}Ответ
В ответе возвращается стандартный объект заказа. Заказ создаётся со статусом CREATED; перенаправьте плательщика на paymentLink, чтобы он завершил оплату.
Поля объекта заказа
Если плательщик оплатил меньше суммы заказа, заказ всё равно переходит в статус COMPLETED, а поле amount в объекте заказа обновляется до фактически полученной суммы. Сверяйте её с ожидаемой перед выполнением заказа.