Hướng dẫn · Nhận tiền tự động

SePay Trang bán hàng,
khách chuyển tiền là đơn tự đánh dấu

Khách quét mã QR đã điền sẵn số tiền và nội dung. Tiền về thẳng tài khoản ngân hàng của bạn, không qua trung gian. Bảng đơn tự chuyển sang “Đã thanh toán”.

Bạn chỉ phải tự tay đúng 2 việc — nối ngân hàng (cần OTP) và khai báo webhook. Phần còn lại: điền 6 ô một lần, dán khối lệnh, máy làm hết.

  1. Nối ngân hàngtay · cần OTP · 15 phút
  2. Điền 6 ômột lần cho tất cả
  3. Dán khối lệnhmáy đấu nối toàn bộ
  4. Khai báo webhooktay · dán 2 giá trị
01

Hiểu đúng một điều này thì mọi bước sau đều dễ

Đây là chỗ 90% người làm sai

SePay không biết ai vừa chuyển tiền. Thứ duy nhất nối khoản tiền với đơn hàng là dòng nội dung chuyển khoản.

Ngân hàng chỉ báo cho SePay ba thứ: số tiền, thời gian, và nội dung. Không có tên khách, không có mã đơn. Vậy nên nội dung phải mang một thứ nhận ra được khách là ai.

Số tiền2.000.000 đ
Nội dung0938872283
Đọc làđơn của khách có số điện thoại 0938872283

Dùng thẳng số điện thoại khách là gọn nhất — vốn đã là thứ khách điền vào form, không phải nghĩ thêm mã mới, khách nhìn vào cũng hiểu, và không ai gõ nhầm được vì nó nằm sẵn trong mã QR.

Khách xoá dòng nội dung đó là hệ thống mù. Tiền vẫn về tài khoản bình thường, chỉ là bảng không tự đánh dấu được. Vì thế mã QR phải điền sẵn nội dung — đừng bao giờ bắt khách tự gõ.

Không cần mã đơn kiểu DH123, cũng không cần tiền tố. Nội dung chuyển khoản chỉ là số điện thoại. Ngân hàng đôi khi chèn thêm số tham chiếu của họ vào nội dung, nên máy không đoán theo khuôn mà lấy mọi cụm 9–11 chữ số rồi đối chiếu ngược với danh sách số điện thoại đang có trong bảng đơn — chỉ khớp khi trúng đúng một đơn. Cách này chắc hơn bắt theo tiền tố.
02

Việc tay thứ nhất — tạo SePay và nối ngân hàng

Khoảng 15 phút, cầm sẵn điện thoại để nhận OTP. Đây là bước không ai làm hộ được, vì ngân hàng bắt buộc chính chủ xác thực.

  1. Chuẩn bị 4 thứ

    Số tài khoản · tên chủ tài khoản đúng như trên ngân hàng · số điện thoại đã đăng ký với ngân hàng · tên đăng nhập app ngân hàng. Tài khoản công ty thì dùng app doanh nghiệp.

  2. Đăng ký tại my.sepay.vn

    Miễn phí. Dùng email bạn hay mở, vì SePay gửi cảnh báo về đây khi hệ thống trục trặc.

  3. Menu Ngân hàngKết nối thêm → nhập OTP → Liên kết API

    Chọn đúng tab Cá nhân hay Doanh nghiệp theo loại tài khoản. Mã về điện thoại, hoặc phải duyệt trong app ngân hàng.

  4. Thử ngay bằng 2.000đ

    Tự chuyển 2.000đ vào chính tài khoản đó. SePay hiện giao dịch trong vài giây là xong. Không hiện thì dừng lại, đừng làm tiếp — mọi bước sau đều dựa trên bước này.

Không cần ký hợp đồng riêng với ngân hàng. Hợp đồng chỉ cần khi dùng tài khoản định danh (VA) — mỗi khách một số tài khoản riêng, chờ 3–7 ngày. Cách trong trang này không dùng VA nên bỏ qua được. Vướng thì gọi SePay: 02873.059.589.
03

Điền 6 ô — một lần cho tất cả

Sáu ô này nuôi cả mã QR bên dưới lẫn khối lệnh ở mục 04. Điền một lần, không phải nhập lại chỗ nào nữa.

Đúng tài khoản vừa nối vào SePay ở mục 02.
Tên viết tắt: ACB · VCB · TCB · MB · BIDV… Sai tên thì ô QR bên dưới báo ngay.
Trang nằm trong dự án bạn mở Claude Code — máy sửa thẳng vào đó: gắn QR theo từng đơn và ghi đơn vào bảng. Không phải dán tay chỗ nào.
Lark Developer Console → app của bạn → Credentials & Basic Info. Đây là thứ cho phép máy ghi vào bảng đơn.
Ngay dưới App ID, cùng một trang.
Đã có bảng: mở đúng bảng đó rồi dán nguyên link — máy đi thẳng vào, chỉ bổ sung cột còn thiếu. Chưa có: để trống, máy dựng bảng mới đúng cấu trúc.
Giá trị chỉ nằm trong trình duyệt của bạn — trang không gửi đi đâu và không lưu lại. Đóng tab là mất.
Mẹo lấy đúng link: trong Lark, bấm vào đúng bảng đơn rồi mới copy link trên thanh địa chỉ. Link lúc đó có phần ?table=tbl… — đó chính là thứ chỉ đúng bảng. Copy khi đang đứng ở bảng khác là máy đi vào nhầm chỗ. Trang chỉ đọc chuỗi link để soi giúp bạn, không gọi sang Lark (Lark chặn trình duyệt gọi API của họ — em đã đo).

Điền số tài khoản và ngân hàng để xem mã QR thật.

Khách sẽ thấy đúng thế này

Vào tài khoản
Ngân hàng
Số tiền
Nội dung

Quét thử bằng app ngân hàng để chắc chắn đúng tài khoản — nhưng đừng bấm chuyển. Số tiền và nội dung đã nằm sẵn trong mã, khách không phải gõ nên không gõ sai được.

04

Dán khối lệnh — máy đấu nối toàn bộ

Sao chép, dán vào Claude Code. Nó làm sáu việc rồi trả cho bạn đúng hai giá trị để mang sang SePay ở mục 05.

Máy làmThay cho việc gì
Sinh khoá bí mậtBạn không phải nghĩ ra chuỗi ngẫu nhiên, cũng không phải sợ nó lọt vào khung chat.
Dựng địa chỉ nhận tinToàn bộ phần lập trình webhook, gồm 6 lớp chống hớ.
Gắn QR vào trang bán hàngSửa thẳng trang, sinh mã QR theo từng đơn và ghi đơn vào bảng — không phải dán tay chỗ nào.
Nối vào bảng có sẵnBóc base_token + table_id thẳng từ link bạn dán, đi đúng bảng đó và chỉ bổ sung cột còn thiếu — không đụng cột sẵn có. Chưa có bảng thì dựng mới đúng cấu trúc 9 cột.
Chạy thử 3 lượtChứng minh khoá chặn được người lạ, trước khi mở bán.
In sẵn URL + API KeyKhông phải mở file .env — hai giá trị hiện thẳng ở cuối, chép từ màn hình sang SePay là xong.
Lệnh đấu nối

    

Chưa điền ô nào — khối lệnh đang ở dạng mẫu.

05

Việc tay thứ hai — khai báo webhook trên SePay

Khoảng 3 phút. Claude vừa in sẵn khối DÁN VÀO SEPAY gồm URLAPI Key — để nguyên cửa sổ đó rồi chép sang, không phải mở file nào.

  1. my.sepay.vn → Webhooks → + Thêm webhook

    Bước 1 của form: tên đặt gì cũng được, Sự kiện chọn Có tiền vào, URL dán địa chỉ Claude đưa.

  2. Bước 2 — chọn đúng tài khoản, phần lọc để trống

    Ô lọc theo tài khoản ảo (VA) hay tiền tố mã thanh toán thì bỏ trống, vì mình đối chiếu bằng nội dung chuyển khoản.

  3. Bước 3 — chọn API Key rồi dán khoá

    Chép dòng API Key trong khối Claude vừa in. Chép, đừng gõ tay — sai một ký tự là SePay bắn tin sang mà bị từ chối, im lặng, không ai biết cho tới lúc khách kêu.

  4. Bước 4 — bật cảnh báo rồi bấm Thêm

    Chọn email hoặc Telegram để SePay báo khi webhook lỗi. Bật đi — đây là thứ cho bạn biết hệ thống chết trước khi khách phát hiện.

Dán xong thì đóng cửa sổ Claude Code lại. Khoá vừa hiện trên màn hình một lần cho tiện chép — nó vẫn nằm an toàn trong .env, nhưng nếu bạn chụp màn hình gửi cho ai hoặc chia sẻ màn hình lúc đó, hãy coi như khoá đã lộ: bảo Claude sinh khoá mới rồi cập nhật lại đúng hai chỗ — .env và ô API Key trên SePay.
06

Kiểm tra chạy thật

Cách nhanh — nút Gửi thử của SePay

Mở webhook vừa tạo, bấm Gửi thử. Đúng là SePay báo mã 200 kèm success: true.

Thấy gìNghĩa là
200 · success trueThông. Kèm dòng “không dò ra đơn” thì vẫn đúng — tin thử của SePay không có nội dung chuyển khoản thật nên không khớp được đơn nào.
401Khoá hai bên lệch nhau. Chép lại khoá vào ô API Key của SePay.
503Địa chỉ nhận chưa được nạp khoá. Bảo Claude deploy lại.
Không gọi đượcSai URL. Kiểm lại đúng đường dẫn Claude đưa, có https://.

Cách thật — một đơn đi trọn vòng

Đây mới là phép thử thật sự. Làm một lần trước khi mở bán.

  1. Đặt một đơn bằng số điện thoại của chính bạn

    Vào trang bán hàng, điền form như một khách thật.

  2. Quét mã, sửa số tiền xuống 2.000đ rồi chuyển

    Giữ nguyên nội dung, chỉ đổi số tiền. Trả thiếu là đúng ý — để xem hệ thống có phân biệt được “cọc” với “đủ” không.

  3. Chờ 10–60 giây rồi mở bảng đơn

    Dòng đó phải có: số tiền đã nhận 2.000, trạng thái Đã cọc, kèm mã giao dịch và thời gian thanh toán.

  4. Xoá dòng thử đi

    Dọn sạch, đừng để đơn thử lẫn vào dữ liệu thật.

07

Ba lúc máy không tự nhận ra

Cả ba trường hợp tiền vẫn về tài khoản bình thường, chỉ là bảng không tự đánh dấu. Người thu ngân cần biết trước để không hoảng.

Tình huốngVì sao · làm gì
Khách gõ đè nội dungMột số app cho sửa nội dung sau khi quét. Mất số điện thoại là mất đường dò. → Đối chiếu tay theo số tiền và giờ chuyển.
Người chuyển khác người đăng kýVợ đăng ký, chồng chuyển từ tài khoản mình. Nội dung vẫn đúng thì vẫn khớp — chỉ hỏng khi họ gõ lại nội dung theo tên mình.
Chuyển trước khi điền formChưa có đơn nào trong bảng để khớp. → Bảo khách điền form, rồi sửa trạng thái tay.
Mở Nhật ký webhooks trong SePay là thấy đúng lý do từng lần bị bỏ qua, kèm nội dung chuyển khoản gốc. Đối chiếu tay xong thì sửa trạng thái trong bảng — hệ thống không đè ngược lại thứ bạn đã sửa.