ServiceWorkerGlobalScope: paymentrequest 事件

可用性有限

此特性不是基线特性,因为它在一些最广泛使用的浏览器中不起作用。

实验性: 这是一项实验性技术
在生产中使用此技术之前,请仔细检查浏览器兼容性表格

安全上下文: 此功能仅在安全上下文(HTTPS)中可用,且支持此功能的浏览器数量有限。

注意:此功能仅在 Service Workers 中可用。

ServiceWorkerGlobalScope 接口的 paymentrequest 事件在支付应用程序上触发,当用户在商家网站上通过 PaymentRequest.show() 方法启动支付流程时。

语法

在诸如 addEventListener() 之类的方法中使用事件名称,或设置事件处理程序属性。

js
addEventListener("paymentrequest", (event) => { })

onpaymentrequest = (event) => { }

事件类型

一个 PaymentRequestEvent。继承自 ExtendableEvent

Event ExtendableEvent PaymentRequestEvent

示例

当调用 PaymentRequest.show() 方法时,会在支付应用程序的服务工作线程上触发一个 paymentrequest 事件。此事件在支付应用程序的服务工作线程内部被监听,以开始支付流程的下一阶段。

js
let payment_request_event;
let resolver;
let client;

// `self` is the global object in service worker
self.addEventListener("paymentrequest", async (e) => {
  if (payment_request_event) {
    // If there's an ongoing payment transaction, reject it.
    resolver.reject();
  }
  // Preserve the event for future use
  payment_request_event = e;

  // …
});

当收到 paymentrequest 事件时,支付应用程序可以通过调用 PaymentRequestEvent.openWindow() 来打开一个支付处理窗口。支付处理窗口将向客户展示一个支付应用程序界面,他们可以在其中进行身份验证、选择配送地址和选项,以及授权支付。

支付处理完成后,使用 PaymentRequestEvent.respondWith() 将支付结果传回商家网站。

有关此阶段的更多详细信息,请参阅 Receive a payment request event from the merchant

规范

规范
Payment Handler API
# the-paymentrequestevent

浏览器兼容性

另见