Úvod do API Stripe pre Javu

1. Prehľad

Stripe je cloudová služba, ktorá umožňuje podnikom a jednotlivcom prijímať platby cez internet a ponúka knižnice na strane klienta (JavaScript a natívne mobilné zariadenia) aj knižnice na strane servera (Java, Ruby, Node.js atď.).

Stripe poskytuje vrstvu abstrakcie, ktorá znižuje zložitosť prijímania platieb. Ako výsledok, nemusíme riešiť údaje o kreditnej karte priamo - namiesto toho riešime token symbolizujúci autorizáciu platby.

V tomto tutoriáli vytvoríme ukážkový projekt Spring Boot, ktorý používateľom umožní zadať kreditnú kartu a neskôr bude z karty účtovať určitú sumu pomocou Stripe API pre Javu.

2. Závislosti

Aby sme v projekte využili Stripe API pre Javu, pridáme k nej zodpovedajúcu závislosť pom.xml:

 com.stripe stripe-java 4.2.0 

Jeho najnovšiu verziu nájdeme v úložisku Maven Central.

Pre náš ukážkový projekt budeme využívať pružina-štartér-štartér-rodič:

 org.springframework.boot spring-boot-starter-parent 2.2.6.RELEASE 

Použijeme tiež Lombok na zníženie štandardného kódu a Thymeleaf bude šablónový engine na poskytovanie dynamických webových stránok.

Pretože používame pružina-štartér-štartér-rodič aby sme mohli spravovať verzie týchto knižníc, nemusíme ich verzie zahrňovať do pom.xml:

 org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-thymeleaf org.projectlombok lombok 

Poznač si to Ak používate NetBeans, možno budete chcieť používať Lombok výslovne s verziou 1.16.16, pretože chyba vo verzii Lombok dodávanej s Spring Boot 1.5.2 spôsobuje, že NetBeans generuje veľa chýb.

3. Kľúče API

Skôr ako budeme môcť komunikovať so spoločnosťou Stripe a vykonať platby za kreditnú kartu, musíme zaregistrujte si Stripe účet a získajte tajné / verejné kľúče Stripe API.

Po potvrdení účtu sa prihlásime, aby sme sa dostali na hlavný panel Stripe. Potom v ľavej ponuke vyberieme „Kľúče API“:

Budú dva páry tajných / verejných kľúčov - jeden na test a druhý naživo. Nechajme túto kartu otvorenú, aby sme tieto kľúče mohli neskôr použiť.

4. Všeobecný tok

Účtovanie z kreditnej karty sa uskutoční v piatich jednoduchých krokoch, ktoré zahŕňajú front-end (spustený v prehliadači), back-end (naša aplikácia Spring Boot) a Stripe:

  1. Používateľ prejde na stránku platby a klikne na tlačidlo „Platiť kartou“.
  2. Používateľovi sa zobrazí dialógové okno prekrytia Stripe Checkout, kde sa vyplnia podrobnosti o kreditnej karte.
  3. Používateľ potvrdí voľbou „Zaplatiť“, ktorá:
    • Pošlite kreditnú kartu spoločnosti Stripe
    • Získajte v odpovedi token, ktorý sa pripojí k existujúcemu formuláru
    • Odošlite tento formulár s čiastkou, verejným kľúčom API, e-mailom a tokenom do nášho servera typu back-end
  4. Náš back-end kontaktuje Stripe s tokenom, čiastkou a tajným kľúčom API.
  5. Back-end kontroluje odozvu pruhu a poskytuje používateľovi spätnú väzbu k operácii.

Každému kroku sa budeme podrobnejšie venovať v nasledujúcich častiach.

5. Pokladňa

Stripe Checkout je prispôsobiteľný, mobilný a lokalizovateľný widget, ktorý poskytuje formulár na uvedenie podrobností o kreditnej karte. Prostredníctvom začlenenia a konfigurácie „checkout.js“, Je zodpovedný za:

  • Vykreslenie tlačidla „Platiť kartou“

  • Vykreslenie dialógového okna prekrytia platby (spustí sa po kliknutí na tlačidlo „Zaplatiť kartou“)

  • Validácia kreditnej karty
  • Funkcia „Zapamätať si ma“ (priraďuje kartu k mobilnému číslu)
  • Zaslanie kreditnej karty spoločnosti Stripe a jej nahradenie žetónom v priloženom formulári (aktivuje sa po kliknutí na „Zaplatiť“)

Ak potrebujeme nad pokladňou získať väčšiu kontrolu, ako poskytuje Stripe Checkout, môžeme použiť Stripe Elements.

Ďalej budeme analyzovať kontrolór, ktorý pripravuje formulár a potom samotný formulár.

5.1. Kontrolór

Začnime tým, že vytvoríme ovládač pre pripravte model s potrebnými informáciami, ktoré pokladničný formulár potrebuje.

Najprv budeme musieť skopírujte testovaciu verziu nášho verejného kľúča z dashboardu Stripe a použite ho na definovanie STRIPE_PUBLIC_KEY ako premennej prostredia. Túto hodnotu potom použijeme v stripePublicKey lúka.

Aj nastavujeme mena a čiastka (vyjadrené v centoch) tu ručne iba na demonštračné účely, ale v skutočnej aplikácii by sme mohli nastaviť ID produktu / predaja, ktoré by sa dalo použiť na načítanie skutočných hodnôt.

Potom odošleme do zobrazenia platby, ktoré obsahuje formulár platby:

@Controller verejná trieda CheckoutController {@Value ("$ {STRIPE_PUBLIC_KEY}") súkromný reťazec stripePublicKey; @RequestMapping ("/ checkout") verejná kontrola reťazca (modelový model) {model.addAttribute ("čiastka", 50 * 100); // v centoch model.addAttribute ("stripePublicKey", stripePublicKey); model.addAttribute ("mena", ChargeRequest.Currency.EUR); vrátiť "pokladňu"; }}

Pokiaľ ide o kľúče Stripe API, môžete ich definovať ako premenné prostredia na aplikáciu (test vs. živé).

Rovnako ako v prípade akýchkoľvek hesiel alebo citlivých informácií je najlepšie tajný kľúč vo svojom systéme riadenia verzií uchovať.

5.2. Formulár

Tlačidlo „Zaplatiť kartou“ a dialógové okno platby sú pridané pridaním formulára so skriptom vo vnútri, správne nakonfigurovaného s atribútmi údajov:

  Cena: 

checkout.js„Skript automaticky spustí požiadavku na Stripe tesne pred odoslaním, ktorá potom pripojí token Stripe a e-mail používateľa Stripe ako skryté polia“stripeToken“A„stripeEmail“.

Tieto sa odošlú do nášho servera typu back-end spolu s ostatnými poľami formulára. Atribúty údajov skriptu sa neodoslali.

Na vykreslenie atribútov používame Thymeleaf “dátový kľúč“, “mnozstvo dat„A“údajová mena“.

Množstvo ("mnozstvo dat„) Sa používa iba na účely zobrazenia (spolu s„údajová mena“). Jej jednotkou sú centy použitej meny, preto ju vydelíme 100, aby sme ju zobrazili.

Verejný kľúč Stripe sa odovzdá Stripe po tom, čo používateľ požiada o platbu. Nepoužívajte tu tajný kľúč, pretože sa odosiela do prehľadávača.

6. Prevádzka nabíjania

Pre spracovanie na strane servera musíme definovať obslužný program požiadaviek POST, ktorý používa formulár platby. Poďme sa pozrieť na triedy, ktoré budeme na operáciu nabíjania potrebovať.

6.1. Entita ChargeRequest

Definujme ChargeRequest POJO, ktoré použijeme ako obchodný subjekt počas operácie spoplatňovania:

@ Verejná trieda dát ChargeRequest {verejné enum Mena {EUR, USD; } popis súkromného reťazca; suma súkromného int; mena v súkromnej mene; private String stripeEmail; private String stripeToken; }

6.2. Služby

Napíšme a StripeService trieda do oznámiť Stripe skutočnú operáciu nabíjania:

@Service verejná trieda StripeService {@Value ("$ {STRIPE_SECRET_KEY}") súkromný reťazec secretKey; @PostConstruct public void init () {Stripe.apiKey = secretKey; } public Charge charge (ChargeRequest chargeRequest) hodí AuthenticationException, InvalidRequestException, APIConnectionException, CardException, APIException {Map chargeParams = new HashMap (); chargeParams.put ("suma", chargeRequest.getAmount ()); chargeParams.put ("mena", chargeRequest.getCurrency ()); chargeParams.put ("description", chargeRequest.getDescription ()); chargeParams.put ("zdroj", chargeRequest.getStripeToken ()); vrátiť Charge.create (chargeParams); }}

Ako bolo uvedené v CheckoutController, the secretKey pole je vyplnené z premennej prostredia STRIPE_SECRET_KEY, ktorú sme skopírovali z dashboardu Stripe.

Po inicializácii služby sa tento kľúč použije vo všetkých nasledujúcich operáciách Stripe.

Objekt vrátený knižnicou Stripe predstavuje operáciu nabíjania a obsahuje užitočné údaje, ako napríklad ID operácie.

6.3. Kontrolór

Nakoniec napíšeme kontrolór, ktorý prijme požiadavku POST vykonanú prostredníctvom platobného formulára a odošle poplatok spoločnosti Stripe cez naše StripeService.

Upozorňujeme, že „ChargeRequest„Parameter sa automaticky inicializuje s parametrami požiadavky“čiastka“, “stripeEmail„A“stripeToken”Zahrnuté vo formulári:

@Controller verejná trieda ChargeController {@Autowired private StripeService paymentsService; @PostMapping ("/ charge") public String charge (ChargeRequest chargeRequest, model model) hodí StripeException {chargeRequest.setDescription ("Vzorový poplatok"); chargeRequest.setCurrency (Currency.EUR); Poplatok za platbu = paymentsService.charge (chargeRequest); model.addAttribute ("id", charge.getId ()); model.addAttribute ("status", charge.getStatus ()); model.addAttribute ("chargeId", charge.getId ()); model.addAttribute ("balance_transaction", charge.getBalanceTransaction ()); vrátiť "výsledok"; } @ExceptionHandler (StripeException.class) public String handleError (Model model, StripeException ex) {model.addAttribute ("error", ex.getMessage ()); vrátiť "výsledok"; }}

Pri úspechu pridáme do modelu stav, ID operácie, ID platby a ID transakcie zostatku, aby sme ich mohli používateľovi neskôr zobraziť (časť 7). To slúži na ilustráciu časti obsahu nabíjacieho objektu.

Náš ExceptionHandler sa bude zaoberať výnimkami typu StripeException ktoré sú vyhodené počas nabíjania.

Ak potrebujeme podrobnejšie spracovanie chýb, môžeme pridať samostatné obslužné rutiny pre podtriedy StripeException, ako napr CardException, RateLimitExceptionalebo AuthenticationException.

výsledok”Vykresľuje výsledok operácie nabíjania.

7. Zobrazenie výsledku

HTML používané na zobrazenie výsledku je základná šablóna Thymeleaf, ktorá zobrazuje výsledok operácie účtovania. Užívateľa sem pošle ChargeController či bola operácia nabíjania úspešná alebo nie:

   Výsledok 

Úspech!

Id .: Stav: ID platby: ID transakcie so zostatkom: Znovu zaplatenie

Po úspechu sa používateľovi zobrazia niektoré podrobnosti o operácii nabíjania:

Pri chybe sa používateľovi zobrazí chybové hlásenie vrátené pruhom:

8. Záver

V tomto tutoriáli sme si ukázali, ako využiť Stripe Java API na účtovanie poplatkov z kreditnej karty. V budúcnosti by sme mohli náš kód na strane servera znova použiť na poskytovanie natívnej mobilnej aplikácie.

Na otestovanie celého toku poplatkov nemusíme používať skutočnú kreditnú kartu (ani v testovacom režime). Namiesto toho sa môžeme spoľahnúť na testovacie karty Stripe.

Operácia nabíjania je jednou z mnohých možností, ktoré ponúka rozhranie Stripe Java API. Oficiálna referencia API nás prevedie celým súborom operácií.

Vzorový kód použitý v tejto príručke nájdete v projekte GitHub.


$config[zx-auto] not found$config[zx-overlay] not found