Bà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:
  1. 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.
  2. EzyDelivery gửi đơn sang GHTK, nhận về mã vận đơn GHTK và in tem.
  3. 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ạtGHTK 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ênGiao Hàng Tiết KiệmTê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ản1.5Phiê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.vnChỉ để 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ạihttps://<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áchMột chuỗi bí mật do bạn tự đặtChuỗ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ậtAPI 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ốngGHTK xác thực bằng token, không dùng tên đăng nhập và mật khẩu.
Trạng tháiACTIVATEDChỉ 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.
Screenshot 2026-10-09 at 10.45.01.png
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ường Bến Nghé có loại WARD_IN_CITY sẽ thành P. 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 GHTKGiá 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ố hash trên đường dẫn. Thiếu hash sẽ bị từ chối với lỗi hash: required, hash không khớp Khoá máy khách sẽ bị từ chối với lỗi hash: 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_id và 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_id GHTK 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:
  1. Vào Các yêu cầu giao hàng (/ezydelivery/shipping-requests) và mở yêu cầu cần giao.
  2. Bấm Tạo vận đơn, kiểm tra Tổng số cân (kg).
  3. Ở ô 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).
  4. 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ệcCách làm
Địa chỉ lấy hàngNế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ậnDù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 GHTKGhé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àngDù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ẩmGử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ềnGiá 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ểnGHTK thu của người nhận
Đã thanh toánNgười gửiKhông thu gì
Đã thanh toánNgười nhậnChỉ thu phí vận chuyển
Chưa thanh toánNgười gửiChỉ thu tiền hàng (COD)
Chưa thanh toánNgười nhậnThu 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ẩmNhãn GHTK
Hàng dễ vỡ1
Hàng giá trị cao2
Nông sản hoặc thực phẩm khô7
Nguyên hộp20
Tài liệu22
Hạn sử dụng ngắn39
Hàng nhỏ40
Cần giữ đúng chiều42

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ã GHTKTrạng thái trong EzyDelivery
-1Bị 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
7Không lấy được hàng
8Hoãn lấy hàng
9Không giao được hàng
10Chậ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
21Bị trả lại
45Đã giao hàng
49Không giao được hàng
123Đã lấy hàng
127Không lấy được hàng
128Đang lấy hàng
410Chậ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ượngNguyên nhân thường gặpCách xử lý
Không thấy Giao Hàng Tiết Kiệm khi tạo đơnDịch vụ chưa ACTIVATED, hoặc phương thức giao hàng không phải chuyển phát nhanhKí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 deliveryServiceNotSetupThiế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 noCurrencyVNDChưa có tiền tệ VNDKích hoạt tiền tệ VND.
Gửi đơn thất bại do không quy đổi được tiềnThiếu tỉ giá từ tiền tệ của đơn sang VNDThê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ậnKiể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ượngSả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 0Khai báo khối lượng cho sản phẩm.
Trạng thái đơn không tự cập nhậtChư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ừ InternetKiểm tra lại phần Cấu hình webhook.