A clean, dependency-free Python SDK for the ABA PayWay payment gateway.
Python 3.10+ · No third-party dependencies · Stdlib only
# No pip install needed — just copy the aba_sdk/ folder into your project.
# Or install from this repo:
pip install -e .from aba_sdk import PayWayClient, PayWayConfig, Environment
config = PayWayConfig(
merchant_id="your_merchant_id",
api_key="your_api_key",
env=Environment.sandbox, # OR Environment.production
)
client = PayWayClient(config)from aba_sdk.models import QRRequest, Currency, PaymentOption
from aba_sdk.utils import encode_items, encode_url
from aba_sdk.utils.timestamp import get_req_time
request = QRRequest(
tran_id=tran_id = f"ORDER-{get_req_time()}",
amount=8.00,
currency=Currency.USD, # Supported KHR, USD
payment_option=PaymentOption.ABAPAY_KHQR,
first_name="Khon",
last_name="Chanphearaa",
email="phearaa@example.com",
phone="012345678",
# Optional
items=encode_items([
{"name": "Coffee", "quantity": 2, "price": 2.50},
{"name": "Sandwich", "quantity": 1, "price": 3.00},
]),
callback_url=encode_url("https://yoursite.com/payway/callback"),
lifetime=6,
)
response = client.qr.generate_qr(request)
print(response.qr_string) # Raw KHQR string
print(response.abapay_deeplink) # Deep link for ABA Mobile
response.save_qr_image("qr.png") # Save Base64 PNG to diskfrom aba_sdk import PayWayAPIError, PayWayRequestError
try:
response = client.qr.generate_qr(request)
except PayWayAPIError as e:
# API returned an error (wrong domain, invalid hash, etc.)
print(f"[{e.code}] {e.message} trace={e.trace_id}")
except PayWayRequestError as e:
# Network timeout or connection error
print(f"Network error: {e}")| Value | Constant |
|---|---|
USD |
Currency.USD |
KHR |
Currency.KHR |
| Value | Constant | Notes |
|---|---|---|
abapay |
PaymentOption.ABAPAY |
|
khqr |
PaymentOption.KHQR |
|
abapay_khqr |
PaymentOption.ABAPAY_KHQR |
Most common |
wechat |
PaymentOption.WECHAT |
USD only |
alipay |
PaymentOption.ALIPAY |
USD only |
abapay_khqr_wechat_alipay |
PaymentOption.ALL |
USD only |
TEMPLATE1, TEMPLATE1_COLOR, TEMPLATE2, TEMPLATE2_COLOR, TEMPLATE3, TEMPLATE3_COLOR
Each API group gets its own file in aba_sdk/api/ and its own models in aba_sdk/models/.
Then register the new client in PayWayClient:
# aba_sdk/client.py
from .api.checkout import CheckoutClient # new module
class PayWayClient:
def __init__(self, config):
self.qr = QRClient(config)
self.checkout = CheckoutClient(config) # add here- Generate QRCode
- Check Transaction
- Close Transaction
Folder /examples
Run Python File| Environment | Base URL |
|---|---|
| Sandbox | https://checkout-sandbox.payway.com.kh |
| Production | https://checkout.payway.com.kh |
Note: Your IP/domain must be whitelisted by PayWay before production calls work. Contact
paywaysales@ababank.comfor production credentials.