Änderungen an der Zahlungsanforderungs-API

Chrome 62

PaymentDetailsModifier ist jetzt verfügbar

In einer Zahlungsanforderung kann es vorkommen, dass Sie einen Rabatt oder eine Zusatzgebühr anbieten möchten, je nachdem, welche Zahlungsmethode der Kunde gewählt hat. PaymentDetailsModifier ist die Funktion, die Sie dazu verwenden können.

Fügen Sie dem zweiten Argument des Konstruktors PaymentRequest die Eigenschaft modifiers sowie ein Array von PaymentDetailsModifier-Objekten hinzu. Das sind deklarative Regeln, wie Artikel und Gesamtpreis je nach der vom Kunden ausgewählten Zahlungsmethode angezeigt werden sollen.

Das folgende Beispiel zeigt, wie Sie angeben, dass einem Nutzer eine Bearbeitungsgebühr von 3 $für die Auswahl einer Kreditkartenzahlung berechnet wird.

let methods = [{
 supportedMethods: 'basic-card',
 data: {
   supportedNetworks: ['visa', 'mastercard']
   supportedTypes: ['credit', 'debit']
 }
}];

let details = {
 displayItems: [{
   label: 'T-shirt',
   amount: { currency: 'USD', value: '68.00' }
 }],
 total: {
   label: 'Total price',
   amount: { currency: 'USD', value: '68.00' }
 },
 modifiers: [{
   supportedMethods: 'basic-card',
   data: {
     supportedTypes: ['credit']
   },
   additionalDisplayItems: [{
     label: 'Processing fee',
     amount: { currency: 'USD', value: '3.00' }
   }],
   total: {
     label: 'Credit card price',
     amount: {currency: ‘USD’, value: ‘71.00’}}
 }]
};

let options = {};

let request = new PaymentRequest(methods, details, options);

Sobald der Nutzer auf dem Zahlungsanfrage-Tab die Option „Kreditkartenzahlung“ auswählt, wird ihm ein zusätzliches Element namens „Bearbeitungsgebühr“ mit einer Belastung von 3 $angezeigt.Der Gesamtpreis beträgt 71,00 $.

PaymentDetailsModifier enthält die folgenden Parameter:

Property-Name
supportedMethods Geben Sie an, für welche Zahlungsmethode diese Regel gilt.
additionalDisplayItems Zusätzliche Displayelemente, für die Sie entweder Rabatte oder zusätzliche Gebühren hinzufügen möchten.
total Gesamtpreis nach Hinzufügen der zusätzlichenDisplayItems.
data Bei basic-card-Zahlungen können Sie damit bestimmte Kartentypen mit supportedTypes filtern. Andernfalls hängt die Verwendung dieses Parameters von der Zahlungsmethode (Zahlungs-App) ab. Weitere Informationen finden Sie in der Dokumentation der jeweiligen Zahlungsmethode.

Bei Versandoptionen wird es etwas knifflig, da der Gesamtpreis von modifiers nicht statisch sein kann und eine dynamische Änderung erfordert.

Dazu ändern Sie die additionalDisplayItems- und total-Werte der modifiers-Eigenschaft bei den Ereignissen shippingaddresschange und shippingoptionchange, genau wie Sie es bei der displayItems-Eigenschaft des PaymentDetails-Objekts tun.

Das Attribut „supportedMethods“ nimmt jetzt einen String an

Für die Property supportedMethods im PaymentMethodData-Objekt (das erste Argument für den PaymentRequest-Konstruktor) wurde bisher ein String-Array verwendet, das eine Zahlungsmethode angibt. Es wird jetzt ein einzelner String als Argument verwendet.

Beachten Sie, dass die Angabe eines Arrays vorerst weiterhin funktioniert.

Don'ts

Alt – funktioniert vorerst noch

var methodData = [{
     supportedMethods: ['basic-card'],
     data: {
       supportedNetworks: ['visa', 'mastercard', 'amex', 'jcb',
         'diners', 'discover', 'mir', 'unionpay']
     }
}, {
    supportedMethods: ['https://bobpay.xyz']
}];
Do

New – die neue Art.

var methodData = [{
     supportedMethods: 'basic-card',
     data: {
       supportedNetworks: ['visa', 'mastercard', 'amex', 'jcb',
         'diners', 'discover', 'mir', 'unionpay']
     }
}, {
    supportedMethods: 'https://bobpay.xyz'
}];

Chrome 61

supportedTypes in basic card is available

Wenn supportedMethodsbasic-card“ ist, können Sie jetzt supportedTypes angeben, um anzugeben, welche Kartentypen unterstützt werden: „credit“, „debit“ und „prepaid“.

var methodData = [{
 supportedMethods: 'basic-card',
 data: {
   supportedNetworks: ['visa', 'mastercard', 'amex', 'jcb',
     'diners', 'discover', 'mir', 'unionpay']
   supportedTypes: ['credit', 'debit', 'prepaid']
 }
}];

Prüfe den Kartentyp in deinem Zahlungs-Gateway, da diese Filterung je nachdem, woher die Karte stammt, möglicherweise nicht perfekt funktioniert.

Chrome 57

PaymentRequest ist jetzt in Iframes verfügbar

Die Payment Request API kann jetzt innerhalb eines iframe aufgerufen werden, indem dem iframe-Element das Attribut allowpaymentrequest hinzugefügt wird.

<iframe src="/totally/fake/url" allowpaymentrequest></iframe>

PaymentMethodData unterstützt „Basiskarte“

Das erste Argument für den PaymentRequest()-Konstruktor ist ein Array mit Zahlungsmethodedaten. In dieser Version wurde das Format PaymentMethodData geändert.

Don'ts

Alt – funktioniert vorerst noch

var methodData = [{
     supportedMethods: ['visa', 'mastercard', 'amex', 'jcb']
}];
var request = new PaymentRequest(methodData, details, options);
Do

Neu: Die neue Struktur.

var methodData = [{
     supportedMethods: ['basic-card'],
     data: {
       supportedNetworks: ['visa', 'mastercard', 'amex', 'jcb',
         'diners', 'discover', 'mir', 'unionpay']
     }
}];
var request = new PaymentRequest(methodData, details, options);

Das Format des Attributs data hängt vom Wert in supportedMethods ab und basiert auf der Spezifikation für Basiskarten. Die Spezifikation enthält supportedTypes, für das credit, debit oder prepaid zulässig ist. In Chrome 57 wird diese Eigenschaft jedoch ignoriert und alle Werte in supoprtedNetworks werden als Kreditkarten behandelt.

var methodData = [{
     supportedMethods: ['basic-card'],
     data: {
       supportedNetworks: ['visa', 'mastercard', 'amex', 'jcb',
         'diners', 'discover', 'mir', 'unionpay'],
       supportedTypes: ['credit'] <= not available
     }
}];

Chrome 56

ausstehend

Im Rahmen der Informationen zum Zahlungselement können Entwickler pending hinzufügen, um anzugeben, dass der Preis noch nicht vollständig festgelegt ist. Das Feld pending akzeptiert einen booleschen Wert.

    {
      label: "State tax",
      amount: { currency: "USD", value : "5.00" },
      pending: true
    },

Diese Option wird häufig verwendet, um Positionen wie Versand- oder Steuerbeträge anzuzeigen, die von der Auswahl der Versandadresse oder der Versandoptionen abhängen. Chrome kennzeichnet ausstehende Felder in der Benutzeroberfläche für die Zahlungsanfrage.

requestPayerName

Im Rahmen der Versandoption (drittes Argument für PaymentRequest) können Entwickler jetzt requestPayerName hinzufügen, um den Namen des Zahlungspflichtigen getrennt von den Informationen zur Versandadresse anzufordern. requestPayerName akzeptiert einen booleschen Wert.

shippingType

Im Rahmen der Versandoption (drittes Argument für PaymentRequest) können Entwickler jetzt shippingType hinzufügen, um anzugeben, dass auf der Benutzeroberfläche „Lieferung“ oder „Abholung“ anstelle von „Versand“ angezeigt werden soll. Für shippingType sind die Strings shipping (Standard), delivery oder pickup zulässig.

shippingType=&#39;delivery&#39;
shippingType="delivery"
shippingType=&#39;pickup&#39;
shippingType="pickup"

Serializer-Funktionen für „PaymentResponse“ und „PaymentAddress“

Das Objekt „PaymentResponse“ und das PaymentAddress-Objekt können jetzt JSON-serialisiert werden. Entwickler können sie mithilfe der toJSON()-Funktion in ein JSON-Objekt konvertieren und müssen keine umständlichen toDict()-Funktionen erstellen.

request.show().then(response => {
     let res = response.toJSON();
});

canMakePayment

Zusätzlich zur API-Verfügbarkeit kannst du prüfen, ob ein Nutzer eine aktive Zahlungsmethode hat, bevor du die Payment Request API aufrufst. Diese Option ist optional, da Nutzer auch über die Zahlungsoberfläche eine neue Zahlungsmethode hinzufügen können.

let request = new PaymentRequest(methods, details, options);
if (request.canMakePayment) {
     request.canMakePayment().then(result => {
       if (result) {
         // Payment methods are available.
       } else {
         // Payment methods are not available, but users can still add
        // a new payment method in Payment UI.
       }
     }).catch(error => {
       // Unable to determine.
     });
}