API ngân hàng Việt Nam: Cách mình cho app tự động nhận tiền

Sáng nay mình vừa tích hợp api ngân hàng việt nam cho app quản lý trung tâm đào tạo ở Gò Vấp. Mình làm nghề tư vấn phần mềm. Ngán nhất cảnh kế toán dò biên lai gạch nợ trên Excel, nhìn mà mỏi cả mắt. Khi có tới 300 học viên đăng ký cùng đợt, việc đối chiếu thủ công ngốn đứt ba tiếng mỗi ngày của kế toán, lại dễ click nhầm dòng sinh ra nợ khống bắt phụ huynh đóng đúp. Tìm cách để phần mềm tự biết tiền vào tài khoản luôn tốn chất xám. Lấy sao kê thì dễ, nhưng để chạy ổn định 24/7 không rớt đơn là chuyện khác.

Lập trình viên tích hợp api ngân hàng việt nam cho app quản lý
Lập trình viên tích hợp api ngân hàng việt nam cho app quản lý

Nỗi ám ảnh khi viết lệnh hỏi server liên tục

Anh em dev backend chắc không lạ gì cảnh này, quá lỗi thời rồi còn gì. Ngày xưa ráp nối thanh toán, mình toàn viết mã ngầm cứ 3 phút gọi máy chủ một lần xem có khoản báo có nào chưa, cạn kiệt tài nguyên thấy rõ. Có đợt trung tâm đẩy 120 đơn cùng lúc, máy chủ VPS RAM 1GB của mình rớt luôn kết nối cơ sở dữ liệu. Lần đó mình phải đền 500.000đ do phần mềm không ghi nhận thanh toán kịp lúc, và toàn bộ ban giám đốc phải họp khẩn cấp để tìm cách đền bù thiệt hại cho nhóm học viên vừa đăng ký xong nhưng không nhận được tài khoản vào lớp học trực tuyến. Khắc phục hậu quả tốn tiền và bào mòn niềm tin khách hàng. Mình biết không thể dùng bạo lực phần cứng giải quyết logic.

Việc máy chủ liên tục đi hỏi bên thứ ba gây lãng phí băng thông, đốt tiền vô ích. Nhất là ban đêm không có giao dịch, vòng lặp cron job vẫn chạy đều đặn đốt tiền điện toán đám mây. Mình chuyển sang tìm hiểu cơ chế đẩy dữ liệu trực tiếp. Webhook chính là lối thoát.

Gỡ rối với webhook và api ngân hàng việt nam

Chuyển qua dùng webhook nhàn hẳn. Thay vì đi hỏi, máy chủ MONA Pay sẽ gọi vào URL HTTPS của mình, thả cục dữ liệu JSON dung lượng 2KB chứa nội dung giao dịch ngay giây phút báo có. Quá trình ráp code diễn ra nhanh chóng. Họ có sẵn MCP server cho môi trường phát triển. Mình mở Claude Code lên, cắm MCP vào là con bot AI tự động đọc hiểu toàn bộ tài liệu đặc tả hệ thống. Nó biết luôn cả cấu trúc JSON mà máy chủ sẽ trả về rồi gọi thẳng api ngân hàng việt nam lấy thông tin thực tế.

Con bot AI tự động tải mã nguồn mẫu cho Node.js rồi viết luôn hàm nhận webhook định dạng chuẩn chỉnh trong vỏn vẹn 10 phút đồng hồ. Điểm mình khoái nhất là họ cấp một môi trường thử nghiệm giả lập giao dịch báo có y hệt như thật. Giao diện sandbox thiết kế tối giản, chỉ cần nhập số tiền và nội dung là nó bắn tín hiệu cái vèo về máy tính cục bộ. Anh em cứ bắn thử vài trăm truy vấn xem luồng code rẽ nhánh ra sao trước khi chạy trên mạng lưới thật. Nó giúp mình lường trước lỗi phân tích chuỗi văn bản, ví dụ như bắt nhầm khoảng trắng hoặc ký tự có dấu trong chuỗi nội dung chuyển khoản.

Khách hàng của mình đang dùng tài khoản ngân hàng ACB chạy chính thức nên họ chỉ cần lấy dãy số bảo mật để xác nhận quyền liên kết. Hệ thống chỉ giữ quyền đọc tin báo có từ ngân hàng thay vì nắm quyền điều khiển dòng tiền. Chủ doanh nghiệp an tâm giao phó việc nối mạng mà không lo sợ mất mát tài sản. Rõ ràng trong phân quyền giúp mình đỡ giải thích rườm rà với giám đốc.

Trải nghiệm mở khoá tài khoản lúc nửa đêm

Ngoài cái app cho trung tâm đào tạo, tháng trước mình còn cài bộ công cụ này cho một trang web bán khoá học lập trình trực tuyến. Đặc thù của ngành học online là khách hàng thường xuyên nổi hứng mua bài giảng vào lúc một giờ sáng. Hồi chưa lắp hệ thống tự nhận tiền, cứ cuối tuần là điện thoại mình lại reo inh ỏi vì khách chuyển khoản xong mà tài khoản học vẫn bị khoá cứng ngắc. Có đêm mình phải lóp ngóp bò dậy mở máy tính xách tay, đăng nhập vào hệ thống quản trị WordPress rồi mò mẫm cấp quyền thủ công cho từng người. Vừa buồn ngủ vừa bực mình.

Từ lúc cắm đường dẫn webhook vào, mọi thứ tự chạy rào rào. Khách cầm điện thoại lên quét mã QR VietQR, ngân hàng báo ting ting là đúng ba giây sau màn hình web tự động nhảy sang trang video bài giảng. Mình cấu hình cho hệ thống gán luôn thẻ quyền truy cập trọn đời trị giá 1.500.000đ mà không cần sự can thiệp của con người. Suốt ba mươi ngày qua, hệ thống đã tự động xử lý trót lọt 86 lượt đăng ký mua khoá học vào khung giờ từ nửa đêm đến sáu giờ sáng. Mình ngủ thẳng giấc tới sáng mới dậy xem báo cáo doanh thu. Giấc ngủ của dev đúng là vô giá.

Mô hình truyền dữ liệu tự động qua api ngân hàng việt nam
Mô hình truyền dữ liệu tự động qua api ngân hàng việt nam

Hai điểm dở khi cài đặt api ngân hàng việt nam

Mọi thứ chưa trọn vẹn. Tuần trước mình định bật thêm MONA eInvoice để xuất hoá đơn VAT. Mình phát hiện hai dịch vụ chưa gộp chung một tài khoản quản trị. Mình lật đật tạo thêm bộ mật khẩu mới, cất vào trình quản lý 1Password khá phiền phức. Đang gõ code hăng say mà cứ phải đảo qua đảo lại giữa hai khung đăng nhập tách biệt làm mạch suy nghĩ bị khựng lại mất ba nhịp, giao diện thì rối rắm.

Chuyện thứ hai rơi vào nhóm khách bán lẻ. Gói miễn phí bên này giới hạn 500 giao dịch mỗi tháng. Anh khách bán ốp lưng điện thoại 35.000đ một chiếc nên số đơn đẩy lên tràn hạn mức rất nhanh. Hết lượt là ngưng báo có. Mình đọc file log thấy lỗi 429 Too Many Requests mới lật đật vào nâng cấp lên gói 99.000đ một tháng. Anh em làm app cho quán cafe nhiều bill lẻ nên mua luôn gói năm trị giá 990.000đ. Đừng tiếc chút lẻ tẻ mà làm đối tác phật ý.

Thoát cảnh giam tiền của bên trung gian quốc tế

So với cổng thanh toán toàn cầu như Stripe hay PayPal, mã VietQR nội địa khác biệt. Khách quét mã là tiền chạy thẳng vào tài khoản đứng tên cá nhân. Không có trung gian giam tiền rồi đối soát cuối tuần. Tiền nằm gọn trong túi.

Trước kia mình ráp cổng Stripe cho shop bán áo thun, bị trừ ngay 2.9% phí giao dịch và kẹt rút tiền 3 ngày rưỡi chờ xác minh danh tính. Dòng tiền xoay vòng đứng khựng, khó chịu thấy rõ. Chủ shop phải gọi điện cãi nhau với tổng đài bằng tiếng Anh bập bẹ tốn ba cước phí quốc tế.

Giờ dùng mạng lưới tạo mã cho 29 ngân hàng, độ trễ gần như bằng không. Kế toán đối soát cuối ngày nhẹ gánh nhờ mã tham chiếu khớp lệnh. Mọi người có thể đọc bài đánh giá nhà cung cấp dịch vụ công nghệ qua case study để thấy việc chọn hạ tầng từ đầu quan trọng thế nào. Sai một ly đi một dặm.

Xử lý bảo mật cho gói tin và chốt đơn

An toàn thông tin là ưu tiên số một, mã hoá phải chuẩn ngay từ đầu. Mỗi cục dữ liệu gửi về đều được ký bằng chuẩn HMAC-SHA256 kèm theo dấu thời gian. Mình code thêm một đoạn so sánh chữ ký số. Băm không khớp là huỷ ngay lập tức. Nếu máy chủ nhận tin trễ quá 5 phút so với thời điểm khởi tạo, mã nguồn tự động vứt bỏ toàn bộ truy vấn đó để bảo vệ hệ thống khỏi những kẻ gian lận đang cố gắng thao túng dữ liệu từ bên ngoài. Điều này chặn đứng kỹ thuật tấn công phát lại. Hacker muốn gửi dữ liệu giả mạo ép phần mềm ghi nhận đã thu tiền cũng đành bó tay đứng ngó.

Mỗi khoản tiền báo có luôn mang một chuỗi mã giao dịch ngân hàng độc nhất vô nhị. Mình dùng dãy số này làm khoá chính để tránh ghi trùng vào bảng dữ liệu MySQL. Phần mềm biết chính xác học viên Lê Văn A vừa đóng 3.500.000đ học phí và tự động gạch nợ thành công. Anh em muốn vọc luồng mã hoá thì sang trang nhận tài liệu api ngân hàng tích hợp lấy thông số môi trường sandbox. Cấu hình viết cặn kẽ để dân dev gõ Node.js hay PHP làm theo từng bước không sai sót.

Dự tính mở rộng thông báo qua phần mềm chat

Bài toán xác nhận số dư xem như êm xuôi, chạy rất ổn định. Chiều nay mình sẽ đấu thêm thông báo nổ thẳng vào nhóm Zalo chung của phòng kế toán qua cổng Zalo OA. Cứ có biến động là Telegram hay Zalo báo ngay số tiền và mã đơn hàng trong vòng 3 giây, thẳng lên màn hình điện thoại của giám đốc trung tâm, khỏi cần mở máy tính lên kiểm tra danh sách dài dằng dặc. Khách hàng khoẻ re. Tụi mình đỡ viết thêm màn hình quản lý.

Kết nối hệ thống báo có không đòi hỏi kiến thức mạng quá sâu. Chút nữa mình dọn dẹp biến môi trường rồi bàn giao nốt dự án. Tuần sau trung tâm khai giảng khoá mới, hệ thống sẽ hoạt động hết công suất phục vụ 300 học viên.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *