A browser polyfill that provides the Web Payments Browser API, which supports:
- Registration of payment applications
- Requesting payment
- Acknowledging payment
This polyfill works in conjunction with web-payments.io. A demo on web-payments.io is here.
This API enables a developer to write Web applications that can register payment applications, request payment, and acknowledge payment. The API is outlined below, separated by different actors in the system:
APIs called by payment application websites:
- navigator.payment.registerApp( manifest )
APIs called by payees (e.g. merchant websites):
- navigator.payment.request( paymentRequest )
APIs called by payment applications:
- navigator.payment.acknowledge( acknowledgement )
- navigator.payment.getPendingRequest( options )
The navigator.payment.registerApp( manifest ) call can be used to register a payment application with a user's browser.
The call takes the following arguments:
- manifest (required object) - A JSON-LD manifest describing the payment application, including its unique identifier, name, image, URL, and supported payment methods. The URL in the manifest will be loaded whenever a user selects the payment application to process a payment request. Its supported payment methods will be used to determine if it should be shown as an option for a particular payment request. If it is shown, its name and image will be displayed on a selection screen via the user's Payer Interface.
The call returns a Promise that resolves once the registration is complete.
Example:
navigator.payment.registerApp({
id: 'https://bitcoin-wallet.example.com/app/',
type: 'PaymentApp',
name: 'Example Bitcoin App',
image: 'https://bitcoin-wallet.example.com/icons/app.png',
url: 'https://bitcoin-wallet.example.com/app/',
supportedPaymentMethod: [
'https://w3id.org/payment-methods#Bitcoin'
]
}).then(function() {
// ...
});The navigator.payment.request( paymentRequest ) call can be used to request payment.
The call takes the following arguments:
- paymentRequest (required object) - A JSON-LD payment request message containing the acceptable payment methods and other parameters.
The call returns a Promise that resolves to a JSON-LD payment acknowledgement once the request has been processed by an appropriate payment application. An acknowledgement does not necessarily indicate the payment has been completed; the actual meaning of the acknowledgement is payment method specific. A payee website may need to take further action to complete the payment.
navigator.payment.request({
type: 'PaymentRequest'
description: 'Payment to ExampleMerch for Widget 1'
acceptablePayment: [{
paymentMethod: [
'https://w3id.org/payment-methods#Visa',
'https://w3id.org/payment-methods#Mastercard',
'https://w3id.org/payment-methods#Discover'
],
transfer: {
amount: '4.35',
currency: 'USD'
}
}, {
paymentMethod: 'https://w3id.org/payment-methods#Bitcoin',
transfer: {
amount: '0.0177',
currency: 'BTC'
},
destination: '3QJmV3qfvL9SuYo34YihAf3sRCW3qSinyC'
}
}).then(function(acknowledgement) {
// ...
});The navigator.payment.acknowledge( acknowledgement ) call can be used by a payment application to acknowledge that a payment request has been processed. The exact meaning of the acknowledgement is payment method specific.
The call takes the following arguments:
- acknowledgement (required object) - A JSON-LD payment acknowledgement expressing the required payment method specific information to indicate a payment request has been processed.
navigator.payment.acknowledge({
type: 'PaymentAcknowledgement',
description: 'Payment to ExampleMerch for widgets',
payment: {
paymentMethod: 'https://w3id.org/payment-methods#Visa',
status: 'authorized',
approvalCode: '10025AB',
transfer: {
amount: '4.35',
currency: 'USD'
}
}
});The getPendingRequest method is only used by payment applications to
complete a pending request operation once the user has selected their
payment application of choice.
The call takes no arguments. It returns a Promise that resolves to the
JSON-LD payment request that was passed to navigator.payment.request.
The payment application can now help the user process the payment request.
Once payment application has completed the operation, it must call
navigator.payment.acknowledge and pass a payment acknowledgement. This will
cause the browser to navigate away from the payment application and return
the result to the payee website.
navigator.payment.getPendingRequest().then(function(paymentRequest) {
// ... handle payment request, generate acknowledgement
// acknowledge payment request handled
navigator.payment.acknowledge(acknowledgement);
});The source code for the JavaScript implementation is available at: