Copyright © 2026 World Wide Web Consortium. W3C® liability, trademark and permissive document license rules apply.
本规范定义了使 Web 应用能够处理支付请求的能力。
本节描述了本文件在发布时的状态。可在 W3C 标准和草案索引 中找到当前的 W3C 出版物列表以及本技术报告的最新修订版。
Web Payments 工作组维护着一份该工作组尚未处理的所有错误报告列表。本草案强调了一些仍待在工作组内讨论的未决问题。尚未就这些问题的结论作出决定,也未决定它们是否有效。强烈鼓励提交包含针对未决问题的规范文本建议的拉取请求。
本文档由Web Payments 工作组作为工作草案发布,使用了 Recommendation track。
作为工作草案发布并不意味着得到 W3C 及其成员的认可。
这是一个草案文档,可能随时被更新、替换或被其他文档废弃。不宜将此文档引用为除正在进行的工作之外的资料。
本文档由在以下政策下运作的小组产生: W3C 专利政策。 W3C 维护一份与该小组交付物相关的任何专利披露的公开列表;该页面还包含披露专利的说明。任何实际知道并认为包含必要权利要求(Essential Claim(s))的专利的个人,必须按照 W3C 专利政策第6节的规定披露该信息。
本文档受2025年8月18日的 W3C 流程文档的约束。
本节为非规范性内容。
本规范定义了若干新特性,以便 Web 应用代表用户处理支付请求:
PaymentRequestEvent)。一个
基于 Web 的支付处理程序是
PaymentRequestEvent
的事件处理器。
PaymentManager),用于管理基于 Web 的
支付处理程序的属性。
PaymentRequestEvent
的机制。
本规范不涉及使用操作系统特定机制(即“原生应用”)构建的软件如何处理支付请求。
本文档设想了如下流程:
PaymentRequestEvent(参考
用户交互任务源)。PaymentRequestEvent 包含
PaymentRequest
(定义见 [payment-request])中的部分信息以及其他信息(如收款方 origin)。
一个源(origin)可以用多个 Service Worker 实现支付应用。因此每个源可以注册多个 基于 Web 的支付处理程序。被调用的处理程序由用户选择决定。
本节为非规范性内容。
基于 Web 的支付处理程序 是一种基于 Web 应用的 支付处理程序; 即,能够代表用户处理支付请求的 Web 应用。
基于 Web 的支付处理程序的逻辑由其支持的支付方式驱动。 某些支付方式要求支付处理程序仅进行很少甚至无需处理,仅在响应中直接返回支付卡信息。 此时,收款方网站负责使用返回的数据完成支付处理。
相比之下,某些支付方式(如加密货币支付或银行发起的信用转账)要求基于 Web 的支付处理程序主动发起支付处理。 在这种情形下,支付处理程序将返回一个支付凭证、端点 URL 或其他数据,收款方网站可据此判断支付结果(而不是直接处理支付本身)。
处理支付请求过程可能涉及多种交互:可通过新窗口或其他 API(例如 Web 加密 API)与用户交互,或通过 Web 请求等方式与其他服务、其他源进行交互。
本规范未涉及支付处理程序在接受
PaymentRequestEvent
到返回响应之间发生的这些活动。
配置支付处理程序及处理支付请求所需的所有操作,均由支付处理程序的实现决定,包括:
因此,一个源会依赖于其他 Web 技术(此规范未详细定义)来管理生命周期、安全、用户认证、用户交互等。
本节为非规范性内容。
本规范不涉及第三方移动支付应用如何通过专有机制与用户代理交互,也不涉及用户代理自身如何提供简单的支付应用功能。
通过即时(JIT)注册机制,可以在用户代理中注册基于 Web 的支付处理程序。
如果在商家调用 show()
方法时,基于 Web 的支付处理程序尚未注册,用户代理可以在交易过程中允许用户注册此基于 Web 的支付处理程序(“即时”)。
本节其余内容为非规范性内容。
用户代理可以通过从商家请求的 支付方式清单 中,通过 基于 URL 的支付方式标识符 获取,推导出基于 Web 的支付处理程序信息,从而实现即时安装。
本节描述了基于 Web 的支付处理程序可用于管理自身属性的功能。
WebIDLpartial interface ServiceWorkerRegistration {
[SameObject] readonly attribute PaymentManager paymentManager;
};
paymentManager 属性用于暴露基于 Web 的支付处理程序的管理功能。
WebIDL[SecureContext, Exposed=(Window)]
interface PaymentManager {
attribute DOMString userHint;
Promise<undefined> enableDelegations(sequence<PaymentDelegation> delegations);
};
PaymentManager 用于
基于 Web 的支付处理程序
管理其所支持的委托功能。
在显示基于 Web 的支付处理程序名称和图标时, 用户代理可以使用该字符串以提升用户体验。 例如,"**** 1234" 这样的用户提示 可以提醒用户该基于 Web 的支付处理程序 可用于某张特定的卡片。
此方法允许
基于 Web 的支付处理程序
异步声明其所支持的
PaymentDelegation
列表。
WebIDLenum PaymentDelegation {
"shippingAddress",
"payerName",
"payerPhone",
"payerEmail"
};
shippingAddress"
payerName"
payerPhone"
payerEmail"
如果 基于 Web 的支付处理程序支持
CanMakePaymentEvent,
用户代理
可使用它协助筛选可用的基于 Web 的支付处理程序。
实现可以对开发者响应
CanMakePaymentEvent施加超时时间。如果超时到期,
则实现的行为等同于调用了 respondWith() 且参数为
false。
WebIDLpartial interface ServiceWorkerGlobalScope {
attribute EventHandler oncanmakepayment;
};
oncanmakepayment
属性是一个
事件处理程序,
其对应的事件处理程序事件类型为
"canmakepayment"。
CanMakePaymentEvent
用作一个信号,指示基于 Web 的支付处理程序是否能够响应支付请求。
WebIDL[Exposed=ServiceWorker]
interface CanMakePaymentEvent : ExtendableEvent {
constructor(DOMString type);
undefined respondWith(Promise<boolean> canMakePaymentResponse);
};
此方法由基于 Web 的支付处理程序用作一个信号, 指示其是否能够响应支付请求。
通过 PaymentRequest 收到请求后,用户代理必须(MUST) 运行以下步骤:
CanMakePaymentEvent(例如在私密浏览模式下),
则终止这些步骤。
ServiceWorkerRegistration。
使用 触发功能事件
"canmakepayment",并在 registration 上使用
CanMakePaymentEvent。
CanMakePaymentEvent 的示例
本节为非规范性内容。
此示例展示如何编写一个监听
CanMakePaymentEvent 的 service worker。当收到
CanMakePaymentEvent 时,service worker 始终返回
true。
self.addEventListener("canmakepayment", function(e) {
e.respondWith(new Promise(function(resolve, reject) {
resolve(true);
}));
});
给定一个 PaymentMethodData 和
一个在 支付方式标识符
上匹配的基于 Web 的支付处理程序,如果该支付处理程序可用于支付,则此算法返回 true:
ServiceWorkerRegistration
作用域 URL 的 源。
"*" 字符串已被
support
origins
支持,则返回 true。
CanMakePaymentEvent 并返回其结果。
CanMakePaymentEvent 并返回其结果。
false。
用户选择某个基于 Web 的支付处理程序后,
用户代理会触发 PaymentRequestEvent,
并使用随后得到的
PaymentHandlerResponse
为 [payment-request] 创建
PaymentResponse。
Payment Request API 支持将终止操作的管理责任委托给支付应用。 目前有一个提案,计划在 Web-based Payment Handler 接口中 增加一个 paymentRequestAborted 事件。 该事件将拥有一个 respondWith 方法,接受一个布尔参数, 用于指示 paymentRequest 是否已被成功中止。
ServiceWorkerGlobalScope
的扩展
本规范扩展了 ServiceWorkerGlobalScope
接口。
WebIDLpartial interface ServiceWorkerGlobalScope {
attribute EventHandler onpaymentrequest;
};
onpaymentrequest
属性是一个 事件处理程序,
其对应的事件处理程序事件类型为
PaymentRequestEvent。
PaymentRequestDetailsUpdate 包含更新后的总金额(可选包括修饰符和配送选项)以及由于用户在基于 Web
的支付处理程序中选择支付方式、收货地址或配送选项可能导致的错误信息。
WebIDLdictionary PaymentRequestDetailsUpdate {
DOMString error;
PaymentCurrencyAmount total;
sequence<PaymentDetailsModifier> modifiers;
sequence<PaymentShippingOption> shippingOptions;
object paymentMethodErrors;
AddressErrors shippingAddressErrors;
};
一个人类可读的字符串,用于说明为什么用户选择的基于 Web 的支付方式、 收货地址或配送选项无法使用。
基于变更后的支付方法、收货地址或配送选项而更新的总额。例如,总额可能因用户所选支付方法的账单地址改变了增值税(VAT)而变化;或者因用户所选/提供的配送选项/地址改变了配送费用而变化。
基于变更后的支付方法、收货地址或配送选项而更新的修饰符。例如,如果根据账单或收货地址总体总额增加了 €1.00,则每个修饰符中指定的总额也应增加 €1.00。
基于变更后的收货地址而更新的 shippingOptions。例如,对于用户提供的国家/地区,加急配送可能更昂贵或不可用。
支付方法的校验错误(如有)。
收货地址的校验错误(如有)。
PaymentRequestEvent 表示在用户选择之后,支付处理程序可用的数据和方法。用户代理会将 PaymentRequest 中可用数据的一个子集传递给支付处理程序。
WebIDL[Exposed=ServiceWorker]
interface PaymentRequestEvent : ExtendableEvent {
constructor(DOMString type, optional PaymentRequestEventInit eventInitDict = {});
readonly attribute USVString topOrigin;
readonly attribute USVString paymentRequestOrigin;
readonly attribute DOMString paymentRequestId;
readonly attribute FrozenArray<PaymentMethodData> methodData;
readonly attribute object total;
readonly attribute FrozenArray<PaymentDetailsModifier> modifiers;
readonly attribute object? paymentOptions;
readonly attribute FrozenArray<PaymentShippingOption>? shippingOptions;
Promise<WindowClient?> openWindow(USVString url);
Promise<PaymentRequestDetailsUpdate?> changePaymentMethod(DOMString methodName, optional object? methodDetails = null);
Promise<PaymentRequestDetailsUpdate?> changeShippingAddress(optional AddressInit shippingAddress = {});
Promise<PaymentRequestDetailsUpdate?> changeShippingOption(DOMString shippingOption);
undefined respondWith(Promise<PaymentHandlerResponse> handlerResponsePromise);
};
返回一个字符串,指示顶层 收款方网页的来源(origin)。 此属性由处理 PaymentRequestEvent进行初始化。
返回一个字符串,指示
PaymentRequest
被初始化的来源。
当 PaymentRequest
在 topOrigin
中初始化时,这两个属性具有相同的值;否则二者不同。
例如,当 PaymentRequest
在一个来源不同于 topOrigin 的 iframe
中初始化时,此属性值为该 iframe 的来源。此属性由
处理 PaymentRequestEvent进行初始化。
获取时,paymentRequestId
属性返回与此 PaymentRequestEvent
对应的
PaymentRequest 的
[[details]].id。
此属性包含若干 PaymentMethodData 字典,包含网站可接受的支付方法标识符以及任何相关的特定 支付方法数据。它由 PaymentRequest 使用下文定义的 方法数据填充算法进行填充。
此属性表示请求支付的总金额。其类型为
PaymentCurrencyAmount
字典(定义见 [payment-request]),并使用在实例化相应
PaymentRequest 对象时所提供的
total 字段的副本进行初始化。
此 PaymentDetailsModifier 字典序列包含针对特定支付方法标识符的修饰符(例如,如果基于每种支付方法,支付金额或货币类型有所不同)。它由 PaymentRequest 使用下文定义的 修饰符填充算法进行填充。
相应 PaymentRequest 中 PaymentOptions 的取值。 仅当请求收货地址和/或付款人联系信息的任意子集时可用。
相应 PaymentDetailsInit 字典中的 ShippingOptions 的取值。(PaymentDetailsInit 继承了 PaymentDetailsBase 的 ShippingOptions)。仅当请求收货地址时可用。
此方法由基于 Web 的支付处理程序用于向用户展示一个窗口。 调用该方法时,会运行 打开窗口算法。
此方法由基于 Web 的支付处理程序用于根据付款方式详情(如账单地址)获取更新后的总金额。 调用该方法时,会运行 更改支付方式算法。
此方法由基于 Web 的支付处理程序用于根据 shippingAddress 获取更新后的支付详情。 调用该方法时,会运行 更改支付详情算法。
此方法由基于 Web 的支付处理程序用于根据 shippingOption 标识符获取更新后的支付详情。 调用该方法时,会运行 更改支付详情算法。
此方法由基于 Web 的支付处理程序在支付成功完成时,提供
PaymentHandlerResponse。
调用该方法时,会以 event 和 handlerResponsePromise 为参数,
运行
响应 PaymentRequest 算法。
是否应在用户明确同意的情况下,将存储在用户代理中的用户数据提供给支付应用?支付应用可以在安装时或首次被调用时请求该权限。
WebIDLdictionary PaymentRequestEventInit : ExtendableEventInit {
USVString topOrigin;
USVString paymentRequestOrigin;
DOMString paymentRequestId;
sequence<PaymentMethodData> methodData;
PaymentCurrencyAmount total;
sequence<PaymentDetailsModifier> modifiers;
PaymentOptions paymentOptions;
sequence<PaymentShippingOption> shippingOptions;
};
topOrigin、
paymentRequestOrigin、
paymentRequestId、
methodData、
total、
modifiers、
paymentOptions
与
shippingOptions
成员与 PaymentRequestEvent
中的相应定义共享定义。
为初始化 methodData 的值,用户代理
必须(MUST)执行以下步骤或等效步骤:
methodData 设为
dataList。
为初始化 modifiers 的值,用户代理
必须(MUST)执行以下步骤或等效步骤:
modifiers
中的每个条目,执行以下步骤:
total 设为
inModifier.total 的副本。
modifiers 设为
modifierList。
PaymentRequestEvent
的实例会使用下表中的内部槽进行创建:
| 内部槽 | 默认值 | 描述(非规范性) |
|---|---|---|
| [[windowClient]] | null | 当前活跃的 WindowClient。 如果基于 Web 的支付处理程序当前正在向用户展示窗口,则会设置此项。否则为 null。 |
| [[respondWithCalled]] | false | YAHO |
当通过 PaymentRequest, 利用 PaymentRequest.show() 接收到付款请求,并且用户随后选择了某个基于 Web 的支付处理程序时, 用户代理 必须执行以下步骤:
ServiceWorkerRegistration。
Promise
(由 PaymentRequest.show() 创建)
并返回
"InvalidStateError"
DOMException,并终止这些步骤。
在 registration 上,使用
触发功能事件
"paymentrequest",
并以
PaymentRequestEvent
及如下属性:
topOrigin
paymentRequestOrigin
methodData
modifiers
total
paymentRequestId
paymentOptions
shippingOptions
然后在并行中,以 dispatchedEvent 执行以下步骤:
PaymentHandlerResponse,
则拒绝由
Promise
(由 PaymentRequest.show()
创建)
并返回
"OperationError"
DOMException。
被调用的基于 Web 的支付处理程序可能需要,也可能不需要,显示自身相关信息或请求用户输入。基于 Web 的支付处理程序可能显示的情况示例包括:
若基于 Web 的支付处理程序需要可视化展示和用户交互,可调用 openWindow() 向用户展示页面。
由于用户代理知晓该方法与
PaymentRequestEvent
是相关联的,应当以合理且不造成用户困惑的方式渲染窗口。最终生成的窗口 client 会绑定到发起
PaymentRequest 的标签页/窗口。
单个基于 Web 的支付处理程序
不应允许通过该方法打开多个 client 窗口。
我们是否应该直接引用 Service Workers 规范而不是把其步骤复制过来?
PaymentRequestEvent。
isTrusted 属性为
false,则返回以
"InvalidStateError" DOMException
拒绝的 Promise。
PaymentRequestEvent
的 PaymentRequest。
Promise。
about:blank,则返回以
TypeError
拒绝的 Promise。
Promise。
Promise。
[[windowClient]] 不为 null,则:
[[windowClient]].visibilityState
不为 "unloaded",用
"InvalidStateError"
DOMException
拒绝 promise,并终止这些步骤。
[[windowClient]] 为 client。
PaymentRequestEvent
的示例
本节为非规范性内容。
此示例展示如何编写一个监听
PaymentRequestEvent
的 service worker。当接收到
PaymentRequestEvent
时,service worker 会打开一个窗口与用户交互。
async function getPaymentResponseFromWindow() {
return new Promise((resolve, reject) => {
self.addEventListener("message", listener = e => {
self.removeEventListener("message", listener);
if (!e.data || !e.data.methodName) {
reject();
return;
}
resolve(e.data);
});
});
}
self.addEventListener("paymentrequest", e => {
e.respondWith((async() => {
// Open a new window for providing payment UI to user.
const windowClient = await e.openWindow("payment_ui.html");
// Send data to the opened window.
windowClient.postMessage({
total: e.total,
modifiers: e.modifiers
});
// Wait for a payment response from the opened window.
return await getPaymentResponseFromWindow();
})());
});
使用上述简单方案,加载到 基于 Web 的支付处理程序窗口 的一个基础 HTML 页面可能如下所示:
<form id="form">
<table>
<tr><th>Cardholder Name:</th><td><input name="cardholderName"></td></tr>
<tr><th>Card Number:</th><td><input name="cardNumber"></td></tr>
<tr><th>Expiration Month:</th><td><input name="expiryMonth"></td></tr>
<tr><th>Expiration Year:</th><td><input name="expiryYear"></td></tr>
<tr><th>Security Code:</th><td><input name="cardSecurityCode"></td></tr>
<tr><th></th><td><input type="submit" value="Pay"></td></tr>
</table>
</form>
<script>
navigator.serviceWorker.addEventListener("message", e => {
/* Note: message sent from payment app is available in e.data */
});
document.getElementById("form").addEventListener("submit", e => {
const details = {};
["cardholderName", "cardNumber", "expiryMonth", "expiryYear", "cardSecurityCode"]
.forEach(field => {
details[field] = form.elements[field].value;
});
const paymentAppResponse = {
methodName: "https://example.com/pay",
details
};
navigator.serviceWorker.controller.postMessage(paymentAppResponse);
window.close();
});
</script>
WebIDLdictionary PaymentHandlerResponse {
DOMString methodName;
object details;
DOMString? payerName;
DOMString? payerEmail;
DOMString? payerPhone;
AddressInit shippingAddress;
DOMString? shippingOption;
};
一个可 JSON 序列化的对象, 提供一条由商户用于处理交易并判断资金转账是否成功的, 支付方法 专有消息。
用户代理通过对应
respondWith 函数
所提供 Promise 的解决,从基于 Web 的支付处理程序处收到成功响应。
应用需用包含支付响应的
PaymentHandlerResponse 实例
来解决该 Promise。
如遇用户取消或出错,应用可通过拒绝该 Promise 来表示失败。
如果该 Promise 被拒绝,则用户代理必须运行 支付应用失败算法。 该算法的具体细节留给各实现者决定。 可接受的行为包括但不限于:
用户提供的付款人姓名。
用户提供的付款人电子邮件。
用户提供的付款人电话号码。
用户提供的收货地址。
用户所选配送选项的标识符。
当以 methodName 和 methodDetails 参数调用此算法时,用户代理MUST运行以下步骤:
null。
InvalidStateError"
DOMException。
PaymentRequestDetailsUpdate。
当以 shippingAddress 或 shippingOption 调用此算法时,用户代理MUST运行以下步骤:
null。
InvalidStateError"
DOMException。
PaymentRequestDetailsUpdate。
当以 event 和 handlerResponsePromise 参数调用此算法时,用户代理MUST运行以下步骤:
isTrusted 为 false,
则抛出 "InvalidStateError"
DOMException 并中止这些步骤。
InvalidStateError"
DOMException 并中止这些步骤。
[[respondWithCalled]] 为 true,则抛出
"InvalidStateError"
DOMException 并中止这些步骤。
[[respondWithCalled]] 设为 true。
PaymentHandlerResponse。若此操作抛出异常,
则运行 支付应用失败算法 并中止这些步骤。
methodName
不存在,或未设置为 event 的
methodData
中的某个值,则运行
支付应用失败算法
并中止这些步骤。
details
不存在或不是可 JSON
序列化的,
则运行 支付应用失败算法
并中止这些步骤。
shippingAddress
不存在,则运行 支付应用失败算法 并中止这些步骤。
shippingOption
不存在,或未设置为来自 event 的
shippingOptions
中的某个配送选项标识符,则运行
支付应用失败算法
并中止这些步骤。
payerName
不存在,则运行
支付应用失败算法
并中止这些步骤。
payerEmail
不存在,则运行
支付应用失败算法
并中止这些步骤。
payerPhone
不存在,则运行
支付应用失败算法
并中止这些步骤。
以下示例展示如何响应支付请求:
paymentRequestEvent.respondWith(new Promise(function(accept,reject) {
/* ... processing may occur here ... */
accept({
methodName: "https://example.com/pay",
details: {
cardHolderName: "John Smith",
cardNumber: "1232343451234",
expiryMonth: "12",
expiryYear : "2020",
cardSecurityCode: "123"
},
shippingAddress: {
addressLine: [
"1875 Explorer St #1000",
],
city: "Reston",
country: "US",
dependentLocality: "",
organization: "",
phone: "+15555555555",
postalCode: "20190",
recipient: "John Smith",
region: "VA",
sortingCode: ""
},
shippingOption: "express",
payerEmail: "john.smith@gmail.com",
});
}));
[payment-request] 定义了一个 ID,生态系统中的各方(包括支付应用提供方和收款方)可在网络或其他故障后使用其进行对账。
由于隐私问题,Web Payments 工作组从最初版本的 Payment Request API 中移除了对收货地址和账单地址的支持;参见 issue 842。为给仍继续支持此能力的实现提供文档,工作组现正恢复该功能,并期望同时解决隐私问题。在此过程中,工作组也可能基于其他 API 的演进(例如 Content Picker API)对 Payment Request API 进行更改。
CanMakePaymentEvent 会在已注册的
基于 Web 的支付处理程序里被触发,这些处理程序来源于一组有限的来源:
即支付方式清单(origin)以及其
支持的来源。
该事件会在用户选择该支付处理程序之前触发,
但事件中不含任何触发源信息(即商户网站),因此不能直接用于用户跟踪。
CanMakePaymentEvent
存在时序攻击(timing attack)的风险:
CanMakePaymentEvent
会在已安装的基于 Web 的支付处理程序中被触发;
CanMakePaymentEvent 的支持。
CanMakePaymentEvent
会被触发给能提供全部商户请求信息的已注册基于 Web 的支付处理程序。
CanMakePaymentEvent
事件不应在隐私浏览模式下触发。
用户代理应表现得如同
respondWith()
被以 false 调用一样。
但我们也承认一个相关的风险:如果某个实体同时控制 Payment Request API
调用的来源和基于 Web 的支付处理程序的来源,
则其可能能够推断用户处于隐私浏览模式。
本节为非规范性内容。
在排序基于 Web 的支付处理程序时, 用户代理应优先遵循用户偏好,而非其他偏好。 用户代理应允许手动配置,例如为某个来源或所有来源 设置基于 Web 的支付处理程序显示顺序的首选项。
用户体验细节留给实现者决定。
本规范依赖于若干其他底层规范。
JSON.stringify
由
[ECMASCRIPT] 定义。
ServiceWorkerRegistration、
ServiceWorkerGlobalScope、
fire
functional event、extend
lifetime
promises、pending
promises
count、containing
service worker registration、
Try
Clear Registration、Try
Activate、
ExtendableEvent、
ExtendableEventInit、
和 scope URL
定义见
[SERVICE-WORKERS]。
除了标记为非规范性的章节外,本规范中的所有编写指南、图表、示例和注记均为非规范性内容。除此之外,本规范中的其他内容均为规范性内容。
本文档中的关键词 MAY、MUST、SHOULD、 和 SHOULD NOT 的解释方式如 BCP 14 [RFC2119] [RFC8174] 所述,仅当且仅当这些词以此处所示的全大写形式出现时适用。
只有一种产品类别可以宣称符合本规范:用户代理。
只要最终结果与按照本规范算法所得结果不可区分,用户代理MAY以任何期望的方式实现本规范中给出的算法。
用户代理MAY对原本无限制的输入施加与实现相关的限制,例如为了防止拒绝服务攻击、避免内存耗尽或绕开平台特定限制。当某个输入超出与实现相关的限制时,用户代理MUST抛出,或在 promise 的上下文中以
TypeError
拒绝,并可选择性地告知开发者该输入如何超出了与实现相关的限制。
WebIDLpartial interface ServiceWorkerRegistration {
[SameObject] readonly attribute PaymentManager paymentManager;
};
[SecureContext, Exposed=(Window)]
interface PaymentManager {
attribute DOMString userHint;
Promise<undefined> enableDelegations(sequence<PaymentDelegation> delegations);
};
enum PaymentDelegation {
"shippingAddress",
"payerName",
"payerPhone",
"payerEmail"
};
partial interface ServiceWorkerGlobalScope {
attribute EventHandler oncanmakepayment;
};
[Exposed=ServiceWorker]
interface CanMakePaymentEvent : ExtendableEvent {
constructor(DOMString type);
undefined respondWith(Promise<boolean> canMakePaymentResponse);
};
partial interface ServiceWorkerGlobalScope {
attribute EventHandler onpaymentrequest;
};
dictionary PaymentRequestDetailsUpdate {
DOMString error;
PaymentCurrencyAmount total;
sequence<PaymentDetailsModifier> modifiers;
sequence<PaymentShippingOption> shippingOptions;
object paymentMethodErrors;
AddressErrors shippingAddressErrors;
};
[Exposed=ServiceWorker]
interface PaymentRequestEvent : ExtendableEvent {
constructor(DOMString type, optional PaymentRequestEventInit eventInitDict = {});
readonly attribute USVString topOrigin;
readonly attribute USVString paymentRequestOrigin;
readonly attribute DOMString paymentRequestId;
readonly attribute FrozenArray<PaymentMethodData> methodData;
readonly attribute object total;
readonly attribute FrozenArray<PaymentDetailsModifier> modifiers;
readonly attribute object? paymentOptions;
readonly attribute FrozenArray<PaymentShippingOption>? shippingOptions;
Promise<WindowClient?> openWindow(USVString url);
Promise<PaymentRequestDetailsUpdate?> changePaymentMethod(DOMString methodName, optional object? methodDetails = null);
Promise<PaymentRequestDetailsUpdate?> changeShippingAddress(optional AddressInit shippingAddress = {});
Promise<PaymentRequestDetailsUpdate?> changeShippingOption(DOMString shippingOption);
undefined respondWith(Promise<PaymentHandlerResponse> handlerResponsePromise);
};
dictionary PaymentRequestEventInit : ExtendableEventInit {
USVString topOrigin;
USVString paymentRequestOrigin;
DOMString paymentRequestId;
sequence<PaymentMethodData> methodData;
PaymentCurrencyAmount total;
sequence<PaymentDetailsModifier> modifiers;
PaymentOptions paymentOptions;
sequence<PaymentShippingOption> shippingOptions;
};
dictionary PaymentHandlerResponse {
DOMString methodName;
object details;
DOMString? payerName;
DOMString? payerEmail;
DOMString? payerPhone;
AddressInit shippingAddress;
DOMString? shippingOption;
};
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in: