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.

View SDKs Request Access

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.

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.sktopupstore.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.sktopupstore.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.sktopupstore.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.sktopupstore.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.sktopupstore.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.sktopupstore.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.sktopupstore.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.sktopupstore.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.sktopupstore.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.sktopupstore.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.sktopupstore.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.sktopupstore.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.sktopupstore.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.sktopupstore.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.sktopupstore.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.sktopupstore.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.sktopupstore.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.sktopupstore.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.sktopupstore.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.sktopupstore.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.sktopupstore.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.