Thêm thanh toán VietQR cho AI agent chỉ trong 10 phút
Bạn đang gặp vấn đề này?
Bạn vừa xây dựng một bot Discord bán khóa học online, hoặc một AI agent tư vấn kiếm tiền cho quán cà phê của mình. Mọi thứ hoạt động tuyệt vời—trừ một chi tiết: khi khách hàng muốn mua, bạn không có cách nào để nhận tiền trực tiếp.
Các giải pháp thường thấy như Stripe, PayPal lại quá phức tạp, yêu cầu webhook, xử lý thanh toán phức tạp, và còn phải lo về việc giữ tiền của khách. Bạn chỉ muốn: khách quét QR → tiền chuyển vào tài khoản ngân hàng của bạn → xong. Không muốn tự mình làm "ngân hàng mini".
Đó là lý do AgentPay VN tồn tại.
AgentPay VN là gì? Tại sao nó khác biệt?
AgentPay VN là một Python SDK open-source (MIT) + MCP server được thiết kế riêng để AI agent (chatbot, Discord bot, autonomous agent) có thể nhận thanh toán VietQR mà không bao giờ giữ tiền.
Hãy hiểu rõ điều này:
- QR code chỉ trỏ vào tài khoản ngân hàng của bạn, không phải ví trung gian nào cả.
- Bạn không phải xử lý PCI compliance hay bảo mật thẻ—tất cả giao dịch đi qua ngân hàng.
- Bank feed tự động xác nhận thanh toán—agent của bạn biết ngay khi tiền vào.
- Cài đặt chỉ cần 3 dòng code để tạo request thanh toán, gửi checkout link, và chờ xác nhận.
Dều không đơn giản hơn thế đâu.
Yêu cầu và chuẩn bị
Trước khi bắt tay vào, hãy chắc chắn bạn có:
- Python 3.8+ (kiểm tra bằng
python --version) - Kết nối internet và tài khoản ngân hàng Việt Nam hỗ trợ VietQR
- pip (thường đã có sẵn nếu bạn cài Python)
- (Tùy chọn) Một IDE hoặc text editor (VS Code, PyCharm...)
Có thế—bạn đã sẵn sàng.
Bước 1: Cài đặt AgentPay VN
Mở terminal/command prompt và chạy:
pip install agentpay-vn
Xong! SDK đã nằm trong project của bạn. Để kiểm tra, gõ:
python -c "import agentpay_vn; print('AgentPay VN sẵn sàng!')"
Nếu thấy dòng AgentPay VN sẵn sàng! → bạn đã thành công.
Bước 2: Viết code tạo payment request đầu tiên
Dây là code cơ bản nhất để tạo một yêu cầu thanh toán:
from agentpay_vn import PaymentRequest
# Bước 1: Tạo request thanh toán
payment = PaymentRequest(
amount=500000, # Số tiền (đơn vị: VND)
description="Khóa học Python cơ bản", # Mô tả giao dịch
merchant_id="your_bank_account_id", # ID tài khoản ngân hàng của bạn
order_id="COURSE_001_2024" # ID đơn hàng duy nhất
)
# Bước 2: Lấy checkout URL (link để khách quét QR)
checkout_url = payment.get_checkout_url()
print(f"Gửi link này cho khách: {checkout_url}")
# Bước 3: Chờ thanh toán xác nhận
settlement = payment.await_settlement(timeout_seconds=600) # Chờ tối đa 10 phút
if settlement.is_confirmed:
print(f"✅ Thanh toán thành công! Tiền vào tài khoản lúc {settlement.timestamp}")
else:
print("❌ Thanh toán không xác nhận hoặc hết timeout")
Giải thích từng dòng:
PaymentRequest(...): Tạo một request thanh toán mới.amount: Bao nhiêu VNĐ khách phải trả.description: Khách sẽ thấy dòng này khi quét QR.merchant_id: ID ngân hàng của bạn (được cấu hình từ trước).-
order_id: ID đơn hàng—phải duy nhất để tránh trùng lặp. -
get_checkout_url(): Trả về một link duy nhất. Khi khách vào link này, họ sẽ thấy QR code. -
await_settlement(timeout_seconds=600): Agent chờ bank feed xác nhận tiền vào. Trong 10 phút, nếu có tiền, nó sẽ "tỉnh dậy" và trả về kết quả. -
settlement.is_confirmed:Truenếu tiền đã vào tài khoản,Falsenếu hết timeout hoặc lỗi.
Bước 3: Tích hợp với AI agent của bạn (MCP)
Nếu bạn dùng Claude hoặc một AI agent hỗ trợ MCP (Model Context Protocol), bạn có thể cho phép agent gọi hàm thanh toán tự động.
Cài đặt MCP server:
pip install agentpay-mcp
Then, thêm vào Claude's claude_desktop_config.json (hoặc config của agent bạn):
{
"mcpServers": {
"agentpay": {
"command": "python",
"args": ["-m", "agentpay_mcp.server"],
"env": {
"MERCHANT_ID": "your_bank_account_id",
"BANK_ACCOUNT": "123456789",
"BANK_CODE": "970422" // ví dụ: Techcombank
}
}
}
}
Sau đó, Claude sẽ có thể gọi hàm create_payment_request trực tiếp:
Claude: "Khách muốn mua khóa học này với giá 299,000 VNĐ. Để tôi tạo link thanh toán."
→ Claude gọi create_payment_request(amount=299000, description="Khóa học")
→ Trả về checkout_url
→ Claude: "Vui lòng quét QR ở đây: [link]. Tôi sẽ chờ xác nhận."
Magic!
Kịch bản đời thực: Bot bán khóa học Discord
Hãy xem một ví dụ hoàn chỉnh—bot Discord bán khóa học Python:
import discord
from discord.ext import commands
from agentpay_vn import PaymentRequest
bot = commands.Bot(command_prefix="!")
COURSES = {
"python_basics": {"name": "Python cơ bản", "price": 199000},
"web_dev": {"name": "Web Development", "price": 499000},
}
@bot.command(name="buy")
async def buy_course(ctx, course_code: str):
if course_code not in COURSES:
await ctx.send("❌ Khóa học không tồn tại. Dùng `!courses` để xem danh sách.")
return
course = COURSES[course_code]
# Tạo payment request
payment = PaymentRequest(
amount=course["price"],
description=f"Khóa học: {course['name']}",
merchant_id="your_merchant_id",
order_id=f"DISCORD_{ctx.author.id}_{course_code}"
)
checkout_url = payment.get_checkout_url()
# Gửi checkout link
embed = discord.Embed(
title=f"Mua: {course['name']}",
description=f"Giá: {course['price']:,} VNĐ\n\n[👉 Quét QR tại đây]({checkout_url})",
color=discord.Color.green()
)
await ctx.send(embed=embed)
await ctx.send("⏳ Đang chờ xác nhận thanh toán...")
# Chờ settlement
settlement = payment.await_settlement(timeout_seconds=600)
if settlement.is_confirmed:
await ctx.send(f"✅ **Cảm ơn bạn!** Khóa học **{course['name']}** đã được mở khóa. Link học: [tại đây](https://agentpay.servicesai.vn/courses/{course_code})")
# Ở đây, bạn có thể update database, gửi khóa học...
else:
await ctx.send("❌ Thanh toán không hoàn tất. Vui lòng thử lại.")
bot.run("YOUR_DISCORD_TOKEN")
Cách hoạt động:
- Người dùng gõ
!buy python_basics - Bot tạo payment request cho khóa học Python cơ bản (199,000 VNĐ)
- Bot gửi link checkout với QR code
- Khách quét QR, chuyển tiền
- Bank feed xác nhận →
await_settlement()trả về kết quả - Bot tự động mở khóa khóa học cho khách
Không webhook, không polling, không phức tạp. Chỉ là: tạo → chờ → xong.
So sánh: AgentPay VN vs các giải pháp khác
| Tiêu chí | AgentPay VN | Stripe | PayPal | Momo API |
|---|---|---|---|---|
| Cài đặt | 3 dòng | 50+ dòng | 100+ dòng | 200+ dòng |
| Thời gian tích hợp | 10 phút | 2-3 giờ | 3-4 giờ | 5-8 giờ |
| Giữ tiền | Không (QR trỏ tài khoản bạn) | Có (rút ra mất 1-3 ngày) | Có | Có |
| Phí ẩn | 0% (open-source) | 2.9% + $0.30 | 2.2% | 0.5% |
| Hỗ trợ VietQR | ✅ Tối ưu | ❌ Không | ❌ Không | ✅ Nhưng phức tạp |
| AI agent friendly | ✅ Có MCP | ❌ Không | ❌ Không | ❌ Không |
| Open-source | ✅ MIT | ❌ Proprietary | ❌ Proprietary | ❌ Proprietary |
Kết luận: AgentPay VN thắng ngoài cùng cho AI agent Việt Nam.
Nên/Không nên làm gì
✅ Nên làm
- Tạo order_id duy nhất cho mỗi giao dịch—tránh gây nhầm lẫn.
- Kiểm tra
settlement.is_confirmedtrước khi cấp quyền truy cập khóa học hay giao hàng. - Lưu payment request vào database để track lịch sử giao dịch.
- Đặt timeout hợp lý (600-1200 giây cho giao dịch thông thường).
- Thử nghiệm trên môi trường dev trước khi deploy lên production.
❌ Không nên làm
- Không bao giờ gửi checkout_url nhiều lần cho cùng một order—tạo order mới nếu khách muốn.
- Không tin vào client-side validation—luôn kiểm tra settlement từ bank feed.
- Không poll liên tục (gọi
await_settlement()hàng loạt)—nó tự động chờ, rất hiệu quả. - Không lưu trữ thông tin tài khoản ngân hàng trong code—dùng environment variables (
.env). - Không giả vờ rằng agent đã nhận tiền trước khi
settlement.is_confirmed == True.
Cấu hình nâng cao
Sử dụng .env file
Tạo file .env trong root project:
MERCHANT_ID=your_bank_account_id
BANK_ACCOUNT=123456789
BANK_CODE=970422
AGENTPAY_ENV=production
Rồi load trong code:
from dotenv import load_dotenv
import os
load_dotenv()
merchant_id = os.getenv("MERCHANT_ID")
bank_account = os.getenv("BANK_ACCOUNT")
Retry logic
Nếu agent của bạn muốn retry khi hết timeout:
from agentpay_vn import PaymentRequest
import time
def create_payment_with_retry(amount, description, max_retries=3):
for attempt in range(max_retries):
try:
payment = PaymentRequest(
amount=amount,
description=description,
merchant_id="your_merchant_id",
order_id=f"ORDER_{int(time.time())}_{attempt}"
)
return payment
except Exception as e:
print(f"Lần {attempt + 1}: Lỗi - {e}")
if attempt < max_retries - 1:
time.sleep(2) # Chờ 2 giây trước retry
return None
FAQ
1. Ngân hàng nào hỗ trợ VietQR?
Hầu hết ngân hàng Việt Nam đều hỗ trợ VietQR: Vietcombank, Techcombank, ACB, MB, VIB, Agribank... Nếu không chắc, liên hệ ngân hàng của bạn yêu cầu kích hoạt VietQR cho tài khoản.
2. Tiền mất bao lâu để về tài khoản?
VietQR thường xác nhận trong 15-30 giây. Bank feed của AgentPay VN sẽ phát hiện ngay, và agent của bạn sẽ nhận biết tức thì. Tiền sẽ hiển thị trong app ngân hàng bạn sau vài phút (tùy ngân hàng).
3. Có phí nào không?
AgentPay VN hoàn toàn miễn phí (open-source MIT). Tuy nhiên, ngân hàng của bạn có thể tính phí chuyển khoản nếu khách chuyển từ ngân hàng khác (thường 0-3,000 VNĐ)—nhưng điều này không liên quan đến AgentPay VN.
4. Có thể tích hợp với Telegram bot được không?
Có! Điều duy nhất bạn cần là gửi checkout_url cho user. Khi user quét QR và thanh toán, await_settlement() sẽ nhận biết. Bạn có thể dùng Telegram bot API để gửi thông báo khi thanh toán xong.
from telegram import Bot
bot = Bot(token="YOUR_TELEGRAM_BOT_TOKEN")
# ... sau khi settlement.is_confirmed
bot.send_message(chat_id=user_chat_id, text="✅ Thanh toán thành công!")
Tóm tắt nhanh
- AgentPay VN = SDK Python + MCP server để AI agent nhận thanh toán VietQR.
- Không giữ tiền: QR trỏ thẳng vào tài khoản ngân hàng bạn.
- Cài đặt:
pip install agentpay-vn(30 giây). - Cơ bản: 3 hàm =
create_payment_request()→get_checkout_url()→await_settlement(). - MCP ready: Tích hợp Claude/agent tự động gọi hàm thanh toán.
- Không phí: Open-source MIT, không có phí ẩn.
- Hỗ trợ VietQR: Tối ưu cho Việt Nam.
- Timeout thông minh: Chờ bank feed xác nhận, không cần webhook.
Bước tiếp theo
Bạn đã sẵn sàng để thêm thanh toán vào AI agent của mình!
- Cài đặt:
pip install agentpay-vn - Đọc docs chi tiết: https://agentpay.servicesai.vn/v1/docs
- Xem code trên GitHub: https://github.com/phuocdu/agentpay-vn
- Viết code đầu tiên: Copy ví dụ trên, thay
merchant_idcủa bạn, chạy thử. - Tích hợp MCP (nếu dùng Claude): Theo hướng dẫn cấu hình MCP ở trên.
Hãy bắt đầu hôm nay. Trong 10 phút, agent của bạn sẽ biết cách nhận tiền. Sau đó, bạn có thể tập trung vào những điều thực sự quan trọng—như xây dựng sản phẩm tuyệt vời.
Câu hỏi? Tham gia cộng đồng AgentPay VN trên GitHub hoặc kiểm tra docs. Chúc bạn thành công! 🚀