PaymentResponse: complete() 方法

可用性有限

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

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

PaymentResponse 接口的 complete() 方法,属于 Payment Request API,用于通知 用户代理 用户交互已结束,并会关闭任何剩余的用户界面。

此方法必须在用户接受支付请求后,并且 PaymentRequest.show() 方法返回的 Promise 已解析后调用。

语法

js
complete()
complete(result)

参数

result 可选

一个字符串,指示完成时支付操作的状态。它必须是以下之一:

success

支付已成功处理。用户代理可能会或可能不会向用户显示某种形式的“支付成功”提示。

fail

支付未成功处理。用户代理可能会或可能不会根据其设计向用户宣布失败。

unknown

交易的成功或失败状态未知或无关紧要,用户代理不应显示任何通知,即使它通常会这样做。这是默认值。

注意: 在规范的早期版本中,使用空字符串 "" 代替 unknown 来指示完成但结果状态未知。有关详细信息,请参阅下面的 浏览器兼容性 部分。

返回值

一个 Promise,它在支付界面完全关闭后解析,不带任何输入值。如果发生错误,则 Promise 会被拒绝,并返回以下异常之一。

异常

AbortError DOMException

如果在显示用户界面的过程中,支付请求发生的文档变为非活动状态,则返回此异常。

InvalidStateError DOMException

如果支付已完成,或者在支付重试请求待处理时调用了 complete(),则返回此异常。在请求重试支付后,您不能将该支付视为已完成。

示例

以下示例使用 Fetch API 将支付信息发送到安全服务器。它会根据响应中的状态,使用适当的答案调用 complete()

js
// Initialization of PaymentRequest arguments are excerpted for the
//   sake of brevity.
const payment = new PaymentRequest(supportedInstruments, details, options);

payment
  .show()
  .then((paymentResponse) => {
    const fetchOptions = {
      method: "POST",
      credentials: include,
      body: JSON.stringify(paymentResponse),
    };
    const serverPaymentRequest = new Request("secure/payment/endpoint");
    fetch(serverPaymentRequest, fetchOptions)
      .then((response) => {
        if (response.status < 400) {
          paymentResponse.complete("success");
        } else {
          paymentResponse.complete("fail");
        }
      })
      .catch((reason) => {
        paymentResponse.complete("fail");
      });
  })
  .catch((err) => {
    console.error("Uh oh, something bad happened", err.message);
  });

规范

规范
Payment Request API
# dom-paymentresponse-complete

浏览器兼容性