AI Agent Thu Tiền VietQR Tự Động Bằng Python SDK

2026-10-11 · AgentPay VN

aipythonvietqragentpaymcp

Nỗi Đau: Khi AI Agent Của Bạn Không Thể Kiếm Tiền

Hãy tưởng tượng bạn vừa xây dựng một bot AI bán khóa học trực tuyến, hoặc một agent tư vấn tài chính tự động kiếm hoa hồng. Khách hàng đã sẵn sàng thanh toán, nhưng rồi... bạn phải nhảy ra để xử lý thủ công qua các nền tảng thanh toán phức tạp, chuyển tiền, đối soát. AI agent của bạn chỉ biết "trò chuyện" chứ không thể "gom tiền" một cách độc lập.

Đây chính là bài toán mà AgentPay VN giải quyết: cho phép AI agent tự động khởi tạo yêu cầu thanh toán VietQR, gửi mã QR cho khách hàng, và chờ xác nhận thanh toán từ ngân hàng — tất cả mà KHÔNG cần bạn can thiệp, và KHÔNG cần app nắm giữ tiền.


AgentPay VN Là Gì? Cách Nó Hoạt Động

AgentPay VN là một bộ công cụ open-source (giấy phép MIT) dành cho Python, gồm:

  1. Python SDK (pip install agentpay-vn) – Thư viện để tạo yêu cầu thanh toán VietQR
  2. MCP Server (agentpay-mcp) – Server cho phép AI (Claude, v.v.) gọi các hàm thanh toán như một "skill" tự nhiên
  3. Bank Feed Integration – Tự động kiểm tra xác nhận thanh toán qua API ngân hàng

Điểm Khác Biệt Chính


Qui Trình 3 Bước: Từ Yêu Cầu Đến Thanh Toán

AgentPay VN được thiết kế theo quy trình tối giản:

┌─────────────────────────────────────────────┐
│ 1. create_payment_request()                 │
│    → Tạo yêu cầu thanh toán                │
├─────────────────────────────────────────────┤
│ 2. send_checkout_url()                      │
│    → Gửi mã QR/URL checkout cho khách      │
├─────────────────────────────────────────────┤
│ 3. await_settlement()                       │
│    → Chờ xác nhận từ ngân hàng              │
└─────────────────────────────────────────────┘

Hướng Dẫn Cài Đặt & Cấu Hình

Bước 1: Cài Đặt SDK

pip install agentpay-vn

Varification: Sau khi cài đặt, bạn có thể kiểm tra phiên bản:

python -c "import agentpay; print(agentpay.__version__)"

Bước 2: Cấu Hình Thông Tin Ngân Hàng

Tạo file .env hoặc biến môi trường:

BANK_ACCOUNT_NUMBER=0123456789
BANK_ACCOUNT_NAME=Cty TNHH ABC
BANK_CODE=970012  # VietcomBank
VIETQR_API_KEY=your-vietqr-api-key

Bước 3: Khởi Tạo Client Python

from agentpay import AgentPayClient
import os

# Khởi tạo client với thông tin từ biến môi trường
client = AgentPayClient(
    bank_account=os.getenv("BANK_ACCOUNT_NUMBER"),
    bank_name=os.getenv("BANK_ACCOUNT_NAME"),
    bank_code=os.getenv("BANK_CODE"),
    api_key=os.getenv("VIETQR_API_KEY")
)

print("✅ AgentPay client đã sẵn sàng!")

Ví Dụ Thực Tế #1: Bot Bán Khóa Học Online

Hãy tưởng tượng bạn có một bot tư vấn học lập trình. Khi khách hàng quyết định mua khóa học, agent sẽ:

from agentpay import AgentPayClient, PaymentRequest
import asyncio
from datetime import datetime, timedelta

# Khởi tạo
client = AgentPayClient(
    bank_account="0123456789",
    bank_name="Học Lập Trình VN",
    bank_code="970012"
)

async def sell_course(customer_name, customer_email, course_id, price_vnd):
    """
    Bot tự động bán khóa học qua VietQR

    Args:
        customer_name: Tên khách hàng
        customer_email: Email khách hàng
        course_id: Mã khóa học (vd: 'python-101')
        price_vnd: Giá tiền (VND)
    """

    # Bước 1: Tạo yêu cầu thanh toán
    payment_req = PaymentRequest(
        transaction_id=f"COURSE_{course_id}_{int(datetime.now().timestamp())}",
        amount=price_vnd,
        description=f"Khóa {course_id} - {customer_name}",
        customer_email=customer_email,
        expires_at=datetime.now() + timedelta(hours=24)  # Hết hạn sau 24h
    )

    # Bước 2: Tạo mã QR
    payment = await client.create_payment_request(payment_req)
    print(f"📱 QR Code URL: {payment.checkout_url}")
    print(f"💰 Số tiền: {payment_req.amount:,} VND")

    # Bước 3: Chờ xác nhận thanh toán
    settlement = await client.await_settlement(
        transaction_id=payment_req.transaction_id,
        timeout_seconds=3600  # Chờ tối đa 1 giờ
    )

    if settlement.status == "confirmed":
        print(f"✅ Thanh toán thành công! Số tiền: {settlement.amount:,} VND")
        print(f"🎓 Khóa học {course_id} đã được kích hoạt cho {customer_email}")
        # Tự động gửi link khóa học, cấp quyền truy cập, v.v.
        return True
    else:
        print(f"❌ Thanh toán thất bại hoặc hết hạn")
        return False

# Sử dụng
asyncio.run(sell_course(
    customer_name="Nguyễn Văn A",
    customer_email="a@example.com",
    course_id="python-101",
    price_vnd=299000
))

Giải thích từng bước: - PaymentRequest: Định nghĩa yêu cầu thanh toán với transaction_id duy nhất, số tiền, mô tả, và thời gian hết hạn - create_payment_request(): Tạo mã QR VietQR, trả về checkout_url để gửi cho khách - await_settlement(): Chờ xác nhận từ ngân hàng (non-blocking), tự động kiểm tra trạng thái - Khi settlement.status == "confirmed", bot tự động gửi link khóa học hoặc cấp quyền truy cập


Tích Hợp MCP Để AI Agent Tự Gọi Hàm

Nếu bạn sử dụng Claude (hoặc AI khác hỗ trợ MCP), bạn có thể cấu hình AgentPay MCP server để agent gọi hàm thanh toán một cách tự nhiên:

Cấu Hình MCP Server (JSON cho Claude)

{
  "mcpServers": {
    "agentpay": {
      "command": "python",
      "args": ["-m", "agentpay_mcp"],
      "env": {
        "BANK_ACCOUNT_NUMBER": "0123456789",
        "BANK_ACCOUNT_NAME": "Công Ty ABC",
        "BANK_CODE": "970012",
        "VIETQR_API_KEY": "your-api-key"
      }
    }
  }
}

Sau khi cấu hình, Claude sẽ có thể gọi các hàm như:

User: "Tạo yêu cầu thanh toán 500k cho khách Nguyễn Văn B"

Claude:
→ Gọi agentpay.create_payment_request(
     transaction_id="txn_12345",
     amount=500000,
     description="Thanh toán cho Nguyễn Văn B"
  )
→ Nhận lại QR code URL
→ Gửi mã QR cho khách hàng
→ Tự động chờ xác nhận
→ Báo cáo kết quả

Agent không cần prompt hoặc lệnh riêng — nó tự biết cách sử dụng hàm!


Ví Dụ Thực Tế #2: Quán Cà Phê – Bán Hàng Qua Chatbot

Một quán cà phê muốn có chatbot bán cà phê giao hàng:

from agentpay import AgentPayClient, PaymentRequest
import asyncio

client = AgentPayClient(
    bank_account="9876543210",
    bank_name="Cà Phê Hạnh Phúc",
    bank_code="970445"  # Techcombank
)

class CoffeeBot:
    def __init__(self):
        self.menu = {
            "cappuccino": {"price": 45000, "name": "Cà Phê Cappuccino"},
            "latte": {"price": 50000, "name": "Cà Phê Latte"},
            "espresso": {"price": 35000, "name": "Espresso đôi"}
        }

    async def process_order(self, items_dict, customer_phone):
        """
        Xử lý đơn hàng và tạo thanh toán
        items_dict: {"cappuccino": 2, "latte": 1}
        """
        total = sum(
            self.menu[item]["price"] * qty
            for item, qty in items_dict.items()
        )

        # Tạo yêu cầu thanh toán
        order_desc = ", ".join([
            f"{qty}x {self.menu[item]['name']}"
            for item, qty in items_dict.items()
        ])

        payment_req = PaymentRequest(
            transaction_id=f"COFFEE_{customer_phone}_{int(datetime.now().timestamp())}",
            amount=total,
            description=f"Đơn cà phê: {order_desc}"
        )

        payment = await client.create_payment_request(payment_req)
        print(f"🛍️ Tổng cộng: {total:,} VND")
        print(f"📱 Quét mã QR: {payment.checkout_url}")

        # Chờ thanh toán
        settlement = await client.await_settlement(
            transaction_id=payment_req.transaction_id,
            timeout_seconds=600  # 10 phút
        )

        if settlement.status == "confirmed":
            print(f"✅ Đơn hàng xác nhận! Sẽ giao hàng trong 30 phút.")
            # Gửi SMS/email xác nhận cho khách
            return True
        else:
            print(f"⏰ Hết thời gian chờ thanh toán")
            return False

# Sử dụng
bot = CoffeeBot()
asyncio.run(bot.process_order(
    items_dict={"cappuccino": 2, "latte": 1},
    customer_phone="0912345678"
))

Nên Làm & Không Nên Làm Khi Dùng AgentPay VN

✅ NÊN LÀM ❌ KHÔNG NÊN LÀM
Lưu transaction_id duy nhất cho mỗi đơn hàng Dùng lại transaction_id cũ
Thiết lập expires_at phù hợp (VD: 24h cho khóa học) Để mã QR hết hạn mà không thông báo khách
Xử lý exception khi await_settlement() timeout Chỉ chờ mà không có fallback
Lưu settlement.amount và settlement.timestamp để audit Tin tưởng mà không kiểm tra
Sử dụng MCP server để AI tự gọi hàm Hardcode toàn bộ logic thanh toán vào prompt
Cấu hình bank_code chính xác Nhầm bank_code dẫn đến QR sai
Test với số tiền nhỏ trước Bắt đầu bằng số tiền lớn

Mục FAQ: Câu Hỏi Thường Gặp

1. Tiền sẽ về tài khoản nào?

Tiền về tài khoản ngân hàng bạn cấu hình trong BANK_ACCOUNT_NUMBER. AgentPay VN chỉ là cầu nối để tạo mã QR, không nắm giữ tiền.

2. Mất bao lâu để xác nhận thanh toán?

Thường từ 1–5 phút tùy ngân hàng. await_settlement() sẽ chờ tối đa thời gian bạn cấu hình (VD: 3600 giây = 1 giờ). Bạn có thể tùy chỉnh timeout_seconds.

3. Có phí nào thêm không?

AgentPay VN là open-source (miễn phí). Phí chuyển khoản VietQR do ngân hàng tính (thường 0–2,000 VND tùy ngân hàng). Không có phí từ AgentPay.

4. Tôi có thể sử dụng nó cho bot trên Telegram, Discord không?

Có! Bạn chỉ cần gọi client.create_payment_request() để lấy checkout_url, rồi gửi link QR cho khách qua Telegram/Discord bot của bạn. Khi khách quét QR, hàng sẽ được xác nhận tự động.


Tóm Tắt Nhanh


Bước Tiếp Theo: Bắt Đầu Ngay Hôm Nay

  1. Cài đặt SDK: bash pip install agentpay-vn

  2. Lấy thông tin ngân hàng: - Số tài khoản - Tên chủ tài khoản - Mã ngân hàng (bank_code) - API Key từ VietQR

  3. Chạy ví dụ đầu tiên: Copy ví dụ "Bot Bán Khóa Học" hoặc "Quán Cà Phê" ở trên, điều chỉnh thông tin ngân hàng, rồi chạy!

  4. Đọc docs đầy đủ: - 📖 AgentPay VN Documentation - 🔧 GitHub Repository

  5. Tích hợp MCP (tuỳ chọn): Nếu bạn dùng Claude hoặc AI khác, cấu hình MCP server để agent tự gọi hàm thanh toán.


Đừng để AI agent của bạn chỉ biết "nói chuyện" — hãy cho nó khả năng "kiếm tiền" ngay hôm nay! 🚀

Bắt đầu →

← Tất cả bài