Java >> Java Tutorial >  >> Tag >> Spring

So fügen Sie Stripe Payment zur Spring Boot-Anwendung hinzu

In diesem Beitrag zeigen wir, wie man Stripe Payment zur Spring Boot-Anwendung hinzufügt. Die meisten Unternehmensanwendungen bieten eine Möglichkeit, mit der Kunden online bezahlen können. Online-Zahlungen sind in der heutigen Zeit das Rückgrat der Internetwelt. Wenn Sie jemals eine Anwendung für einen Kunden erstellt haben, gab es früher physische Schecks ODER Kreditkartenzahlungen. Da die Anwendungen immer webbasierter werden, ist es äußerst notwendig geworden, Ihre Anwendung mit einer Art Zahlungsgateway zu integrieren. Das Zahlungsgateway kümmert sich um alle Komplikationen im Zusammenhang mit Steuern und Finanzvorschriften, mit denen sich die Anwendung nicht befassen muss.

Die Funktionalität ist Teil der Anwendung Social KPI, die ich baue.

Was versuchen wir hier zu erreichen?

Story für Stripe Payment

Ein Administrator kommt auf die Abrechnungsseite und bezahlt die Rechnung für diesen Monat. Sobald die Rechnung bezahlt ist, wird auf der Abrechnungsseite angezeigt, dass die Rechnung für diesen Monat bezahlt wurde. Daher wird die Option zur Eingabe von Kreditkartendaten nur angezeigt, wenn die Rechnung nicht bezahlt wurde.

Als Teil des Zahlungsdienstes verwenden wir Stripe . Sobald der Benutzer Kreditkartendaten eingibt, kann er Pay Now eingeben Schaltfläche, die die Stripe-API kontaktiert, um ein Token zu erhalten, wird dieses Token verwendet, um eine Belastung auf Stripe zu erstellen, und Stripe antwortet mit Erfolg oder Misserfolg der Belastung.

Fluss

Um den Ablauf zusammenzufassen

  1. Der Nutzer klickt auf Pay Now um die Gebühren zu bezahlen
  2. Die JavaScript-API von Frontend Stripe kontaktiert Stripe, um mithilfe der Eingabe von Rechnungsdaten ein Token zu erstellen
  3. Frontend Stripe Javascript API sendet dieses Token an den Server, um die Abrechnung auf der Serverseite zu verarbeiten
  4. Auf der Serverseite verwendet der Controller das Token und den Betrag, um diesem Kunden eine Gebühr für die Anwendungsnutzung zu berechnen.
  5. Für bezahlte Rechnungen wird der Status als paid gekennzeichnet für den Kunden für diesen Monat.

Frontend-Implementierung

Um Stripe zu verwenden APIs müssen wir zuerst ein Konto auf stripe.com als Entwickler erstellen und die Schlüssel erhalten. Gut ist, dass Stripe API-Schlüssel für Test- und Live-Umgebungen anbietet. Für diesen Beitrag und die Demo werden wir nur Testschlüssel verwenden. Sobald wir API-Schlüssel haben, werden wir sie in unserer Frontend- und Backend-Implementierung verwenden.

Im folgenden Screenshot sehen Sie, wie die Abrechnungsseite aussehen wird:

Abrechnungsseite

Sobald der Benutzer auf Pay Now klickt , wird die Javascript-Funktion von Stripe zum Mounten der Karte und zum Erstellen des Tokens aufgerufen. Sobald das Token verfügbar ist, wird dieselbe Funktion durch Senden einer POST-Anfrage an den Server übergeben. Beispiel dieses Codes sieht wie folgt aus:


            var form = document.getElementById('payment-form');
            form.addEventListener('submit',function(event){
                event.preventDefault();
                payTheBill();
            });

            function payTheBill(){
                stripe.createToken(card).then(function(result){
                    if(result.error){
                        var errorElement = document.getElementById('card-errors');
                        errorElement.textContent = result.error.message;
                    } else {
                        var token = result.token.id;
                        var email = $('#email').val();
                        var companyid = $('#companyid').val();
                        var amount = $('#amount').val();
                        $.get(
                            "/createcharge",
                            {email:email,token:token,companyid : companyid, amount:amount},
                            function(data){
                                alert(data.details);
                            },'json');
                    }
                })
            }

Backend-Implementierung

Als Teil der Anwendung Social KPI habe ich eine Datenbanktabelle billing um die bezahlten Rechnungen des Kunden zu verfolgen. Die PaymentController ist ein REST-Controller, der eine POST-Anforderungszuordnung zum Erstellen einer Gebühr und zum Speichern in der Datenbanktabelle hat und die Rechnung als bezahlt markiert. Wie oben im Javascript-Code gezeigt, wird das Token, sobald es verfügbar ist, an die Serverseite an den Controller gesendet, um die Gebühr zu verarbeiten. Dies wird ein REST-Aufruf sein, also ist der Controller auch RestController .


 @RequestMapping(value="/createcharge",method = RequestMethod.GET)
    @ResponseBody
    public Response createCharge(String email, String token, String companyid, double amount)
    {
        LOGGER.info("Enter >> createCharge() ");

        if(token == null)
        {
            throw new RuntimeException("Can't create a charge, try again");
        }

        Billing billing = billingRepository.findByCompanyId(Integer.parseInt(companyid));

        double billedAmount = amount * 100;

        String chargeId = paymentService.createCharge(email,token,billedAmount);

        if(chargeId != null && !chargeId.equals(""))
        {
            LOGGER.info("bill has been charged on consumer's account");
            billing.setStatus(true);
            billing.setPaiddate(new Date());
            billingRepository.save(billing);
        }

        LOGGER.info("Exit << createCharge() ");
        return new Response(true,"Congratulations, your card has been charged, chargeId= "+chargeId);
    }

Wie oben gezeigt, Service genannt paymentService wird Stripe belastet. Um paymentService zu implementieren , müssen Sie die Stripe-Java-Bibliothek in Ihre Implementierung aufnehmen.

compile('com.stripe:stripe-java:10.5.0')

Also die Dienstklasse PaymentService sieht wie folgt aus, um eine Gebühr zu erstellen:


    public String createCharge(String email, String token, double amount)
    {
        String id = null;
        try
        {
            Stripe.apiKey = API_SECRET_KEY;
            Map chargeParams = new HashMap<>();
            chargeParams.put("amount", (int)(amount*100));
            chargeParams.put("currency", "USD");
            chargeParams.put("description", "Charge for " + email);
            chargeParams.put("source", token);
            Charge charge = Charge.create(chargeParams);
            id = charge.getId();
        }
        catch(StripeException e)
        {
            throw new RuntimeException("Unable to process the charge", e);
        }
        return id;
    }

Sobald die Rechnung bezahlt ist, sieht der Administrator dies als die für diesen Monat bezahlte Rechnung.

Schlussfolgerung

In diesem Beitrag haben wir gezeigt, wie man die Spring Boot-Anwendung mit dem Stripe-Zahlungsgateway integriert.

Referenzen

  1. Referenz zur Stripe-API – https://stripe.com/docs/api/charges
  2. Stripe mit Spring Boot integrieren - Stripe mit Spring Boot

Java-Tag