Alerty płatności Stripe: telefon, gdy pieniądze są zagrożone

Kieruj webhooki Stripe na telefon z pilnością odpowiednią dla każdego zdarzenia — ciche powiadomienie o udanej płatności i połączenie przy sporze z terminem odpowiedzi.

Aktualizacja

Spis treści

Stripe wysyła ci maile o wszystkim, a więc o niczym. Udane obciążenie, nieudane odnowienie subskrypcji i chargeback trafiają jako ten sam rodzaj wiadomości do tej samej skrzynki, a zanim je przeczytasz, różnica między nimi już przepadła.

Rozwiązaniem nie jest więcej powiadomień. Rozwiązaniem jest nadanie każdemu zdarzeniu Stripe pilności, na jaką naprawdę zasługuje: cichy push, gdy ktoś zapłacił, alert czasowo krytyczny, gdy odnowienie się nie powiodło, i telefon, gdy przychodzi spór z terminem odpowiedzi.

Które zdarzenia Stripe naprawdę cię potrzebują

Nie każde zdarzenie zasługuje na powiadomienie, a te, które zasługują, nie są równie pilne.

Zdarzenie StripeDlaczego to ważnePilność
payment_intent.succeededKtoś zapłacił. Dobrze wiedzieć, nigdy pilne.Zwykła
invoice.payment_failedOdnowienie się nie powiodło. Zostaje okno ponowień, zanim subskrypcja wygaśnie.Czasowo krytyczna
charge.dispute.createdChargeback. Stripe podaje termin odpowiedzi wyznaczony przez organizację kartową, a jego przekroczenie z automatu przegrywa sprawę.Połączenie
payment_intent.payment_failedJednorazowa płatność się nie powiodła. Przydatne w skali, hałaśliwe pojedynczo.Zwykła albo żadna

Tylko spór uzasadnia telefon. Reszta może poczekać, aż sam sięgniesz po telefon; chargeback zauważony tydzień później to pieniądze, których i tak byś nie zatrzymał.

Krok 1 — Jeden kanał na poziom pilności

Utwórz w Echobell trzy kanały, bo pilność jest ustawieniem kanału:

  • Stripe · Przychód — zwykłe powiadomienia o udanych płatnościach
  • Stripe · Płatność nieudana — czasowo krytyczne
  • Stripe · Spór — połączenie

Skopiuj adres webhooka każdego kanału z jego ustawień. Stripe będzie kierował na wszystkie trzy.

Przy okazji włącz w każdym Tylko POST. Stripe zawsze wysyła POST-em, a to zapobiega przypadkowemu wyzwoleniu kanału przez podgląd linku albo autouzupełnianie paska adresu.

Krok 2 — Dodaj endpointy w Stripe

W panelu Stripe przejdź do Developers → Webhooks → Add endpoint, wklej adres kanału i zaznacz tylko te zdarzenia, którymi ma zająć się ten kanał.

Dodaj po jednym endpoincie na kanał zamiast jednego na wszystko. Stripe pozwala wybierać zdarzenia dla każdego endpointu, więc routing dzieje się po jego stronie, a twoje kanały pozostają proste.

Jeśli wolisz jeden endpoint, skieruj go na jeden kanał i filtruj warunkiem:

type == "charge.dispute.created"

Warunki pisze się bez nawiasów {{ }}, których używają szablony.

Krok 3 — Zamień payload w coś czytelnego

Stripe wysyła ciało JSON o takim kształcie:

{
  "type": "charge.dispute.created",
  "data": {
    "object": {
      "amount": 4900,
      "currency": "usd",
      "reason": "fraudulent",
      "status": "warning_needs_response"
    }
  }
}

Szablony kanału sięgają więc do data.object:

Tytuł

Spór: {{data.object.reason}}

Treść

{{data.object.amount}} {{data.object.currency}} zakwestionowane
Status: {{data.object.status}}

Pułapka, w którą wpadają wszyscy: kwoty Stripe podawane są w najmniejszej jednostce waluty. 4900 to 49,00 $, a nie 4900 $. Szablony Echobell podstawiają wartość bez zmian, więc albo podziel przed wysłaniem, albo napisz walutę z tyłu i czytaj to jako centy. Jeśli liczba musi się zgadzać od pierwszego spojrzenia, umieść dzielenie w tym, co stoi między Stripe a Echobell — Workerze, automatyzacji, twoim własnym endpoincie.

Dla kanału przychodów ta sama myśl w mniejszej liczbie słów:

Tytuł

+{{data.object.amount}} {{data.object.currency}}

Treść

{{data.object.description}}

Krok 4 — Przetestuj bez czekania na prawdziwą płatność

CLI Stripe potrafi wystrzelić prawdziwe payloady zdarzeń na twój endpoint:

stripe trigger payment_intent.succeeded
stripe trigger charge.dispute.created

Zrób to, zanim zaczniesz na tym polegać. To także najszybszy sposób, by zobaczyć, co wyrenderuje twój szablon, gdy pole, które uważałeś za pewne, przyjdzie jako null.

Czego ta konfiguracja nie daje

Dwa ograniczenia, które warto znać, zanim postawisz to przed swoim przychodem.

Echobell nie weryfikuje podpisu Stripe. Stripe podpisuje każdy webhook nagłówkiem Stripe-Signature, a weryfikacja wymaga sekretu endpointu. Endpoint webhooka Echobell tej kontroli nie wykonuje, więc adres kanału jest jedyną rzeczą, która go chroni. Traktuj go jak sekret, zostaw włączone Tylko POST i nie wklejaj go do publicznego repozytorium ani na zrzut ekranu.

Słabą kontrolę zdroworozsądkową możesz dodać warunkiem:

header["stripe-signature"] != ""

To potwierdza, że coś wysyła żądanie w kształcie Stripe. Nie potwierdza, że był to Stripe. Jeśli sfałszowane powiadomienie wyrządziłoby realną szkodę — a nie tylko wywołało chwilę zamieszania — postaw z przodu własny endpoint, tam zweryfikuj podpis i niech to on woła Echobell.

To ścieżka alertowania, nie księga. Stripe ponawia nieudane dostarczenia webhooków, ale powiadomienia nie są zapisem tego, co się wydarzyło. Uzgadniaj ze Stripe, nie z historią powiadomień.

Najczęstsze pytania

Czy Stripe może zadzwonić do mnie bezpośrednio?

Nie. Stripe wysyła maile i webhooki. Telefon oznacza skierowanie webhooka do czegoś, co potrafi go wykonać.

Czy alert o sporze naprawdę mnie obudzi?

Jeśli kanał jest w trybie połączenia — tak: przychodzi jako połączenie przychodzące i dzwoni przez Skupienie oraz Nie przeszkadzać. Zobacz przebijanie trybu Skupienia w iOS dla krytycznych alertów.

Czy mój współzałożyciel może dostawać te same alerty?

Tak. Udostępnij kanał, a każdy subskrybent wybiera własny typ powiadomienia. Ty możesz odbierać połączenia, podczas gdy ktoś inny dostaje o tym samym zdarzeniu cichy push.

A tryb testowy?

Zdarzenia trybu testowego Stripe trafiają do endpointów zarejestrowanych w trybie testowym. Zarejestruj adres kanału w obu, jeśli chcesz widzieć ten ruch, albo tylko w testowym, dopóki nie zaufasz konfiguracji.

Podsumowanie

Trzy kanały, trzy endpointy, po jednym szablonie. Rzecz nie w tym, że Stripe cię powiadamia — już to robił. Rzecz w tym, żeby chargeback przestał wyglądać dokładnie jak paragon.

Pobierz Echobell na iPhone'a albo weź go z Google Play, a potem uruchom stripe trigger charge.dispute.created i pozwól telefonowi zadzwonić raz celowo.


Powiązane treści