Принимайте платежи UPI через WhatsApp (рекомендуется) | Документация для разработчиков
Принимайте платежи UPI через WhatsApp (рекомендуется)
Обновлено: 11 марта 2026 г
Для компаний, работающих с платежными шлюзами Billdesk или Zaakpay, рекомендуется использовать более глубокую интеграцию с этими платежными шлюзами. См. Руководство по интеграции с платежными шлюзами.
Для компаний, работающих с платежными шлюзами Razorpay, PayU или Cashfree, используйте более быстрый путь интеграции. См. раздел «Расширенные платежные ссылки».
Это рекомендуемая интеграция с UPI Intent. Используете старый метод настройки платежей? Ознакомьтесь с предыдущей документацией и запланируйте переход на динамический VPA.
Ваша компания может предоставить клиентам возможность оплачивать заказы через WhatsApp, используя все приложения UPI, установленные на их устройствах. Компании могут отправлять клиентам сообщения с подробными данными заказа (
order_details), а затем получать уведомления об обновлении статуса платежа через веб-хуки платежного шлюза.Обзор
В настоящее время клиенты просматривают каталоги компаний, добавляют товары в корзину и отправляют заказы с помощью нашего набора решений для обмена сообщениями в сфере электронной коммерции, который включает в себя сообщения для отдельных товаров, сообщения для нескольких товаров и страницы с подробной информацией о товаре.
С помощью API WhatsApp Payments компании могут отправлять клиентам счета, чтобы те могли завершить свой заказ через все приложения UPI.
Как это работает
компания должна отправить
order_details потребителю сообщение заголовок, тело, нижний колонтитули действие. В действия компания указывает всю информацию, необходимую клиенту для завершения платежа.Сообщение order_details содержит следующие поля, на которые стоит обратить внимание:
upi_intent_link — Поля, которые будут предоставлены вашим платежным шлюзом и укажут, куда будет отправлен платеж.reference_id — Этот идентификатор используется для отслеживания жизненного цикла заказа. Статусы платежей публикуются по этому ID. Это может быть идентификатор заказа или идентификатор транзакции, используемый для создания UPI-интента в платежном шлюзе.После отправки сообщения компания ожидает обновления статуса платежа или транзакции непосредственно от платежного шлюза. Получив подтверждение оплаты заказа, компания должна передать это подтверждение потребителю через интерактивное
order_statusсообщениеИнформирование пользователей о подтверждении оплаты имеет важное значение, поскольку это сообщение обновляет информацию о заказе и отображает детали заказа для потребителя, отражая подтверждение заказа от продавца. Это показано на примере в последующих разделах.
Процесс покупки в приложении
В клиентском приложении WhatsApp процесс покупки состоит из следующих этапов:
Клиент отправляет в компанию заказ с выбранными товарами, или компания определяет товары, которые клиент проявил интерес к покупке.
После получения заказа/идентификации товара, если продавец принимает другие способы оплаты, помимо UPI, такие как кредитные карты и электронные кошельки, он отправит пользователю сообщение с просьбой указать предпочтительный способ оплаты заказа.

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


Когда покупатель нажимает кнопку «Оплатить сейчас/Продолжить», ему предоставляется возможность выбрать приложение для оплаты через UPI — WhatsApp или любое другое приложение для платежей через UPI. Покупатели могут выбрать любой способ оплаты через UPI для оформления заказа.


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


После завершения платежа компания получает уведомление от платежного шлюза, и продавцу необходимо отправить клиенту информацию о статусе заказа, сообщая о ходе его выполнения. Это обновит сообщения с призывами к действию (CTA) и описание статуса заказа на экране с подробной информацией о заказе.



Этапы интеграции
Описанные ниже шаги предполагают, что компания собирается отправить клиенту сообщение с подробной информацией о заказе.
На следующей диаграмме показана типичная последовательность интеграции API WA Payments:


Шаг 1: Получение UPI-намерения от платежного шлюза
После того, как потребитель выразил заинтересованность в покупке товара с использованием метода оплаты UPI, продавцу необходимо обратиться к платежному шлюзу для создания UPI-интента. Ниже приведен пример ссылки на UPI-интент:
upi://pay?pa=abc@psp&pn=ABC&tr=877376394&
am=10.00&cu=INR&mode=00&purpose=00&mc=5399&tn=877376394
Продавец/партнер может отправить весь UPI-интент в том виде, в котором он содержится в
upi_intent_link . Эти варианты будут подробно рассмотрены ниже.Шаг 2: Соберите интерактивный объект
Для отправки
order_details предприятиям необходимо собрать интерактивный объект типа order_details , состоящий из следующих компонентов:| Объект | Описание |
|---|---|
типобъект | Необходимый. Должно быть «order_details». |
заголовокобъект | Необязательный. Содержимое заголовка отображается поверх сообщения. Если заголовок не указан, API использует изображение первого доступного продукта в качестве заголовка |
телообъект | Необходимый. Объект, содержащий тело сообщения. Объект содержит следующее поле: текстовая строкатело сообщения. Содержимое сообщения. Поддерживаются эмодзи и разметка Markdown. Максимальная длина — 1024 символа. |
нижний колонтитулобъект | Необязательный. Объект, содержащий нижнюю часть сообщения. Объект содержит следующие поля: текстовая строканижний колонтитул . Содержимое нижнего колонтитула. Поддерживаются эмодзи, разметка Markdown и ссылки. Максимальная длина — 60 символов. |
действиеобъект | Необходимый. Объект действия, который пользователь должен выполнить после прочтения сообщения. Этот объект действия содержит следующие поля: имени строкапараметров объект |
Объект параметров
| Объект | Описание |
|---|---|
reference_idнить | Необходимый. Уникальный идентификатор заказа или счета-фактуры, предоставленный компанией. Он чувствителен к регистру, не может быть пустой строкой и может содержать только английские буквы, цифры, подчеркивания, дефисы или точки, а также не должен превышать 35 символов. Идентификатор ссылки (reference_id) должен быть уникальным для каждого сообщения order_details для данного заказа. Если необходимо отправить несколько сообщений order_details для одного и того же заказа, рекомендуется включить в reference_id порядковый номер (например, «BM345A-12») для обеспечения уникальности reference_id. |
типобъект | Необходимый. Тип товаров, оплачиваемых в этом заказе. В настоящее время поддерживаются варианты цифровых товаров и физических товаров. |
бенефициарымножество | Требуется для отгружаемых физических товаров. Список получателей данного заказа. Получатель — это предполагаемый получатель физических товаров, указанных в заказе. Список содержит следующие поля: Информация о получателях не отображается пользователям, но необходима по юридическим причинам и в целях соблюдения нормативных требований. имени строкаадрес_строка1 строкаадрес_строка2 строкагородская струнасостояния строкакантри струнапочтового индекса строка |
валюта | Необходимый. Валюта для этого заказа. В настоящее время поддерживается только валюта INR. |
Общая суммаобъект | Необходимый. Объект total_amount содержит следующие поля:смещение целое число100 индийских рупий.значение целое числоЗначение total_amount.value должно быть равно order.subtotal.value + order.tax.value + order.shipping.value - order.discount.value. |
настройки оплатыобъект | Необходимый. см. в объекте «Настройки платежей» Дополнительную информацию |
заказобъект | Необходимый. см. объект заказа . |
Объект «Настройки платежей»
Вы можете передавать UPI-интент как есть или анализировать параметры UPI-интента и передавать их в JSON-структуре. Мы поддерживаем оба формата, поэтому ниже представлены два варианта объектов настроек платежей:
Объект настроек платежей для ссылки на намерение UPI
| Объект | Описание |
|---|---|
типнить | Необходимый. Необходимо установить значение "upi_intent_link". |
upi_intent_linkобъект | Необходимый. Объект, описывающий информацию о платежном счете: ссылки строка&»: pa, pn, mc, purpose и tr.Пример: upi://pay?pa=merchant_vpa&pn=Merchant_Name&mc=merchant_category_code&purpose=purpose_code&tr=pg_generated_id |
Объект заказа
| Объект | Описание |
|---|---|
статуснить | Необходимый. только допустимое значение order_details находится в состоянии ожидания.В order_status сообщении статус может быть следующим: pending, capturedили failed. |
типнить | Необязательный. Поддерживается только значение quick_pay. При передаче этого поля кнопка «Просмотреть и оплатить» скрывается, и в окне с подробной информацией о заказе отображается только кнопка «Оплатить сейчас». |
предметыобъект | Необходимый. Объект со списком товаров для данного заказа, содержащий следующие поля: retailer_id stringимени строкаизображения объектИспользование этого поля изображения ограничит массив товаров максимум 10 элементами, и его нельзя использовать с retailer_id или catalog_id.суммы со значением и смещением — см. поле «Итоговая сумма» выше.sale_amount amount objectколичество целое числоcountry_of_origin строкаcatalog_id отсутствует. Страна происхождения продукта.importer_name stringcatalog_id отсутствует. Название компании-импортера.importer_adress stringcatalog_id отсутствует. Адрес компании-импортера. |
промежуточная суммаобъект | Необходимый. Значение должно быть равно сумме order.amount.value * order.amount.quantityсм. total_amount. Для пояснения offset и value полейСледующие поля являются частью «Промежуточный итог» :смещение целое число100 Сумма индийских рупий.значение целое число |
налогобъект | Необходимый. Налоговая информация по данному заказу содержит следующие поля: смещение целое число100 Сумма индийских рупий.значение целое числоописания строка |
перевозкиобъект | Необязательный. Стоимость доставки заказа. Объект содержит следующие поля: смещение целое число100 Сумма индийских рупий.значение целое числоописания строка |
скидкаобъект | Необязательный. Скидка на заказ. Объект содержит следующие поля: смещение целое число100 Сумма индийских рупий.значение целое числоописания строкаdiscount_program_name string |
catalog_idобъект | Необязательный. Уникальный идентификатор каталога Facebook, используемого компанией. Если вы не укажете это поле, вам необходимо указать следующие поля в объекте items: country_of_origin, importer_nameи importer_address. |
срок действияобъект | Необязательный. Срок действия данного заказа. Бизнес-процесс должен определить следующие поля внутри этого объекта: с меткой времени – UTC-метка времени в секундах, когда должен истечь срок действия ордера. Минимальный порог – 300 секунд.Описание – Текстовое пояснение к сроку действия. Максимальное количество символов – 120. |
Объект изображения элемента
| Объект | Описание |
|---|---|
ссылки
строка | Обязательно.
Ссылка на изображение, которое будет показано пользователю. Должен быть файлом image/jpeg или image/png и иметь 8-битную кодировку, формат RGB или RGBA. Соответствует тем же требованиям, что и изображение в медиафайлах. |
В итоге интерактивный объект должен выглядеть примерно так для интеграции на основе каталога с использованием UPI-интента продавца:
{
"interactive": {
"type": "order_details",
"header": {
"type": "image",
"image": {
"link": "your-media-url-link"
}
},
"body": {
"text": "your-text-body-content"
},
"footer": {
"text": "your-text-footer-content"
},
"action": {
"name": "review_and_pay",
"parameters": {
"reference_id": "reference-id-value",
"type": "digital-goods",
"payment_settings": [
{
"type": "upi_intent_link",
"upi_intent_link": {
"link": "upi://pay?pa=merchant_vpa&pn=merchant%20Name&mc=mc_code&purpose=purpose_code&tr=transaction_record"
}
}
],
"currency": "INR",
"total_amount": {
"value": 21000,
"offset": 100
},
"order": {
"status": "pending",
"expiration": {
"timestamp": "utc_timestamp_in_seconds",
"description": "cancellation-explanation"
},
"items": [
{
"name": "Название продукта, например, хлеб",
"amount": {
"value": 10000,
"offset": 100
},
"quantity": 1,
"sale_amount": {
"value": 100,
"offset": 100
},
"country_of_origin": "country-of-origin",
"importer_name": "name-of-importer-business",
"importer_address": {
"address_line1": "B8/733 nand nagri",
"address_line2": "police station",
"city": "East Delhi",
"zone_code": "DL",
"postal_code": "110093",
"country_code": "IN"
}
},
{
"name": "Product name, for example bread",
"amount": {
"value": 10000,
"offset": 100
},
"quantity": 1,
"sale_amount": {
"value": 100,
"offset": 100
},
"country_of_origin": "country-of-origin",
"importer_name": "name-of-importer-business",
"importer_address": {
"address_line1": "B8/733 nand nagri",
"address_line2": "police station",
"city": "East Delhi",
"zone_code": "DL",
"postal_code": "110093",
"country_code": "IN"
}
}
],
"subtotal": {
"value": 20000,
"offset": 100
},
"tax": {
"value": 1000,
"offset": 100,
"description": "optional_text"
},
"shipping": {
"value": 1000,
"offset": 100,
"description": "optional_text"
},
"discount": {
"value": 1000,
"offset": 100,
"description": "optional_text",
"discount_program_name": "optional_text"
}
}
}
}
}
}
Шаг 3: Добавьте общие параметры сообщения
После завершения создания интерактивного объекта добавьте остальные параметры, формирующие сообщение:
recipient_type, toи type. Не забудьте установить тип как interactive.{
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "PHONE_NUMBER",
"type": "interactive",
"interactive": {
// интерактивный объект здесь
}
}
Шаг 4: Выполните POST-запрос к конечной точке Messages
Отправьте POST-запрос на
/[PHONE_NUMBER_ID]/messages, используя JSON- объект. Если ваше сообщение будет отправлено успешно, вы получите следующий ответ:{
"messaging_product": "whatsapp",
"contacts": [ {
"input": "[PHONE_NUMBER_ID]",
"wa_id": "[PHONE-NUMBER_ID]"
} ],
"messages": [ {
"id": "wamid.HBgLMTY1MDUwNzY1MjAVAgARGBI5QTNDQTVCM0Q0Q0Q2RTY3RTcA"
} ]
}
Ошибки
Условия использования платежной системы WhatsApp находятся на рассмотрении
Если вы видите следующую ошибку, примите условия использования WhatsApp Payments, используя ссылку, указанную в сообщении об ошибке, прежде чем повторять попытку.
{
"error": {
"message": "(#134011) Условия предоставления услуг WhatsApp Payments не приняты",
"type": "OAuthException",
"code": 134011,
"error_data": {
"messaging_product": "whatsapp",
"details": "Принятие условий предоставления услуг WhatsApp Payments ожидаетсядля этого бизнес-аккаунта WhatsApp.
Пожалуйста, используйте следующую ссылку, чтобы принять условия предоставления услугперед использованием бизнес-API: https://fb.me/12345"
}
}
}
Со всеми остальными ошибками, которые могут быть возвращены, и рекомендациями по их обработке см. WhatsApp Cloud API, Коды ошибок.
Шаг 5: Покупатель оплачивает заказ
Потребители могут оплатить покупку с помощью платежной системы WhatsApp или любого приложения, поддерживающего UPI и установленного на устройстве.
Шаг 6: Получайте уведомления об обновлении статуса транзакции от платежного шлюза
Компании получают обновления счета-фактуры через веб-хуки платежного шлюза при изменении статуса транзакции, инициированной пользователем. Уникальный идентификатор reference-id, передаваемый в
order_details , может использоваться для сопоставления транзакции со счетом-фактурой потребителя или интерактивным сообщением с подробной информацией о заказе.Для получения точной информации о платежных сигналах обратитесь к нашему руководству по интеграции с PG. Cashfree и CCAvenue.
Шаг 7: Обновить статус заказа
Получив сигналы о транзакции от платежного шлюза через веб-хук, компания должна обновить статус заказа, чтобы пользователь был в курсе. В настоящее время мы поддерживаем следующие значения статуса заказа:

| Ценить | Описание |
|---|---|
в ожидании | Пользователь еще не оплатил заказ успешно |
обработка | Оплата пользователем авторизована, продавец/партнер выполняет заказ, оказывает услугу и т. д. |
частично отгружено | Часть товаров из заказа уже отправлена продавцом |
отправленный | Все товары в заказе были отправлены продавцом |
завершенный | Заказ выполнен, и от пользователя или партнера/продавца дальнейших действий не требуется |
отменено | Партнер/продавец хочет отменить order_details для заказа/счета. Обновление статуса не удастся, если успешный или ожидающий по этому order_details сообщению |
Как правило, компании обновляют
статус заказа, используя либо уведомления об изменении статуса платежа в WhatsApp, либо собственные внутренние процессы. Для обновления статуса заказапартнер отправляет с указанием статуса заказа пользователю сообщение{
"recipient_type": "individual",
"to": "whatsapp-id",
"type": "interactive",
"interactive": {
"type": "order_status",
"body": {
"text": "your-text-body-content"
},
"action": {
"name": "review_order",
"parameters": {
"reference_id": "reference-id-value",
"order": {
"status": "processing | partially_shipped | shipped | completed | canceled",
"description": "optional-text"
}
}
}
}
}
В следующей таблице описаны возвращаемые значения:
| Ценить | Описание |
|---|---|
reference_id | Идентификатор, предоставленный партнером в order_details сообщении |
статус | Новый статус |
описание | Дополнительный текст для передачи информации о статусе заказа в поле «Детали заказа». Может быть полезен при отправке уведомления об отмене. Максимальное количество символов — 120. |
Продавец всегда должен отображать это сообщение о статусе заказа покупателю после получения обновлений по транзакции. Поскольку сообщение с подробной информацией о заказе и отображение экрана с подробной информацией о заказе связаны с обновлениями статуса заказа.
Вопросы безопасности
Предприятиям следует соблюдать местные требования безопасности и регулирования в Индии. Им не следует полагаться исключительно на статус транзакции, указанный в веб-хуке, и необходимо использовать API для поиска платежей, чтобы получать статусы непосредственно из WhatsApp. Предприятия должны всегда проверять и подтверждать данные в ответах API или веб-хуках для защиты от SSRF-атак.
Контрольный список для интегрированных торговых площадок
Убедитесь, что
order_status , информирующее его об обновлениях заказа после получения обновлений транзакции по заказу.Убедитесь, что продавец проверен, а контакт WABA отмечен галочкой «проверено».
Убедитесь, что WABA сопоставлен с соответствующим уровнем отправки сообщений, инициированных продавцом (1000, 10000 и 10000 сообщений в день)
Продавец должен указать контактную информацию службы поддержки клиентов на экране профиля на случай, если потребитель захочет сообщить о каких-либо проблемах.