Tích hợp Giao Hàng Tiết Kiệm vào EzyDelivery
Back to ezydeliveryBài viết này hướng dẫn cách kết nối EzyDelivery với Giao Hàng Tiết Kiệm (GHTK) để tạo đơn giao hàng trực tiếp từ trang quản trị, nhận mã vận đơn GHTK, và tự động cập nhật trạng thái đơn khi GHTK giao hàng.
Sau khi tích hợp xong, luồng làm việc sẽ như sau:
- Nhân viên tạo đơn giao hàng trong EzyDelivery với phương thức giao hàng Chuyển phát nhanh và chọn dịch vụ Giao Hàng Tiết Kiệm.
- EzyDelivery gửi đơn sang GHTK, nhận về mã vận đơn GHTK và in tem.
- Trong quá trình giao, GHTK gọi lại (webhook) về hệ thống, EzyDelivery cập nhật trạng thái đơn theo thời gian thực.
Chuẩn bị
Trước khi cấu hình, cần có:
| Thứ cần có | Ghi chú |
|---|---|
| Tài khoản cửa hàng trên GHTK | Đăng ký tại <https://khachhang.giaohangtietkiem.vn>.Sau khi đăng ký, lấy API Token trong phần cài đặt kết nối API của cửa hàng. |
| Đã hoàn thành phần Cài đặt ban đầu cho EzyDelivery | Đặc biệt là quốc gia nhận (Việt Nam) có đủ tỉnh/thành phố, quận/huyện, phường/xã, và kho nhận hàng có địa chỉ đầy đủ. |
Tiền tệ VND đã được kích hoạt | GHTK chỉ nhận tiền VND. Nếu đơn dùng tiền tệ khác (ví dụ CNY), cần có tỉ giá quy đổi sang VND, nếu không đơn sẽ gửi thất bại. |
| Trang web (web plugin) truy cập được từ Internet | Để GHTK gọi lại cập nhật trạng thái đơn. |
Cấu hình dịch vụ GHTK
Vào Thương mại điện tử → Các dịch vụ vận chuyển (
/ecommerce/delivery-services), tìm dòng GHTK và bấm sửa (hoặc mở thẳng /ecommerce/delivery-services/GHTK/edit).Điền các ô như sau:
| Ô | Giá trị | Ghi chú |
|---|---|---|
| Tên | Giao Hàng Tiết Kiệm | Tên hiển thị trong ô chọn dịch vụ khi tạo đơn. Không được trùng tên với dịch vụ khác. |
| Phiên bản | 1.5 | Phiên bản API tạo đơn của GHTK, được gửi kèm dạng ?ver=1.5. Bắt buộc điền, để trống thì không gửi được đơn. |
| Đường dẫn dịch vụ | https://giaohangtietkiem.vn | Chỉ để tham khảo, hiện EzyDelivery chưa tạo đường dẫn tra cứu hành trình cho GHTK. |
| Đường dẫn API dịch vụ | https://services.giaohangtietkiem.vn | Địa chỉ API của GHTK. Khi chạy thử với môi trường thử nghiệm của GHTK thì dùng địa chỉ thử nghiệm mà GHTK cung cấp. Không thêm dấu / ở cuối. |
| Đường dẫn gọi lại | https://<tên-miền-web-của-bạn>/callback/GHTK?hash=<khoá-máy-khách> | Để ghi nhớ địa chỉ đã khai báo với GHTK (xem phần Cấu hình webhook). |
| Khoá máy khách | Một chuỗi bí mật do bạn tự đặt | Chuỗi này được gắn vào đường dẫn webhook dưới dạng tham số hash. EzyDelivery dùng nó để xác thực, bắt buộc điền nếu muốn nhận cập nhật trạng thái. |
| Khoá bí mật | API Token của cửa hàng GHTK | Được gửi trong header Token mỗi lần tạo đơn. Bắt buộc điền. |
| Tên đăng nhập, Mật khẩu | Để trống | GHTK xác thực bằng token, không dùng tên đăng nhập và mật khẩu. |
| Trạng thái | ACTIVATED | Chỉ dịch vụ đang ACTIVATED mới xuất hiện khi tạo đơn. |
Các ô còn lại (logo, ảnh bìa, tiền tệ phí vận chuyển, phí vận chuyển tối thiểu, giá trị hàng hoá mặc định, ...) không bắt buộc cho GHTK.
Bấm Lưu.

Một số lưu ý:
- Khác với Viettel Post, khi lưu EzyDelivery không gọi thử sang GHTK, nên token sai vẫn lưu được. Lỗi token chỉ lộ ra ở lần gửi đơn đầu tiên, vì vậy nên tạo thử một đơn sau khi cấu hình.
- Token GHTK không tự hết hạn. Khi tạo lại token trên trang GHTK, nhớ cập nhật lại ô Khoá bí mật.
- Khi sửa các ô khác, cứ để nguyên ô Khoá bí mật đang hiển thị dạng ẩn, hệ thống sẽ giữ giá trị cũ.
Đặt làm dịch vụ mặc định (tuỳ chọn)
Ở trang danh sách Các dịch vụ vận chuyển, có thể đặt
GHTK làm dịch vụ mặc định. Dịch vụ mặc định sẽ được chọn sẵn khi tạo đơn giao hàng.Ánh xạ tiền tố đơn vị hành chính
GHTK nhận diện địa chỉ dựa trên tên tỉnh, quận, phường dạng văn bản, nên tên đơn vị hành chính cần có tiền tố quen thuộc như
TP., Q., P.. Khi gửi đơn, EzyDelivery ghép tên đơn vị hành chính theo mẫu ánh xạ tiền tố của từng dịch vụ vận chuyển.Mẫu cho GHTK được tạo tự động khi plugin EzyDelivery (admin) khởi động, và hiển thị ở ô Ánh xạ giữa kiểu và tiền tố địa giới hành chính trên trang sửa dịch vụ. Nội dung mặc định:
[
{ "type": "PROVINCE", "prefix": "T." },
{ "type": "CITY", "prefix": "TP." },
{ "type": "DISTRICT_IN_CITY", "prefix": "Q." },
{ "type": "DISTRICT_IN_PROVINCE", "prefix": "H." },
{ "type": "TOWN_IN_PROVINCE", "prefix": "TX." },
{ "type": "WARD", "prefix": "X." },
{ "type": "WARD_IN_CITY", "prefix": "P." },
{ "type": "TOWN", "prefix": "TT." }
]
Mỗi dòng gồm:
-
type: loại đơn vị hành chính, khớp với loại bạn chọn khi tạo tỉnh/thành phố, quận/huyện, phường/xã trên trang quốc gia. -
prefix: tiền tố được thêm trước tên đơn vị khi gửi sang GHTK. Ví dụ phườngBến Nghécó loạiWARD_IN_CITYsẽ thànhP. Bến Nghé.
Thông thường không cần sửa mẫu này. Chỉ sửa khi GHTK báo không nhận diện được địa chỉ, hoặc khi bạn dùng thêm loại đơn vị hành chính khác. Nếu xoá mẫu, lần khởi động sau hệ thống sẽ tạo lại với nội dung mặc định.
Ngoài tỉnh, quận, phường, GHTK còn yêu cầu trường thôn/ấp/xóm/tổ (
hamlet). EzyDelivery luôn gửi giá trị mặc định là Khác, nên bạn không cần nhập thông tin này cho người nhận.Cấu hình webhook trên GHTK
Để trạng thái đơn tự cập nhật, cần khai báo webhook trên trang quản lý cửa hàng GHTK (mục cấu hình đường dẫn nhận cập nhật trạng thái đơn hàng):
| Ô trên GHTK | Giá trị |
|---|---|
| Đường dẫn (URL) | https://<tên-miền-web-của-bạn>/callback/GHTK?hash=<khoá-máy-khách> |
Trong đó
<khoá-máy-khách> phải giống hệt giá trị ô Khoá máy khách đã điền ở trang cấu hình dịch vụ. Ví dụ nếu khoá máy khách là abc123xyz thì đường dẫn là:https://shop.example.com/callback/GHTK?hash=abc123xyz
Một số điểm cần biết về webhook:
- Đường dẫn trên thuộc trang web (web plugin), không phải trang quản trị. Tên miền phải truy cập được từ Internet và nên dùng
https. - Mỗi lần nhận webhook, EzyDelivery kiểm tra tham số
hashtrên đường dẫn. Thiếuhashsẽ bị từ chối với lỗihash: required,hashkhông khớp Khoá máy khách sẽ bị từ chối với lỗihash: invalid. - Nếu chưa điền Khoá máy khách mà GHTK vẫn gọi webhook, hệ thống sẽ báo lỗi
no ghtk client key. - Dữ liệu GHTK gửi về phải có
partner_idvàstatus_id, nếu thiếu sẽ bị từ chối (partnerId: required,statusId: required). - EzyDelivery chỉ chấp nhận cập nhật cho đơn mà nó đã tạo và có mã vận đơn khớp với
label_idGHTK gửi về. Các đơn tạo trực tiếp trên trang GHTK sẽ bị bỏ qua (trả vềdeliveryOrder: notFound).
Tạo đơn giao hàng qua GHTK
Khi khách hàng có yêu cầu giao hàng với phương thức Chuyển phát nhanh:
- Vào Các yêu cầu giao hàng (
/ezydelivery/shipping-requests) và mở yêu cầu cần giao. - Bấm Tạo vận đơn, kiểm tra Tổng số cân (kg).
- Ở ô Dịch vụ vận chuyển, chọn Giao Hàng Tiết Kiệm (chỉ hiện khi phương thức giao hàng là chuyển phát nhanh).
- Bấm Tạo hoặc Tạo và hoàn thành.
Khi gửi đơn, EzyDelivery tự xử lý các việc sau:
| Việc | Cách làm |
|---|---|
| Địa chỉ lấy hàng | Nếu đơn có nhập địa chỉ người gửi thì dùng địa chỉ đó. Nếu không, dùng địa chỉ của kho gửi hàng (tỉnh, quận, phường, địa chỉ chi tiết). Kho không có quận/huyện vẫn gửi được. |
| Địa chỉ người nhận | Dùng tỉnh, quận, phường đã chọn của người nhận. Nếu thiếu một trong ba, hệ thống tách từ địa chỉ đầy đủ của người nhận. |
| Mã đơn gửi sang GHTK | Ghép từ mã đơn trong EzyDelivery và thời điểm gửi, nên mỗi lần gửi lại là một mã mới, không bị GHTK báo trùng. |
| Ngày lấy hàng | Dùng ngày giao của đơn nếu có, nếu không thì lấy ngày hiện tại. |
| Hình thức vận chuyển | Để GHTK tự chọn (đường bộ hoặc đường bay) theo cấu hình mặc định của cửa hàng. |
| Sản phẩm | Gửi tên, mã sản phẩm, số lượng và khối lượng (đổi sang kg, làm tròn xuống 1 chữ số thập phân). Sản phẩm chưa có số lượng sẽ không được gửi. |
| Quy đổi tiền | Giá trị hàng và tiền thu hộ được quy đổi sang VND theo tỉ giá hiện có. |
| Thu hộ (COD) và người trả phí | Xác định theo bảng bên dưới. |
Cách xác định tiền thu hộ và người trả phí vận chuyển:
| Đơn đã thanh toán? | Người trả phí vận chuyển | GHTK thu của người nhận |
|---|---|---|
| Đã thanh toán | Người gửi | Không thu gì |
| Đã thanh toán | Người nhận | Chỉ thu phí vận chuyển |
| Chưa thanh toán | Người gửi | Chỉ thu tiền hàng (COD) |
| Chưa thanh toán | Người nhận | Thu cả tiền hàng và phí vận chuyển |
Nhãn đặc tính hàng hoá
GHTK dùng nhãn (tag) để biết cách xử lý hàng đặc biệt. EzyDelivery tự gắn nhãn dựa trên đặc tính đã khai báo cho từng sản phẩm, chỉ cần một sản phẩm trong đơn có đặc tính đó là cả đơn được gắn nhãn:
| Đặc tính sản phẩm | Nhãn GHTK |
|---|---|
| Hàng dễ vỡ | 1 |
| Hàng giá trị cao | 2 |
| Nông sản hoặc thực phẩm khô | 7 |
| Nguyên hộp | 20 |
| Tài liệu | 22 |
| Hạn sử dụng ngắn | 39 |
| Hàng nhỏ | 40 |
| Cần giữ đúng chiều | 42 |
Kết quả gửi đơn
- Thành công: đơn chuyển sang trạng thái Đã gửi yêu cầu, mã vận đơn GHTK (
label) được lưu làm mã vận đơn của đơn, và tem được in ngay. Các thông tin GHTK trả về (phí vận chuyển, phí bảo hiểm, thời gian lấy và giao dự kiến, mã phân loại, ca lấy và ca giao, ...) được lưu kèm đơn. - Thất bại: đơn chuyển sang trạng thái Gửi yêu cầu thất bại, nội dung lỗi GHTK trả về (thông báo, mã lỗi, mã log) được lưu vào đơn để xem lại. Sau khi sửa nguyên nhân có thể gửi lại.
Cập nhật trạng thái đơn
Mỗi lần GHTK gọi webhook, EzyDelivery cập nhật trạng thái đơn theo
status_id, thời điểm cập nhật theo action_time, và lưu mã trạng thái gốc của GHTK kèm đơn để tiện đối chiếu.Bảng ánh xạ trạng thái GHTK sang trạng thái trong EzyDelivery:
| Mã GHTK | Trạng thái trong EzyDelivery |
|---|---|
-1 | Bị huỷ |
1 | Đã gửi yêu cầu |
2 | Đã nhận yêu cầu |
3 | Đã lấy hàng |
4 | Đang giao hàng |
5 | Đã giao hàng |
6 | Đã đối soát |
7 | Không lấy được hàng |
8 | Hoãn lấy hàng |
9 | Không giao được hàng |
10 | Chậm giao hàng |
11 | Đã đối soát công nợ trả hàng |
12 | Đang lấy hàng |
13 | Đơn hàng bồi hoàn |
20 | Đang trả hàng |
21 | Bị trả lại |
45 | Đã giao hàng |
49 | Không giao được hàng |
123 | Đã lấy hàng |
127 | Không lấy được hàng |
128 | Đang lấy hàng |
410 | Chậm giao hàng |
Mã trạng thái không có trong bảng sẽ được ghi nhận là không xác định.
Hiện EzyDelivery chưa tạo đường dẫn tra cứu hành trình cho đơn GHTK. Khách hàng có thể tra cứu bằng mã vận đơn trên trang <https://giaohangtietkiem.vn>.
Xử lý sự cố thường gặp
| Hiện tượng | Nguyên nhân thường gặp | Cách xử lý |
|---|---|---|
| Không thấy Giao Hàng Tiết Kiệm khi tạo đơn | Dịch vụ chưa ACTIVATED, hoặc phương thức giao hàng không phải chuyển phát nhanh | Kích hoạt dịch vụ, kiểm tra lại phương thức giao hàng của yêu cầu. |
Gửi đơn thất bại với lỗi deliveryServiceNotSetup | Thiếu Phiên bản, Đường dẫn API dịch vụ hoặc Khoá bí mật | Điền đủ các ô và lưu lại cấu hình. |
| Gửi đơn thất bại, GHTK báo token không hợp lệ | Sai API Token, token đã bị tạo lại, hoặc dùng token môi trường thử nghiệm với API thật (và ngược lại) | Lấy lại token trên trang GHTK, kiểm tra Đường dẫn API dịch vụ đúng môi trường. |
Gửi đơn thất bại với lỗi noCurrencyVND | Chưa có tiền tệ VND | Kích hoạt tiền tệ VND. |
| Gửi đơn thất bại do không quy đổi được tiền | Thiếu tỉ giá từ tiền tệ của đơn sang VND | Thêm tỉ giá trong Thương mại điện tử. |
| Gửi đơn thất bại, GHTK báo sai địa chỉ | GHTK không nhận diện được tỉnh, quận, phường của địa chỉ lấy hàng hoặc người nhận | Kiểm tra tỉnh, quận, phường của kho và người nhận, kiểm tra mẫu ánh xạ tiền tố. |
| Gửi đơn thất bại, GHTK báo lỗi khối lượng | Sản phẩm chưa khai báo khối lượng, hoặc khối lượng quá nhỏ nên sau khi làm tròn bằng 0 | Khai báo khối lượng cho sản phẩm. |
| Trạng thái đơn không tự cập nhật | Chưa khai báo webhook, thiếu hoặc sai tham số hash, hoặc tên miền web không truy cập được từ Internet | Kiểm tra lại phần Cấu hình webhook. |