Принимайте платежи через платежные шлюзы в WhatsApp | Документация для разработчиков
Получайте платежи через платежные шлюзы в WhatsApp
Обновлено: 12 декабря 2025 г
Ваш бизнес может предоставить клиентам возможность оплачивать заказы через платежные шлюзы наших партнеров, не покидая WhatsApp. Компании могут отправлять клиентам сообщения с указанием деталей заказа, а затем получать уведомления об обновлении статуса платежа через веб-хуки.
Обзор
В настоящее время клиенты просматривают каталоги компаний, добавляют товары в корзину и отправляют заказы с помощью нашего набора решений для обмена сообщениями в сфере электронной коммерции, который включает в себя сообщения для отдельных товаров, сообщения для нескольких товаров и страницы с подробным описанием товара . Теперь, благодаря API платежей, компании могут отправлять клиентам счета , чтобы клиент мог завершить свой заказ, оплатив его, не покидая WhatsApp.
В настоящее время наше платежное решение поддерживается сторонними платежными сервисами BillDesk, Razorpay, PayU и Zaakpay. Для получения платежей через WhatsApp вам необходимо иметь учетную запись BillDesk, Razorpay, PayU или Zaakpay.
Мы ожидаем, что в будущем будет добавлено больше платежных систем.
Как это работает
Сначала компания составляет и отправляет
order_details . order_details — это новый тип интерактивного сообщения, которое всегда содержит одни и те же 4 основных компонента: заголовок , тело , нижний колонтитул и действие . В действия компания указывает всю информацию, необходимую клиенту для завершения платежа.Каждое
order_details содержит уникальный идентификатор reference_id, предоставленный компанией, и этот уникальный идентификатор используется на протяжении всего процесса для отслеживания заказа.После отправки сообщения компания ожидает обновления статуса платежа через веб-хуки. Компании получают уведомления об изменении статуса платежа, но не должны полагаться исключительно на эти уведомления через веб-хуки по соображениям безопасности. WhatsApp также предоставляет API для поиска платежей, который можно использовать для получения статуса платежа напрямую в любое время.
Процесс покупки в приложении
В мессенджере WhatsApp процесс покупки состоит из следующих этапов:
Клиенты отправляют заказ с выбранными товарами в компанию либо с помощью простых текстовых сообщений, либо используя другие интерактивные сообщения, такие как «Сообщение об одном товаре», «Сообщение о нескольких товарах» и «Подробная информация о товаре».
После получения заказа компания отправляет пользователю сообщение
order_details «Просмотреть и оплатить» , он увидит подробную информацию о заказе и общую сумму к оплате.Нажав «Продолжить» , пользователь может выбрать оплату через WhatsApp или любое другое приложение UPI.
Оплата через WhatsApp Pay:
Оплата через WhatsApp Pay:
[Изображение удалено — слишком большое для импорта]
Оформите заказ в других приложениях UPI:
[Изображение удалено — слишком большое для импорта]
После подтверждения платежа платежным шлюзом или поставщиком платежных услуг компания может приступить к обработке заказа.
Затем компании могут отправить
order_status, информирующее его о статусе заказа. Каждое сообщение приведет к появлению всплывающего окна (как показано ниже), которое будет ссылаться на исходное сообщение с подробной информацией о заказе, а также обновлять статус, отображаемый на странице с подробной информацией о заказе.Привяжите свой платежный аккаунт
Для приема платежей в WhatsApp необходимо добавить конфигурацию платежей в соответствующий бизнес-аккаунт WhatsApp. Конфигурация платежей позволяет связать учетную запись платежного шлюза с WhatsApp. Каждая конфигурация платежей связана с уникальным именем . В
order_details вы можете указать конфигурацию платежей, которая будет использоваться для конкретного оформления заказа. Затем WhatsApp сгенерирует процесс оформления заказа, используя связанную учетную запись платежного шлюза.[Изображение удалено — слишком большое для импорта]
После привязки вашего партнерского аккаунта к платежной системе необходимо интегрировать его с указанными ниже платежными API. Это позволит отправлять
order_details с настройками платежной системы для получения платежей.Шаги по отмене привязки настроек платежей
Примечание: Перед выполнением операции отмены привязки убедитесь, что с настройками платежа, которые вы пытаетесь удалить, не отправляются новые сообщения о заказах с запросом на оплату от потребителя.
Этапы интеграции
Описанные ниже шаги предполагают, что компания уже знает, чем интересуется пользователь, из предыдущих переписок в чате. API платежей является автономным API и, следовательно, может работать с различными типами сообщений, такими как списки сообщений, кнопки ответа, сообщения с одним или несколькими товарами .
Диаграмма последовательности
На следующей диаграмме показана типичная последовательность интеграции для Payments API. Шаги, выделенные зеленым цветом, являются ключевыми этапами интеграции.
[Изображение удалено — слишком большое для импорта]
Шаг 1: Отправьте интерактивное сообщение с подробной информацией о заказе
Для отправки
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 ограничена 500 000 рупий. Для более крупных сумм установите параметр enabled_payment_options в значение ["web"] . См. раздел «Ограничение доступных способов оплаты ». |
настройки оплатыобъект | Необходимый. Дополнительную информацию см. в объекте «Настройки платежей» |
заказобъект | Необходимый. см. объект заказа . |
Объект настроек платежей
| Объект | Описание |
|---|---|
типнить | Необходимый. Необходимо установить значение "payment_gateway". |
платежный шлюзобъект | Необходимый. Объект, описывающий информацию о платежном счете: тип строкастрока имени_конфигурацииЕсли параметр configuration_name недействителен, клиент не сможет оплатить свой заказ. Мы настоятельно рекомендуем компаниям провести тщательное тестирование этой настройки на этапе интеграции.объект billdesk/razorpay/payu/ zaakpay обратитесь к объекту UDF, специфичному для платежного шлюза . |
Поля BillDesk, RazorPay, PayU и Zaakpay
Теперь партнеры и продавцы могут передавать
"Примечания" , "Квитанция" и пользовательские функции в сообщениях "Подробности заказа" и получать эти данные обратно в платежных сигналах. Здесь мы рассмотрим, как продавцы могут передавать additional_info для BillDesk, поля "Примечания" и "Квитанция" для Razorpay, пользовательские функции для PayU и extra для Zaakpay PGs.| Объект | Описание |
|---|---|
примечанияобъект | Необязательный. Объект может представлять собой пары ключ-значение, максимум 15 ключей, при этом каждое значение ограничено 256 символами. |
квитанцияНить | Необязательный. Номер чека, соответствующий данному заказу, предназначен для внутреннего использования. Максимальная поддерживаемая длина — 40 символов, минимальная — более 0 символов. |
udf1-4Нить | Необязательный. Пользовательские поля (UDF) используются для хранения любой информации, соответствующей конкретному заказу. Максимальное количество символов в каждом поле UDF составляет 255. |
экстра1-2Нить | Необязательный. Пользовательские поля (дополнительные) используются для хранения любой информации, соответствующей конкретному заказу. Максимальное количество символов в каждом дополнительном поле — 180. |
дополнительная_информация1-7Нить | Необязательный. Пользовательские поля (дополнительные) используются для хранения любой информации, соответствующей конкретному заказу. Максимальное количество символов в каждом дополнительном поле — 120. |
Объект заказа
| Объект | Описание |
|---|---|
статуснить | Необходимый. 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. Соответствует тем же требованиям, что и изображение в медиафайлах. |
параметра представляет собой строковый JSON-объект
.В итоге интерактивный объект для интеграции с каталогом BillDesk должен выглядеть примерно так:
{
"interactive"
: { "type"
: "order_details" , "header"
: { "type"
: "image" , "image"
: { "link"
: "http(s)://the-url" , "provider"
: { "name"
: "provider-name" }
}
},
"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"
: "payment_gateway" , "payment_gateway"
: { "type"
: "billdesk" , "configuration_name"
: "payment-config-id" , "billdesk"
: { "additional_info1"
: "additional_info1-value" , "additional_info2"
: "additional_info2-value" , "additional_info3"
: "additional_info3-value" , "additional_info4"
: "additional_info4-value" , "additional_info5"
: "additional_info5-value" , "additional_info6"
: "additional_info6-value" , "additional_info7"
: "additional_info7-value" , }
}
}
],
"currency"
: "INR" , "total_amount"
: { "value"
: 21000 , "offset"
: 100 },
"order"
: { "status"
: "pending" , "catalog_id"
: "the-catalog_id" , "expiration"
: { "timestamp"
: "utc_timestamp_in_seconds" , "description"
: "cancellation-explanation" },
"items"
: [ {
"retailer_id"
: "1234567" , "name"
: "Название продукта, например, хлеб" , "amount"
: { "value"
: 10000 , "offset"
: 100 },
"quantity"
: 1 , "sale_amount"
: { "value"
: 100 , "offset"
: 100 }
}
],
"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" }
}
}
}
}
}
параметра представляет собой строковый JSON-объект
.В итоге интерактивный объект для интеграции RazorPay с каталогом должен выглядеть примерно так:
{
"interactive"
: { "type"
: "order_details" , "header"
: { "type"
: "image" , "image"
: { "link"
: "http(s)://the-url" , "provider"
: { "name"
: "provider-name" }
}
},
"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"
: "payment_gateway" , "payment_gateway"
: { "type"
: "razorpay" , "configuration_name"
: "payment-config-id" , "razorpay"
: { "receipt"
: "receipt-value" , "notes"
: { "key1"
: "value1" }
}
}
}
],
"currency"
: "INR" , "total_amount"
: { "value"
: 21000 , "offset"
: 100 },
"order"
: { "status"
: "pending" , "catalog_id"
: "the-catalog_id" , "expiration"
: { "timestamp"
: "utc_timestamp_in_seconds" , "description"
: "cancellation-explanation" },
"items"
: [ {
"retailer_id"
: "1234567" , "name"
: "Название продукта, например" хлеб" , "сумма"
: { "значение"
: 10000 , "смещение"
: 100 },
"количество"
: 1 , "сумма продажи"
: { "значение"
: 100 , "смещение"
: 100 }
}
],
"итого"
: { "значение"
: 20000 , "смещение"
: 100 },
"налог"
: { "значение"
: 1000 , "смещение"
: 100 , "описание"
: "необязательный_текст" },
"доставка"
: { "значение"
: 1000 , "смещение"
: 100 , "описание"
: "необязательный_текст" },
"скидка"
: { "значение"
: 1000 , "смещение"
: 100 , "описание"
: "optional_text" , "discount_program_name"
: "optional_text" }
}
}
}
} }
параметра представляет собой строковый JSON-объект
.Для интеграции PayU, не основанной на каталоге, то есть когда catalog-id отсутствует, пример полезной нагрузки выглядит следующим образом:
{
"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"
: "payment_gateway" , "payment_gateway"
: { "type"
: "payu" , "configuration_name"
: "payment-config-id" , "payu"
: { "udf1"
: "value1" , "udf2"
: "value2" , "udf3"
: "value3" , "udf4"
: "value4" }
}
}
],
"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" }
}
}
}
}
}
Для интеграции Zaakpay без использования каталога, то есть когда catalog-id отсутствует, пример полезной нагрузки выглядит следующим образом:
{
"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"
: "payment_gateway" , "payment_gateway"
: { "type"
: "zaakpay" , "configuration_name"
: "payment-config-id" , "zaakpay"
: { "extra1"
: "value1" , "extra2"
: "value2" }
}
}
],
"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" }
}
}
}
}
}
Шаг 2: Добавьте общие параметры сообщения
После завершения создания интерактивного объекта добавьте остальные параметры, формирующие сообщение:
recipient_type , to и type . Не забудьте установить тип как interactive .{
"messaging_product"
: "whatsapp" , "recipient_type"
: "individual" , "to"
: "PHONE_NUMBER" , "type"
: "interactive" , "interactive"
: { // интерактивный объект здесь
}
}
Шаг 3: Выполните 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 Cloud API, Коды ошибок .
Опыт использования продукта
Клиент получает
с подробной информацией о заказе, похожее на приведенное ниже (слева). При нажатии на кнопку «Просмотреть и оплатить» открывается экран с подробной информацией о заказе, как показано ниже (посередине). Затем клиент может оплатить свой заказ, используя кнопку «Продолжить», которая открывает всплывающее окно с вариантами оплаты (справа).[Изображение удалено — слишком большое для импорта]
[Изображение удалено — слишком большое для импорта]
[Изображение удалено — слишком большое для импорта]
Шаг 4: Получение веб-перехватчика о статусе транзакции
Компании получают обновления через веб-хуки сообщений при изменении статуса инициированной пользователем транзакции на статус типа «платеж». Он содержит следующие поля:
| Объект | Описание |
|---|---|
идентификаторнить | Необходимый. Идентификатор веб-перехватчика для уведомления. |
recipient_id нить | Необходимый. WhatsApp ID клиента. |
типнить | Необходимый. Для вебхуков обновления статуса платежа используйте тип «payment». |
статуснить | Необходимый. подтверждено / ожидается : подтверждено — когда платеж успешно завершен, ожидается — когда пользователь попытался совершить платеж, но еще не получил сигнал об успешной транзакции. |
оплатаобъект | Необходимый. Содержит следующее поле: строка reference_idУникальный идентификатор заказа, отправленный в order_details .Объект amount Содержит поля «Значение» и «Смещение», соответствующие общей сумме, уплаченной пользователем. Валюта: строка.Валюта всегда INR. транзакции . Попытка совершения транзакции для данного платежа. Объект транзакции содержит следующие поля:id string Обязательно. Буквенно-цифровой идентификатор заказа платежного шлюза.pg_transaction_id string Необязательный параметр. Буквенно-цифровой идентификатор платежного шлюза.Тип строки . Обязательный параметр. Тип оплаты для данной транзакции. Поддерживаются Billdesk Razorpay , Payu или Zaakpay Строка статуса . Обязательный параметр. Статус транзакции. Может быть одним из следующих: ожидание , успех или неудача .created_timestamp — целое число . Обязательный Время создания транзакции в секундах эпохи.updated_timestamp — целочисленное значение . Время последнего обновления транзакции в секундах эпохи.метода Необязательно. Информация о способе оплаты может быть недоступна для неудачных платежей)Тип строки . Обязательный параметр. Описывает тип способа оплаты, используемого потребителем для оплаты заказа. Может быть одним из следующих вариантов: UPI , карта , электронный кошелек или интернет-банкинг .ошибки Необязательно. Подробная информация об ошибке платежа может быть недоступна для всех попыток оплаты) code string . Он описывает причину сбоя платежа, сгенерированную платежным шлюзом, и Meta возвращает эту информацию партнерам.reason string Обязательно. В этом поле в текстовом виде описывается причина сбоя платежа, генерируемая платежным шлюзом, и Meta возвращает эту информацию партнерам.additional_info1-7 string Необязательно.Отправляется для платежного шлюза Billdesk только в том случае, если значение передается в сообщении с подробностями заказа. Каждый из ключей additional_info1-4 содержит строковые значения. Объект notes (необязательно).Отправляется только для платежного шлюза Razorpay, если значение передается в сообщении с подробностями заказа. Содержит пары ключ-значение, как указано в сообщении с подробностями заказа. Строка квитанции . Необязательно.Отправляется для платежного шлюза Razorpay только в том случае, если значение указано в сообщении с подробностями заказа. Отправляется для платежного шлюза Payu только в том случае, если значение указано в сообщении с подробностями заказа. Каждый из ключей udf1-4 содержит строковые значения.udf1-4 string Необязательно.extra1-2 string Optional.Массив refunds необязательно).Список возвратов по данному заказу. Каждый объект возврата содержит следующие поля: id string Обязательно. Буквенно-цифровой идентификатор возврата средств.Объект amount . Обязательное поле. Общая сумма возврата.speed_processed — строка . Обязательный параметр. Скорость обработки возврата средств. Может быть мгновенной или обычной .Строка статуса . Обязательный параметр. Статус возврата средств. Может быть одним из ожидание , успех или неудача .created_timestamp — целое число . Обязательный Время создания возврата средств в секундах эпохи.updated_timestamp — целое число . Обязательный параметр. Время последнего обновления данных о возврате средств в секундах эпохи. |
метка временинить | Необходимый. Временная метка для веб-перехватчика. |
Вот пример веб-хука статуса типа
«платеж» :{
"object"
: "whatsapp_business_account" , "entry"
: [{ "id"
: "WHATSAPP-BUSINESS-ACCOUNT-ID" , "changes"
: [{ "value"
: { "messaging_product"
: "whatsapp" , "metadata"
: { "display_phone_number"
: "[PHONE_NUMBER]" , "phone_number_id"
: "[PHONE_NUMBER_ID]" },
"contacts"
: [{...}], "errors"
: [{...}], "messages"
: [{...}], "statuses"
: [{ "id"
: "gBGGFlB5YjhvAgnhuF1qIUvCo7A" , "recipient_id"
: "[PHONE_NUMBER]" , "type"
: "payment" , "status"
: "[TRANSACTION_STATUS]" , "payment"
: { "reference_id"
: "[REFERENCE_ID]" , "amount"
: { "value"
: 21000 , "offset"
: 100 },
"transaction"
: { "id"
: "[PG-ORDER-ID]" , "pg_transaction_id"
: "[PG-PAYMENT-ID]" , "type"
: "billdesk/razorpay/payu/zaakpay" , "status"
: "success/failed" , "created_timestamp"
: "CREATED_TIMESTAMP" , "updated_timestamp"
: "UPDATED_TIMESTAMP" , "method"
: { "type"
: "upi/card/netbanking/wallet" },
"error"
: { "code"
: "pg-generated-error-code" , "reason"
: "pg-generated-descriptive-reason" }
},
"currency"
: "INR" , "receipt"
: "receipt-value" , "notes"
: { "key1"
: "value1" , "key2"
: "value2" },
"udf1"
: "udf1-value" , "udf2"
: "udf2-value" , "udf3"
: "udf3-value" , "udf4"
: "udf4-value" , "additional_info1"
: "additional_info1-value" , "additional_info2"
: "additional_info2-value" , "additional_info3"
: "additional_info3-value" , "additional_info4"
: "additional_info4-value" , "additional_info5"
: "additional_info5-value" , "additional_info6"
: "additional_info6-value" , "additional_info7"
: "additional_info7-value" , "refunds"
: [{ "id"
: "[REFUND-ID]" , "amount"
: { "value"
: 100 , "offset"
: 100 },
"speed_processed"
: "instant/normal" , "status"
: "success" , "created_timestamp"
: "CREATED_TIMESTAMP" , "updated_timestamp"
: "UPDATED_TIMESTAMP" , }],
},
"timestamp"
: "notification_timestamp" }]
},
"field"
: "messages" }]
}]
}
Для получения дополнительной информации о других статусах см. раздел «Веб-перехватчики сообщений» .
Шаг 5: Подтверждение платежа
После получения веб-хука о статусе платежа, или в любое другое время, компания может проверить статус платежа по заказу. Для этого компаниям необходимо выполнить GET-запрос к конечной точке платежей, как показано здесь:
GET <PHONE_NUMBER_ID> / payments / <PAYMENT_CONFIGURATION> / <REFERENCE_ID>
где
payment_configuration и reference_id совпадают с данными, указанными в order_details .Предприятиям следует ожидать ответа в той же HTTP-сессии (а не в уведомлении веб-перехватчика), содержащего следующие поля:
| Поле | Описание |
|---|---|
reference_idнить | Необходимый. Идентификатор, отправленный компанией в сообщении order_details. |
статуснить | Необходимый. Статус оплаты заказа. Может быть либо « ожидает подтверждения , либо «завершено».Для получения информации о значении этих статусов обратитесь к таблице ниже. |
валютанить | Необходимый. Валюта для этого платежа. В настоящее время поддерживается только валюта INR . |
количествообъект | Необходимый. Сумма платежа. Она содержит следующие поля: смещение целое числозначение целое число |
транзакциимножество | Необязательный. Список транзакций для данного платежа. Это поле присутствует только в том случае, если была совершена хотя бы одна попытка оплаты. Если статус платежа «ожидание» и попыток оплаты не было, это поле не будет возвращено. Каждый объект транзакции содержит следующие поля:строка идентификаторастрока pg_transaction_idтип строкаBilldesk , Razorpay , Payu или Zaakpay строка статусаожидание , успешное завершение или неудача .В лучшем случае только одна транзакция может иметь успешно" .created_timestamp целое числообновленная_временная_метка_целое числообъект методаНеобязательно. Информация о способе оплаты может быть недоступна в случае неудачной оплаты. Тип строки . Обязательный параметр. Описывает тип способа оплаты, используемого потребителем для оплаты заказа. Может быть одним из следующих вариантов: UPI , карта , электронный кошелек или интернет-банкинг .объект ошибки(Необязательно) Информация об ошибке платежа может быть недоступна для всех попыток оплаты. code string . Он описывает причину сбоя платежа, сгенерированную платежным шлюзом, и Meta возвращает эту информацию партнерам.reason string (Обязательно.) Описывает причину сбоя платежа в виде обычного текста, который генерируется платежным шлюзом, и Meta возвращает эту информацию партнерам.массив возвратовНеобязательно. Список возвратов по данному заказу. Каждый объект возврата содержит следующие поля: id string Обязательно. Буквенно-цифровой идентификатор возврата средств.Объект amount . Обязательное поле. Общая сумма возврата.speed_processed — строка . Обязательный параметр. Скорость обработки возврата средств. Может быть мгновенной или обычной .Строка статуса . Обязательный параметр. Статус возврата средств. Может быть одним из ожидание , успех или неудача .created_timestamp — целое число . Обязательный Время создания возврата средств в секундах эпохи.updated_timestamp — целое число . Обязательный параметр. Время последнего обновления данных о возврате средств в секундах эпохи. |
дополнительная_информация1-7нить | Необязательный. Поддерживается только для BillDesk PG и содержит строковые значения, отправляемые в составе сообщения «Подробности заказа». |
квитанциянить | Необязательный. Поддерживается только для Razorpay PG. Содержит значение чека, отправленное в сообщении «Подробности заказа». |
примечанияобъект | Необязательный. Поддерживается только для Razorpay PG и содержит пары ключ-значение, отправляемые в сообщении с подробной информацией о заказе. |
udf1-4нить | Необязательный. Поддерживается только для PayU PG и содержит строковые значения, отправляемые в сообщении «Детали заказа». |
экстра1-2нить | Необязательный. Поддерживается только для Zaakpay PG и содержит строковые значения, отправляемые в сообщении с подробной информацией о заказе. |
Статус платежа
| Статус | Описание |
|---|---|
в ожидании | Заказ создан, но оплата еще не списана. Этот статус охватывает два сценария: массив транзакций не будет присутствовать в ответе.Попытка оплаты не удалась: массив транзакций будет содержать одну или несколько записей со статусом «неудачная » . |
захвачен | Платеж успешно обработан. транзакций будет содержать запись со статусом «успешно » . |
Пример успешного ответа выглядит следующим образом:
{
"payments"
: [{ "reference_id"
: "reference-id-value" , "status"
: "status-of-payment" , "currency"
: "INR" , "amount"
: { "value"
: 21000 , "offset"
: 100 },
"transactions"
: [ {
"id"
: "[PG-ORDER-ID]" , "pg_transaction_id"
: "[PG-TXN-ID]" , "type"
: "billdesk/razorpay/payu/zaakpay" , "status"
: "success/failed" , "created_timestamp"
: "CREATED_TIMESTAMP" , "updated_timestamp"
: "UPDATED_TIMESTAMP" , "method"
: { "type"
: "upi/card/netbanking/wallet" },
"error"
: { "code"
: "pg-generated-error-code" , "reason"
: "pg-generated-descriptive-reason" },
"refunds"
: [ {
"id"
: "[REFUND-ID]" , "amount"
: { "value"
: 100 , "offset"
: 100 },
"speed_processed"
: "instant/normal" , "status"
: "success" , "created_timestamp"
: "CREATED_TIMESTAMP" , "updated_timestamp"
: "UPDATED_TIMESATMP" , }
],
}
],
"receipt"
: "receipt-value" , "notes"
: { "key1"
: "value1" , "key2"
: "value2" },
"udf1"
: "udf1-value" , "udf2"
: "udf2-value" , "udf3"
: "udf3-value" , "udf4"
: "udf4-value" "additional_info1"
: "additional_info1 , "additional_info2"
: "additional_info2-value" , "additional_info3"
: "additional_info3-value" , "additional_info4"
: "additional_info4-value" , "additional_info5"
: "additional_info5-value" , "additional_info6"
: "additional_info6-value" , "additional_info7"
: "additional_info7-value" , }]
}
Здесь показан пример типичной ошибки:
{
"errors"
: [{ "code"
: 500 , "title"
: "Общая ошибка" , "details"
: "Системная ошибка. Пожалуйста, попробуйте еще раз." }]
}
Ответ на этапе оплаты
Содержимое ответного сообщения варьируется в зависимости от этапа оплаты. Ниже приведены примеры для каждого этапа.
Платеж не предпринимался — пользователь еще не пытался произвести оплату. Возвращаются только поля уровня заказа;
транзакций отсутствует.{
"payments"
: [ {
"reference_id"
: "" , "status"
: "pending" , "amount"
: { "offset"
: 100 , "value"
: 1000 },
"currency"
: "INR" }
]
}
Платеж успешно завершен — пользователь завершил оплату, и платежный шлюз подтвердил списание средств.
транзакций содержит информацию об успешной транзакции и способе оплаты.{
"payments"
: [ {
"reference_id"
: "" , "status"
: "captured" , "amount"
: { "offset"
: 100 , "value"
: 1000 },
"currency"
: "INR" , "transactions"
: [ {
"id"
: "" , "pg_transaction_id"
: "" , "type"
: "razorpay" , "status"
: "success" , "created_timestamp"
: 1772129215 , "updated_timestamp"
: 1772129215 , "amount"
: { "offset"
: 100 , "value"
: 1000 },
"order_amount"
: { "offset"
: 100 , "value"
: 1000 },
"currency"
: "INR" , "method"
: { "type"
: "upi" }
}
]
}
]
}
Платеж не удался — Пользователь попытался оплатить заказ, но попытка не удалась. Общий статус платежа остается
«ожидание» (заказ все еще ожидает успешной оплаты), но транзакций содержит информацию о неудачной попытке с подробными сведениями об ошибке.{
"payments"
: [ {
"reference_id"
: "" , "status"
: "pending" , "amount"
: { "offset"
: 100 , "value"
: 1000 },
"currency"
: "INR" , "transactions"
: [ {
"id"
: "" , "pg_transaction_id"
: "" , "type"
: "razorpay" , "status"
: "failed" , "created_timestamp"
: 1772129329 , "updated_timestamp"
: 1772129329 , "amount"
: { "offset"
: 100 , "value"
: 1000 },
"order_amount"
: { "offset"
: 100 , "value"
: 1000 },
"currency"
: "INR" , "method"
: { "type"
: "upi" },
"error"
: { "code"
: "BAD_REQUEST_ERROR" , "reason"
: "incorrect_pin" }
}
]
}
]
}
Шаг 6: Обновить статус заказа
Компаниям необходимо отправлять обновления по заказу, используя
order_status, а не текстовые сообщения, поскольку последний статус заказа, отображаемый на странице сведений о заказе, основан только на сообщениях order_status Для уведомления клиента об изменениях в заказе можно отправить
интерактивное сообщение типа order_status как показано ниже.{
"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" }
}
}
} }
В следующей таблице описаны поля
order_status :| Объект | Описание |
|---|---|
типнить | Обязательно. Должно быть значение «order_status». |
телообъект | Необходимый. Объект, содержащий тело сообщения. Объект содержит следующее поле: текстовая строкатело сообщения. Содержимое сообщения. Поддерживаются эмодзи и разметка Markdown. Максимальная длина — 1024 символа. |
нижний колонтитулобъект | Необязательный. Объект, содержащий нижнюю часть сообщения. Объект содержит следующее поле: текстовая строканижний колонтитул . Содержимое нижнего колонтитула. Поддерживаются эмодзи, разметка Markdown и ссылки. Максимальная длина — 60 символов. |
действиеобъект | Необходимый. Объект действия, который пользователь должен выполнить после прочтения сообщения. Этот объект действия содержит следующие поля: строка имениобъект параметров |
Объект параметров
Объект
параметров содержит следующие поля:| Ценить | Описание |
|---|---|
reference_idнить | Необходимый. Идентификатор, отправленный компанией в order_details . |
заказобъект | Обязательный параметр. Этот объект содержит следующие поля: строка статусастатус . Должен быть одним из следующих: обработка , частичная отгрузка , отгрузка , завершение , отмена .строка описанияполе «Детали заказа» . Может быть полезен при отправке уведомления об отмене. Максимальное количество символов — 120. |
order_status приводит к появлению двух новых ошибок, которые кратко описаны ниже.| Код ошибки | Описание |
|---|---|
2046 - Недействительный переход статуса | Переход статуса заказа не допускается. |
2047 - Отменить заказ невозможно | Отменить заказ невозможно, так как пользователь уже оплатил его. |
Опыт использования продукта
Клиенты получают каждое
статуса заказа в виде отдельного сообщения в чате, которое ссылается на их исходное о заказе, как показано ниже (слева). На странице с подробной информацией о заказе всегда отображается последний действительный статус, сообщенный клиенту с помощью order_status , как показано ниже (справа).[Изображение удалено — слишком большое для импорта]
[Изображение удалено — слишком большое для импорта]
Поддерживаемые статусы заказов и переходы
В настоящее время мы поддерживаем следующие значения статуса заказа:
| Ценить | Описание |
|---|---|
в ожидании | Пользователь еще не оплатил заказ успешно |
обработка | Оплата пользователем авторизована, продавец/партнер выполняет заказ, оказывает услугу и т. д. |
частично отгружено | Часть товаров из заказа уже отправлена продавцом |
отправленный | Все товары в заказе были отправлены продавцом |
завершенный | Заказ выполнен, и от пользователя или партнера/продавца дальнейших действий не требуется |
отменено | Партнер/продавец хочет отменить order_details для заказа/счета. Обновление статуса не удастся, если по этому сообщению order_details успешный или ожидающий |
Для обеспечения единообразия пользовательского опыта количество переходов между статусами заказа ограничено. Допустимые переходы между статусами приведены ниже:
«ожидание» , он передается в order_details .Статусы «отменено» и «завершено» Статус «ожидает выполнения» может переходить в любой другой статус, включая «обрабатывается» , «отправлено» , «частично отгружено» . «обработка» , «отправлено» и «частично отправлено» эквивалентны и могут переходить друг в друга или в один из конечных статусов.[Изображение удалено — слишком большое для импорта]
При отправке
order_status с некорректным переходом вы получите веб-перехватчик ошибки с кодом 2046 и сообщением «Переход к новому статусу заказа был выполнен некорректно».Отмена заказа
Заказ можно
отменить, отправив order_status со статусом «отменен ». Клиент не может оплатить отмененный заказ. Клиент получает order_status , и страница с подробной информацией о заказе обновляется, показывая, что заказ отменен, а кнопка «Продолжить» удалена. Дополнительный текст, отображаемый под «Заказ отменен» на странице с подробной информацией о заказе, можно указать с помощью описания в order_status .Отменить заказ можно только в том случае, если пользователь еще не оплатил его. Если пользователь оплатил заказ, а вы отправляете
order_status со «отменен» , вы получите веб-хук с ошибкой 2047 и сообщением «Не удалось изменить статус заказа на 'отменен'».Шаг 7: Сверка платежей
WhatsApp не поддерживает сверку платежей. Компаниям следует использовать свой аккаунт платежного шлюза для сверки платежей, используя reference_id,
указанный в order_details , и идентификаторы транзакций, возвращаемые в рамках запроса на поиск платежа.Шаг 8: Возврат средств
Компании могут инициировать возврат средств за заказ. Для этого им необходимо отправить POST-запрос на
/[PHONE_NUMBER_ID]/payments_refund со следующим JSON- объектом:{
"reference_id"
: "reference-id-value" , "speed"
: "normal" , "payment_config_id"
: "payment-config-id" , "amount"
: { "currency"
: "INR" , "value"
: "100" , "offset"
: "100" }
}
В следующей таблице описаны поля объекта запроса конечной точки возврата средств:
| Поле | Описание |
|---|---|
reference_idнить | Необходимый. Уникальный идентификатор заказа, отправленный в order_details . |
скоростьнить | Необязательный. Скорость обработки возврата средств. Может быть мгновенной или обычной . |
payment_config_idнить | Необходимый. Настройки оплаты для заказа, указанные в order_details . |
количествообъект | Необходимый. « Сумма» содержит следующие поля:смещение строки100 индийских рупий .строковое значениестрока валюты |
Предприятиям следует ожидать ответа в той же HTTP-сессии (а не в уведомлении веб-перехватчика), содержащего следующие поля:
| Поле | Описание |
|---|---|
идентификаторнить | Необходимый. Уникальный идентификатор, обозначающий инициированный возврат средств. |
статуснить | Необходимый. Статус возврата средств. Может быть одним из следующих: ожидающий , неудачный или завершенный. |
скорость_обработкинить | Необходимый. Скорость обработки возврата средств. Может быть мгновенной или обычной . PG (Public Guidelines) являются окончательным арбитром в выборе скорости обработки возврата. Это НЕ всегда может соответствовать параметрам запроса. |
Пример успешного ответа выглядит следующим образом:
{
"id"
: "refund-id" , "status"
: "pending" , "speed_processed"
: "normal" }
Предпочитаемый продавцом способ оплаты UPI
Теперь продавцы могут указать до одного приложения для оплаты через UPI, которое будет отображаться в процессе оформления заказа. Предпочтительное приложение для оплаты продавца будет отображаться вверху списка доступных приложений UPI на экране «Выбор способа оплаты». Для включения этой возможности партнерам необходимо указать внешний идентификатор приложения в сведениях о заказе или в сообщении счета-фактуры.
Примечание: Эта функция доступна в потребительских приложениях версии 2.24.21.0 и выше
Обновления в данных заказа и полезной нагрузке
{
"messaging_product"
: "whatsapp" , "interactive"
: { "action"
: { "name"
: "review_and_pay" , "parameters"
: { "payment_settings"
: [ {
"type"
: "payment_gateway" , "payment_gateway"
: { "preferred_payment_methods"
: [ {
"method"
: "Application-ID" }
]
}
}
],
"order"
: .. }
}
}
}
Список поддерживаемых приложений:
| Приложение UPI | Идентификатор приложения, который будет передан в полезной нагрузке «Детали заказа» |
|---|---|
Google Pay | gpay |
PhonePe | телефон |
PayTm | Paytm |
БХИМ | бхим |
Amazon Pay | Amazon Pay |
КРЕД | кредит |
Мобиквик | мобиквик |
Ограничить доступные способы оплаты
Продавцы могут указать, какие варианты оплаты отображать в процессе оформления заказа, выбрав между UPI и веб-версией. Это позволит продавцам разрешить прием платежей по счетам только через UPI или кредитную карту (любой доступный вариант PG).
Сумма транзакций через UPI ограничена 500 000 рупий. Для более крупных сумм установите
параметр enabled_payment_options в значение ["web"] , чтобы использовать веб-форму оформления заказа вашего платежного шлюза. Платежи с включенным UPI, превышающие этот лимит, будут отклонены.Примечание: Эта функция доступна в потребительских приложениях версии 2.24.22.4 и выше
Обновления в данных заказа и полезной нагрузке
{
"messaging_product"
: "whatsapp" , "interactive"
: { "action"
: { "name"
: "review_and_pay" , "parameters"
: { "payment_settings"
: [ {
"type"
: "payment_gateway" , "payment_gateway"
: { "enabled_payment_options"
: [ "upi" / "web" ] },
}
],
"order"
: ... }
}
}
}
Список способов оплаты
| Включенная опция | Опыт работы с процессами оформления заказа |
|---|---|
упи | В процессе оформления заказа отображаются только приложения UPI |
веб | После загрузки веб-страницы платежного шлюза в процессе оформления заказа отобразятся настроенные варианты оплаты для учетной записи продавца в платежном шлюзе. |
Некоторые платежные системы позволяют настраивать варианты оплаты, отображаемые в ссылке для оплаты или в процессе оформления заказа на веб-странице. Для ограничения вариантов оплаты в ссылке для оплаты или на веб-странице, пожалуйста, свяжитесь с платежной системой.
Проверка платежных систем Razorpay и PayU сторонними организациями
Теперь мы поддерживаем TPV для продавцов, использующих RazorPay и PayU. Это позволяет продавцам указывать счета клиентов, с которых должны производиться платежи по заказам. Поскольку информация о банковских счетах клиентов является конфиденциальной, пожалуйста, свяжитесь с платежными шлюзами для получения открытого ключа шифрования и передайте информацию о шифровании в сообщении с подробной информацией о заказе.
Для использования этой функции, находящейся на стадии альфа-тестирования, пожалуйста, свяжитесь с командой Meta Payments по адресу [email protected]
Обновления в данных заказа для поддержки TPV для продавцов Razorpay
{
"messaging_product"
: "whatsapp" , "interactive"
: { "action"
: { "name"
: "review_and_pay" , "parameters"
: { "payment_settings"
: [ {
"type"
: "razorpay" , "razorpay"
: { "encrypted_payment_gateway_data"
: "encrypted-data" }
}
],
"order"
: {} }
}
}
}
Исходное значение до шифрования должно выглядеть примерно так:
{
"bank_account"
: { "account_number"
: "account-no" , "name"
: "consumer-cbs-name" , "ifsc"
: "ifsc-code" }
}
Обновления в данных заказа: поддержка TPV для продавцов PayU
{
"messaging_product"
: "whatsapp" , "interactive"
: { "action"
: { "name"
: "review_and_pay" , "parameters"
: { "payment_settings"
: [ {
"type"
: "payu" , "payu"
: { "encrypted_payment_gateway_data"
: "encrypted-data" }
}
],
"order"
: {} }
}
}
}
Исходное значение до шифрования должно выглядеть следующим образом:
{
"beneficiaryDetail"
: { "beneficiaryAccountNumber"
: "account_number1|account_number2" , "ifscCode"
: "ifsc1|ifsc2" , }
}
Обратите внимание: пожалуйста, тесно сотрудничайте с командами Meta и платежных шлюзов (RazorPay или PayU), чтобы разблокировать эту функцию, поскольку мы все еще находимся на этапе альфа-тестирования.
Вопросы безопасности
Предприятиям следует соблюдать местные требования безопасности и регулирования в Индии. Им не следует полагаться исключительно на статус транзакции, указанный в веб-хуке, и необходимо использовать API для поиска платежей, чтобы получать статусы непосредственно из WhatsApp. Предприятия должны всегда проверять и подтверждать данные в ответах API или веб-хуках для защиты от SSRF-атак.
Контрольный список для интегрированных торговых площадок
Убедитесь, что
order_status отправляется потребителю, информируя его об обновлениях заказа после получения обновлений транзакции по заказу.Убедитесь, что продавец проверен, а контакт WABA отмечен галочкой «проверено».
Убедитесь, что WABA сопоставлен с соответствующим уровнем отправки сообщений, инициированных продавцом (1000, 10000 и 10000 сообщений в день)
Продавец должен указать контактную информацию службы поддержки клиентов на экране профиля на случай, если покупатель захочет сообщить о каких-либо проблемах.
Переместите "payment_type" и "payment_configuration" в раздел "payment_settings". Это рекомендуемый способ, предоставляющий доступ к таким функциям, как "notes" и "udf"-поля. В качестве примера см. приведенные выше данные .
Комментарии отсутствуют
Комментарии отсутствуют