Lịch sử revision
Cấu hình thanh toán SePay và cách hệ thống tự khớp thanh toán vào đơn
# Cấu hình thanh toán SePay và cách hệ thống tự khớp thanh toán vào đơn Tài liệu này dành cho kế toán và người quản trị khi cần bật nhận thanh toán chuyển khoản tự động qua SePay, và cần hiểu chính xác cách OMS quyết định một đơn đã được trả tiền. ## Mở màn hình cấu hình 1. Ở menu bên trái, mục **Cài đặt hệ thống**, chọn **Cấu hình SePay**. 2. Màn hình **Cấu hình Thanh toán SePay** hiện form **Thông tin cấu hình Cổng thanh toán SePay** gồm bốn ô: **SePay Merchant ID**, **SePay Secret Key**, **SePay Checkout URL**, **Web Base URL**. Cả bốn ô đều bắt buộc. 3. Ô **Secret Key** ẩn giá trị dạng dấu chấm; bấm biểu tượng con mắt để hiện hoặc ẩn khi đang gõ. 4. Bấm **Lưu cấu hình** để ghi lại. Chỉ tài khoản có vai trò quản trị (admin) mới lưu được thay đổi ở màn hình này; tài khoản khác mở xem được nhưng lưu sẽ bị từ chối. Sau khi lưu, **Secret Key** hiển thị lại dưới dạng che (có dấu `*`) chứ không hiện nguyên văn nữa. Đây là vì hệ thống mã hóa Secret Key ở mức cơ sở dữ liệu và chỉ so khớp ngầm khi cần dùng, không hiển thị lại giá trị gốc trên giao diện. ## Nút Test Connection kiểm tra được gì, chưa kiểm tra được gì Bấm **Test Connection** gửi một yêu cầu tới đúng địa chỉ đã nhập ở ô **SePay Checkout URL** và xem địa chỉ đó có phản hồi hay không. - Nếu địa chỉ phản hồi bất kỳ điều gì không phải lỗi phía máy chủ SePay, hoặc thậm chí nếu không kết nối được, màn hình vẫn báo **"Kết nối tới SePay thành công."** - Việc kiểm tra này **không** xác nhận **Merchant ID** hay **Secret Key** đã nhập có đúng hay không. Cách chắc chắn nhất để biết cấu hình đúng là thực hiện một giao dịch thật (ví dụ nhờ chuyển khoản thử với nội dung đúng mã một đơn thử) và xem giao dịch có về đúng đơn hay không. Đừng coi dòng **"Kết nối tới SePay thành công."** là bằng chứng cấu hình đã hoàn toàn chính xác. ## Sau khi cấu hình: OMS nhận tiền bằng cách nào Khi có tiền chuyển vào tài khoản đã đấu nối SePay, SePay gửi thông tin giao dịch về OMS. OMS ghi lại giao dịch và cố tìm đơn hàng phù hợp để đánh dấu đã trả tiền. ## Cách OMS tìm đúng đơn cho một giao dịch chuyển khoản Hệ thống thử theo đúng thứ tự sau, dừng ngay khi tìm thấy: | Thứ tự | Cách thử | Dựa vào | | --- | --- | --- | | 1 | So khớp chính xác nội dung chuyển khoản với mã đơn | Mã đơn hàng ghi đúng, đầy đủ trong nội dung chuyển tiền | | 2 | So khớp chính xác nội dung chuyển khoản với mã giao dịch SePay đã gắn cho đơn từ trước | Đơn đã có một liên kết thanh toán trước đó | | 3 | Trích một cụm giống mã đơn từ trong nội dung chuyển khoản (ví dụ cụm bắt đầu bằng `ORD-`, hoặc một chuỗi chữ và số liền nhau dài 6-20 ký tự) rồi so với mã đơn | Nội dung chuyển khoản có thêm chữ khác quanh mã đơn | | 4 | So khớp mã giao dịch do SePay cấp với mã giao dịch đã gắn cho đơn | Trường hợp không dựa được vào nội dung chuyển khoản | Nếu không cách nào khớp, giao dịch được ghi log là không khớp được đơn và **không có đơn nào được cập nhật**. Không có cảnh báo nào hiện trên màn hình Đơn hàng khi việc này xảy ra; phải dựa vào sao kê ngân hàng hoặc hệ thống SePay để phát hiện. ## Điều quan trọng nhất: hệ thống không so số tiền Ở cả bốn cách thử trên, OMS chỉ so **nội dung hoặc mã giao dịch**, **không so số tiền chuyển khoản với TỔNG ĐƠN HÀNG** ở bất kỳ bước nào. Hệ quả trực tiếp: nếu nội dung chuyển khoản chứa đúng mã đơn nhưng số tiền chuyển ít hơn hoặc nhiều hơn **TỔNG ĐƠN HÀNG**, hệ thống vẫn: - đánh dấu đơn là **đã trả tiền (PAID)** toàn bộ; - ghi thời điểm trả tiền là lúc nhận được giao dịch; - **không** tạo bất kỳ cảnh báo hay dòng chênh lệch nào trên màn hình. Ví dụ dễ hình dung: một đơn có **TỔNG ĐƠN HÀNG** là 500.000đ. Nếu có một giao dịch chuyển khoản 10.000đ với nội dung ghi đúng mã đơn đó (dù nhầm hay cố ý), đơn vẫn được ghi **PAID** y như đã nhận đủ 500.000đ. Vì vậy, bước đối chiếu số tiền thực nhận với **TỔNG ĐƠN HÀNG** ở bài *Đối soát đơn hàng với tiền thu và hóa đơn* không phải một bước kiểm tra thêm cho chắc — đó là cách **duy nhất** để phát hiện trường hợp này, vì bản thân OMS không tự làm việc đó. ## Khi khớp xong: hóa đơn có thể được gửi đi ngay, tự động Việc đơn chuyển sang **PAID** có thể tự kích hoạt gửi thông tin sang hệ thống hóa đơn, tùy phương thức thanh toán ghi trên đơn: - Nếu phương thức thanh toán không phải COD (tức là SePay, VNPay, MoMo...), hệ thống coi đây là đơn trả trước và gửi yêu cầu xuất hóa đơn **ngay tại thời điểm chuyển sang PAID**, với số tiền hóa đơn tính theo **toàn bộ giá trị đơn**, không phải theo số tiền vừa nhận được. - Nếu phương thức thanh toán là COD, hệ thống **không** gửi ở bước này; chỉ gửi khi đơn chuyển sang `COMPLETED`. Nói cách khác, nếu một giao dịch sai số tiền (mục trên) khớp vào một đơn trả trước, hệ thống có thể đã gửi yêu cầu xuất hóa đơn cho toàn bộ giá trị đơn trước khi có ai kịp phát hiện số tiền không khớp. Việc gửi này chạy nền và tự thử lại nếu lần đầu không thành công, theo các mốc khoảng 1, 5, 15, 60 và 120 phút sau lần đầu (tổng cộng khoảng 81 phút). Nếu tới lần thử cuối vẫn không xong, hệ thống **ngừng thử lại hẳn** cho lần phát sinh đó. Màn hình OMS hiện không có nơi nào để xem đã gửi thành công, đang thử lại hay đã ngừng thử; muốn biết, phải tra ở hệ thống hóa đơn nhận thông tin này. ## Những việc màn hình hiện chưa làm được - Tạo đường link thanh toán (checkout) cho một đơn cụ thể để gửi cho khách bấm vào trả tiền; năng lực này đã có ở phía hệ thống nhưng chưa có nút nào trên giao diện OMS gọi tới. - Cảnh báo khi số tiền chuyển khoản khác với **TỔNG ĐƠN HÀNG** của đơn được khớp. - Xem danh sách giao dịch thanh toán đã nhận, chi tiết từng giao dịch, hay trạng thái gửi hóa đơn tự động ngay trên giao diện Đơn hàng. - Đổi thứ tự ưu tiên các cách so khớp ở trên từ giao diện. ## Điểm cần người nghiệp vụ xác nhận - Việc đối chiếu số tiền thực nhận với từng đơn nên làm hàng ngày hay theo tần suất nào khác, vì OMS không tự cảnh báo khi lệch số tiền? - Khi phát hiện một giao dịch khớp sai đơn hoặc sai số tiền sau khi hóa đơn đã được gửi tự động, quy trình xử lý hóa đơn sai (hủy, điều chỉnh) thuộc trách nhiệm của ai? - Có cần quy định bắt buộc ghi đúng mã đơn và đúng số tiền trong nội dung chuyển khoản khi hướng dẫn khách thanh toán, để giảm rủi ro khớp nhầm?