Cổng thanh toán và API ngân hàng
xác nhận tiền vào tự động
MONA Pay là cổng thanh toán và API ngân hàng của The MONA Group, giúp doanh nghiệp Việt Nam nhận và xác nhận tiền chuyển khoản theo thời gian thực qua tài khoản ảo (VA), VietQR, webhook và Telegram — thiết kế để cả lập trình viên lẫn AI agent tích hợp trong vài phút.
Tiền vào thẳng tài khoản ACB của anh chị, MONA Pay chỉ đọc thông báo từ ngân hàng rồi báo về website, phần mềm quản lý và nhóm Telegram. Không ai phải ngồi canh app ngân hàng để xác nhận đơn.
Miễn phí, không giới hạn giao dịch · Đăng ký xong dùng ngay · Tổng đài 1900 636 648
Hệ thống MONA tự xây để thu tiền cho chính mình, rồi từ 2022 tới nay hơn 6.000 khách hàng mới của MONA đã thu tiền qua đây trong web, phần mềm tụi em giao. Năm 2026 mới mở cho mọi doanh nghiệp.
Từ lúc khách chuyển khoản
tới lúc đơn tự đổi trạng thái
4 bước, không bước nào cần người ngồi kiểm tra. Anh chị chỉ cần có tài khoản ACB và một website hoặc phần mềm để nhận thông báo, còn không có phần mềm thì nhận qua Telegram cũng được.
Khách chuyển khoản vào tài khoản ACB của anh chị
Khách quét mã VietQR đã có sẵn số tiền và nội dung, hoặc chuyển vào số tài khoản ảo (VA) gắn riêng với đơn hàng đó. Tiền vào thẳng tài khoản ACB đứng tên anh chị, không đi qua ví trung gian nào.
ACB báo cho MONA Pay ngay khi tiền vào
MONA Pay đã đăng ký nhận thông báo giao dịch với ACB, nên tiền vừa chạm tài khoản là ngân hàng đẩy thông tin sang: số tiền, nội dung chuyển khoản, mã giao dịch, số tài khoản nhận.
MONA Pay báo về phần mềm và nhóm Telegram của anh chị
Cùng lúc, MONA Pay gửi một gói tin webhook (có chữ ký HMAC để phần mềm biết chắc là tin thật, từ chối nếu lệch quá 5 phút) tới website hoặc phần mềm quản lý, và nhắn vào nhóm Telegram cho kế toán, bộ phận bán hàng cùng thấy.
Phần mềm tự khớp đơn, đổi trạng thái đã thanh toán
Phần mềm dựa vào số tài khoản ảo hoặc mã giao dịch để biết tiền này của đơn nào, rồi tự xác nhận. Không ai phải mở app ngân hàng canh, không phải hỏi khách "anh chuyển chưa".
Đủ đồ nghề để thu tiền
mà không cần thêm người
Mỗi tính năng dưới đây tụi em đã dùng trong việc thu tiền của chính MONA trước khi đưa cho anh chị. Cái nào chưa có, tụi em ghi rõ là chưa có.
Tài khoản ảo (VA) theo từng đơn
ACB cấp cho anh chị một dải số tài khoản ảo. Mỗi đơn hàng, mỗi học viên, mỗi khách thuê được gắn 1 số riêng. Tiền vào số nào là biết ngay của ai, khỏi dò nội dung chuyển khoản.
VietQR động đúng số tiền
Tạo mã QR có sẵn số tiền và nội dung cho từng đơn, qua dashboard hoặc 1 lệnh API. Khách quét là chuyển đúng, hết cảnh gõ sai nội dung rồi kế toán phải lần.
Webhook có chữ ký HMAC
Tiền vào là MONA Pay POST một gói JSON về phần mềm của anh chị, kèm header X-Mona-Signature và X-Mona-Timestamp. Phần mềm trả HTTP 200 trong 10 giây là xong. Mỗi lần gửi đều có lịch sử để soi.
Báo vào nhóm Telegram
Thêm bot MONA Pay vào nhóm công ty, chọn báo theo từng tài khoản ảo hoặc mọi tài khoản, tự sửa mẫu tin nhắn. Kế toán, sale, chủ shop cùng thấy một lúc.
API và tài liệu viết cho cả AI đọc
Mọi trang tài liệu có bản .md, có llms.txt và openapi.json ngay trên monapay.vn. Anh chị dán prompt có sẵn vào Claude Code, Codex hay Cursor, AI tự tích hợp trong vài phút.
Dashboard theo dõi từng giao dịch
Xem tiền vào theo thời gian thực, lịch sử gửi webhook (HTTP status, thời gian phản hồi, nhãn lỗi), bấm gửi lại, tạo QR, quản lý API key, bật 2 lớp bảo mật.
Dán prompt này vào Claude Code, Codex hoặc Cursor,
AI tự tích hợp cho anh chị
Tài liệu MONA Pay viết cho cả người lẫn máy đọc: mỗi trang có bản .md, có llms.txt và openapi.json ngay trên monapay.vn. Lập trình viên không cần đọc hết tài liệu, AI đọc giúp rồi viết code nhận webhook, kiểm chữ ký HMAC, khớp đơn.
Tích hợp MONA Pay (cổng thanh toán nội địa Việt Nam: nhận và xác nhận tiền
chuyển khoản ngân hàng theo thời gian thực) vào dự án của tôi.
Base URL API: https://api.monapay.vn (legacy: https://ipn.mona.host)
Tài liệu máy đọc: https://monapay.vn/llms.txt · https://monapay.vn/openapi.json
Xác thực: đăng nhập POST /api/v1/client/login lấy Bearer token; các request
ghi kèm header X-Client-Secret: <CLIENT_SECRET>.
Việc cần làm:
1. Tạo endpoint webhook HTTPS trong dự án của tôi để nhận thông báo tiền vào.
MONA Pay sẽ POST JSON: {"amount": 2500000, "description": "noi dung ck",
"transfer_date": "...", "transaction_code": "...", "account_number": "...",
"bank_name": "ACB", "type": "income"}
2. Nếu tôi bật HMAC: verify chữ ký từ header X-Mona-Signature ("sha256=<hex>")
= HMAC-SHA256(secret, "<X-Mona-Timestamp>.<raw_body>"); từ chối nếu
timestamp lệch quá 5 phút.
3. Trả HTTP 200 ngay khi nhận, xử lý đơn hàng async. Dùng transaction_code
làm khoá chống trùng.
4. Đăng ký URL webhook này trong dashboard MONA Pay (mục Webhooks) hoặc qua
API POST /api/v1/client-webhooks.Code mẫu nhận webhook, thứ tự cURL, PHP, Node
# Giả lập MONA Pay bắn webhook vào endpoint của anh chị để test tại chỗ
SECRET='secret_hmac_cua_anh_chi' # secret HMAC đặt khi bật HMAC trong dashboard
URL='https://ten-mien-cua-anh-chi.vn/webhook/monapay'
TS=$(date +%s)
BODY='{"amount":2500000,"description":"noi dung ck","transfer_date":"2026-08-28 10:30:00","transaction_code":"FT26240001234","account_number":"0123456789","bank_name":"ACB","type":"income"}'
# Chữ ký = HMAC-SHA256(secret, "<timestamp>.<raw_body>"), dùng printf để không dính ký tự xuống dòng
SIG=$(printf '%s.%s' "$TS" "$BODY" | openssl dgst -sha256 -hmac "$SECRET" | awk '{print $2}')
curl -X POST "$URL" \
-H 'Content-Type: application/json' \
-H "X-Mona-Timestamp: $TS" \
-H "X-Mona-Signature: sha256=$SIG" \
--data "$BODY"<?php
// webhook-monapay.php: endpoint nhận thông báo tiền vào từ MONA Pay
$secret = getenv('MONA_WEBHOOK_SECRET'); // secret HMAC đặt khi bật HMAC
$raw = file_get_contents('php://input');
$timestamp = $_SERVER['HTTP_X_MONA_TIMESTAMP'] ?? '';
$signature = $_SERVER['HTTP_X_MONA_SIGNATURE'] ?? ''; // dạng "sha256=<hex>"
// 1. Chặn replay: timestamp lệch quá 5 phút thì từ chối
if (abs(time() - (int) $timestamp) > 300) {
http_response_code(400);
exit('timestamp qua han');
}
// 2. Verify chữ ký: HMAC-SHA256(secret, "<timestamp>.<raw_body>")
$expected = 'sha256=' . hash_hmac('sha256', $timestamp . '.' . $raw, $secret);
if (!hash_equals($expected, $signature)) { // hash_equals chống timing attack
http_response_code(401);
exit('sai chu ky');
}
// 3. Trả 200 ngay, việc nặng đẩy sang xử lý sau (queue/cron)
http_response_code(200);
echo 'OK';
if (function_exists('fastcgi_finish_request')) fastcgi_finish_request();
$data = json_decode($raw, true);
// $data['amount'], $data['description'], $data['transaction_code'], ...
// TODO: ghi nhận giao dịch (UNIQUE theo transaction_code) + xử lý đơn hàng của anh chị tại đây// webhook-monapay.js: nhận webhook MONA Pay bằng Express
const express = require('express');
const crypto = require('crypto');
const app = express();
const SECRET = process.env.MONA_WEBHOOK_SECRET; // secret HMAC đặt khi bật HMAC
// Phải đọc raw body thì chữ ký mới khớp (đừng dùng express.json() ở route này)
app.post('/webhook/monapay', express.raw({ type: 'application/json' }), (req, res) => {
const timestamp = req.header('X-Mona-Timestamp') || '';
const signature = req.header('X-Mona-Signature') || ''; // "sha256=<hex>"
const rawBody = req.body.toString('utf8');
// 1. Chặn replay: timestamp lệch quá 5 phút thì từ chối
if (Math.abs(Date.now() / 1000 - Number(timestamp)) > 300) {
return res.status(400).send('timestamp qua han');
}
// 2. Verify chữ ký: HMAC-SHA256(secret, "<timestamp>.<raw_body>")
const expected = 'sha256=' + crypto
.createHmac('sha256', SECRET)
.update(timestamp + '.' + rawBody)
.digest('hex');
const hopLe =
signature.length === expected.length &&
crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(expected));
if (!hopLe) return res.status(401).send('sai chu ky');
// 3. Trả 200 ngay, xử lý đơn hàng async sau đó
res.status(200).send('OK');
const data = JSON.parse(rawBody);
// data.amount, data.description, data.transaction_code, ...
// TODO: ghi nhận giao dịch (UNIQUE theo transaction_code) + xử lý đơn hàng của anh chị tại đây
});
app.listen(3000, () => console.log('Webhook MONA Pay chạy ở cổng 3000'));Đứng sau MONA Pay là The MONA Group,
làm web và phần mềm từ năm 2016
Tụi em bắt đầu năm 2016 bằng việc làm website cho doanh nghiệp. Làm web thì khách hỏi tiếp phần mềm quản lý, rồi hỏi chỗ đặt web cho ổn định. Ba mảng đó thành ba thương hiệu: Mona.Media làm web và marketing, Mona.Software làm phần mềm theo yêu cầu, Mona.Host lo hosting và máy chủ. Tới nay là 14.000+ dự án, 85% khách làm xong quay lại làm tiếp.
Làm nhiều web bán hàng và phần mềm thu tiền, tụi em thấy khách nào cũng kẹt đúng một chỗ: khách chuyển khoản xong phải có người ngồi mở app ngân hàng để xác nhận. Tụi em viết hệ thống nhận và xác nhận chuyển khoản để dùng cho chính mình trước, thu phí hosting, học phí, đơn phần mềm. Từ 2022, hệ thống này nhúng vào web và phần mềm giao cho khách, tới nay hơn 6.000 khách hàng mới của MONA thu tiền qua đây.
Năm 2026 tụi em đặt tên nó là MONA Pay, mở tại monapay.vn cho mọi doanh nghiệp, miễn phí hoàn toàn. Tiền vẫn nằm ở ngân hàng của anh chị, MONA Pay chỉ đọc thông báo giao dịch và báo về đúng chỗ. Gọi 1900 636 648 là gặp đúng đội đã làm việc này nhiều năm.



6 câu anh chị hay hỏi trước khi dùng
Tiền của khách có đi qua MONA Pay không?
Không. Khách chuyển thẳng vào tài khoản ACB đứng tên anh chị. MONA Pay chỉ nhận thông báo giao dịch từ ngân hàng rồi báo lại cho phần mềm, nhóm Telegram và dashboard. Tụi em không giữ tiền, không chạm vào tiền, nên cũng không có chuyện chờ đối soát rồi mới được rút.
MONA Pay hỗ trợ ngân hàng nào?
ACB đang hoạt động; MB Bank, BIDV, VietinBank, OCB, MSB, KienlongBank, TPBank đang trong quá trình đăng ký kết nối. ACB là ngân hàng hệ thống này chạy thật từ 2022 cho hơn 6.000 khách hàng của MONA nên mở trước, cả tài khoản cá nhân lẫn doanh nghiệp. Bảng trạng thái từng ngân hàng cập nhật tại trang ngân hàng hỗ trợ; webhook, Telegram, API dùng chung nên thêm ngân hàng anh chị không phải sửa gì.
Mất bao lâu để tích hợp?
Nối tài khoản ACB trong dashboard mất 4 bước, xác thực 2 lần OTP do ACB gửi. Phần webhook, lập trình viên của anh chị copy code mẫu PHP hoặc Node ở trên là chạy, thường trong vài phút. Nếu anh chị dùng AI như Claude Code hay Codex, dán prompt có sẵn là AI tự làm. Web hay phần mềm làm tại MONA thì tụi em cài luôn. Gọi 1900 636 648 nếu cần người ngồi cùng.
Phần mềm của tôi không do MONA làm, dùng được không?
Được. Webhook là chuẩn HTTP thông thường: MONA Pay POST một gói JSON tới đường dẫn anh chị chỉ định, phần mềm nào nhận được HTTP request là nhận được. WordPress, WooCommerce, Laravel, Node, .NET, phần mềm nội bộ tự viết đều nối được, kèm code mẫu trong tài liệu.
Giá bao nhiêu?
Miễn phí hoàn toàn, không giới hạn giao dịch, đủ mọi tính năng: tài khoản ảo, VietQR, webhook, Telegram, API, dashboard. Không thu phần trăm trên số tiền, không phí mở tài khoản. Giới hạn duy nhất là fair-use chống lạm dụng, xem trang bảng giá.
Đăng ký xong dùng ngay được không?
Được. Tài khoản tự kích hoạt ngay khi tạo, không cần ai duyệt. Anh chị đăng nhập, nối ACB bằng 2 lần OTP, tạo API key và webhook trong dashboard, tất cả tự làm trong vài phút.
Webhook gửi hụt thì sao, có mất giao dịch không?
Không mất. Mọi giao dịch ACB báo về đều được ghi lại trong dashboard, kể cả khi phần mềm của anh chị đang tắt. Mỗi lần gửi webhook đều có lịch sử: HTTP status, thời gian phản hồi, nhãn lỗi (timeout, DNS, SSL, 4xx, 5xx). Gửi hụt thì bấm gửi lại ngay trong dashboard. Lịch gửi lại tự động tối đa 7 lần đang được triển khai, tụi em sẽ công bố tại tài liệu khi lên.
Nối tài khoản ACB hôm nay, đơn tự xác nhận từ ngày mai
Tạo tài khoản là dùng ngay, nối ACB trong 4 bước, dán code mẫu hoặc để AI làm. Miễn phí hoàn toàn, không giới hạn giao dịch, không thu phần trăm trên số tiền.