Hướng Dẫn Cấu Hình HMAC-SHA256 Cho SePay Webhook Trên WinSell
Hướng dẫn chi tiết cách tạo HMAC Secret trên SePay và cấu hình xác thực webhook bằng HMAC-SHA256 trên WinSell — phương thức bảo mật cao hơn API Key, chống giả mạo webhook hiệu quả.

Bạn đang vận hành cửa hàng bằng WinSell POS và nhận thanh toán qua chuyển khoản ngân hàng? Nếu mỗi lần khách thanh toán bạn vẫn phải mở app ngân hàng kiểm tra rồi tự tay xác nhận đơn, thì bài viết này dành cho bạn. SePay là dịch vụ theo dõi biến động số dư tài khoản ngân hàng và gửi thông báo tức thì (webhook) khi có tiền về — và khi kết nối với WinSell, hệ thống sẽ tự động xác nhận đơn hàng mà không cần bạn làm gì cả.
Hướng dẫn này đi qua từng bước một, từ đăng ký tài khoản SePay đến khi thấy đơn hàng tự chuyển sang trạng thái "đã thanh toán" ngay trên màn hình POS.
Trong thực tế kinh doanh, thanh toán bằng QR chuyển khoản đang trở thành hình thức phổ biến nhất tại các cửa hàng Việt Nam — nhanh, không phí giao dịch, khách nào cũng làm được. Tuy nhiên, vấn đề nảy sinh ở bước xác nhận: làm sao hệ thống biết khách đã chuyển tiền?
Với quy trình thủ công, nhân viên phải:
Đợi khách chụp màn hình hoặc nói đã chuyển
Mở app ngân hàng kiểm tra số dư hoặc lịch sử giao dịch
Đối chiếu nội dung chuyển khoản với mã đơn hàng
Thủ công nhấn xác nhận thanh toán trong hệ thống
Với 20-30 đơn mỗi giờ vào giờ cao điểm, quy trình này gây chậm trễ, dễ nhầm lẫn và bỏ sót. SePay giải quyết hoàn toàn vấn đề này bằng cách kết nối trực tiếp vào tài khoản ngân hàng của bạn, phát hiện giao dịch trong vài giây, rồi gửi webhook đến WinSell để hệ thống tự xử lý.
Kết quả thực tế mà các shop đang dùng báo cáo: tốc độ xác nhận thanh toán giảm từ 2-3 phút xuống còn 5-10 giây, không còn tình trạng xếp hàng chờ nhân viên kiểm tra, và quan trọng nhất — không bao giờ bỏ sót thanh toán dù đang bận phục vụ nhiều khách cùng lúc.
Để hiểu rõ hơn về cách WinSell hỗ trợ toàn bộ quy trình bán hàng, xem thêm bài viết về phần mềm quản lý bán hàng cho SME.
Trước khi bắt đầu, chuẩn bị sẵn: số tài khoản ngân hàng bạn đang dùng để nhận tiền tại cửa hàng, và địa chỉ email doanh nghiệp để đăng ký. SePay hỗ trợ hầu hết ngân hàng thương mại tại Việt Nam (Vietcombank, Techcombank, MB Bank, BIDV, VietinBank, ACB, VPBank, TPBank và nhiều ngân hàng khác).
Truy cập my.sepay.vn — Mở trình duyệt và vào địa chỉ https://my.sepay.vn/. Đây là trang quản lý chính thức của SePay.
Nhấn "Đăng ký" hoặc "Dùng thử miễn phí" — SePay có gói miễn phí với giới hạn số giao dịch, phù hợp để thử nghiệm trước khi nâng cấp.
Điền thông tin tài khoản — Nhập họ tên, email, số điện thoại và tạo mật khẩu. Dùng email doanh nghiệp nếu có để quản lý dễ hơn về sau.
Xác nhận email — SePay gửi email xác nhận đến hộp thư của bạn. Nhấn vào link xác nhận để kích hoạt tài khoản.
Đăng nhập lần đầu — Sau khi xác nhận email, đăng nhập vào dashboard SePay. Giao diện tiếng Việt, khá dễ dùng.
Sau khi đăng nhập, bước tiếp theo là kết nối tài khoản ngân hàng của bạn với SePay. Đây là bước quan trọng — tài khoản ngân hàng bạn thêm vào SePay phải là tài khoản bạn sẽ cấu hình trong WinSell.
Trong dashboard SePay, vào mục "Tài khoản ngân hàng" hoặc "Quản lý tài khoản".

Nhấn "Thêm tài khoản ngân hàng".
Chọn ngân hàng từ danh sách thả xuống — SePay liệt kê đầy đủ các ngân hàng được hỗ trợ.
Nhập số tài khoản và tên chủ tài khoản (tên in hoa, không dấu, đúng như trên sổ/app ngân hàng).
Làm theo hướng dẫn liên kết tài khoản của SePay — thường cần xác thực qua SMS OTP từ ngân hàng hoặc đăng nhập internet banking.
Sau khi liên kết thành công, tài khoản ngân hàng xuất hiện trong danh sách với trạng thái "Đang hoạt động".
Lưu ý: Một số ngân hàng yêu cầu bật "Thông báo biến động số dư" trong app ngân hàng trước khi SePay có thể theo dõi. Kiểm tra phần cài đặt app ngân hàng của bạn nếu gặp sự cố.
API key là "chìa khóa" xác thực giữa SePay và WinSell. WinSell dùng key này để xác minh rằng webhook đến thực sự từ SePay của bạn, không phải từ nguồn giả mạo. Hãy tạo một API key riêng để dùng với WinSell thay vì dùng chung với các dịch vụ khác — dễ quản lý và thu hồi khi cần.
Trong dashboard SePay, tìm mục "Cấu hình Công ty" (góc trên hoặc trong menu bên trái).

Chọn tab hoặc mục con "API access".
Nhấn "Tạo API key mới" hoặc "Generate API Key".
Đặt tên mô tả cho key, ví dụ: "WinSell POS" — giúp bạn nhận ra mục đích khi nhìn lại sau này.
Nhấn xác nhận. SePay hiển thị API key — một chuỗi ký tự dài, thường có dạng sep_live_xxxxxxxxxx.
Sao chép và lưu API key ngay lập tức vào một nơi an toàn (ghi chú điện thoại, file text). SePay thường chỉ hiển thị key đầy đủ một lần duy nhất khi tạo — nếu đóng cửa sổ mà chưa lưu, bạn sẽ phải tạo key mới.

API key này bạn sẽ cần dùng ở hai nơi: (1) trong phần cài đặt webhook của SePay ở bước tiếp theo, và (2) trong WinSell khi thêm tài khoản ngân hàng. Giữ nó bí mật — không chia sẻ công khai.
Webhook là cơ chế SePay dùng để "gọi điện" cho WinSell mỗi khi phát hiện giao dịch mới. Khi khách chuyển tiền, SePay nhận thông báo từ ngân hàng, phân tích nội dung, rồi gửi POST request đến URL webhook của WinSell kèm thông tin giao dịch. WinSell nhận được, đối chiếu mã đơn hàng trong nội dung chuyển khoản, và tự động xác nhận thanh toán.
Trong dashboard SePay, vào mục "Tích hợp webhooks" (có thể nằm trong menu "Tích hợp" hoặc "Cài đặt").
Nhấn "Thêm webhook" hoặc "Tạo webhook mới".


Trong trường URL nhận webhook, nhập chính xác địa chỉ sau: https://api.winsell.vn/webhooks/sepay
Chọn sự kiện kích hoạt: chọn "Giao dịch mới" hoặc "Biến động số dư" — tùy giao diện SePay, tên có thể khác nhau nhưng chọn sự kiện liên quan đến tiền vào tài khoản.
Trong phần Bảo mật, chọn kiểu xác thực "API Key" .

Dán API key bạn đã tạo ở bước trước vào trường xác thực. WinSell sẽ nhận giá trị này trong header Authorization: Apikey {key} và so sánh với key lưu trong cơ sở dữ liệu.
Nhấn "Lưu" hoặc "Kích hoạt webhook".
SePay có thể cho phép gửi test request. Nếu có, nhấn thử — nhưng lúc này WinSell chưa có key nên test sẽ trả về lỗi xác thực, hoàn toàn bình thường. Bước test thực sẽ làm sau khi cấu hình xong WinSell.
URL https://api.winsell.vn/webhooks/sepay là endpoint công khai của WinSell, được thiết kế riêng để nhận thông báo từ SePay. Endpoint này xác thực API key, tìm đơn hàng khớp mã chuyển khoản, và tự động chuyển trạng thái thanh toán.
Bây giờ là bước cuối — cấu hình phía WinSell để hệ thống biết tài khoản ngân hàng nào cần theo dõi và API key nào được phép gửi webhook.
Đăng nhập vào WinSell với tài khoản owner hoặc admin của shop bạn.
Vào Cài đặt (Settings) từ menu bên trái hoặc góc trên phải.
Chọn tab "Thanh toán" (Payment).
Tìm phần "Tài khoản ngân hàng" và nhấn "Thêm tài khoản ngân hàng".
Điền các thông tin sau — phải khớp chính xác với tài khoản bạn đã thêm vào SePay:
- Ngân hàng (Bank Code): Chọn đúng ngân hàng từ danh sách
- Số tài khoản: Nhập số tài khoản ngân hàng
- Tên chủ tài khoản: Nhập tên chủ tài khoản (in hoa, không dấu)
- SePay API Key: Dán API key bạn đã tạo và lưu ở bước 2

Nhấn "Lưu". WinSell mã hóa và lưu API key vào cơ sở dữ liệu — bạn sẽ không thấy key đầy đủ sau khi lưu (chỉ thấy vài ký tự đầu), đây là thiết kế bảo mật bình thường.
Từ thời điểm này, cấu hình đã hoàn chỉnh. Hãy thực hiện một giao dịch thử để kiểm tra toàn bộ luồng hoạt động.
Nếu bạn cần hỗ trợ cấu hình tích hợp phức tạp hơn hoặc xây dựng quy trình thanh toán tùy chỉnh, đội ngũ tại WinSell có kinh nghiệm phát triển các giải pháp thanh toán và phần mềm cho doanh nghiệp Việt Nam.
Sau khi cấu hình xong, đây là những gì diễn ra mỗi lần khách thanh toán tại quầy POS:
Nhân viên tạo đơn hàng trên WinSell POS — Hệ thống tạo một mã thanh toán duy nhất cho đơn hàng đó (ví dụ: WS240611-001).
Màn hình POS hiển thị QR code — QR chứa thông tin tài khoản ngân hàng của shop và mã đơn hàng được nhúng vào nội dung chuyển khoản mặc định. Khách chỉ cần quét và xác nhận, không cần gõ nội dung thủ công.
Khách quét QR và chuyển tiền — App ngân hàng tự điền số tài khoản, số tiền và nội dung. Khách nhấn xác nhận trên điện thoại.
Ngân hàng ghi nhận giao dịch — Trong vòng vài giây, ngân hàng xử lý giao dịch và gửi thông báo đến SePay (qua kết nối liên kết đã thiết lập).
SePay phát hiện giao dịch — SePay nhận thông báo, đọc nội dung chuyển khoản, xác nhận số tiền và tài khoản nhận.
SePay gửi webhook đến WinSell — POST request đến https://api.winsell.vn/webhooks/sepay với đầy đủ thông tin giao dịch và API key trong header Authorization.
WinSell xử lý webhook — Hệ thống xác thực API key, tìm đơn hàng có mã khớp với nội dung chuyển khoản, kiểm tra số tiền.
Đơn hàng tự động xác nhận — Nếu mọi thứ khớp, WinSell chuyển trạng thái thanh toán sang "Đã thanh toán" và gửi thông báo realtime đến màn hình POS.
Nhân viên thấy kết quả ngay trên màn hình — Đơn hàng chuyển sang xanh/completed mà không cần nhấn gì. Có thể in hóa đơn và chuẩn bị hàng cho khách ngay lập tức.
Toàn bộ quá trình từ bước 3 đến bước 9 thường mất 5-15 giây tùy tốc độ xử lý của ngân hàng và đường truyền mạng. Đây là tốc độ thực tế — nhanh hơn nhiều so với quy trình thủ công.
Muốn hiểu thêm về cách WinSell tích hợp tất cả kênh bán hàng vào một nền tảng, đọc thêm về giải pháp bán hàng online toàn diện cho doanh nghiệp nhỏ.
Để hệ thống hoạt động ổn định và tránh các sự cố phổ biến, hãy lưu ý những điểm sau:
Tài khoản ngân hàng bạn thêm vào SePay và tài khoản bạn cấu hình trong WinSell phải là cùng một tài khoản — cùng số tài khoản, cùng ngân hàng. SePay theo dõi tài khoản đó và WinSell chờ nhận webhook từ SePay về tài khoản đó. Nếu hai bên không khớp, webhook sẽ đến nhưng WinSell không thể tìm thấy tài khoản tương ứng để xác nhận đơn hàng.
API key bạn dán vào phần Security của webhook SePay và API key bạn nhập vào WinSell phải giống hệt nhau, không thừa không thiếu ký tự. WinSell so sánh key từ header webhook với key lưu trong database — chỉ cần sai một ký tự là bị từ chối. Nếu xác nhận thanh toán không hoạt động, đây là điểm đầu tiên cần kiểm tra.
WinSell tìm đơn hàng bằng cách đọc nội dung chuyển khoản do khách gửi. Mã đơn hàng phải xuất hiện trong nội dung đó. Khi tạo đơn trên POS, WinSell tự điền mã đơn vào QR code — khách chỉ cần quét QR thì nội dung đã có sẵn. Trường hợp khách gõ tay nội dung chuyển khoản (không quét QR), họ phải gõ đúng mã đơn hàng. Hướng dẫn khách quét QR thay vì nhập số tài khoản thủ công để tránh sai sót này.
Không phải mọi loại tài khoản đều có thể kết nối với SePay. Đảm bảo tài khoản của bạn là tài khoản thanh toán thông thường (không phải tài khoản tiết kiệm, tài khoản phong tỏa) và ngân hàng của bạn có tên trong danh sách ngân hàng được SePay hỗ trợ tại thời điểm đăng ký.
Đôi khi kết nối giữa SePay và ngân hàng bị ngắt (do ngân hàng cập nhật hệ thống, đổi mật khẩu internet banking, hoặc token hết hạn). Nên kiểm tra dashboard SePay mỗi tuần một lần để đảm bảo tài khoản ngân hàng vẫn ở trạng thái "Đang hoạt động". Nếu trạng thái chuyển sang "Lỗi" hoặc "Ngắt kết nối", cần liên kết lại ngay.
Webhook cần đường truyền internet hoạt động ở cả phía SePay và phía server WinSell. Trong điều kiện bình thường, WinSell (api.winsell.vn) luôn online 24/7. Nhưng nếu shop bạn mất mạng internet, màn hình POS vẫn có thể hiển thị đơn hàng nhưng sẽ không nhận được webhook — nhân viên cần xác nhận thủ công trong trường hợp này.
Cấu hình SePay với WinSell là một trong những việc setup một lần, hưởng lợi mãi mãi. Sau khoảng 20-30 phút làm theo hướng dẫn trên, mọi giao dịch chuyển khoản tại quầy POS của bạn sẽ được xác nhận tự động — nhanh hơn, chính xác hơn và không cần nhân viên theo dõi thủ công.
Tóm tắt 4 bước chính:
Đăng ký tài khoản SePay tại my.sepay.vn và thêm tài khoản ngân hàng
Tạo API key trong mục "Cấu hình Công ty" > "API access"
Thêm webhook URL https://api.winsell.vn/webhooks/sepay và dán API key vào phần Security
Vào WinSell > Cài đặt > Thanh toán, thêm tài khoản ngân hàng và dán cùng API key
Nếu gặp khó khăn trong quá trình cấu hình, hãy liên hệ support WinSell hoặc kiểm tra lại từng bước trong hướng dẫn này. Cấu hình đúng ngay từ đầu sẽ giúp bạn tránh được những sự cố không đáng có về sau.
Hướng dẫn chi tiết cách tạo HMAC Secret trên SePay và cấu hình xác thực webhook bằng HMAC-SHA256 trên WinSell — phương thức bảo mật cao hơn API Key, chống giả mạo webhook hiệu quả.

Hướng dẫn chi tiết cách chọn phần mềm quản lý bán hàng phù hợp cho doanh nghiệp SME: tiêu chí đánh giá, so sánh giải pháp và quy trình triển khai hiệu quả.