Payment Request Component
MONEI Payment Request Component gives you a single integration for Apple Pay and Google Pay. Customers see a Google Pay or an Apple Pay button, depending on what their device and browser combination supports.
note
Apple Pay with the Payment Request Component requires macOS 10.12.1+ or iOS 10.1+.
Before you begin
This page explains how to add Payment Request Component to your payment page. To accept Apple Pay and Google Pay payments you need to have at least one configured card processor.
To configure card processors go to MONEI Dashboard → Settings → Payment Methods → Card payments.
Before you start, you need to:
- Add a payment method to your browser. For example, you can save a card in Chrome, or add a card to your Wallet for Safari.
- Serve your application over HTTPS. This is a requirement both in development and in production. One way to get up and running is to use a service like ngrok.
- Register your domain with Apple Pay, both in development and production.
To test your integration:
- Use your test mode Account ID and API Key.
- You can use any real card details, you will not be charged in the test mode (card details are automatically replaced with the test card).
- You can check the status of the test payment in your MONEI Dashboard → Payments (in test mode).
Register your domain with Apple Pay
If you are using WooCommerce Plugin or custom domain with MONEI Hosted Payment Page your domain is verified automatically.
In order to register your domain with Apple, you will need to first verify your ownership of the domain. Go to your MONEI Dashboard → Settings → Payment Methods, choose Register domain with Apple and follow the instructions in the popup.
You can also verify your domain with Apple using MONEI REST API.
Integration
1. Create a Payment Server-side
Create a Payment on your server with an amount and currency. Always decide how much to charge on the server side, a trusted environment, as opposed to the client. This prevents malicious customers from being able to choose their own prices.
- cURL
- Node.js
- PHP
curl --request POST 'https://api.monei.com/v1/payments' \
--header 'Authorization: pk_test_3c140607778e1217f56ccb8b50540e00' \
--header 'Content-Type: application/json' \
--data-raw '{
"amount": 110,
"currency": "EUR",
"orderId": "14379133960355",
"description": "Test Shop - #14379133960355",
"customer": {
"email": "john.doe@microapps.com"
},
"callbackUrl": "https://example.com/checkout/callback"
}'
const {Monei} = require('@monei-js/node-sdk');
const monei = new Monei('pk_test_36cf3e8a15eff3f5be983562ea6b13ec');
monei.payments.create({
amount: 110,
currency: 'EUR',
orderId: '14379133960355',
description: 'Test Shop - #14379133960355',
customer: {
email: 'john.doe@microapps.com'
},
callbackUrl: 'https://example.com/checkout/callback'
});
$monei = new Monei\MoneiClient('pk_test_36cf3e8a15eff3f5be983562ea6b13ec');
$monei->payments->create([
'amount' => 110,
'currency' => 'EUR',
'orderId' => '14379133960355',
'description' => 'Test Shop - #14379133960355',
'customer' => [
'email' => 'john.doe@microapps.com'
],
'callbackUrl' => 'https://example.com/checkout/callback'
]);
The following parameters are required:
- amount
positive integer
- Amount intended to be collected by this payment. A positive integer representing how much to charge in the smallest currency unit (e.g., 100 cents to charge 1.00 USD) - currency
string
- Three-letter ISO currency code, in uppercase. Must be a supported currency. - orderId
string
- An order ID from your system. A unique identifier that can be used to reconcile the payment with your internal system. - callbackUrl
string
- The URL to which a payment result should be sent asynchronously.
note
Payment Request Component is also available as a React and Vue component. Check out our examples.
Check all available request parameters.
Included in the returned Payment object is a payment id
, which is used on the client side to securely complete the payment process instead of passing the entire Payment object.
2. Add Payment Request Component to your payment page Client-side
Include monei.js
on your checkout page by adding the script tag to the head
of your HTML file.
<head>
<title>Checkout</title>
<script src="https://js.monei.com/v2/monei.js"></script>
</head>
Add MONEI Payment Request Component to your payment page. Create empty DOM node (container) with unique ID in your payment form.
<div id="payment_request_container">
<!-- Payment Request Component will be inserted here. -->
</div>
Initialize Payment Request Component
// Create an instance of the Google Pay component.
const paymentRequest = monei.PaymentRequest({
paymentId: '{{payment_id}}',
onSubmit(result) {
moneiTokenHandler(result.token);
},
onError(error) {
console.log(error);
}
});
// Render an instance of the Payment Request Component into the `payment_request_container` <div>.
paymentRequest.render('#payment_request_container');
Check the MONEI JS Reference for more options.
3. Confirm the payment Client-side
To complete the payment you need to confirm it using monei.js confirmPayment function
You need to provide a paymentId
(obtained in step 1) and paymentToken
generated with Payment Request Component. You can also provide additional parameters like customer.email
. Check all available parameters.
// Confirm the payment
function moneiTokenHandler(token) {
return monei
.confirmPayment({paymentId: '{{payment_id}}', paymentToken: token})
.then(function (result) {
// At this moment you can show a customer the payment result
// But you should always rely on the result passed to the callback endpoint on your server
// to update the order status
console.log(result);
})
.catch(function (error) {
console.log(error);
});
}
note
As an alternative process you can submit generated paymentToken
to your sever and then confirm payment on the server-side.
4. An asynchronous request is sent to your server.
MONEI will notify you about the payment status by sending an HTTP POST request to the callbackUrl
. The request body will contain full payment object in JSON format.
This ensures that you get the payment status even when customer closed the browser window or lost internet connection.
The request also contains a MONEI-Signature
header. Verify this signature to confirm that received request is sent from MONEI.
To acknowledge receipt of the request, your endpoint must return a 200
HTTP status code to MONEI. All other response codes, including 3xx
codes, indicate to MONEI that you did not receive the event.
If MONEI does not receive a 200
HTTP status code, the notification attempt is repeated. After multiple failures to send the notification over multiple days, MONEI marks the request as failed and stops trying to send it to your endpoint.
Before you go live
- Make sure that you are using live (production) mode Account ID and API Key.
- Make sure that you have at least one enabled card processor.
- Contact our Support Team to configure Apple Pay in production.