Chrome 62
PaymentDetailsModifier 現已可供使用
在付款要求中,您可能會根據客戶選擇的付款方式提供折扣或額外收費。PaymentDetailsModifier
就是用來達成這項目標的功能。
將 modifiers
屬性新增至 PaymentRequest
建構函式的第二個引數,以及 PaymentDetailsModifier
物件的陣列,這是宣告式規則,說明如何根據客戶選擇的付款方式修改顯示項目和總金額。
以下示例說明如何宣告當使用者選擇某張信用卡付款時,要向使用者收取 $3 美元的處理費。
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);
在實際的付款要求工作表中,只要選擇信用卡付款,使用者就會看到額外顯示項目「處理費」,收費 $3 美元,總價為 $71.00 美元。
PaymentDetailsModifier
包含下列參數:
屬性名稱 | |
---|---|
supportedMethods | 指定哪些付款方式適用此規則。 |
additionalDisplayItems |
你想新增折扣或額外費用的其他顯示項目。 |
total | 加入其他 DisplayItems 後的總價。 |
data | 對於 basic-card 付款,這會用於篩選使用 supportedTypes 的特定卡片類型。否則,這個參數的使用方式會因付款方式 (付款應用程式) 而異。請參閱各項付款方式所提供的說明文件。 |
當有運送選項時,情況就會變得複雜,因為 modifiers
的總價無法是靜態,需要動態修改。
為此,您需要在 shippingaddresschange
和 shippingoptionchange
事件上修改 modifiers
屬性的 additionalDisplayItems
和 total
,就像修改 PaymentDetails
物件的 displayItems
屬性一樣。
supportedMethods 屬性現在會採用字串
PaymentMethodData
物件中的 supportedMethods
屬性 (PaymentRequest
建構函式的首個引數) 已採用表示付款方式的字串陣列。它現在會將單一字串做為引數。
請注意,提供陣列目前仍會繼續運作。
舊版 - 目前仍可運作。
var methodData = [{ supportedMethods: ['basic-card'], data: { supportedNetworks: ['visa', 'mastercard', 'amex', 'jcb', 'diners', 'discover', 'mir', 'unionpay'] } }, { supportedMethods: ['https://bobpay.xyz'] }];
全新體驗,
var methodData = [{ supportedMethods: 'basic-card', data: { supportedNetworks: ['visa', 'mastercard', 'amex', 'jcb', 'diners', 'discover', 'mir', 'unionpay'] } }, { supportedMethods: 'https://bobpay.xyz' }];
Chrome 61
可使用基本資訊卡中的 supportedTypes
當 supportedMethods
為「basic-card
」時,您現在可以提供 supportedTypes
,指出「credit
」、「debit
」和「prepaid
」支援哪些類型的資訊卡。
var methodData = [{
supportedMethods: 'basic-card',
data: {
supportedNetworks: ['visa', 'mastercard', 'amex', 'jcb',
'diners', 'discover', 'mir', 'unionpay']
supportedTypes: ['credit', 'debit', 'prepaid']
}
}];
請務必向付款網關確認卡片類型,因為這項篩選功能可能無法根據來源正確運作。
Chrome 57
您現在可以在 iframe 內使用 PaymentRequest
只要在 iframe
元素中新增 allowpaymentrequest
屬性,現在就能在 iframe
中呼叫 Payment Request API。
<iframe src="/totally/fake/url" allowpaymentrequest></iframe>
PaymentMethodData 支援「basic-card」
PaymentRequest()
建構函式的首個引數是付款方式資料的陣列。這個版本已變更 PaymentMethodData
格式。
舊版 - 目前仍可運作。
var methodData = [{ supportedMethods: ['visa', 'mastercard', 'amex', 'jcb'] }]; var request = new PaymentRequest(methodData, details, options);
全新架構。
var methodData = [{ supportedMethods: ['basic-card'], data: { supportedNetworks: ['visa', 'mastercard', 'amex', 'jcb', 'diners', 'discover', 'mir', 'unionpay'] } }]; var request = new PaymentRequest(methodData, details, options);
data
屬性的格式取決於 supportedMethods
中的值,並根據基本資訊卡規格。請注意,規格包含 supportedTypes
,可接受 credit
、debit
或 prepaid
,但 Chrome 57 會忽略這項屬性,並將 supoprtedNetworks
中的任何值視為信用卡。
var methodData = [{
supportedMethods: ['basic-card'],
data: {
supportedNetworks: ['visa', 'mastercard', 'amex', 'jcb',
'diners', 'discover', 'mir', 'unionpay'],
supportedTypes: ['credit'] <= not available
}
}];
Chrome 56
待處理
開發人員可以新增 pending
,做為付款項目資訊的一部分,表示價格尚未完全確定。pending
欄位會接受布林值。
{
label: "State tax",
amount: { currency: "USD", value : "5.00" },
pending: true
},
這項功能通常用於顯示明細項目,例如運費或稅金金額,這兩者取決於所選的運送地址或運送選項。Chrome 會在付款要求的 UI 中標示待處理欄位。
requestPayerName
開發人員現在可以新增 requestPayerName
,在運送選項 (PaymentRequest
的第三個引數) 中,要求付款者姓名,而非運送地址資訊。requestPayerName
會接受布林值。
shippingType
開發人員現在可以在運送選項 (PaymentRequest
的第三個引數) 中,新增 shippingType
,要求 UI 顯示「貨品交付」或「取貨」,而非「運送」。shippingType
可接受字串 shipping
(預設值)、delivery
或 pickup
。
可用於 PaymentResponse 和 PaymentAddress 的序列化函式
PaymentResponse 物件和 PaymentAddress
物件現在可序列化為 JSON。開發人員可以呼叫 toJSON()
函式,將其中一個轉換為 JSON 物件,並避免建立繁瑣的 toDict()
函式。
request.show().then(response => {
let res = response.toJSON();
});
canMakePayment
除了確認 API 是否可用之外,您也可以在叫用 Payment Request API 之前,檢查使用者是否有有效的付款方式。請注意,這是選用選項,因為使用者仍可在付款 UI 上新增付款方式。
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.
});
}