Тинькофф Банк - уведомление в учетную систему по операциям с расчетным счетом

На вашем расчетном счете происходит различные операции - приходы, расходы. Удобно получать в систему уведомление о событии операции по счету. 

Например, вы можете отмечать факт прихода по такому-то платежу. 

Важно. Здесь мы никак не влияем на состояние расчетного счета в банке, а только получаем информацию о движениях по нему.

Как это настроить для Тинькоф Бизнес? 

Документация - https://developer.tinkoff.ru/docs/intro/webhook

Необходимо написать на почту openapi@tinkoff.ru (пишите с любой почты, которая привязана к компании или добавьте персонального менеджера в копию).

  • Какое событие подключаете (статус платежа, новая операция по счету),
  • Адреса метода API на вашей системе, например site.ru/api/action/mymethod
  • ИНН компании.

После одобрения заявки при новой операции будет вызываться ваш метод. 

Необходимо в /asapi реализовать метод входящего API (например, с кодом mymethod). 

Обработка может выглядеть примерно так: 

CREATE PROCEDURE [dbo].[api_tinkoff_mymethod]
@parameters ExtendedDictionaryParameter READONLY,
@username nvarchar(256)
as
begin
     declare @ip nvarchar(max) = (select top 1 value2 from @parameters where lower([key])= 'userip')
  	declare @resp nvarchar(max) = isnull((select top 1 value2 from @parameters where lower([key])= 'inputstream'), '---')
  	exec [dbo].as_trace_warn 
    	@code='tinkoff_tran',
      	@header = 'tinkoff_tran',
      	@itemID  = 0,
      	@text  = @resp, 
      	@username = ''
    execute as_print @ip
     execute as_print @resp
   
    -- Уведомления банка приходят с IP 212.233.80.7 и 91.218.132.2
    if(@ip not in ('212.233.80.7' ,'91.218.132.2')) begin 
    	select '' Msg, 1 Result, 0 errorCode
        select 'BadIP' s1
        return 
    end     
    
    declare @inn nvarchar(max) = JSON_value(@resp, '$.counterParty.inn')
   	declare @name nvarchar(max) =  JSON_value(@resp, '$.counterParty.name')
   	declare @sum float = cast(JSON_value(@resp, '$.rubleAmount') as float) 
   
	declare @financeID int
 	declare @ctrID int = (select id from fin_contragents where inn = @inn)
 	if(@ctrID is not null) begin 
		set @financeID = (select id from fin_finances 
        					where fromID=@ctrID and statusID in (1,2,6) and abs([sum]-@sum)<1 )
	
		if(@financeID is not null) begin 
			exec [dbo].fin_setPayed @financeID = @financeID
		end 
 	end 
    
	-- SELECT 1 - вывод метаданных о результате операции метода API 
	select 'OK' Msg, 1 Result, 0 errorCode
	
	-- SELECT 2 -  вывод самих данных в API (в случае проблем проверьте что этот запрос приходит непустой)
	select 'OK' s1
    
    -- SELECT 3 Outer actions - отправка уведомлений
    if(@financeID is not null) begin 
    	select 'notification' type, 
        'Новый приход отмечен: '+isnull(cast(@sum as nvarchar), '0')+' руб. от  '+ isnull(@name, '---') text , 
        	'someuser' [to], 'common' typeCode, '' url, '' additional
    	from fin_finances where id = @financeID    
    end
end
	

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

Falcon Space - функциональная веб-платформа разработки на узком стеке MS SQL/Bootstrap. Вводная по Falcon Space
Насколько полезной была статья?

Google поиск по нашей документации

Выгода от использования Falcon Space

В 2-3 раза экономнее и быстрее, чем заказная разработка
Более гибкая, чем коробочные решения и облачные сервисы
Используйте готовые решения и изменяйте под свои потребности
Нужна бесплатная консультация?
Планируете делать веб-проект?
Сайт использует Cookie. Правила конфиденциальности OK