Bądź na bieżąco z nowościami w płatnościach internetowych.
Płatności internetowe są dostępne publicznie w przeglądarkach od 2016 r. Główna funkcja – Payment Request API – jest teraz dostępna w wielu przeglądarkach: Chrome, Safari, Edge, a wkrótce także w przeglądarce Firefox. Jeśli dopiero zaczynasz korzystać z płatności internetowych, na początek zapoznaj się z artykułem „Płatności w internecie”.
Od wprowadzenia interfejsów Payment Request API i Payment Handler wprowadzono kilka zmian w ich specyfikacjach. Te zmiany nie spowodują uszkodzenia kodu roboczego, ale warto na nie uważać. Ten post zawiera podsumowanie tych zmian i będzie w nich dalsze zbieranie danych o zmianach w interfejsie API.
Nowa metoda: hasEnrolledInstrument()
W poprzedniej wersji Payment Request API do sprawdzania dostępności instrumentu płatniczego użytkownika służył canMakePayment()
. W ramach niedawnej aktualizacji specyfikacji parametr canMakePayment()
został zastąpiony przez tag hasEnrolledInstrument()
bez zmiany funkcji.
Metoda hasEnrolledInstrument()
ma konsensus ze wszystkich najpopularniejszych przeglądarek.
Wdrożono ją w Chrome w wersji 74. Zarówno w Webkit, jak i w Gecko występują błędy śledzenia, ale ta metoda nie została jeszcze wdrożona w czerwcu 2019 r.
Aby użyć nowej metody hasEnrolledInstrument()
, zastąp kod, który wygląda tak:
// Checking for instrument presence.
request.canMakePayment().then(handleInstrumentPresence).catch(handleError);
Za pomocą takiego kodu:
// Checking for instrument presence.
if (request.hasEnrolledInstrument) {
// hasEnrolledInstrument() is available.
request.hasEnrolledInstrument().then(handleInstrumentPresence).catch(handleError);
} else {
request.canMakePayment().then(handleInstrumentPresence).catch(handleError);
}
canMakePayment()
nie sprawdza już obecności instrumentu
hasEnrolledInstrument()
obsługuje teraz sprawdzanie instrumentu płatniczego użytkownika, dlatego aplikacja canMakePayment()
została zaktualizowana i sprawdzana tylko dostępność aplikacji płatniczych.
Ta zmiana w canMakePayment()
jest związana z implementacją hasEnrolledInstrument()
. Od czerwca 2019 r. jest zaimplementowane w Chrome 74, ale nie w innych przeglądarkach. Zanim spróbujesz użyć metody hasEnrolledInstrument()
, sprawdź, czy jest dostępna w przeglądarce użytkownika.
// Checking for payment app availability without checking for instrument presence.
if (request.hasEnrolledInstrument) {
// `canMakePayment()` behavior change corresponds to
// `hasEnrolledInstrument()` availability.
request.canMakePayment().then(handlePaymentAppAvailable).catch(handleError);
} else {
console.log("Cannot check for payment app availability without checking for instrument presence.");
}
Usunięto languageCode
z formy płatności basic-card
Adres PaymentAddress.languageCode
został usunięty z adresów dostawy i adresów rozliczeniowych organizacji basic-card
. Nie dotyczy to adresów rozliczeniowych innych form płatności (np. Google Pay).
Ta zmiana została wprowadzona w Chrome 74, Firefoksie i Safari.
PaymentRequest.show()
przyjmuje teraz opcjonalne detailsPromise
PaymentRequest.show()
umożliwia sprzedawcy wyświetlenie interfejsu prośby o płatność, zanim ostateczna kwota będzie znana. Sprzedawca ma 10 sekund na rozwiązanie problemu detailsPromise
przed upływem czasu oczekiwania. Ta funkcja służy do szybkiego przesyłania danych w obie strony po stronie serwera.
Ta funkcja jest dostępna w Chrome 75 i Safari.
// Not implemented in Chrome 74 and older.
// There's no way to feature-detect this, so check a few
// older versions of Chrome that you're seeing hit your servers.
if (/Chrome\/((6[0-9])|(7[0-4]))/g.exec(navigator.userAgent) !== null) {
return;
}
// Supported in Chrome 75+.
request.show(new Promise(function(resolveDetailsPromise, rejectDetailsPromise) {
// Find out the exact total amount and call
// `resolveDetailsPromise(details)`.
// Use a 3 second timeout as an example.
window.setTimeout(function() {
resolveDetailsPromise(details);
}, 3000); // 3 seconds.
}))
.then(handleResponse)
.catch(handleError);
PaymentRequestEvent.changePaymentMethod()
Funkcja Payment Handler API
PaymentRequestEvent.changePaymentMethod()
umożliwia obsługę płatności (np. Google Pay), aby aktywować moduł obsługi zdarzeń onpaymentmethodchange
. changePaymentMethod()
zwraca obietnicę, która prowadzi do odpowiedzi sprzedawcy ze zaktualizowanymi informacjami o cenie (np. ponowne obliczenie podatku).
Zarówno zdarzenie PaymentRequestEvent.changePaymentMethod()
, jak i zdarzenie paymentmethodchange
są dostępne w Chrome 76, a zdarzenie paymentmethodchange
zostało zaimplementowane w wersji testowej technologii w Webkit.
// In service worker context, `self` is the global object.
self.addEventListener('paymentrequest', (evt) => {
evt.respondWith(new Promise((confirmPaymentFunction, rejectPaymentFunction) => {
if (evt.changePaymentMethod === undefined) {
// Not implemented in this version of Chrome.
return;
}
// Notify merchant that the user selected a different payment method.
evt.changePaymentMethod('https://paymentapp.com', {country: 'US'})
.then((responseFromMerchant) => {
if (responseFromMerchant === null) {
// Merchant ignored the 'paymentmethodchange' event.
return;
}
handleResponseFromMerchant(responseFromMerchant);
})
.catch((error) => {
handleError(error);
});
}));
});
Przykład sprzedawcy:
if (request.onpaymentmethodchange === undefined) {
// Feature not available in this browser.
return;
}
request.addEventListener('paymentmethodchange', (evt) => {
evt.updateWith(updateDetailsBasedOnPaymentMethod(evt, paymentDetails));
});
Usprawniony programowanie lokalne
W Chrome 76 pojawiły się 2 niewielkie ulepszenia zwiększające produktywność programistów. Jeśli Twoje lokalne środowisko programistyczne korzysta z certyfikatu podpisanego samodzielnie, możesz teraz użyć flagi wiersza poleceń --ignore-certificate-errors
, aby zezwolić Chrome na korzystanie z interfejsów API płatności internetowych w środowisku programistycznym. Jeśli tworzysz strony z wykorzystaniem lokalnego serwera WWW, który nie obsługuje HTTPS, możesz też użyć flagi --unsafely-treat-insecure-origin-as-secure=<origin>
, aby Chrome traktował źródło HTTP jako HTTPS.