Perubahan pada API permintaan pembayaran

Chrome 62

PaymentDetailsModifier kini tersedia

Dalam permintaan pembayaran, ada kalanya Anda ingin memberikan diskon atau biaya tambahan, bergantung pada metode pembayaran yang dipilih pelanggan. PaymentDetailsModifier adalah fitur yang dapat Anda gunakan untuk mencapai hal ini.

Tambahkan properti modifiers ke argumen kedua konstruktor PaymentRequest bersama dengan array objek PaymentDetailsModifier yang merupakan aturan deklaratif tentang bagaimana item tampilan dan total harus dimodifikasi, bergantung pada metode pembayaran pilihan pelanggan.

Contoh berikut menunjukkan cara menyatakan bahwa pengguna ditagih biaya pemrosesan sebesar $3 karena memilih pembayaran dengan kartu kredit.

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);

Pada sheet Permintaan Pembayaran yang sebenarnya, segera setelah memilih pembayaran kartu kredit, pengguna akan melihat item tampilan tambahan yang disebut "Biaya pemrosesan" dengan tagihan $3, dengan harga total $71,00.

PaymentDetailsModifier berisi parameter berikut:

Nama properti
supportedMethods Tentukan metode pembayaran yang menerapkan aturan ini.
additionalDisplayItems Item tampilan tambahan yang ingin Anda tambahkan diskon atau biaya tambahan.
total Total harga setelah menambahkan tambahanDisplayItems.
data Untuk pembayaran basic-card, ini akan digunakan sebagai cara untuk memfilter jenis kartu tertentu dengan supportedTypes. Jika tidak, penggunaan parameter ini bergantung pada metode pembayaran (aplikasi pembayaran). Lihat dokumentasi yang disediakan oleh setiap metode pembayaran.

Jika ada opsi pengiriman, hal-hal menjadi sedikit rumit, karena harga total modifiers tidak boleh statis dan memerlukan modifikasi dinamis.

Untuk mencapainya, Anda akan mengubah additionalDisplayItems dan total properti modifiers setelah peristiwa shippingaddresschange dan shippingoptionchange seperti yang Anda lakukan pada properti displayItems dari objek PaymentDetails.

Properti supportedMethods kini menggunakan string

Properti supportedMethods di objek PaymentMethodData (argumen pertama untuk konstruktor PaymentRequest) telah menggunakan array string yang menunjukkan metode pembayaran. Sekarang, metode ini menggunakan satu string sebagai argumen.

Perhatikan bahwa memberikan array akan terus berfungsi untuk saat ini.

Larangan

Lama - masih berfungsi untuk saat ini.

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

Baru - cara baru.

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

Chrome 61

supportedTypes di kartu dasar tersedia

Jika supportedMethods adalah 'basic-card', Anda kini dapat memberikan supportedTypes untuk menunjukkan jenis kartu yang didukung di antara 'credit',  'debit', dan 'prepaid'.

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

Pastikan untuk memeriksa kembali jenis kartu dengan gateway pembayaran Anda karena pemfilteran ini mungkin tidak berfungsi dengan sempurna, tergantung dari mana kartu tersebut berasal.

Chrome 57

PaymentRequest kini tersedia di dalam iframe

Payment Request API kini dapat dipanggil dari dalam iframe dengan menambahkan atribut allowpaymentrequest ke elemen iframe.

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

PaymentMethodData mendukung "basic-card"

Argumen pertama untuk konstruktor PaymentRequest() adalah array data metode pembayaran. Format PaymentMethodData telah diubah dalam rilis ini.

Larangan

Lama - masih berfungsi untuk saat ini.

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

Baru - struktur baru.

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

Format properti data bergantung pada nilai dalam supportedMethods dan berdasarkan spesifikasi Kartu Dasar. Perhatikan bahwa spesifikasi menyertakan supportedTypes yang menerima credit, debit, atau prepaid, tetapi Chrome 57 mengabaikan properti ini dan memperlakukan nilai apa pun di supoprtedNetworks sebagai kartu kredit.

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

Chrome 56

tertunda

Sebagai bagian dari informasi item pembayaran, developer dapat menambahkan pending untuk menunjukkan bahwa harga belum sepenuhnya ditentukan. Kolom pending menerima nilai boolean.

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

Hal ini biasanya digunakan untuk menampilkan item baris seperti jumlah pengiriman atau pajak, yang bergantung pada pilihan alamat pengiriman atau opsi pengiriman. Chrome menunjukkan kolom tertunda pada UI untuk permintaan pembayaran.

requestPayerName

Sebagai bagian dari opsi pengiriman (argumen ketiga ke PaymentRequest), developer kini dapat menambahkan requestPayerName untuk meminta nama pembayar secara terpisah dari informasi alamat pengiriman. requestPayerName menerima nilai boolean.

shippingType

Sebagai bagian dari opsi pengiriman (argumen ketiga untuk PaymentRequest), developer kini dapat menambahkan shippingType untuk meminta agar UI menampilkan "pengiriman" atau "pengambilan", bukan "pengiriman". shippingType menerima string shipping (default), delivery, atau pickup.

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

Fungsi serializer yang tersedia untuk PaymentResponse dan PaymentAddress

Objek PaymentResponse dan objek PaymentAddress kini dapat diserialisasi JSON. Developer dapat mengonversi fungsi menjadi objek JSON dengan memanggil fungsi toJSON() dan menghindari pembuatan fungsi toDict() yang rumit.

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

canMakePayment

Selain ketersediaan API, Anda dapat memeriksa apakah pengguna memiliki metode pembayaran aktif sebelum memanggil Payment Request API. Ingat bahwa ini opsional karena pengguna masih dapat menambahkan metode pembayaran baru di UI pembayaran.

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.
     });
}