Learn how the Payment Request API works at a high level.
Payment Request API
When a customer tries to purchase something from your website, the site must ask the customer to provide payment information and, optionally, other information such as shipping preference. You can achieve this easily and quickly using the Payment Request API (PR API).
Basic structure
Constructing a PaymentRequest
object requires two parameters: payment
methods and payment details. In addition, a third payment options parameter
is optional. A basic request could be created like this:
const request = new PaymentRequest(paymentMethods, paymentDetails);
Let's look at how each parameter is built and used.
Payment methods
The first parameter, paymentMethods, is a list of supported payment methods in
an array variable. Each element in the array comprises two components,
supportedMethods
and, optionally, data
.
For supportedMethods
, the merchant needs to specify a Payment Method
Identifier
such as https://bobbucks.dev/pay
. The existence and content of data
depends on
the content of supportedMethods
and payment app provider's design.
Both pieces of information should be provided by the payment app provider.
// Supported payment methods
const paymentMethods = [{
supportedMethods: 'https://bobbucks.dev/pay',
data: {
... // Optional parameters defined by the payment app provider.
}
}];
Payment details
The second parameter, paymentDetails, is passed as an object and specifies
payment details for the transaction. It contains the required value total
,
which specifies the total amount due from the customer. This parameter can also
optionally list the purchased items.
In the example below, the optional purchased items list (just one item, in this case) is shown, as is the required total amount due. In both cases the currency unit is specified with each individual amount.
const paymentDetails = {
displayItems: [{
label: 'Anvil L/S Crew Neck - Grey M x1',
amount: { currency: 'USD', value: '22.15' }
}],
total: {
label: 'Total due',
amount: { currency: 'USD', value : '22.15' }
}
};
Check whether the payment method is available
Before invoking the payment procedure, the merchant can check whether the user and the environment are ready for making a payment.
Calling canMakePayment()
checks if the browser supports at
least one payment method specified in the object.
request.canMakePayment().then(result => {
if (result) {
// This browser supports the specified payment method.
} else {
// This browser does NOT support the specified payment method.
}
}).catch(e => {
// An exception
});
Learn more about PaymentRequest.canMakePayment() on MDN
The show()
method
After setting the two parameters and creating the request
object as shown
above, you can call the show()
method, which displays the payment app user
interface.
request.show().then(response => {
// [process payment]
// send to a PSP etc.
response.complete('success');
});
How payment app user interface will look is completely up to the payment app provider. After the customer agrees to make a payment, a JSON object is passed to the merchant which contains all the required information to transfer money. The merchant can then send it to the PSP to process the payment.
Finally, you may close the Payment Request UI by completing the process with
response.complete('success')
or response.complete('fail')
depending on the
result that the PSP returns.
Next up
Learn more about Web Payments.