Payment
Mit dem Payment-API kann der Browser-Native Payment-Dialog benutzt werden um Kartenzahlungen zu vereinfachen. Zurzeit wird nur BasicCard unterstützt, darüber kann hier weitergelesen werden. Mit dem API kann der Benutzer nach all seinen Karten-Informationen abgefragt werden, diese können dann vom Server überprüft werden und falls nötig, können dann die invaliden Felder für den Benutzer markiert werden.
Beispiel:
// Erstellt das Payment-Objekt und hängt dieses an unser HTML-Dokument an.
final Payment payment = new Payment(this);
// Hier setzen wir fest, welche Karten wir unterstĂĽtzen. Notiz: Zurzeit wird nur basic-card unterstĂĽtzt.
final List<CardNetworkIdentifier> supportedCards = Arrays.asList(CardNetworkIdentifier.visa, CardNetworkIdentifier.mastercard);
final List<PaymentRequestMethodData> methodData = Arrays.asList(new PaymentRequestMethodData("basic-card", new BasicCardRequest(supportedCards)));
// Als nächstes setzen wir die Artikel fest, damit der Benutzer sehen kann, wie viel er und für was er zahlt.
final List<PaymentItem> items = Arrays.asList(
new PaymentItem("Rubber Ducky", new PaymentAmount("EUR", "1.00")),
new PaymentItem("Shower Head", new PaymentAmount("EUR", "5.79")),
new PaymentItem("Toilet Paper", new PaymentAmount("EUR", "0.90")));
// Dann wie viel gesamt gezahlt werden muss (Diese Zahlen werden nicht ĂĽberprĂĽft, aber diese sollten natĂĽrlich dynamisch richtig kalkuliert werden)
final PaymentItem total = new PaymentItem("Total cost", new PaymentAmount("EUR", "7.69"));
// Diese Optionen stellen fest, wie die Artikel versendet werden sollen
final List<PaymentShippingOption> shippingOptions = Arrays.asList(
new PaymentShippingOption("standard-shipping", "Standard Shipping", new PaymentAmount("EUR", "5.30"), true));
final PaymentRequestDetails requestDetails = new PaymentRequestDetails(total, items, shippingOptions);
// Diese Optionen geben an, welche Felder Pflichtfelder sind und ob der Benutzer den Shipping-Type auswählen kann
final PaymentRequestOptions requestOptions = new PaymentRequestOptions()
.setRequestPayerName(true)
.setRequestPayerEmail(true)
.setRequestPayerPhone(false)
.setRequestShipping(true)
.setShippingType(ShippingType.shipping);
final Consumer<PaymentResult> onResultReceived = result -> {
// Hier können die Felder validiert werden, wenn alles geklappt hat, kann payment.complete(Result.success) aufgerufen werden
// Falls etwas nicht valide ist kann wie folgt vorgegangen werden:
final PayerError payerError = new PayerError()
.setEmail("The email is not valid!");
final BasicCardErrors cardError = new BasicCardErrors()
.setCardNumber("The card number is not valid!");
final AddressErrors addressErrors = new AddressErrors(); // Nothing wrong so don't set anything
final PaymentValidationError errors = new PaymentValidationError("Some fields are not valid!", payerError, cardError, addressErrors);
// Anstatt lambdas könnte für den error und success callback auch Methoden angegeben werden. Dann könnten wir diese einfach rekursiv nochmal aufrufen.
payment.retry(errors, this::dummyOnSuccess, error -> {
// Falls das Payment abgebrochen werden soll, kann payment.complete(Result.fail) aufgerufen werden.
payment.complete(Result.fail, (error) -> { /* Exception oder so einfach ausgeben oder weiter bearbeiten */});
});
};
final Consumer<JavascriptError> onErrorReceived = error -> {
System.err.println("An error ocurred: " + error.getMessage());
};
// Zuletzt müssen wir einfach den Payment-Dialog öffnen
payment.requestPayment(methodData, requestDetails, requestOptions, onResultReceived, onErrorReceived);
Â
XDEV Software Corp. - One Embarcadero Center, San Francisco, CA 94111, US
Copyright © 2015. XDEV Software Corp. All rights reserved.