Hướng dẫn: Cho AI agent tự thu tiền VietQR với Python
Bài Toán Thực Tế: Bot AI Của Bạn Bán Hàng Nhưng Không Thể Thu Tiền
Hãy tưởng tượng: Bạn xây dựng một con bot AI bán khoá học online. Khách hàng chat với bot, thích sản phẩm, nhưng rồi... bot "biết" khách muốn mua nhưng không biết cách lấy tiền. Phải nhờ con người can thiệp, tạo QR code thủ công, chờ xác nhận, nhập dữ liệu lại. Hiệu suất giảm 80%, khách hàng chán nản, bạn mất doanh số.
Đó là vấn đề mà AgentPay VN giải quyết: cho phép AI agent tự động tạo yêu cầu thanh toán VietQR, gửi link checkout đến khách, và tự xác nhận khi tiền về tài khoản ngân hàng thật — mà không cần agent "cầm giữ" bất kỳ đồng nào.
AgentPay VN Là Gì? Tại Sao Khác Biệt?
AgentPay VN là một SDK mã nguồn mở (MIT License) + MCP server cho Python, cho phép:
- Tạo yêu cầu thanh toán VietQR từ code Python của bạn
- Gửi QR code trực tiếp đến khách hàng
- Chờ xác nhận thanh toán từ ngân hàng (bank feed) mà không poll API loạn xạ
- Agent tự xử lý bước tiếp theo (gửi hàng, cấp quyền, kích hoạt tài khoản)
Điều quan trọng: AgentPay KHÔNG giữ tiền. QR code trỏ trực tiếp vào tài khoản ngân hàng của bạn, không có trung gian, không phí cấu, không rủi ro.
Cài Đặt: Chỉ Cần 3 Dòng Lệnh
# Cài đặt SDK Python
pip install agentpay-vn
# Nếu dùng MCP server (tích hợp Claude, Cursor)
pip install agentpay-mcp
Xong. Không cần API key từ bên thứ ba, không cần cấu hình ngân hàng phức tạp. AgentPay quản lý kết nối VietQR và ngân hàng của bạn mà bạn chỉ lo code logic kinh doanh.
Luồng Công Việc 3 Bước: Từ Khách Hàng Đến Tiền Về Tài Khoản
Bước 1: Tạo Yêu Cầu Thanh Toán
from agentpay_vn import PaymentClient
# Khởi tạo client (tự động tìm cấu hình VietQR của bạn)
client = PaymentClient()
# Tạo yêu cầu thanh toán
payment_request = client.create_payment_request(
amount=299_000, # Giá khoá học (đơn vị: đồng)
description="Khoá học Python nâng cao",
merchant_order_id="ORDER_2025_001", # ID đơn hàng của bạn
return_url="https://your-app.com/payment-success"
)
print(f"Checkout URL: {payment_request.checkout_url}")
print(f"Payment ID: {payment_request.payment_id}")
Giải thích dòng lệnh:
- amount: Số tiền khách cần trả (đơn vị VNĐ)
- description: Mô tả sản phẩm (hiển thị trong QR code)
- merchant_order_id: ID đơn hàng của hệ thống bạn (dùng để tracking)
- return_url: Nơi client quay lại sau khi thanh toán thành công
- checkout_url: Link QR code để gửi cho khách
Bước 2: Gửi Link Checkout Cho Khách
# Agent gửi message cho khách (qua Telegram, email, hoặc chat bot)
checkout_message = f"""
Cảm ơn bạn đã chọn khoá học!
Vui lòng thanh toán: {payment_request.amount:,} VNĐ
Link thanh toán: {payment_request.checkout_url}
Sau khi thanh toán, tài khoản của bạn sẽ được kích hoạt ngay lập tức.
"""
# Gửi message
bot.send_message(chat_id, checkout_message)
# Lưu payment_id để xác nhận sau
db.save_payment_tracking(user_id, payment_request.payment_id)
Bước 3: Chờ Xác Nhận & Tự Động Xử Lý
import asyncio
from agentpay_vn import SettlementWatcher
async def handle_payment_completion(user_id, payment_id):
"""
Hàm này chạy sau khi khách quét QR và thanh toán.
AgentPay tự động gọi khi ngân hàng xác nhận tiền về.
"""
watcher = SettlementWatcher(client)
# Chờ xác nhận thanh toán từ bank feed (timeout 15 phút)
settlement = await watcher.await_settlement(
payment_id=payment_id,
timeout_seconds=900
)
if settlement.is_confirmed:
# Tiền đã về tài khoản thực
print(f"✅ Thanh toán xác nhận: {settlement.amount} VNĐ")
print(f" Bank reference: {settlement.transaction_ref}")
# Tự động kích hoạt tài khoản khách
user = db.get_user(user_id)
user.activate_course_access()
user.send_course_material() # Gửi link khoá học
# Ghi log
db.log_transaction(
user_id=user_id,
amount=settlement.amount,
status="completed",
bank_ref=settlement.transaction_ref
)
else:
# Thanh toán thất bại hoặc hết thời gian
print(f"❌ Thanh toán không xác nhận")
user.send_notification("Vui lòng thử lại thanh toán")
# Chạy async task
asyncio.run(handle_payment_completion("USER_123", "PAY_ABC123"))
Điểm mấu chốt:
- await_settlement() không poll API liên tục (tốn resource). Nó dùng bank feed từ VietQR, xác thực trực tiếp từ ngân hàng.
- Khi tiền về, hàm tự động trả về → agent xử lý bước tiếp (kích hoạt khoá học, gửi invoice, v.v.).
- Nếu hết timeout, agent biết là thanh toán thất bại, có thể yêu cầu khách thử lại.
Tích Hợp Với Claude / Cursor Qua MCP Server
Nếu bạn muốn dùng Claude hoặc Cursor làm agent (thay vì tự code), hãy cấu hình MCP server:
File: .cursor/mcp.json
{
"mcpServers": {
"agentpay": {
"command": "python",
"args": ["-m", "agentpay_mcp"]
}
}
}
Hoặc cho Claude Desktop (.config/claude_desktop_config.json):
{
"mcpServers": {
"agentpay-vn": {
"command": "python",
"args": ["-m", "agentpay_mcp"],
"env": {
"AGENTPAY_MERCHANT_ID": "your_vietqr_id"
}
}
}
}
Sau đó, Claude sẽ có quyền truy cập các function:
- create_payment_request(amount, description, ...)
- await_settlement(payment_id)
- get_transaction_history()
Kịch Bản Đời Thực: Quán Cà Phê Bán Online
Hãy xem cách một quán cà phê nhỏ ở Hà Nội dùng AgentPay:
Tình huống: Quán muốn bán gift card cà phê qua Telegram bot.
from telegram import Update
from telegram.ext import Application, CommandHandler
from agentpay_vn import PaymentClient
client = PaymentClient()
async def buy_giftcard(update: Update, context):
"""
/buy_giftcard 500000 → Mua gift card 500k
"""
user_id = update.message.from_user.id
args = context.args
if not args:
await update.message.reply_text("Cú pháp: /buy_giftcard <số tiền>")
return
amount = int(args[0])
# Tạo yêu cầu thanh toán
payment = client.create_payment_request(
amount=amount,
description=f"Gift card cà phê {amount:,} VNĐ",
merchant_order_id=f"GIFTCARD_{user_id}_{int(time.time())}"
)
# Gửi QR code link cho khách
await update.message.reply_text(
f"🎁 Gift card {amount:,} VNĐ\n\n"
f"Quét QR này để thanh toán:\n{payment.checkout_url}\n\n"
f"Sau khi thanh toán, bạn sẽ nhận gift card code ngay."
)
# Chờ xác nhận
watcher = SettlementWatcher(client)
settlement = await watcher.await_settlement(payment.payment_id)
if settlement.is_confirmed:
# Tạo gift card code
giftcard_code = generate_giftcard_code()
# Gửi code cho khách
await update.message.reply_text(
f"✅ Thanh toán thành công!\n\n"
f"📝 Mã gift card: `{giftcard_code}`\n"
f"Sử dụng code này khi mua cà phê tại quán."
)
# Lưu vào database
db.create_giftcard(code=giftcard_code, user_id=user_id, amount=amount)
# Chạy bot
app = Application.builder().token("YOUR_TELEGRAM_BOT_TOKEN").build()
app.add_handler(CommandHandler("buy_giftcard", buy_giftcard))
app.run_polling()
Kết quả: Khách gọi /buy_giftcard 500000 → bot tạo QR code → khách quét → tiền về tài khoản quán → khách nhận gift card code tự động. Toàn bộ process không cần can thiệp con người.
So Sánh: AgentPay vs. Các Giải Pháp Khác
| Tiêu Chí | AgentPay VN | Stripe / PayPal | Momo API | Webhook Thủ Công |
|---|---|---|---|---|
| Cài đặt | pip install (2 min) |
Phức tạp, cần API key | Phức tạp | Tự code webhook |
| Agent tự thu tiền | ✅ (native) | ⚠️ (cần code kỳ diệu) | ❌ | ❌ |
| Tiền nằm ở đâu | Ngân hàng bạn ngay | Third-party giữ (fee) | Momo giữ | Ngân hàng |
| MCP / LLM support | ✅ Claude, Cursor ready | ❌ | ❌ | ❌ |
| VietQR native | ✅ | ❌ | ❌ | ❌ |
| Open source | ✅ MIT | ❌ | ❌ | ❌ |
| Khía cạnh bảo mật | Bank feed (chuẩn) | Webhook (yêu cầu HTTPS) | Webhook + polling | Tự bảo vệ |
Nên & Không Nên Khi Dùng AgentPay
✅ Nên
- Dùng cho e-commerce nhỏ và vừa (shop online, khóa học, SaaS)
- Dùng khi agent (AI / bot) cần quyền tự động hóa thanh toán
- Dùng nếu muốn tránh phí trung gian (tiền trực tiếp vào ngân hàng)
- Dùng với Claude / Cursor qua MCP (tích hợp sẵn)
❌ Không Nên
- Sử dụng nếu bạn chưa có tài khoản VietQR / ngân hàng tích hợp
- Dùng để xử lý hơn 1000 giao dịch/giây (giới hạn bank feed)
- Dùng trong payment gateway có yêu cầu compliance PCI DSS đặc biệt
- Tin tưởng hoàn toàn vào timeout xác nhận (luôn có plan B)
FAQ: Câu Hỏi Thường Gặp
Q: AgentPay có phí không? A: SDK là mã nguồn mở (miễn phí). Phí duy nhất là phí chuyển khoản của ngân hàng bạn (thường 0 nếu là chuyển nội bộ), không có phí của AgentPay.
Q: Nếu agent crash khi chờ xác nhận thanh toán thì sao?
A: Bank feed được lưu trên server AgentPay. Bạn có thể dùng await_settlement() lần nữa với payment_id cũ, nó sẽ fetch lại trạng thái gần nhất. Hoặc dùng get_transaction_history() để kiểm tra toàn bộ giao dịch.
Q: Có thể dùng AgentPay cho subscription / thanh toán định kỳ không? A: Hiện tại AgentPay tập trung vào thanh toán một lần. Nhưng bạn có thể tự code logic tạo yêu cầu định kỳ (ví dụ: mỗi tháng tạo payment request mới, gửi QR cho khách).
Q: Làm sao biết khách nào đã thanh toán nếu có nhiều agent chạy cùng lúc?
A: Dùng merchant_order_id (ID đơn hàng của bạn) để tracking. Mỗi agent instance có thể query lịch sử qua get_transaction_history(merchant_order_id=...) hoặc dùng database riêng lưu mapping order_id ↔ payment_id.
Q: AgentPay có hỗ trợ hoàn tiền / refund không?
A: SDK cung cấp refund_payment(payment_id, amount) để tạo lệnh hoàn tiền. Tuy nhiên, hoàn tiền chỉ được xử lý nếu giao dịch gốc là chuyển khoản (không giữ tiền ở giữa), và phải được ngân hàng chấp nhận.
Tóm Tắt Nhanh: 5 Điểm Chính
- AgentPay VN = SDK Python + MCP server cho AI agent tự thu tiền VietQR
- Không giữ tiền: QR trỏ trực tiếp ngân hàng bạn, bank feed xác nhận
- 3 bước cơ bản:
create_payment_request()→send checkout_url→await_settlement() - Tích hợp Claude/Cursor: Cấu hình MCP, agent tự gọi hàm không cần code
- Thực tế: Cà phê bán gift card, shop bán khoá học, bot nhận đơn hàng — tất cả tự động xác nhận & kích hoạt
Bắt Đầu Ngay Hôm Nay
Bạn đã sẵn sàng cho AI agent tự động hóa thanh toán chưa?
Cài đặt SDK:
pip install agentpay-vn
Xem tài liệu đầy đủ: https://agentpay.servicesai.vn/v1/docs
Fork & contribute trên GitHub: https://github.com/phuocdu/agentpay-vn
Nếu bạn xây dựng cái gì thú vị với AgentPay, hãy chia sẻ story của bạn với chúng tôi. Chúc bạn code vui! 🚀