Airwallex logo
Airwallex logo

Desktop/Mobile Website Browser

Accept FPX payments on your website by redirecting shopper to FPX Online Banking pages. See checkout process below:

  1. The shopper chooses to pay with FPX Online Banking on merchant’s checkout page
  2. The shopper selects preferred bank on the checkout page
  3. The shopper selects a bank the make the payment
  4. The shopper is redirected to the bank’s login page
  5. After completing the payment on the bank’s page, the shopper is redirected back to the merchant’s page

Step 1. Initialize a Payment Intent

Create a PaymentIntent object with a request_id, amount, currency and a merchant_order_id from your backend server.

Shell
1curl -X POST \
2 https://api.airwallex.com/api/v1/pa/payment_intents/create \
3 -H 'Content-Type: application/json' \
4 -H 'Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiJhNDc...' \
5 -d '{
6 "request_id": "ed11e38a-7234-11ea-aa94-7fd44ffd1b89",
7 "amount": 20,
8 "currency": "MYR",
9 "merchant_order_id": "85d7b0e0-7235-11ea-862e-9f6aa1adfca6",
10 "return_url": "https://www.airwallex.com"
11 }'

Step 2. Get available banks

FPX requires bank_name when confirming the Payment Intent, you can call this API endpoint /api/v1/pa/config/banks with payment_method_type, country_code and lang to get available bank names based on the payment method selected.

Request:

1/api/v1/pa/config/banks?payment_method_type=online_banking&country_code=MY&lang=en

Response:

Shell
1{
2 "has_more": false,
3 "items": [
4 {
5 "name": "affin", // Bank name to be passed to our API
6 "display_name": "Affin Bank", // For front-end to display
7 "recources": {
8 "logo_url": "" // .svg
9 }
10 }
11 ]
12}

Note for available banks:

Alternatively, you can maintain a list of available banks locally on your server for payment methods that require bank_name if you do not want to use this API endpoint. However, we highly recommend you get the banks dynamically from this API to avoid any trouble when bank information or availability gets updated.

Supported banks:

bank_nameDisplay Name
affinAffin Bank
agrobankAgrobank
allianceAlliance Bank Malaysia
ambankAmBank
islamBank Islam Malaysia
muamalatBank Muamalat Malaysia
rakyatBank Rakyat
bsnBank Simpanan Nasional
cimb_clicksCIMB Clicks
hong_leongHong Leong Bank
hsbcThe Hongkong and Shanghai Banking Corporation
kfhKuwait Finance House
maybank2uMaybank2u
ocbcOCBC Bank
publicPublic Bank Berhad
rhbRHB Bank
standard_charteredStandard Chartered
uobUnited Overseas Bank

Step 3. Redirect to FPX to complete payment

When a shopper selects to pay with FPX Online Banking on their desktop/mobile browser, call the following API endpoints to get the URL in next_action to redirect the shopper to FPX payment page to complete the payment.

  1. Obtain URL from Airwallex and redirect shopper to FPX payment page

Request:

Shell
1curl -X POST \
2 https://api.airwallex.com/api/v1/pa/payment_intents/{id}/confirm \
3 -H 'Content-Type: application/json' \
4 -H 'Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiJhNDc...' \
5 -d '{
6 "request_id": "ed11e38a-7234-11ea-aa94-7fd44ffd1b89",
7 "payment_method":
8 {
9 "type": "fpx",
10 "fpx": {
11 "shopper_email": "[email protected]",
12 "shopper_phone": "01234567",
13 "shopper_name": "xxxxx"
14 "bank_name": "bank name"
15 }
16 }
17 }'

Response:

Shell
1{
2 "id": "int_hkstzb88jg1pttfqwts",
3 "request_id": "6287be40-e31f-47a2-8fbe-48dad3b73fc9",
4 "amount": 200,
5 "currency": "MYR",
6 "merchant_order_id": "af38b82a-451c-4405-bee6-d4715bd50908",
7 "order": {
8 "type": "physical_goods",
9 "products": [...],
10 "shipping": {...}
11 }
12 },
13 "descriptor": "vip8888",
14 "metadata": {
15 "test": "test"
16 },
17 "status": "REQUIRES_CUSTOMER_ACTION",
18 "captured_amount": 0,
19 "latest_payment_attempt": {...},
20 "created_at": "2021-08-24T11:27:07+0000",
21 "updated_at": "2021-08-24T11:27:25+0000",
22 "next_action": {
23 "type": "redirect",
24 "method": "GET",
25 "url": "https://pci-api.airwallex.com/pa/webhook/molpay/my/redirect?reference_id=...",
26 }
27}
  1. Wait for notification from Airwallex

Airwallex will notify you on the payment result asynchronously via the webhook API. Please refer to webhook documentation to set up your webhook accordingly. Although subscribing to different events is optional, it is recommended to at least subscribe to the payment_intent.succeeded which indicates that the shopper has successfully paid for the order via FPX.

  1. Query the PaymentIntent status

You may also query the status of a payment anytime via the PaymentIntents API

Shell
1 GET /payment_intents/{id}
Was this page helpful?