hóa đơn điện tử và chữ ký số
Để kiểm tra (test) hệ thống hóa đơn điện tử (HDĐT) và chữ ký số trước khi đưa vào vận hành thực tế (Live), anh không thể dùng tài khoản thật vì dữ liệu sẽ bị gửi thẳng lên Cục Thuế và gây sai lệch sổ sách kế toán.
Thay vào đó, tất cả các nhà cung cấp HDĐT (T-VAN) đều thiết kế một môi trường thử nghiệm độc lập (gọi là Môi trường Demo / Sandbox) dành riêng cho lập trình viên. Dưới đây là quy trình chi tiết để anh test hệ thống của mình:
Bước 1: Xin tài khoản Demo từ Nhà cung cấp HDĐT
Anh hãy liên hệ với đội ngũ kỹ thuật hoặc kinh doanh của bên hóa đơn anh chọn (Viettel, MISA, VNPT, BKAV,...) và yêu cầu:
Cấp một tài khoản Demo trên hệ thống thử nghiệm của họ.
Cấp Chữ ký số HSM thử nghiệm (Test HSM Certificate): Chữ ký số này đã được cấu hình sẵn trên server demo của họ, anh chỉ cần gọi API là hệ thống tự ký bằng chứng thư số giả lập.
Cung cấp Tài liệu API (API Documentation) và thông tin kết nối môi trường Test gồm:
Mã số thuế test,AppID,API Key,Secret Key,Đường dẫn API Test(thường có chữ demo hoặc sandbox, ví dụ:https://demo-api.meinvoice.vn/...).
Bước 2: Viết Code Test kết nối API trong Python
Khi đã có tài khoản Demo, anh có thể tạo một file Python riêng (ví dụ: test_invoice.py) để chạy thử nghiệm độc lập trước khi ghép vào file app.py chính.
Dưới đây là đoạn code mẫu (chuẩn theo cấu trúc RESTful API chung của các bên T-VAN) để anh test luồng sinh hóa đơn và ký số tự động:
import requests
import json
def test_publish_invoice():
# 1. Đường dẫn API môi trường TEST/DEMO của nhà cung cấp
API_URL_TEST = "https://demo-api.nhacunghocaphoadon.vn/v1/invoice/create-and-sign"
# 2. Token hoặc Key thử nghiệm được cấp
headers = {
"Authorization": "Bearer YOUR_DEMO_ACCESS_TOKEN",
"Content-Type": "application/json"
}
# 3. Dữ liệu hóa đơn giả lập (Khớp với dữ liệu vé anh đang làm)
payload = {
"invoice_type": "HOA_DON_BAN_HANG",
"invoice_series": "1C26TAA", # Ký hiệu hóa đơn mẫu test
"buyer_name": "NGUYEN VAN A (TEST)",
"buyer_legal_name": "KHACH HANG TEST",
"payment_method": "CK", # Chuyển khoản
"items": [
{
"item_name": "Vé tham quan (Giao dịch thử nghiệm)",
"quantity": 5,
"price": 20000,
"amount": 100000,
"tax_rate": 0 # Thuế suất
}
],
"total_amount": 100000,
"reference_id": "TEST_TICKET_123456" # Mã vé test của anh
}
print("--> Đang gửi dữ liệu sang hệ thống Hóa đơn điện tử Demo...")
try:
# Gọi lệnh POST gửi dữ liệu
response = requests.post(API_URL_TEST, json=payload, headers=headers, timeout=10)
if response.status_code == 200:
result = response.json()
print("\n✅ KẾT QUẢ TEST THÀNH CÔNG!")
print(f" Mạng lưới: Môi trường Demo")
print(f" Số hóa đơn sinh ra: {result.get('invoice_number', 'Đã ký số thành công')}")
print(f" Trạng thái từ cơ quan Thuế: {result.get('tax_status', 'Đã chấp nhận (Giả lập)')}")
print(f" Đường dẫn xem hóa đơn PDF: {result.get('invoice_pdf_url')}")
else:
print(f"\n❌ LỖI HỆ THỐNG: Bên hóa đơn báo lỗi: {response.status_code}")
print(response.text)
except Exception as e:
print(f"\n❌ LỖI KẾT NỐI API: {str(e)}")
# Chạy thử nghiệm hàm test
if __name__ == "__main__":
test_publish_invoice()
Bước 3: Quy trình Test tích hợp toàn bộ hệ thống bán vé của anh
Sau khi chạy file test độc lập ở Bước 2 thành công và nhận được link PDF hóa đơn giả lập, anh tiến hành ghép hàm đó vào app.py để test toàn luồng tự động từ lúc Mua vé $\rightarrow$ Chuyển tiền thật $\rightarrow$ Khớp lệnh SePay $\rightarrow$ Tự động xuất hóa đơn ký số:
Bật Live trên SePay nhưng trỏ Hóa đơn sang Demo: Giữ nguyên luồng nhận tiền thật từ MB Bank thông qua SePay như anh đang chạy ngon lành.
Kích hoạt luồng: Anh mở trang web lên, đặt mua một đơn vé (100.000đ).
Quét mã chuyển tiền thật: Anh dùng app ngân hàng chuyển thật 100.000đ vào tài khoản của anh.
Theo dõi Log Python: * SePay nhận được tiền thật $\rightarrow$ Bắn Webhook Live về máy chủ của anh.
Code Python đổi trạng thái vé sang
paid(Thành công nhảy giao diện màu xanh).Ngay lập tức, hàm
test_publish_invoice()được kích hoạt tự động để gửi dữ liệu đơn hàng sang hệ thống MISA/Viettel Demo và thực hiện ký số HSM thử nghiệm.
Kiểm tra kết quả: Anh mở link PDF hóa đơn trả về trong cửa sổ log. Nếu thấy file hóa đơn hiển thị đầy đủ thông tin khách hàng, số tiền 100.000đ kèm dòng chữ ký số hình con dấu đóng chuẩn chỉ nghĩa là hệ thống của anh đã hoàn hảo 100%.
Khi toàn bộ luồng test ở môi trường Demo này chạy trơn tru không lỗi, anh chỉ cần thay API_URL, Token/Key từ bản Demo sang bản Live (Thật) do nhà cung cấp bàn giao là hệ thống chính thức phát hành hóa đơn thật gửi lên Cục Thuế. Anh đã liên hệ lấy thông tin kết nối API từ bên nhà cung cấp hóa đơn nào chưa?

