Принимайте платежи 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=87
7376394
Продавец/партнер может отправить весь 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_origincatalog_id отсутствует. Страна происхождения продукта.importer_name stringcatalog_id отсутствует. Название компании-импортера.importer_adress stringcatalog_id отсутствует. Адрес компании-импортера. |
промежуточная суммаобъект | Необходимый. Значение должно быть равно сумме order.amount.value * order.amount.quantity Для пояснения полей offset и value см. total_amount.Следующие поля являются частью «Промежуточный итог» :смещение целое число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=m c_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.HBgLMTY1MDUwNzY1MjAVAgARGBI5QTNDQTVCM0Q0Q0Q 2RTY3RTcA" } ]
}
Ошибки
Условия использования платежной системы 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/1 2345" }
}
}
Со всеми остальными ошибками, которые могут быть возвращены, и рекомендациями по их обработке см. 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 | comple ted | canceled" , "description"
: "optional-text" }
}
}
} }
В следующей таблице описаны возвращаемые значения:
| Ценить | Описание |
|---|---|
reference_id | Идентификатор, предоставленный партнером в сообщении order_details |
статус | Новый статус |
описание | Дополнительный текст для передачи информации о статусе заказа в поле «Детали заказа» . Может быть полезен при отправке уведомления об отмене. Максимальное количество символов — 120. |
Продавец всегда должен отображать это сообщение о статусе заказа покупателю после получения обновлений по транзакции. Поскольку сообщение с подробной информацией о заказе и отображение экрана с подробной информацией о заказе связаны с обновлениями статуса заказа.
Вопросы безопасности
Предприятиям следует соблюдать местные требования безопасности и регулирования в Индии. Им не следует полагаться исключительно на статус транзакции, указанный в веб-хуке, и необходимо использовать API для поиска платежей, чтобы получать статусы непосредственно из WhatsApp. Предприятия должны всегда проверять и подтверждать данные в ответах API или веб-хуках для защиты от SSRF-атак.
Контрольный список для интегрированных торговых площадок
Убедитесь, что
order_status , информирующее его об обновлениях заказа после получения обновлений транзакции по заказу.Убедитесь, что продавец проверен, а контакт WABA отмечен галочкой «проверено».
Убедитесь, что WABA сопоставлен с соответствующим уровнем отправки сообщений, инициированных продавцом (1000, 10000 и 10000 сообщений в день)
Продавец должен указать контактную информацию службы поддержки клиентов на экране профиля на случай, если потребитель захочет сообщить о каких-либо проблемах.