v1.0 Stable
Payway KHQR API
Professional payment integration for ABA Bank Cambodia. Generate KHQR codes, track transactions, and accept payments in USD or KHR. Features mobile deep linking for seamless ABA app integration.
Endpoints
POST
/api/aba/payment-gateway/payment/create-payment
Generate a new payment KHQR code with deep link support.
POST
/api/aba/payment-gateway/payment/check-payment/md5
Check payment status by MD5 hash.
POST
/api/aba/payment-gateway/payment/check-payment/transaction_id
Check payment status by Transaction ID.
GET
/api/aba/deeplink/{code}
Mobile deep link endpoint. Redirects to ABA Mobile App on mobile devices, or home page on desktop.
SDKs & Code Examples
Complete examples for all API endpoints in multiple languages.
1. Create Payment
Python
import requests
def create_payment(api_key, currency, amount):
url = "https://payway.zorost4re.com/api/aba/payment-gateway/payment/create-payment"
headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json"
}
data = {
"currency": currency,
"amount": amount
}
response = requests.post(url, headers=headers, json=data)
return response.json()
result = create_payment("YOUR_API_KEY", "USD", 10.50)
print(result["qr_image"])
print(result["deeplink"])
2. Check Status by MD5
Python
def check_status_md5(api_key, md5_hash):
url = "https://payway.zorost4re.com/api/aba/payment-gateway/payment/check-payment/md5"
headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json"
}
data = {"md5_hash": md5_hash}
response = requests.post(url, headers=headers, json=data)
return response.json()
status = check_status_md5("YOUR_API_KEY", "MD5_HASH_HERE")
print(status["status"])
3. Check Status by Transaction ID
Python
def check_status_transaction(api_key, transaction_id):
url = "https://payway.zorost4re.com/api/aba/payment-gateway/payment/check-payment/transaction_id"
headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json"
}
data = {"transaction_id": transaction_id}
response = requests.post(url, headers=headers, json=data)
return response.json()
status = check_status_transaction("YOUR_API_KEY", "TRANSACTION_ID_HERE")
print(status["status"])
1. Create Payment
JavaScript
async function createPayment(apiKey, currency, amount) {
const response = await fetch(
"https://payway.zorost4re.com/api/aba/payment-gateway/payment/create-payment",
{
method: "POST",
headers: {
"Authorization": `Bearer ${apiKey}`,
"Content-Type": "application/json"
},
body: JSON.stringify({ currency, amount })
}
);
return await response.json();
}
const payment = await createPayment("YOUR_API_KEY", "USD", 10.50);
console.log(payment.deeplink);
2. Check Status by MD5
JavaScript
async function checkStatusMD5(apiKey, md5Hash) {
const response = await fetch(
"https://payway.zorost4re.com/api/aba/payment-gateway/payment/check-payment/md5",
{
method: "POST",
headers: {
"Authorization": `Bearer ${apiKey}`,
"Content-Type": "application/json"
},
body: JSON.stringify({ md5_hash: md5Hash })
}
);
return await response.json();
}
3. Check Status by Transaction ID
JavaScript
async function checkStatusTransaction(apiKey, transactionId) {
const response = await fetch(
"https://payway.zorost4re.com/api/aba/payment-gateway/payment/check-payment/transaction_id",
{
method: "POST",
headers: {
"Authorization": `Bearer ${apiKey}`,
"Content-Type": "application/json"
},
body: JSON.stringify({ transaction_id: transactionId })
}
);
return await response.json();
}
1. Create Payment
PHP
<?php
function createPayment($apiKey, $currency, $amount) {
$ch = curl_init("https://payway.zorost4re.com/api/aba/payment-gateway/payment/create-payment");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
"currency" => $currency,
"amount" => $amount
]));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer " . $apiKey,
"Content-Type: application/json"
]);
$result = json_decode(curl_exec($ch), true);
curl_close($ch);
return $result;
}
$payment = createPayment("YOUR_API_KEY", "USD", 10.50);
echo $payment["deeplink"];
2. Check Status by MD5
PHP
function checkStatusMD5($apiKey, $md5Hash) {
$ch = curl_init("https://payway.zorost4re.com/api/aba/payment-gateway/payment/check-payment/md5");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
"md5_hash" => $md5Hash
]));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer " . $apiKey,
"Content-Type: application/json"
]);
$result = json_decode(curl_exec($ch), true);
curl_close($ch);
return $result;
}
3. Check Status by Transaction ID
PHP
function checkStatusTransaction($apiKey, $transactionId) {
$ch = curl_init("https://payway.zorost4re.com/api/aba/payment-gateway/payment/check-payment/transaction_id");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
"transaction_id" => $transactionId
]));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer " . $apiKey,
"Content-Type: application/json"
]);
$result = json_decode(curl_exec($ch), true);
curl_close($ch);
return $result;
}
1. Create Payment
Java
import java.net.http.*;
import java.net.URI;
public class PaymentAPI {
public static String createPayment(String apiKey, String currency, double amount)
throws Exception {
HttpClient client = HttpClient.newHttpClient();
String jsonBody = String.format(
"{"currency":"%s","amount":%.2f}", currency, amount);
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://payway.zorost4re.com/api/aba/payment-gateway/payment/create-payment"))
.header("Authorization", "Bearer " + apiKey)
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(jsonBody))
.build();
HttpResponse<String> response = client.send(request,
HttpResponse.BodyHandlers.ofString());
return response.body();
}
}
2. Check Status by MD5
Java
public static String checkStatusMD5(String apiKey, String md5Hash)
throws Exception {
HttpClient client = HttpClient.newHttpClient();
String jsonBody = String.format("{"md5_hash":"%s"}", md5Hash);
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://payway.zorost4re.com/api/aba/payment-gateway/payment/check-payment/md5"))
.header("Authorization", "Bearer " + apiKey)
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(jsonBody))
.build();
HttpResponse<String> response = client.send(request,
HttpResponse.BodyHandlers.ofString());
return response.body();
}
3. Check Status by Transaction ID
Java
public static String checkStatusTransaction(String apiKey, String transactionId)
throws Exception {
HttpClient client = HttpClient.newHttpClient();
String jsonBody = String.format(
"{"transaction_id":"%s"}", transactionId);
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(
"https://payway.zorost4re.com/api/aba/payment-gateway/payment/check-payment/transaction_id"))
.header("Authorization", "Bearer " + apiKey)
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(jsonBody))
.build();
HttpResponse<String> response = client.send(request,
HttpResponse.BodyHandlers.ofString());
return response.body();
}
1. Create Payment
C#
using System.Net.Http.Headers;
using System.Text.Json;
public async static Task<JsonDocument> CreatePayment(
string apiKey, string currency, decimal amount)
{
var client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", apiKey);
var content = new StringContent(
JsonSerializer.Serialize(new { currency, amount }),
System.Text.Encoding.UTF8,
"application/json");
var response = await client.PostAsync(
"https://payway.zorost4re.com/api/aba/payment-gateway/payment/create-payment", content);
var result = await response.Content.ReadAsStringAsync();
return JsonDocument.Parse(result);
}
2. Check Status by MD5
C#
public async static Task<JsonDocument> CheckStatusMD5(
string apiKey, string md5Hash)
{
var client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", apiKey);
var content = new StringContent(
JsonSerializer.Serialize(new { md5_hash = md5Hash }),
System.Text.Encoding.UTF8,
"application/json");
var response = await client.PostAsync(
"https://payway.zorost4re.com/api/aba/payment-gateway/payment/check-payment/md5", content);
return JsonDocument.Parse(await response.Content.ReadAsStringAsync());
}
3. Check Status by Transaction ID
C#
public async static Task<JsonDocument> CheckStatusTransaction(
string apiKey, string transactionId)
{
var client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", apiKey);
var content = new StringContent(
JsonSerializer.Serialize(new { transaction_id = transactionId }),
System.Text.Encoding.UTF8,
"application/json");
var response = await client.PostAsync(
"https://payway.zorost4re.com/api/aba/payment-gateway/payment/check-payment/transaction_id", content);
return JsonDocument.Parse(await response.Content.ReadAsStringAsync());
}
1. Create Payment
Go
package main
import (
"bytes"
"encoding/json"
"net/http"
)
type PaymentRequest struct {
Currency string `json:"currency"`
Amount float64 `json:"amount"`
}
func CreatePayment(apiKey, currency string, amount float64) (map[string]interface{}, error) {
jsonData, _ := json.Marshal(PaymentRequest{Currency: currency, Amount: amount})
req, _ := http.NewRequest("POST",
"https://payway.zorost4re.com/api/aba/payment-gateway/payment/create-payment",
bytes.NewBuffer(jsonData))
req.Header.Set("Authorization", "Bearer "+apiKey)
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
return nil, err
}
defer resp.Body.Close()
var result map[string]interface{}
json.NewDecoder(resp.Body).Decode(&result)
return result, nil
}
2. Check Status by MD5
Go
type MD5Request struct {
MD5Hash string `json:"md5_hash"`
}
func CheckStatusMD5(apiKey, md5Hash string) (map[string]interface{}, error) {
jsonData, _ := json.Marshal(MD5Request{MD5Hash: md5Hash})
req, _ := http.NewRequest("POST",
"https://payway.zorost4re.com/api/aba/payment-gateway/payment/check-payment/md5",
bytes.NewBuffer(jsonData))
req.Header.Set("Authorization", "Bearer "+apiKey)
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
return nil, err
}
defer resp.Body.Close()
var result map[string]interface{}
json.NewDecoder(resp.Body).Decode(&result)
return result, nil
}
3. Check Status by Transaction ID
Go
type TransactionRequest struct {
TransactionID string `json:"transaction_id"`
}
func CheckStatusTransaction(apiKey, transactionID string) (map[string]interface{}, error) {
jsonData, _ := json.Marshal(TransactionRequest{TransactionID: transactionID})
req, _ := http.NewRequest("POST",
"https://payway.zorost4re.com/api/aba/payment-gateway/payment/check-payment/transaction_id",
bytes.NewBuffer(jsonData))
req.Header.Set("Authorization", "Bearer "+apiKey)
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
return nil, err
}
defer resp.Body.Close()
var result map[string]interface{}
json.NewDecoder(resp.Body).Decode(&result)
return result, nil
}
1. Create Payment
Ruby
require 'net/http'
require 'json'
require 'uri'
def create_payment(api_key, currency, amount)
uri = URI("https://payway.zorost4re.com/api/aba/payment-gateway/payment/create-payment")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true if uri.scheme == 'https'
request = Net::HTTP::Post.new(uri)
request["Authorization"] = "Bearer #{api_key}"
request["Content-Type"] = "application/json"
request.body = { currency: currency, amount: amount }.to_json
response = http.request(request)
JSON.parse(response.body)
end
payment = create_payment("YOUR_API_KEY", "USD", 10.50)
puts payment["deeplink"]
2. Check Status by MD5
Ruby
def check_status_md5(api_key, md5_hash)
uri = URI("https://payway.zorost4re.com/api/aba/payment-gateway/payment/check-payment/md5")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true if uri.scheme == 'https'
request = Net::HTTP::Post.new(uri)
request["Authorization"] = "Bearer #{api_key}"
request["Content-Type"] = "application/json"
request.body = { md5_hash: md5_hash }.to_json
response = http.request(request)
JSON.parse(response.body)
end
3. Check Status by Transaction ID
Ruby
def check_status_transaction(api_key, transaction_id)
uri = URI("https://payway.zorost4re.com/api/aba/payment-gateway/payment/check-payment/transaction_id")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true if uri.scheme == 'https'
request = Net::HTTP::Post.new(uri)
request["Authorization"] = "Bearer #{api_key}"
request["Content-Type"] = "application/json"
request.body = { transaction_id: transaction_id }.to_json
response = http.request(request)
JSON.parse(response.body)
end
API Playground
Test API
Request API Access
Submit your details to request API credentials.
Success!
Request received.