Payment Callback
PhaJay ມີ ສອງວິທີ ສໍາລັບການຮັບຂໍ້ມູນ payment callback ຫຼັງຈາກທຸລະກໍາສໍາເລັດຜົນ.
1. Subscribe (Realtime ຜ່ານ SocketIO)
ເພື່ອຮັບຂໍ້ມູນການຊໍາລະເງິນເມື່ອມີທຸລະກໍາການຊໍາລະ, ແພລດຟອມຂອງທ່ານຕ້ອງ subscribe ກັບ Payment, ໂດຍເຊື່ອມຕໍ່ໃນຮູບແບບ SocketIO ຕາມລິ້ງ ແລະ ຕ້ອງ subscribe ກັບ event ດັ່ງລຸ່ມນີ້:
- url ສໍາລັບກວດສອບການ subscribe
https://portal.phajay.co/?key=<PAYMENT_Support_SECRET>Request
| Parameters | Type | ຄໍາອະທິບາຍ |
|---|---|---|
| url | String | ລິ້ງທີ່ໃຊ້ຕິດຕາມທຸລະກໍາ ໂດຍເບິ່ງລາຍລະອຽດທຸກຄັ້ງ. ຕ້ອງມີ key ທີ່ມີຄ່າດຽວກັນກັບ SecretKey ຂອງທ່ານໃນ URL. |
<PAYMENT_Support_SECRET> | String | SecretKey ຂອງທ່ານສາມາດເອົາໄດ້ຈາກ PhaJay Payemnt Support portal (opens in a new tab). |
join::<PAYMENT_Support_SECRET> | String | SecretKey ຂອງທ່ານສາມາດເອົາໄດ້ຈາກ PhaJay Payemnt Support portal (opens in a new tab). |
ຕົວຢ່າງໂຄ້ດ
const onSubscribePaymentSupport = (models) => {
try {
const _socketPaymentUrl = "https://payment-gateway.phajay.co/"
const socket = io(_socketPaymentUrl);
if (socket.connected) {
console.log('Socket is already connected.');
return; // ບໍ່ຈໍາເປັນຕ້ອງເຊື່ອມຕໍ່ຊໍ້າອີກ
}
// ເຊື່ອມຕໍ່ກັບ server
socket.on('connect', () => {
console.log('Connected to the payment Support server!');
// Subscribe ກັບ event ທີ່ກໍານົດເອງ
socket.on('join::' + process.env.SECRET_KEY, async (data) => { // SECRET_KEY ເອົາຈາກ PhaJay Portal
console.log('Data received:', data);
});
});
// ຈັດການ error ການເຊື່ອມຕໍ່ (ທາງເລືອກ)
socket.on('connect_error', (error) => {
console.error('Connection failed:', error);
});
return;
} catch (error) {
console.log({ error })
}
}2. Webhook Callback (ວິທີໃໝ່)
ເພື່ອຮັບຂໍ້ມູນການຊໍາລະເງິນໂດຍອັດຕະໂນມັດເມື່ອທຸລະກໍາສໍາເລັດ, ທ່ານຕ້ອງຕັ້ງ Webhook URL ໃນ portal ຂອງ PhaJay ໂດຍໄປທີ່ Settings > Webhook (ເບິ່ງຮູບລຸ່ມນີ້).

Payment server ຈະສົ່ງ callback response ໄປຫາ URL ທີ່ທ່ານຕັ້ງໄວ້ ພ້ອມລາຍລະອຽດຂອງທຸລະກໍາ.
🔐 ກ່ອນທີ່ຈະເຊື່ອຖືຂໍ້ມູນນີ້, ໃຫ້ກວດສອບວ່າ request ມາຈາກ PhaJay ແທ້ — ເບິ່ງ Verify Webhook Signature.
- Endpoint URL: URL ທີ່ຈະໃຊ້ຮັບການແຈ້ງເຕືອນການຊໍາລະ, ຕົວຢ່າງ
https://yourdomain.com/payment. - Description: ໝາຍເຫດ ຫຼື ຊື່ເອີ້ນຂອງ webhook ຂອງທ່ານ (ບໍ່ບັງຄັບ, ໄວ້ອ້າງອີງສໍາລັບທ່ານເອງ).
ເມື່ອການຊໍາລະສໍາເລັດຜົນ, ລະບົບຈະ Response ຂໍ້ມູນທຸລະກໍາ (payload) ໄປຫາ webhook endpoint ຂອງທ່ານໃນຮູບແບບ JSON.
ຂໍ້ມູນ Response
| Field | Type | ຄໍາອະທິບາຍ |
|---|---|---|
| message | String | ຂໍ້ຄວາມຕອບກັບຂອງການເອີ້ນ API. |
| refNo | String | ເລກອ້າງອີງທີ່ກໍານົດໃຫ້ທຸລະກໍາ. |
| exReferenceNo | String | ເລກອ້າງອີງພາຍນອກທີ່ກ່ຽວຂ້ອງກັບທຸລະກໍາ. |
| merchantName | String | ຊື່ຂອງຮ້ານຄ້າ (merchant) ທີ່ກ່ຽວຂ້ອງກັບທຸລະກໍາ. |
| description | String | ຄໍາອະທິບາຍກ່ຽວກັບທຸລະກໍາ (ຂໍ້ຄວາມທີ່ merchant ກໍານົດເອງ). |
| paymentMethod | String | ວິທີການຊໍາລະທີ່ໃຊ້ໃນທຸລະກໍາ (ເຊັ່ນ: BCEL, OnePay). |
| txnDateTime | String | ວັນທີ ແລະ ເວລາທີ່ດໍາເນີນທຸລະກໍາ. ຮູບແບບ: DD/MM/YYYY HH:mm:ss. |
| txnAmount | Integer | ຈໍານວນເງິນຂອງທຸລະກໍາ. |
| billNumber | String | ເລກບິນທີ່ບໍ່ຊໍ້າກັນ ທີ່ກ່ຽວຂ້ອງກັບທຸລະກໍາ. |
| sourceAccount | String | ເລກບັນຊີຕົ້ນທາງທີ່ຕັດເງິນ. |
| sourceName | String | ຊື່ເຈົ້າຂອງບັນຊີຕົ້ນທາງ. |
| sourceCurrency | String | ສະກຸນເງິນຂອງທຸລະກໍາ. |
| userId | String | ລະຫັດທີ່ບໍ່ຊໍ້າກັນຂອງຜູ້ໃຊ້ທີ່ເລີ່ມທຸລະກໍາ. |
| status | String | ສະຖານະປັດຈຸບັນຂອງທຸລະກໍາ (ເຊັ່ນ: PAYMENT_COMPLETED). |
| transactionId | String | ລະຫັດທີ່ບໍ່ຊໍ້າກັນຂອງທຸລະກໍາ, ບໍ່ຊໍ້າກັນ. |
| tag1–tag6 | String | field ກໍານົດເອງ (ບໍ່ບັງຄັບ) ສໍາລັບຕິດ tag ເພີ່ມເຕີມ (ວ່າງຖ້າບໍ່ໃຊ້). |
ຕົວຢ່າງຂໍ້ມູນ Response
{
"billNumber": "81f8b0a6-9277-45e5-a6d2-8c1bd248bedf",
"description": "short is good",
"exReferenceNo": "YQ75K0RG6AXG",
"merchantName": "Lailao Payment",
"message": "SUCCESS",
"paymentMethod": "BCEL",
"refNo": 580960503,
"sourceAccount": "202509232428318",
"sourceCurrency": "LAK",
"sourceName": "ເຢີກື ເຊ່ຍເຊີ",
"status": "PAYMENT_COMPLETED",
"tag1": "",
"tag2": "",
"tag3": "",
"tag4": "",
"tag5": "",
"tag6": "",
"transactionId": "81f8b0a6-9277-45e5-a6d2-8c1bd248bedf",
"txnAmount": 1,
"txnDateTime": "23/09/2025 11:37:55",
"userId": "683ae8e8912ff3f68e2faa78"
}⚠️ ໝາຍເຫດ:
ແຕ່ລະທະນາຄານອາດສົ່ງ field ຕອບກັບແຕກຕ່າງກັນ.
ຢ່າງໃດກໍຕາມ, field ມາດຕະຖານຂອງລະບົບຕໍ່ໄປນີ້ຮັບປະກັນວ່າມີສະເໝີ:
paymentMethod→ ທະນາຄານ/ວິທີການຊໍາລະທີ່ໃຊ້ (ເຊັ່ນ: BCEL, JDB, LDB).transactionId→ ລະຫັດທຸລະກໍາທີ່ບໍ່ຊໍ້າກັນ ທີ່ລະບົບສ້າງຂຶ້ນ.txnAmount→ ຈໍານວນເງິນທີ່ຊໍາລະ.
field ອື່ນໆ ທັງໝົດອາດແຕກຕ່າງກັນຕາມແຕ່ລະທະນາຄານ ແລະ ຄວນຈັດການຕາມຄວາມເໝາະສົມ.
ອັບເດດຫຼ້າສຸດ: 1 ເດືອນກ່ອນ