files/en-us/web/api/paymentresponse/complete/index.md
{{securecontext_header}}{{APIRef("Payment Request API")}}
The {{domxref("PaymentRequest")}} method
complete() of the Payment Request API notifies the
{{Glossary("user agent")}} that the user interaction is over, and causes any remaining
user interface to be closed.
This method must be called after the user accepts the payment request and the {{jsxref("Promise")}} returned by the {{domxref('PaymentRequest.show()')}} method is resolved.
complete()
complete(result)
result {{optional_inline}}
: A string indicating the state of the payment operation upon completion. It must be one of the following:
success
fail
unknown
[!NOTE] In older versions of the specification, an empty string,
"", was used instead ofunknownto indicate a completion without a known result state. See the Browser compatibility section below for details.
A {{jsxref("Promise")}} which resolves with no input value once the payment interface has been fully closed. If an error occurs, the promise instead rejects, returning one of the exceptions listed below.
AbortError {{domxref("DOMException")}}
InvalidStateError {{domxref("DOMException")}}
complete() was called while a
request to retry the payment is pending. You can't treat a payment as complete after
requesting that the payment be tried again.The following example sends payment information to a secure server using the Fetch API. It
calls complete() with an answer appropriate to the status in the response.
// 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);
});
{{Specifications}}
{{Compat}}