PaymentRequestEvent

可用性有限

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

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

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

PaymentRequestEvent 接口是 Payment Handler API 的一部分,当发起 PaymentRequest 时,该接口是传递给支付处理程序的**PaymentRequestEvent** 对象。

Event ExtendableEvent PaymentRequestEvent

构造函数

PaymentRequestEvent() 实验性

创建一个新的 PaymentRequestEvent 对象实例。

实例属性

methodData 只读 实验性

返回一个包含支付方法标识符的对象数组,这些标识符代表网站接受的支付方法以及任何相关的特定于支付方法的其他数据。

modifiers 只读 实验性

返回一个包含支付详情更改的对象数组。

paymentRequestId 只读 实验性

返回 PaymentRequest 对象的 ID。

paymentRequestOrigin 只读 实验性

返回初始化 PaymentRequest 对象的源(origin)。

topOrigin 只读 实验性

返回初始化 PaymentRequest 对象的顶级源(top-level origin)。

total 只读 实验性

返回请求支付的总金额。

实例方法

changePaymentMethod() 实验性

根据支付方法详情获取更新后的总金额。

openWindow() 实验性

在新的窗口中打开指定的 URL,前提是该 URL 与调用页面具有相同的源。它返回一个 Promise,该 Promise 解析为一个指向 WindowClient 的引用。

respondWith() 实验性

阻止默认事件处理,并允许您自己提供一个 PaymentResponse 对象的 Promise

示例

当调用 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

浏览器兼容性

另见