token_flag parameter to define the Transaction Context. This tells our system who is triggering the payment and whether the billing amount is fixed or variable.| Flag | Full name | Amount | Use case | API Endpoint |
|---|---|---|---|---|
CITI_FLEX | CIT Initial | Variable | Customer saves their method for future purchases with varying amounts. | Link Account, Link Card |
CITU_FLEX | CIT Unscheduled | Variable | Customer makes a one-time payment using a previously saved method. | Payment |
| Flag | Full name | Amount | Use case | API Endpoint |
|---|---|---|---|---|
CITO_FLEX | CIT Other | Variable | Customer authorizes the merchant to charge variable amounts later (e.g. toll setup). | Link Account, Link Card |
MITU_FLEX | MIT Unscheduled | Variable | Merchant charges on-demand with no fixed schedule (e.g. auto-recharge for a toll card). | Payment |
callback_url.{
"status": {
"code": "00",
"message": "Success",
"trace_id": "bce9c83c-922e-4672-87f5-7f92cd15047c"
},
"data": {
"deeplink": "abamobilebank://ababank.com?type=account_on_file&qrcode=ABA...gFses",
"qr_string": "ABAAOF+hEGxkym...6SbF19enqLB2xU46jTzVY",
"expire_in": 1627113926
}
}qr_string for customers to scan with ABA Mobile and authorise the account linking.callback_url. This allows your system to capture the linking status and store the necessary tokens for future transactions.callback_url passed dynamically as a request parameter; however, if this parameter is absent, the system defaults to the callback_url configured within your Outlet Profile > Services > Credential on File.{
"request_id": "175317626731593",
"payment_credential": {
"ctid": "64513556cc930062e8cb3ae59eee8fbf459c53e",
"pwt": "6451355C97035CDE21FB13..E0945C21007136F3D423A1B",
"source_of_fund": "*****5312",
"type": "ABA ACCOUNT",
"status": 1,
"expired_at": "2025-10-20T08:20:03",
"token_flag": "CITI_FLEX",
"frequency": "",
"subscribed_amount": 0.0,
"amount_limit_per_tran": 0.0,
"currency": "USD",
}
}stringobjectstringstringstringstringVisa - Visa cardMC - MastercardCUP - UnionPay cardJCB - JCB cardABA ACCOUNT - ABA Accountnumber0 - Token has been removed.1 - Token is active.2 - Token has been frozen.stringstringCITI_FLEX, CITO_FLEX.stringCITI_FLEX or CITO_FLEX.number0 for token flag CITI_FLEX or CITO_FLEX.numberstringKHR or USD.callback_url.callback_url is not provided in the request, PayWay will use the default callback_url configured in the API Settings.callback_url, make sure the domain is whitelisted in your merchant profile.callback_url endpoint must:{
"tran_id": "6605586317",
"apv": "541181",
"status": 0
}stringstringnumber // Read request body
$response = json_decode(file_get_contents('php://input'), true);
$secretKey = "YOUR_SECRET_KEY";
// 1. Sort fields by key (ascending)
ksort($response);
// 2. Concatenate all values
$b4hash = '';
foreach ($response as $value) {
if (is_array($value)) {
$value = json_encode($value);
}
$b4hash .= $value;
}
// 3. Generate HMAC-SHA512 signature
$signature = base64_encode(
hash_hmac('sha512', $b4hash, $secretKey, true)
);
// 4. Get signature from request header
$receivedSignature = $_SERVER['HTTP_X_PAYWAY_HMAC_SHA512'] ?? '';
// 5. Compare signatures
if (hash_equals($signature, $receivedSignature)) {
// Valid request – process the notification
} else {
// Invalid request
http_response_code(401);
exit('Invalid signature');
}