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
PaymentIntent→PaymentSheetpatvirtina → tik tadaPOST /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)
PaymentSheetAPI (rememberPaymentSheet,presentWithPaymentIntent) juda ir kai kurios dalys nurodomos kaip pasenusios. Naudojam realų kodą, bet autorystės metu patikrink dabartinįPaymentSheetsrautą ir testinius raktus.