Hướng dẫn sử dụng Viettel Post sandbox sau khi cài đặt
Back to viettel post sandbox
Updated at
1793244606000
Viettel Post Sandbox giúp bạn phát triển và kiểm thử luồng kết nối Viettel Post ngay trên EzyPlatform trước khi chuyển sang môi trường thật. Plugin không tạo vận đơn thật và không phát sinh hoạt động giao nhận thực tế.
Trước khi bắt đầu
Hướng dẫn này giả định rằng bạn đã tải Viettel Post Sandbox từ chợ EzyPlatform, cài đặt thành công cả admin plugin và web plugin, sau đó khởi động lại EzyPlatform.
Plugin phụ thuộc vào Ecommerce. Hãy bảo đảm Ecommerce đã được cài đặt và hoạt động trước khi sử dụng Viettel Post Sandbox.
Trong các ví dụ bên dưới,
<WEB_URL> là địa chỉ web EzyPlatform của bạn, chẳng hạn http://localhost:8080 hoặc https://example.com.Kiểm tra plugin đã hoạt động
Đăng nhập EzyPlatform Admin, mở menu Viettel Post Sandbox, sau đó chọn Cài đặt (Settings).

- Menu Viettel Post Sandbox > Cài đặt trong EzyPlatform Admin.
- Hai đường dẫn Xem mở tài liệu Swagger (
<WEB_URL>/viettel-post-sandbox/swagger) và trang quản lý vận đơn sandbox (<WEB_URL>/viettel-post-sandbox/quan-ly-van-don).
Nếu trang Swagger mở được và trang quản lý vận đơn chuyển tới trang đăng nhập sandbox thì plugin đã sẵn sàng để sử dụng. Đường dẫn cũ
<WEB_URL>/viettel-post-sandbox/delivery-orders vẫn dùng được và sẽ tự chuyển tới trang quản lý vận đơn mới.
Để tự gọi API và tạo vận đơn đầu tiên, xem Các bước tạo đơn Viettel Post.
Tài khoản sandbox
Mỗi vận đơn trong sandbox thuộc về một tài khoản sandbox, giống như trên Viettel Post mỗi vận đơn thuộc về một tài khoản khách hàng. Phần này giải thích tài khoản được tạo ra như thế nào và cách đăng nhập để xem vận đơn của tài khoản đó.
Tài khoản được tạo tự động
Bạn không cần đăng ký tài khoản sandbox trước. Tài khoản được tạo tự động ở lần đầu tiên:
- ứng dụng của bạn gọi API
/user/loginhoặc/user/ownerconnectvớiUSERNAMEvàPASSWORD; - hoặc bạn đăng nhập trên trang web sandbox bằng một số điện thoại chưa tồn tại.
Nên dùng một số điện thoại giả lập làm username và không dùng tài khoản hoặc mật khẩu thật.
Đăng nhập trang web sandbox
Mở
<WEB_URL>/viettel-post-sandbox/dang-nhap và nhập:- Số điện thoại/Email: đúng
USERNAMEmà ứng dụng của bạn gửi tới API/user/login; - Mật khẩu: đúng
PASSWORDmà ứng dụng đã gửi.
- Ô Số điện thoại/Email và Mật khẩu: nhập đúng
USERNAMEvàPASSWORDmà ứng dụng gửi tới API/user/login. - Ghi chú của sandbox: lần đăng nhập đầu tiên bằng một số điện thoại chưa có sẽ tự động tạo tài khoản.
Sau khi đăng nhập, bạn chỉ thấy các vận đơn được tạo bằng token của tài khoản này. Sandbox không hỗ trợ khôi phục mật khẩu: nếu quên mật khẩu, hãy dùng lại mật khẩu mà ứng dụng gửi tới API hoặc đăng nhập bằng một số điện thoại khác.
Thanh menu của trang web sandbox gồm Quản lý vận đơn, Cài đặt tài khoản và Tài liệu API (Swagger).
Quản lý vận đơn
Trang Quản lý vận đơn (
<WEB_URL>/viettel-post-sandbox/quan-ly-van-don) mô phỏng trang quản lý vận đơn của Viettel Post: bạn xem các vận đơn ứng dụng đã tạo, rồi tự đổi trạng thái của chúng để kiểm thử việc nhận webhook.Danh sách vận đơn

- Ô tìm kiếm theo mã vận đơn, mã đơn hàng hoặc số điện thoại người nhận.
- Thanh công cụ: chọn một hoặc nhiều vận đơn ở cột đầu tiên rồi bấm Cập nhật trạng thái hoặc Hủy đơn; Tài liệu API mở Swagger.
- Số đơn theo từng nhóm: Tổng số đơn, Chờ lấy, Lấy thành công, Giao thành công, Hủy lấy.
- Lọc theo nhóm trạng thái: Chờ lấy hàng, Đang lấy hàng, Đã lấy hàng, Đang vận chuyển, Đang giao hàng, Giao thành công, Đang chuyển hoàn, Đã chuyển hoàn, Đã hủy.
- Mã vận đơn và liên kết Xem chi tiết của từng vận đơn.
Chi tiết vận đơn
Trang chi tiết hiển thị người gửi, người nhận, dịch vụ vận chuyển, phí và tiền thu hộ, thông tin hàng hóa và ghi chú của vận đơn.

- Nơi nhận webhook của vận đơn kèm Nguồn cấu hình của nơi nhận đó, và liên kết tới Cấu hình webhook.
- Hành trình đơn: lịch sử các trạng thái đã cập nhật, mới nhất ở trên cùng.
- Cập nhật trạng thái cho vận đơn này. Nút Hủy đơn cũng xuất hiện ở đây khi vận đơn còn hủy được.
Cập nhật trạng thái và gửi webhook
Khi chọn Cập nhật trạng thái ở danh sách hoặc trang chi tiết, hộp thoại cập nhật trạng thái hiện ra:

- Trạng thái mới: một trong các mã trạng thái của Viettel Post, ví dụ
105Bưu tá đã lấy hàng,200Bưu cục gốc đã nhận từ bưu tá,501Giao hàng thành công. - Tên trạng thái (STATUS_NAME): tự điền theo trạng thái đã chọn, có thể sửa lại.
- Vị trí hiện tại, Ghi chú, Tên bưu tá, SĐT bưu tá: không bắt buộc, được gửi kèm trong webhook.
- Cập nhật và gửi webhook.
Khi bấm Cập nhật và gửi webhook, sandbox đổi trạng thái vận đơn, ghi vào hành trình đơn và gửi webhook tới nơi nhận của vận đơn giống như Viettel Post. Kết quả gửi (thành công hay thất bại, mã HTTP và nội dung phản hồi) được hiển thị ngay để bạn kiểm tra hệ thống nhận webhook. Nơi nhận webhook được xác định như mô tả trong mục Cấu hình webhook của phần Cài đặt tài khoản bên dưới.
Hủy đơn chỉ áp dụng cho vận đơn đang chờ lấy hàng hoặc đang lấy hàng. Vận đơn bị hủy chuyển sang trạng thái
107 Đối tác yêu cầu hủy qua API và cũng gửi webhook. Các vận đơn không thể hủy được báo lại sau khi thực hiện.Cài đặt tài khoản
Trang Cài đặt tài khoản (
<WEB_URL>/viettel-post-sandbox/cau-hinh-tai-khoan) có ba mục ở cột bên trái: thông tin tài khoản, quản lý token và cấu hình webhook.Thông tin tài khoản
Hiển thị tên, số điện thoại và email của tài khoản sandbox đang đăng nhập.
Quản lý token
Ngoài cách đăng nhập bằng username và password, bạn có thể tạo token cố định để dùng làm Secret Key khi kết nối qua API
/user/LoginVTP, giống token khách hàng lấy từ trang Viettel Post:
- Mục Quản lý token.
- Thêm mới token: nhập tên token rồi tạo.
- Mỗi token có tên và giá trị được ẩn mặc định; bấm biểu tượng con mắt để hiện hoặc ẩn. Các nút bên phải lần lượt là Làm mới token (tạo token mới, token cũ không dùng được nữa), Sao chép token và Xóa token.
Các vận đơn tạo bằng token này thuộc tài khoản hiện tại. Cách gọi API xem trong Các bước tạo đơn Viettel Post.
Cấu hình webhook
Mục này cho biết sandbox sẽ gửi webhook tới đâu khi vận đơn đổi trạng thái. Trong đa số trường hợp bạn không cần nhập gì.

- URL nhận webhook tự động cùng nguồn cấu hình và token xác thực.
- Cấu hình riêng: Đường dẫn API nhận webhook và Token xác thực webhook (TOKEN), bấm Lưu để áp dụng.
- Xóa cấu hình riêng để quay lại dùng URL tự động.
URL nhận webhook tự động: nếu trên cùng EzyPlatform này, dịch vụ Viettel Post của Ecommerce đang dùng sandbox làm Service API URL (xem phần tiếp theo), sandbox tự lấy:
- Callback URL của dịch vụ đó làm URL nhận webhook; nếu để trống thì dùng
<WEB_URL>/delivery/callback/<mã dịch vụ>, ví dụ<WEB_URL>/delivery/callback/VIETTEL_POST; - Client Key của dịch vụ đó làm token xác thực webhook.
Nếu không tìm thấy dịch vụ nào như vậy, mục này báo Không tìm thấy.
Cấu hình riêng (không bắt buộc): chỉ cần nhập khi hệ thống nhận webhook không phải Ecommerce trên EzyPlatform này:
- Đường dẫn API nhận webhook: endpoint nhận callback của ứng dụng;
- Token xác thực webhook (TOKEN): chuỗi bí mật do bạn tự đặt.
Nếu nhập, URL này được ưu tiên cho mọi vận đơn của tài khoản. Bấm Xóa cấu hình riêng để quay lại dùng URL tự động.
Thứ tự sandbox chọn nơi nhận webhook cho một vận đơn:
- cấu hình riêng của tài khoản, nếu có;
- nơi nhận đã được lưu vào vận đơn lúc tạo đơn;
- URL nhận webhook tự động từ cấu hình Viettel Post của Ecommerce.
Webhook token không phải số điện thoại và không phải access token nhận được từ API đăng nhập. Webhook được gửi bằng
POST với payload có dạng:
{
"DATA": {
"ORDER_NUMBER": "ORDER-SANDBOX-001",
"ORDER_REFERENCE": "DELIVERY-REFERENCE",
"ORDER_STATUS": 200,
"ORDER_STATUSDATE": "11/09/2026 10:30:00",
"STATUS_NAME": "Nhận từ bưu tá - Bưu cục gốc",
"LOCALION_CURRENTLY": "Bưu cục Mễ Trì - Hà Nội",
"NOTE": "",
"MONEY_COLLECTION": 200000,
"MONEY_TOTAL": 16500,
"ORDER_SERVICE": "PHS",
"EMPLOYEE_NAME": "",
"EMPLOYEE_PHONE": ""
},
"TOKEN": "your-webhook-secret"
}
Ứng dụng nhận webhook nên kiểm tra trường
TOKEN trước khi xử lý dữ liệu. EzyDelivery chấp nhận token trong header Token hoặc trường TOKEN của JSON; Viettel Post Sandbox gửi token trong JSON.Cấu hình Ecommerce/EzyDelivery sử dụng sandbox
Nếu bạn sử dụng module giao vận của EzyPlatform thay vì tự gọi API, mở dịch vụ vận chuyển Viettel Post trong Ecommerce (ví dụ
VIETTEL_POST hoặc VIETTEL_POST_SMALL), bấm Sửa và thiết lập như hình dưới.
- Phiên bản:
v2. - Đường dẫn API dịch vụ (Service API URL):
<WEB_URL>/viettel-post-sandbox/v2. - Đường dẫn gọi lại (Callback URL): URL callback của dịch vụ do Ecommerce cung cấp; để trống thì dùng
<WEB_URL>/delivery/callback/<mã dịch vụ>. - Khoá máy khách (Client Key): webhook token do bạn tự đặt.
- Tên đăng nhập và Mật khẩu: số điện thoại sandbox bạn muốn sử dụng và một mật khẩu sandbox không rỗng.
Ở lần kết nối đầu tiên, plugin tự động tạo tài khoản sandbox từ Username và Password được cấu hình. Đăng nhập trang web sandbox bằng chính Username và Password này để xem các vận đơn mà Ecommerce tạo ra.
Vì Service API URL trỏ tới sandbox, webhook được cấu hình tự động: sandbox gửi về Callback URL của dịch vụ với token là Client Key, bạn không cần nhập gì thêm trong mục Cấu hình webhook.
Module giao vận sẽ tự:
- đăng nhập và làm mới token khi cần;
- tìm dịch vụ phù hợp theo địa chỉ;
- lấy thông tin cửa hàng;
- tạo vận đơn qua sandbox;
- lưu mã vận đơn và thông tin phí vào đơn giao hàng.
Không thêm
/viettel-post-sandbox/v2 lần thứ hai vào URL. Ví dụ, nếu Service API URL là https://example.com/viettel-post-sandbox/v2, module sẽ tự nối thêm /user/login, /order/getPriceAllNlp hoặc /order/createOrder.
Lỗi thường gặp
Phần này liệt kê các lỗi hay gặp khi cài đặt, đăng nhập, tạo vận đơn và gửi webhook cùng cách kiểm tra.
Không mở được Swagger hoặc trang quản lý vận đơn
- Kiểm tra cả admin plugin và web plugin đã được cài.
- Kiểm tra dependency Ecommerce đã được cài.
- Khởi động lại EzyPlatform sau khi cài plugin.
- Kiểm tra lại
<WEB_URL>và cấu hình domain của EzyPlatform.
Đăng nhập trang web sandbox nhưng không thấy vận đơn
- Đăng nhập bằng đúng
USERNAMEvàPASSWORDmà ứng dụng hoặc Ecommerce dùng để gọi/user/login. - Nếu ứng dụng kết nối bằng token qua
/user/LoginVTP, đăng nhập bằng tài khoản đã tạo token đó. - Nếu bị báo sai mật khẩu, số điện thoại đó đã có tài khoản sandbox với mật khẩu khác.
EzyDelivery không tạo được vận đơn
- Kiểm tra Service API URL kết thúc bằng
/viettel-post-sandbox/v2. - Kiểm tra Username và Password không để trống.
- Kiểm tra thông tin kho, sản phẩm, người nhận và địa chỉ trên đơn hàng.
- Mở Swagger và thử luồng API trực tiếp để xác định bước gặp lỗi.
Không gửi được webhook
- Nếu báo chưa xác định được URL nhận webhook, cấu hình dịch vụ Viettel Post của Ecommerce dùng sandbox làm Service API URL, hoặc nhập cấu hình riêng trong Cài đặt tài khoản > Cấu hình webhook.
- Xem mã HTTP và nội dung phản hồi trong kết quả gửi webhook để biết hệ thống nhận trả lỗi gì.
- Nếu hệ thống nhận báo lỗi token, kiểm tra token xác thực webhook giống chính xác Client Key của dịch vụ Viettel Post trong Ecommerce. Giá trị này khác với token đăng nhập sandbox.
Khi chuyển sang môi trường Viettel Post thật
Sandbox chỉ phục vụ phát triển và kiểm thử. Trước khi chạy production, bạn cần:
- thay Service API URL bằng URL chính thức của Viettel Post;
- sử dụng tài khoản hoặc token do Viettel Post cấp;
- đăng ký callback URL với Viettel Post;
- cấu hình đúng client key dùng để xác thực webhook;
- kiểm tra lại mã dịch vụ, địa giới hành chính, cửa hàng và quy tắc tính phí;
- kiểm thử lại toàn bộ request, response, timeout, retry và xử lý lỗi;
- không chuyển dữ liệu mẫu hoặc token sandbox sang production.