Tema
/
Mobiliosios programėlės KOTLIN
Pamoka 12 / 14 Stripe mokėjimas ~50 min
📖 Teorija

Kodėl klientas neliečia kortelės

Užsakymas turi picas ir staliuką — trūksta apmokėjimo. Bet mokėjimai — pavojinga sritis: jei tavo programėlė lies kortelės numerį, tau taikysis PCI DSS reikalavimai, auditai ir didžiulė atsakomybė. Todėl taisyklė: klientas niekada neliečia kortelės duomenų.

Sprendimas — Stripe ir jos PaymentSheet. Darbo pasidalijimas:

Tavo serveris  ──(1) sukuria PaymentIntent──▶  Stripe        (kaina, valiuta)
Tavo serveris  ◀──(2) grąžina client_secret──                (vienkartinis „leidimas")
Programėlė     ──(3) client_secret──▶  Stripe PaymentSheet    (surenka kortelę)
PaymentSheet   ──(4) patvirtina tiesiai su Stripe──▶          (kortelė NEeina per tave)
Programėlė     ──(5) sėkmė → įrašo užsakymą tavo DB──▶

Esmė: kortelės duomenys keliauja tiesiai iš PaymentSheet į Stripe, aplenkdami ir tavo programėlę, ir tavo serverį. Tu matai tik client_secret (vienkartinį šio mokėjimo identifikatorių) ir galiausiai — „pavyko/nepavyko".

Du principai:

  • Serveris nustato sumą. Kainą siunčia serveris (POST /create-payment-intent), ne klientas — kitaip vartotojas galėtų sumokėti €0.01 už €20 užsakymą.
  • Užsakymas įrašomas TIK po apmokėjimo. Sukuri PaymentIntentPaymentSheet patvirtina → tik tada POST /orders. Niekada atvirkščiai (kitaip turėtum neapmokėtų užsakymų).

Šioje pamokoje viskas — testinis režimas (Stripe test raktai + testinė kortelė 4242 4242 4242 4242). Jokių tikrų pinigų.

Verify-docs. Stripe Android SDK (23.11.1) PaymentSheet API (rememberPaymentSheet, presentWithPaymentIntent) juda ir kai kurios dalys nurodomos kaip pasenusios. Naudojam realų kodą, bet autorystės metu patikrink dabartinį PaymentSheet srautą ir testinius raktus.