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 | 添加 additionalDisplayItems 后的总价。 |
data | 对于 basic-card 付款,将用于通过 supportedTypes 过滤特定卡类型。否则,此参数的使用取决于付款方式(付款应用)。请参阅每种付款方式提供的文档。 |
如果有配送选项,情况会变得有点棘手,因为 modifiers
的总价不能是静态的,需要动态修改。
为此,您需要在 shippingaddresschange
和 shippingoptionchange
事件发生时修改 modifiers
属性的 additionalDisplayItems
和 total
,就像对 PaymentDetails
对象的 displayItems
属性所做的那样。
supportedMethods 属性现在接受字符串
PaymentMethodData
对象(PaymentRequest
构造函数的第一个参数)中的 supportedMethods
属性接受表示付款方式的字符串数组。它现在接受单个字符串作为参数。
请注意,暂时可以继续提供数组。
旧版 - 目前仍可使用。
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
PaymentRequest 现已在 iframe 内提供
现在,您可以通过向 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
中的值,并基于基本卡片规范。请注意,规范包含接受 credit
、debit
或 prepaid
的 supportedTypes
,但 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 会在界面中指明付款请求的待处理字段。
requestPayerName
在配送选项(PaymentRequest
的第三个参数)中,开发者现在可以添加 requestPayerName
,以便单独请求付款人姓名,而不必与送货地址信息一起请求。requestPayerName
接受布尔值。
shippingType
作为运费选项(PaymentRequest
的第三个参数)的一部分,开发者现在可以添加 shippingType
来请求界面显示“送货”或“提货”(而不是“运费”)。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 之前检查用户是否有有效的付款方式。请注意,这是可选的,因为用户仍然可以在付款界面上添加新的付款方式。
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.
});
}