Перейти к основному содержимому

Вебхуки

Для работы с вебхуками должно быть выдано разрешение ManageWebhookData.

Вебхуки нужны, чтобы получать уведомления о важных событиях в вашем сервисе или Телеграм-каналах, связанных с вашими счетами.

Вебхук — это POST-запрос на указанный URL, в теле которого находится JWT-токен в виде строки.
Этот JWT-объект нужно расшифровать — алгоритм шифрования тела вебхука RS256.

Чтобы убедиться, что вебхук пришёл от Точка Банка, используйте наш публичный ключ OpenAPI.

инфо

Вебхуки отправляются только об успешных оплатах. Если вебхук не пришёл, получите информацию о платеже методом Get Payment Operation Info.

Сейчас доступны пять видов событий:

  • incomingPayment — о входящих платежах
  • outgoingPayment — об исходящих платежах
  • incomingSbpPayment — о входящих платежах через СБП
  • incomingSbpB2BPayment — о входящих платежах через B2B QR-код по СБП
  • acquiringInternetPayment — о входящих платежах по платёжным ссылкам
incomingPayment — о входящих платежах

Вебхук нужен для отправки информации о входящих платежах.

В течение 20 секунд после каждого входящего платежа будет отправлено уведомление с основными данными:

  • Реквизиты получателя и отправителя платежа
  • purpose — назначение
  • amount — сумма
  • webhookType — incomingPayment
  • customerCode - уникальный идентификатор клиента
  • paymentId — уникальный идентификатор платежа, который также содержится в выписке

Пример с телом вебхука по событию incomingPayment:

eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJTaWRlUGF5ZXIiOiB7ImJhbmtDb2RlIjogIjAwMDAwMDAwMCIsICJiYW5rTmFtZSI6ICJcdTA0MWVcdTA0MWVcdTA0MWUgXHUwNDExXHUwNDMwXHUwNDNkXHUwNDNhIFx1MDQyMlx1MDQzZVx1MDQ0N1x1MDQzYVx1MDQzMCIsICJiYW5rQ29ycmVzcG9uZGVudEFjY291bnQiOiAiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCAiYWNjb3VudCI6ICIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsICJuYW1lIjogIlx1MDQxOFx1MDQxZiBcdTA0MjJcdTA0MzVcdTA0NDFcdTA0NDIiLCAiYW1vdW50IjogIjQwLjAiLCAiY3VycmVuY3kiOiAiUlVCIiwgImlubiI6ICIwMDAwMDAwMDAwIiwgImtwcCI6ICIwMDAwMDAwMDAwIn0sICJTaWRlUmVjaXBpZW50IjogeyJiYW5rQ29kZSI6ICIwMDAwMDAwMDAiLCAiYmFua05hbWUiOiAiXHUwNDFlXHUwNDFlXHUwNDFlIFx1MDQxMVx1MDQzMFx1MDQzZFx1MDQzYSBcdTA0MjJcdTA0M2VcdTA0NDdcdTA0M2FcdTA0MzAiLCAiYmFua0NvcnJlc3BvbmRlbnRBY2NvdW50IjogIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwgImFjY291bnQiOiAiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCAibmFtZSI6ICJcdTA0MThcdTA0MWYgXHUwNDIyXHUwNDM1XHUwNDQxXHUwNDQyIiwgImFtb3VudCI6ICI0MC4wIiwgImN1cnJlbmN5IjogIlJVQiIsICJpbm4iOiAiMDAwMDAwMDAwMCIsICJrcHAiOiAiMDAwMDAwMDAwMCJ9LCAicHVycG9zZSI6ICJcdTA0MjJcdTA0MzVcdTA0NDFcdTA0NDJcdTA0M2VcdTA0MzJcdTA0M2VcdTA0MzUgXHUwNDNkXHUwNDMwXHUwNDM3XHUwNDNkXHUwNDMwXHUwNDQ3XHUwNDM1XHUwNDNkXHUwNDM4XHUwNDM1IFx1MDQzZlx1MDQzYlx1MDQzMFx1MDQ0Mlx1MDQzNVx1MDQzNlx1MDQzMCIsICJkb2N1bWVudE51bWJlciI6ICIwMDAwMCIsICJwYXltZW50SWQiOiAiMDAwMDAwMDAwMCIsICJkYXRlIjogIjIwMTgtMTAtMDEiLCAid2ViaG9va1R5cGUiOiAiaW5jb21pbmdQYXltZW50IiwgImN1c3RvbWVyQ29kZSI6ICIzMDAxMjMxMjMifQ.j7FCYrHL6pmR7m8TZxtBPBdsHG3uOu6bBl7HZq-VaK_LDj7Lyjb_B0L6zWZjVTRWvyfi6CZ-T-yT8IWzXdN5csoIEiwSuzLeC17oW-9c359Z5AYbL9x4SHSlYd3Q_hPM4DQVxPnPKb_IYpZGDCTovU_wtlAxiBdXQbY3qWEzzDzCuqZNjlVQalu7XipuSt7nNDBuwcDWJAC8Ry0U7UwRH6wboufhL7WcrQgsEn-2ZV--sKzinhUyfyYMw8_cFt9MNX3x_x3Fhu56708MDviu57O5u9t-diWrw2X75QKjnlf-PAamb0idK_8bJ5XbLXymnaBuYgSZSd-HZMHYLWiMHDL-z1OIsLgPKanUPJeKsSlmiVA1VJH2oZVRMv9Pf05O_cbN26d-LIjqn9z_m8XeZ1w0I9sfGP96IfT7xONsTLdbTCiKAJ-he4nzscxpzQc3tYnaeqETTZiyjB1U_chh88bG2n_0tNlQEtRT3j0sPyCWX3qLSFlkp6kKmQkIfeBn
outgoingPayment — об исходящих платежах

Вебхук нужен для отправки информации об исходящих платежах.

В течение 20 секунд после каждого исходящего платежа будет отправлено уведомление с основными данными:

  • реквизиты получателя и отправителя платежа
  • purpose — назначение
  • amount — сумма
  • webhookType — outgoingPayment
  • customerCode - уникальный идентификатор клиента
  • paymentId — уникальный идентификатор платежа, который также содержится в выписке

Пример с телом вебхука по событию outgoingPayment:

eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJTaWRlUGF5ZXIiOiB7ImJhbmtDb2RlIjogIjAwMDAwMDAwMCIsICJiYW5rTmFtZSI6ICJcdTA0MWVcdTA0MWVcdTA0MWUgXHUwNDExXHUwNDMwXHUwNDNkXHUwNDNhIFx1MDQyMlx1MDQzZVx1MDQ0N1x1MDQzYVx1MDQzMCIsICJiYW5rQ29ycmVzcG9uZGVudEFjY291bnQiOiAiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCAiYWNjb3VudCI6ICIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsICJuYW1lIjogIlx1MDQxOFx1MDQxZiBcdTA0MjJcdTA0MzVcdTA0NDFcdTA0NDIiLCAiYW1vdW50IjogIjQwLjAiLCAiY3VycmVuY3kiOiAiUlVCIiwgImlubiI6ICIwMDAwMDAwMDAwIiwgImtwcCI6ICIwMDAwMDAwMDAwIn0sICJTaWRlUmVjaXBpZW50IjogeyJiYW5rQ29kZSI6ICIwMDAwMDAwMDAiLCAiYmFua05hbWUiOiAiXHUwNDFlXHUwNDFlXHUwNDFlIFx1MDQxMVx1MDQzMFx1MDQzZFx1MDQzYSBcdTA0MjJcdTA0M2VcdTA0NDdcdTA0M2FcdTA0MzAiLCAiYmFua0NvcnJlc3BvbmRlbnRBY2NvdW50IjogIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwgImFjY291bnQiOiAiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCAibmFtZSI6ICJcdTA0MThcdTA0MWYgXHUwNDIyXHUwNDM1XHUwNDQxXHUwNDQyIiwgImFtb3VudCI6ICI0MC4wIiwgImN1cnJlbmN5IjogIlJVQiIsICJpbm4iOiAiMDAwMDAwMDAwMCIsICJrcHAiOiAiMDAwMDAwMDAwMCJ9LCAicHVycG9zZSI6ICJcdTA0MjJcdTA0MzVcdTA0NDFcdTA0NDJcdTA0M2VcdTA0MzJcdTA0M2VcdTA0MzUgXHUwNDNkXHUwNDMwXHUwNDM3XHUwNDNkXHUwNDMwXHUwNDQ3XHUwNDM1XHUwNDNkXHUwNDM4XHUwNDM1IFx1MDQzZlx1MDQzYlx1MDQzMFx1MDQ0Mlx1MDQzNVx1MDQzNlx1MDQzMCIsICJkb2N1bWVudE51bWJlciI6ICIwMDAwMCIsICJwYXltZW50SWQiOiAiMDAwMDAwMDAwMCIsICJkYXRlIjogIjIwMTgtMTAtMDEiLCAid2ViaG9va1R5cGUiOiAib3V0Z29pbmdQYXltZW50IiwgImN1c3RvbWVyQ29kZSI6ICIzMDAxMjMxMjMifQ.UCRqWxMHocDG83NeHxL9DdaZuLdnvWKC-zcbQL80PM3LAauP9H98tC80krR_jfGP7aXa8kOKrP2Qq5JSy4_lITViSuJKhQW9tHxQA0zJwwHmUOGIU6RNDmPVKQScoh2LlTcCpu-94v8O2GSa5nssVVj4_3mZT8VdjagpxMCuISYFRaUTnvjskkNOSmrXZIuoUHHL9h5sc6o7E8i6mMI0tMHRArgsM2Ge7de4ajkEsGQsJNBXEJV9rA4Ba5a4XdPlo1wE5nMLziKh5w-CVkotO2KyKCTLgIlg6tNwmBs0saRMJU3kJfiBrLsuPoW34ZKPoqvgQEP8q9AayjC-eTrtsC94cNoiwz2I8-KLhnZmIXKahO_p-6kCBzQfJyz-H0sfJQjDBC1zFQieP79sarBPqYmCJ7eNNttyoGdJz2xDoLFStBRU2ua198PYSHsuBsdoBQ_6FO6BWCnnL66mzMKXPRpQ-uOIa-t73wTuzCre3HZVUpFKlzrfts4BxuG4Yy6o
incomingSbpPayment — о входящих платежах через СБП

По этому типу вебхука мы отправляем уведомление, только если деньги зачисляются через Систему быстрых платежей. В нём указываются:

  • operationId — идентификатор операции
  • qrcId — идентификатор QR-кода
  • payerName — данные покупателя: имя, отчество и первая буква фамилии
  • payerMobileNumber — номер телефона
  • amount — сумма операции
  • brandName — наименование ТСП
  • webhookType — incomingSbpPayment
  • customerCode — уникальный идентификатор клиента
  • merchantId — идентификатор ТСП
  • refTransactionId — идентификатор транзакции, по которой осуществляется возврат
  • purpose — назначение платежа

Уведомление обычно приходит в течение 5 секунд с момента зачисления денег по QR-коду.

Пример с телом вебхука по событию incomingSbpPayment:

eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJvcGVyYXRpb25JZCI6ICJBMjIwMDExMDAyNjM4MjAxMDAwMDA1MzNFNjI1RkNCMyIsICJxcmNJZCI6ICJBUzEwMDA2RFBSVEVGUEZTOUhKOVNRU0RTVlJISkQzTCIsICJhbW91bnQiOiAiMC4zMyIsICJwYXllck1vYmlsZU51bWJlciI6ICIrOTk5OTEyMzQ1NjciLCAicGF5ZXJOYW1lIjogIlx1MDQxOFx1MDQzMlx1MDQzMFx1MDQzZCBcdTA0MThcdTA0MzJcdTA0MzBcdTA0M2RcdTA0M2VcdTA0MzJcdTA0MzhcdTA0NDcgXHUwNDE4LiIsICJicmFuZE5hbWUiOiAiXHUwNDFhXHUwNDNlXHUwNDQ0XHUwNDM1XHUwNDM5XHUwNDNkXHUwNDRmIFx1MDQ0MyBcdTA0MTBcdTA0NDBcdTA0NDJcdTA0MzVcdTA0M2NcdTA0MzAiLCAibWVyY2hhbnRJZCI6ICJNRjAwMDAwMDAwMDEiLCAicHVycG9zZSI6ICJcdTA0MWVcdTA0M2ZcdTA0M2JcdTA0MzBcdTA0NDJcdTA0MzAgXHUwNDNmXHUwNDNlIFx1MDQ0MVx1MDQ0N1x1MDQzNVx1MDQ0Mlx1MDQ0MyBcdTIxMTYgMSBcdTA0M2VcdTA0NDIgMDEuMDEuMjAyMS4gXHUwNDExXHUwNDM1XHUwNDM3IFx1MDQxZFx1MDQxNFx1MDQyMSIsICJ3ZWJob29rVHlwZSI6ICJpbmNvbWluZ1NicFBheW1lbnQiLCAiY3VzdG9tZXJDb2RlIjogIjMwMDEyMzEyMyIsICJyZWZUcmFuc2FjdGlvbklkIjogImNiMWVmMTBiLTM5ZTktNGU1NS1hZWY5LWQ2YmNjMzk2ZmYwZiJ9.QroEOEYw-fxniFzvjcrgihSeYOhE9GLVuMwI9Uuc0ubuwc-wYP2pHRYF4Lu2-bqHZk2jP5QHn2aDYWFVWi3vBi6sbVTa_n3Y9qZ1ROjbRaF-Uuah5XyzijwNG0I--0jj-vvn3D3caC1mw6dOCP1Ehkd5ipZWtcsrzu0wPxni8bsiqDIBVcA4hg3a6Iu5AORANwy4whiFo295bzf1Y_fdBhZO1QjZqv3-Cc_fF9liKd56UMfljm3ChqVwCdNF85e69PXAjkeicp-pH12kkgeflA2zLq_LFurAZj9_JkrOS9qSpfDqYf0m-ciHYFVYJNGH4PZnIPOa7iYNlGi0WjVbxE6uJX2EDHnYCZ1qXAkdGlm3K1CNvmBzjIUEowWOmD9bkq4INGsd9MMmRRSo-K3fqqjPNXkVGw2-_ZbIgemG9TD4bGeZCWN4shXpzrWGcyfQ7mrhRW0XiECGxTy8K4QuK-WsijGBlkYGd-bZuBa9qyZXLnsX4FhTIdEHYDc_eW6v
incomingSbpB2BPayment — о входящих платежах через B2B QR-код по СБП

По этому типу вебхука мы отправляем уведомление только при зачислении денег через B2B QR-коды, созданные через Систему быстрых платежей. В вебхуке указываются:

  • qrcId — идентификатор QR-кода
  • customerCode — уникальный идентификатор клиента
  • webhookType — incomingSbpB2BPayment
  • amount — сумма операции
  • purpose — назначение платежа

Уведомление обычно приходит в течение 10 секунд с момента зачисления денег по QR-коду.

Пример с телом вебхука по событию incomingSbpB2BPayment:

eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJxcmNJZCI6ICJBUzEwMDA2RFBSVEVGUEZTOUhKOVNRU0RTVlJISkQzTCIsICJhbW91bnQiOiAiMC4zMyIsICJwdXJwb3NlIjogIlx1MDQxZVx1MDQzZlx1MDQzYlx1MDQzMFx1MDQ0Mlx1MDQzMCBcdTA0M2ZcdTA0M2UgXHUwNDQxXHUwNDQ3XHUwNDM1XHUwNDQyXHUwNDQzIFx1MjExNiAxIFx1MDQzZVx1MDQ0MiAwMS4wMS4yMDIxLiBcdTA0MTFcdTA0MzVcdTA0MzcgXHUwNDFkXHUwNDE0XHUwNDIxIiwgIndlYmhvb2tUeXBlIjogImluY29taW5nU2JwQjJCUGF5bWVudCIsICJjdXN0b21lckNvZGUiOiAiMzAwMTIzMTIzIn0.dty4QICBwDnglK9VKFchdKxG_QbOPHKHmqxSan5uDUadMT61391lNiRj7cKGiH35heZc7GEKp3rwmuqLIEwLcUQts2t90Baw7gVeHQSQMyeBjIEFoBXgkDCNsRwqJISmW8NfEv6xX87IEjLp6wKJi3VmfF_sffW6EpaXzyScA9DPIKjtUA9U-W5t8JmjgWMbXK41ghfiSlYiCOpOVOleod3R-jjzsGI3nEYExDqWWz3VgjsFGwHLGKoWBzhqtSL-NBTp5rE82N5eZrWF_4n8tkAmPzShQY9Rh2VxFVwAyqIezqYHYAcBBW_6vbZvA_XFVB8UkjOqJKRWSFHEOsmu7o3JYOq0WnI1iJ_Hfsi0W1HjjgaZuMhyezqNsGWib6u_g-86ekEPxXGFFlKglHg52t8iU-YE8dt7e7s890l_4_C2tRBbOuLrdnITrHzepiby6A74Qdt29j2Ffo0Vkd8qRNWx7RmWjy1X7NN0h595imLbBFWeYPYNOdG0M7CBQUox
acquiringInternetPayment — о входящих платежах только по платёжным ссылкам

По этому типу вебхука мы отправляем уведомление, только если по ссылке платят с карты или через Систему быстрых платежей.
Обычно он доставляется за 5-10 секунд с момента оплаты.

При платеже по номеру карты мы передадим следующую информацию:

  • amount — сумма платежа
  • paymentType — card
  • operationId — идентификатор платежа
  • webhookType — acquiringInternetPayment
  • customerCode — уникальный идентификатор клиента
  • merchantId — идентификатор торговой точки в интернет-эквайринге
  • consumerId — идентификатор покупателя
  • purpose — назначение платежа
  • status — статус платежа, может принимать значения:
    • AUTHORIZED — деньги успешно заморожены на счёте плательщика (значение актуально только для двухэтапной оплаты)
    • APPROVED — деньги успешно списаны со счёта, оплата завершена
  • paymentLinkId — номер заказа, который вы передали в одноимённом поле при создании платёжной ссылки или подписки

Пример с телом вебхука по событию acquiringInternetPayment при оплате картой:

eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJjdXN0b21lckNvZGUiOiAiMzAwMTIzMTIzIiwgImFtb3VudCI6ICIwLjMzIiwgInBheW1lbnRUeXBlIjogImNhcmQiLCAib3BlcmF0aW9uSWQiOiAiYmVlYWM4YTQtNjA0Ny0zZjM4LTg5MjItYTY2NGU2YjVjNDNiIiwgInB1cnBvc2UiOiAiXHUwNDFlXHUwNDNmXHUwNDNiXHUwNDMwXHUwNDQyXHUwNDMwIFx1MDQzZlx1MDQzZSBcdTA0NDFcdTA0NDdcdTA0MzVcdTA0NDJcdTA0NDMgXHUyMTE2IDEgXHUwNDNlXHUwNDQyIDAxLjAxLjIwMjEuIFx1MDQxMVx1MDQzNVx1MDQzNyBcdTA0MWRcdTA0MTRcdTA0MjEiLCAid2ViaG9va1R5cGUiOiAiYWNxdWlyaW5nSW50ZXJuZXRQYXltZW50IiwgIm1lcmNoYW50SWQiOiAiMjAwMDAwMDAwMDAxMjM0IiwgImNvbnN1bWVySWQiOiAiOTE3ZWQzODktYTEyMC00MjkxLThlNzMtMzhjNmVmN2Q2NzcwIiwgInN0YXR1cyI6ICJBUFBST1ZFRCIsICJwYXltZW50TGlua0lkIjogIjEyMzQ1LWFiLWNkIn0.pk1ToiIUopK7WxcdLnXEmD1I_Z7H_1yQcYyp3xxiQIltS0aqlTV2eA8R0RzvA3M39F7jApls6CTisslKB_sN1bn9zMJeLyGxezRXC1jljYLbvraLSvsyFZzh6t848hbcn1uUsM1lFwCVIXXZ-sMHkHobGlb0hdGbiX13O1cAwCa55bBhxHjoMJRDWc_0GaWteCBxmGUo2sDEgFmE5vUMvNB35dPNE5GrOKcnTXIpOSe-KX_kHUW8ECYEdQTP_9533LagQI5dP2gvbcyuUn0JApMxnSqS0uzrDiic84SLGwL3bICzxYd6nh8B-zJl5yWiswnwW7lH1xr6qnIjLRZzi2SPiarRnn5rKV-VRr7jKHQoUUZ993aYOFM8cDRN4gArziC-RMOiX-Qu4Gv1ZcZWYgOYhC2brNG3buvGcTAzkiQ9iaJyR2GCEryveSEqckmi0EEUfQdgWGsyjX1CbkwC4-enXWMKWhnpWG0g_8TjsL_MB9m5egEnyCItkWUYr-s6

При платеже через Систему быстрых платежей (СБП) мы передадим следующую информацию:

  • amount — сумма платежа
  • paymentType — sbp
  • transactionId — идентификатор платежа в СБП
  • purpose — назначение платежа
  • qrcId — идентификатор QR-кода
  • merchantId — идентификатор торговой точки в интернет-эквайринге
  • operationId — идентификатор платежа
  • webhookType — acquiringInternetPayment
  • customerCode — уникальный идентификатор клиента
  • payerName — данные покупателя: имя, отчество и первая буква фамилии
  • status — статус платежа, для платежей через СБП всегда будет значение APPROVED
  • paymentLinkId — номер заказа, который вы передали в одноимённом поле при создании платёжной ссылки или подписки

Пример с телом вебхука по событию acquiringInternetPayment при оплате через СБП:

eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJjdXN0b21lckNvZGUiOiAiMzAwMTIzMTIzIiwgImFtb3VudCI6ICIwLjMzIiwgInBheW1lbnRUeXBlIjogInNicCIsICJvcGVyYXRpb25JZCI6ICJiZWVhYzhhNC02MDQ3LTNmMzgtODkyMi1hNjY0ZTZiNWM0M2IiLCAidHJhbnNhY3Rpb25JZCI6ICI0M2M2M2VjMS00MmZhLWE3MDQtZGRlNy02MDI1YzIwYjk2Y2UiLCAicHVycG9zZSI6ICJcdTA0MWVcdTA0M2ZcdTA0M2JcdTA0MzBcdTA0NDJcdTA0MzAgXHUwNDNmXHUwNDNlIFx1MDQ0MVx1MDQ0N1x1MDQzNVx1MDQ0Mlx1MDQ0MyBcdTIxMTYgMSBcdTA0M2VcdTA0NDIgMDEuMDEuMjAyMS4gXHUwNDExXHUwNDM1XHUwNDM3IFx1MDQxZFx1MDQxNFx1MDQyMSIsICJxcmNJZCI6ICJBUzEwMDA2RFBSVEVGUEZTOUhKOVNRU0RTVlJISkQzTCIsICJwYXllck5hbWUiOiAiXHUwNDE4XHUwNDMyXHUwNDMwXHUwNDNkIFx1MDQxOFx1MDQzMlx1MDQzMFx1MDQzZFx1MDQzZVx1MDQzMlx1MDQzOFx1MDQ0NyBcdTA0MTguIiwgIndlYmhvb2tUeXBlIjogImFjcXVpcmluZ0ludGVybmV0UGF5bWVudCIsICJtZXJjaGFudElkIjogIjIwMDAwMDAwMDAwMTIzNCIsICJzdGF0dXMiOiAiQVBQUk9WRUQiLCAicGF5bWVudExpbmtJZCI6ICIxMjM0NS1hYi1jZCJ9.nSLGpQd0H1BgVtC-W4KV4tb9dSB8Trw0v58rLE1fKgfnZtK0BRXvj-9mTxKXXFMDNZ5ngwHS8_dXC11VfeRWOBH31GFF6lBd7wh0DLnFzlVpPbwNBbwLFS3k0S8vyz7MkJsAc43JniARDfnGSVz6jwK2Ou6QVCCYcF4LGfyYmXAvYXpnhnopO4_KOBTiY3dcP89WGbDGUT_b-9tSPPnxlDBJamnhRkqnRPsCJurcwaud6E7shQHiG0uCugMZig_iNjt2mE4Thll_OI2BH7Hs-4IiXw2O8MFEvIkIECPjpD3wlszGA7piOtOjyOkeLuGsAXk4D0YrptiR7qReo2eyOE9SajmcjjvV9OfpEOHwo4uHkLOOjHqPke9ITVW3ZsvJ6gSWcQS-1z60BUKa81HLTM_SGj8g4g-3nOy6CEfyNk68cnTfjxgRMCrxDkpWOs33LnafGNfP8r97NArwIZCThVXME4SnaDu2hShMEvkxG-WJSjVXOgPhvAe_Q7M1PF9X

При платеже через сервис «Долями» мы передадим следующую информацию:

  • customerCode — уникальный идентификатор клиента
  • operationId — идентификатор платежа
  • status — статус платежа, может быть только в значении APPROVED
  • amount — сумма платежа
  • paymentType — способ оплаты, всегда в значении dolyame
  • webhookType — тип вебхука, всегда acquiringInternetPayment
  • purpose — назначение платежа
  • merchantId — идентификатор торговой точки в интернет-эквайринге
  • paymentLinkId — номер заказа, который вы передали в одноимённом поле при создании платёжной ссылки или подписки

Пример с телом вебхука по событию acquiringInternetPayment при оплате Долями:

eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJjdXN0b21lckNvZGUiOiAiMzAwMTIzMTIzIiwgImFtb3VudCI6ICIwLjMzIiwgInBheW1lbnRUeXBlIjogImRvbHlhbWUiLCAib3BlcmF0aW9uSWQiOiAiYmVlYWM4YTQtNjA0Ny0zZjM4LTg5MjItYTY2NGU2YjVjNDNiIiwgInB1cnBvc2UiOiAiXHUwNDFlXHUwNDNmXHUwNDNiXHUwNDMwXHUwNDQyXHUwNDMwIFx1MDQzZlx1MDQzZSBcdTA0NDFcdTA0NDdcdTA0MzVcdTA0NDJcdTA0NDMgXHUyMTE2IDEgXHUwNDNlXHUwNDQyIDAxLjAxLjIwMjEuIFx1MDQxMVx1MDQzNVx1MDQzNyBcdTA0MWRcdTA0MTRcdTA0MjEiLCAid2ViaG9va1R5cGUiOiAiYWNxdWlyaW5nSW50ZXJuZXRQYXltZW50IiwgIm1lcmNoYW50SWQiOiAiMjAwMDAwMDAwMDAxMjM0IiwgInN0YXR1cyI6ICJBUFBST1ZFRCIsICJwYXltZW50TGlua0lkIjogIjEyMzQ1LWFiLWNkIn0.J5GZjKgeScrbD5lHqbQEP3oJkmwMYKDSUBUrrSN07qNELpApEp9IclABEolS-ANh7_xVXF-9D8uLm4rNzrLhid90SHMwWOFTUW4BT-7lNM4jogaBUFqUf2d-kPfUI16-jFdNQIy-are6d9HbMjZGXunBUZpBOr2Pz8wEGJyaaywh4tBdgKMQbC-an1sY0JwJqdRK7memw-hv9gsDIAqLSSih80L4N7F2PUrSbzfbTrNj7u5nvYFPT3DkKknGh2IvHx27nzo9tK-JBNxgHN0HQOg3EOYFJV3e0H_JhGZqlxoU0zo2YNHeB7cZJ0qZy7HZMXv2g1Qlae-2JthyJjF9NEC2f8W79d8Z3CZJw40l4z0QXDIrMAgf01bHFt4eanP6fhq39iko04EbBiHH8Zmjhn5hLkAGymoc_rC60wDl8v11Tb1YJYO2xdNsRNaMaYuvFOhLqnjmgjQeEQoL6iHGB7ObUbAWB4_BU4M524Z_KpmNqmigRNSZDEdDCrYYPncd

Несколько особенностей в работе вебхуков

  • Если на отправленный вебхук мы не получили ответ с кодом состояния HTTP 200, а получили любой другой код, то будем отправлять его повторно 30 раз с периодичностью в 10 секунд.
  • Для проверки доступности указанного вами хоста при создании или изменении вебхука мы отправим на ваш URL по одному тестовому вебхуку на каждое из событий, на которые вы подписаны.
    Если в статусе ответа не придёт код HTTP 200, то вебхук не будет создан или изменён.
  • Подключить или изменить вебхук можно только по протоколу HTTPS на порт 443. Создать вебхук на другой порт или протокол не получится.
  • Вебхук отправляется с заголовком Content-Type: text/plain.

Примеры обработки вебхуков

Примеры кода, который успешно обрабатывает вебхук

Python
from aiohttp import web
import jwt
from jwt import exceptions
import json

# Публичный ключ Точка Банка. Может быть получен из https://enter.tochka.com/doc/openapi/static/keys/public
key_json = '{"kty":"RSA","e":"AQAB","n":"rwm77av7GIttq-JF1itEgLCGEZW_zz16RlUQVYlLbJtyRSu61fCec_rroP6PxjXU2uLzUOaGaLgAPeUZAJrGuVp9nryKgbZceHckdHDYgJd9TsdJ1MYUsXaOb9joN9vmsCscBx1lwSlFQyNQsHUsrjuDk-opf6RCuazRQ9gkoDCX70HV8WBMFoVm-YWQKJHZEaIQxg_DU4gMFyKRkDGKsYKA0POL-UgWA1qkg6nHY5BOMKaqxbc5ky87muWB5nNk4mfmsckyFv9j1gBiXLKekA_y4UwG2o1pbOLpJS3bP_c95rm4M9ZBmGXqfOQhbjz8z-s9C11i-jmOQ2ByohS-ST3E5sqBzIsxxrxyQDTw--bZNhzpbciyYW4GfkkqyeYoOPd_84jPTBDKQXssvj8ZOj2XboS77tvEO1n1WlwUzh8HPCJod5_fEgSXuozpJtOggXBv0C2ps7yXlDZf-7Jar0UYc_NJEHJF-xShlqd6Q3sVL02PhSCM-ibn9DN9BKmD"}'
key = json.loads(key_json)
jwk_key = jwt.jwk_from_dict(key)


async def handle(request: web.Request):
payload = await request.text()

try:
# тело вебхука
webhook_jwt = jwt.JWT().decode(
message=payload,
key=jwk_key,
)
except exceptions.JWTDecodeError:
# Неверная подпись, вебхук не от Точка Банка или с ним что-то не так
pass

return web.Response(status=200)


app = web.Application()
app.router.add_route('POST', '/', handle)

if __name__ == '__main__':
web.run_app(app, port=80)

PHP
<?php
require __DIR__ . "/vendor/autoload.php";
use Firebase\JWT\JWK;
use Firebase\JWT\JWT;


$entityBody = file_get_contents("php://input");

// Публичный ключ Точка Банка. Может быть получен из https://enter.tochka.com/doc/openapi/static/keys/public
$json_key = '{"kty":"RSA","e":"AQAB","n":"rwm77av7GIttq-JF1itEgLCGEZW_zz16RlUQVYlLbJtyRSu61fCec_rroP6PxjXU2uLzUOaGaLgAPeUZAJrGuVp9nryKgbZceHckdHDYgJd9TsdJ1MYUsXaOb9joN9vmsCscBx1lwSlFQyNQsHUsrjuDk-opf6RCuazRQ9gkoDCX70HV8WBMFoVm-YWQKJHZEaIQxg_DU4gMFyKRkDGKsYKA0POL-UgWA1qkg6nHY5BOMKaqxbc5ky87muWB5nNk4mfmsckyFv9j1gBiXLKekA_y4UwG2o1pbOLpJS3bP_c95rm4M9ZBmGXqfOQhbjz8z-s9C11i-jmOQ2ByohS-ST3E5sqBzIsxxrxyQDTw--bZNhzpbciyYW4GfkkqyeYoOPd_84jPTBDKQXssvj8ZOj2XboS77tvEO1n1WlwUzh8HPCJod5_fEgSXuozpJtOggXBv0C2ps7yXlDZf-7Jar0UYc_NJEHJF-xShlqd6Q3sVL02PhSCM-ibn9DN9BKmD"}';
$jwks = json_decode($json_key, true, 512, JSON_THROW_ON_ERROR);

try {
$decoded = JWT::decode($entityBody, JWK::parseKey($jwks,"RS256"));
} catch (\UnexpectedValueException $e) {
// Неверная подпись, вебхук не от Точка Банка или с ним что-то не так
echo "Invalid webhook";
}


// Тело вебхука
$decoded_array = (array) $decoded;


http_response_code(200);
Java
import com.nimbusds.jose.JOSEException;
import com.nimbusds.jose.crypto.RSASSAVerifier;
import com.nimbusds.jose.jwk.JWK;
import com.nimbusds.jwt.SignedJWT;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.text.ParseException;

@RestController
@RequestMapping("/")
public class WebhookResource {

@PostMapping(value = "/")
public void tochkaWebhook(@RequestBody String webhookData) throws ParseException, JOSEException {

// Публичный ключ Точка Банка. Может быть получен из https://enter.tochka.com/doc/openapi/static/keys/public
var jsonKey = "{\"kty\":\"RSA\",\"e\":\"AQAB\",\"n\":\"raJQJyBXIgS1YzYFkmQGq5XtadLVvMcx5u-guR2r5ZgSb-HGUG7HF5NM-NJeL9YrVtjjGf8VNLpwGbeejsS9LRniPfKkCYaVqV1DSGOZ6RTOtqN3jKW1W86cVb-LffrQo3eFhPX5V464uduPu9RouFplQ7wprY5ewke0Yj0FCOr6Ebxlpql-aJp_wk8JSzzFN17IC5tfUXgGDjEmnMjxag_CntnJtKWmw69ivhrq5sTPspclL3Ij8K_Qk0MwAZFCci25WxIuKQe7Mk4dvay6CUfrCbAgEtqMcWUSqoG7pdBig59lo-kIMWvVQIAWjo2JhI7VlI_ssvFtiJg5T9myE914aESFZ8jEheQv-4kZ81F0qk02k2mJ4C7AasGhbzC4F8YQ7nbr49v1n_j8udNZZXA8vI2hacG517A66-uvEHIxXRUo_gIcubR-vdbJbaK_k8JRLJNmdf4B9HchJ6VD9aGjMT0GYfhQ8jf16E1L_U4G4XLB5cnb0h88PD2MaMGP\"}";
var jwkKey = JWK.parse(jsonKey);

var jwtData = SignedJWT.parse(webhookData);

var verifier = new RSASSAVerifier(jwkKey.toRSAKey().toRSAPublicKey());
if (!jwtData.verify(verifier)) {

// Неверная подпись, вебхук не от Точка Банка или с ним что-то не так
System.out.println("Invalid webhook");
return;
}

// Тело вебхука
var webhookParsedData = jwtData.getJWTClaimsSet().getClaims();
return;
}
}

Вебхуками можно управлять с помощью методов:

  • Get Webhooks — чтобы получить список всех вебхуков, настроенных на приложение
  • Create Webhook — чтобы создать новый вебхук
  • Edit Webhook — чтобы изменить URL или тип существующего вебхука
  • Delete Webhook — чтобы удалить вебхук
  • Send Webhook — чтобы отправить тестовый вебхук