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

瀏覽器相容性