PaymentResponse: complete() 方法

安全上下文:此功能仅在 安全上下文 (HTTPS) 中可用,在一些或所有 支持的浏览器 中可用。

PaymentRequest 方法 complete()支付请求 API 中通知 用户代理 用户交互已结束,并导致任何剩余的用户界面关闭。

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

语法

js
complete()
complete(result)

参数

result 可选

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

成功

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

失败

支付未成功处理。用户代理可能会或可能不会向用户宣布失败,具体取决于其设计。

未知

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

注意:在旧版本的规范中,空字符串 "" 用于代替 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);
  });

规范

规范
支付请求 API
# dom-paymentresponse-complete

浏览器兼容性

BCD 表仅在浏览器中加载