Steven8579 Ответов: 1

Как я могу заставить stripe автоматически обновлять мою базу данных после повторяющейся транзакции


У меня есть база данных под названием Биллинг, которую я хотел бы заполнить деталями транзакций после обработки повторяющихся платежей каждый месяц. Я знаю, что это можно сделать вручную, но мне было интересно, есть ли способ сделать это автоматически, как только транзакция будет обработана Stripe? У меня есть приложение .NET MVC на C#, которое я использую для того, чтобы пользователь подписался на повторяющийся биллинг с помощью Stripe API. Если кто-нибудь сможет указать мне правильное направление, я буду очень признателен.

Пожалуйста, не думайте, что я просто ищу кого-то, кто сделает это за меня. Честно говоря, я просто ищу совета, как мне подойти к этому вопросу. Может быть, кто-то написал статью или разместил видео на эту тему?

Спасибо,
Стивен

Что я уже пробовал:

Я успешно настроил использование Stripe API для настройки повторяющегося выставления счетов, но я не знаю, как заставить его обновлять базу данных каждый месяц, как только он обрабатывается.

Garth J Lancaster

Я быстро взглянул на Stripe API - я видел "Webhooks", но я не уверен, что это даст вам то, что вы хотите. Не могли бы вы автоматически запускать отчет, скажем, в полночь каждый день и использовать эту информацию для обновления вашей базы данных, я не уверен, что это данные счета-фактуры для каждого клиента или ? .. если данные отчета доступны, было бы довольно легко настроить сервисное приложение для обновления вашей базы данных

1 Ответов

Рейтинг:
1

Sandeep Mewara

@garthjlancaster был точен в своем предложении. Stripe предоставляет webhook для обработки очень похожих usecase/рабочих процессов. Подробности: Получайте уведомления о событиях с помощью webhooks[^]

Цитата:
Прослушивайте события в вашей учетной записи Stripe, чтобы ваша интеграция могла автоматически вызывать реакции.

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

Теперь, чтобы вы проецировали в ASP.NET, вам нужно будет настроить приемник, а затем обработать его.
Пример фрагмента кода:
public class StripeController : Controller
{
    /// From: https://medium.com/c-sharp/stripe-webhooks-handling-in-asp-net-mvc-c-cff9889152b9 
    /// <summary>
    /// Stripe webhook handling
    /// </summary>
    /// <returns></returns>
    [AllowAnonymous]
    [HttpPost]
    [Route("webhook")]
    public IActionResult StripeWebhook()
    {
        try
        {
            var json = new StreamReader(HttpContext.Request.Body).ReadToEnd();
            
            // validate webhook called by stripe only
            var stripeEvent = EventUtility.ConstructEvent(json, Request.Headers["Stripe-Signature"], "---REPLACE STRIPE WEBHOOK SECRET---");

            switch (stripeEvent.Type)
            {
                case "customer.created":
                    var customer = stripeEvent.Data.Object as Customer;
                    // do work

                    break;

                case "customer.subscription.created":
                case "customer.subscription.updated":
                case "customer.subscription.deleted":
                case "customer.subscription.trial_will_end":
                    var subscription = stripeEvent.Data.Object as Subscription;
                    // do work

                    break;

                case "invoice.created":
                    var newinvoice = stripeEvent.Data.Object as Invoice;
                    // do work

                    break;

                case "invoice.upcoming":
                case "invoice.payment_succeeded":
                case "invoice.payment_failed":
                    var invoice = stripeEvent.Data.Object as Invoice;
                    // do work

                    break;

                case "coupon.created":
                case "coupon.updated":
                case "coupon.deleted":
                    var coupon = stripeEvent.Data.Object as Coupon;
                    // do work

                    break;

                    // DO SAME FOR OTHER EVENTS
            }

            return Ok();
        }
        catch (StripeException ex)
        {
            //_logger.LogError(ex, $"StripWebhook: {ex.Message}");
            return BadRequest();
        }
        catch (Exception ex)
        {
            //_logger.LogError(ex, $"StripWebhook: {ex.Message}");
            return BadRequest();
        }
    }
}

Ссылки на справку:
Обработка веб-Крючков Stripe в ASP.NET MVC (C#)[^]
ASP.NET веб-перехватчиков ресиверы | Майкрософт документы[^]
Полоса веб-перехватчик конечных точек[^]