Vận chuyển

Kết nối GHN bằng OTP

Kết nối tài khoản Giao Hàng Nhanh không cần dán token: xác minh bằng OTP gửi tới SĐT chủ shop

Ngoài cách dán Token API + ShopId, shop có thể kết nối GHN bằng OTP: GHN gửi mã OTP tới số điện thoại chủ shop; sau khi nhập đúng OTP, Hubport được GHN cho phép thao tác trên shop GHN đó (shop có sẵn, hoặc GHN tạo shop mới cho chủ shop). Shop không phải cung cấp token.

Workflow & Logic

  1. Tạo carrier với api_type = 19 (GHN). Không cần token.
  2. Gọi POST /v1/shippingcarriers/:id/ghnotp với SĐT chủ shop (SĐT đăng ký tài khoản GHN). GHN gửi OTP qua SMS.
  3. Gọi POST /v1/shippingcarriers/:id/ghnconnect với SĐT + OTP:
    • Truyền shop_id (ShopId GHN có sẵn của chủ shop) để gắn vào shop đó.
    • Không truyền shop_id thì GHN tạo shop mới; có thể truyền address, district_id, ward_code (mã địa chính của GHN) cho shop mới.
  4. Thành công: carrier chuyển sang connect_mode = affiliate, shop_id được ghi theo shop đã xác minh. Chi tiết carrier có thêm ghn_connection.

Tiền COD

GHN đối soát COD trực tiếp với chủ shop. Hubport không giữ tiền COD.

1. Gửi OTP

POST /v1/shippingcarriers/:id/ghnotp

Quyền: setting.sale

Request Body

TrườngKiểuBắt buộcMô tả
company_idintCóID công ty
phonestringCóSĐT chủ shop GHN

Response (HTTP 200)

TrườngKiểuMô tả
ttlintThời gian hiệu lực của OTP (giây) do GHN trả về

Giới hạn gửi OTP: mỗi carrier và mỗi SĐT 1 lần / 60 giây; mỗi công ty tối đa 20 lần / giờ.

2. Xác nhận OTP và kết nối

POST /v1/shippingcarriers/:id/ghnconnect

Quyền: setting.sale

Request Body

TrườngKiểuBắt buộcMô tả
company_idintCóID công ty
phonestringCóSĐT đã nhận OTP
otpstringCóMã OTP (4–8 chữ số)
shop_idintKhôngShopId GHN có sẵn để gắn. Bỏ trống để GHN tạo shop mới
addressstringKhôngĐịa chỉ shop mới (khi không truyền shop_id)
district_idintKhôngMã quận/huyện theo GHN của shop mới
ward_codestringKhôngMã phường/xã theo GHN của shop mới

Response (HTTP 200)

Shipping Carrier Object sau khi kết nối, kèm ghn_connection:

{
  "id": 12,
  "api_type": 19,
  "name": "GHN",
  "status": 1,
  "api_setting": {
    "issandbox": 0,
    "connect_mode": "affiliate",
    "token": "",
    "shop_id": 885123,
    "...": "..."
  },
  "ghn_connection": {
    "shop_id": 885123,
    "client_id": 2509001,
    "is_sandbox": 0,
    "phone_masked": "090****000",
    "mode": "with_shop",
    "date_created": 1760000000
  }
}

mode: with_shop (gắn shop có sẵn) hoặc create (GHN tạo shop mới).

Error Codes

Mã lỗiMô tả
error_api_type_invalidCarrier không phải GHN (HTTP 422)
error_ghn_phone_invalidSĐT không hợp lệ (HTTP 422)
error_ghn_otp_too_frequentGửi OTP quá nhiều lần, thử lại sau (HTTP 422)
error_ghn_otp_failedGHN không gửi được OTP (HTTP 422)
error_ghn_otp_invalidThiếu hoặc sai định dạng OTP (HTTP 422)
error_ghn_otp_too_many_attemptsNhập OTP sai quá nhiều lần (HTTP 422)
error_ghn_shop_already_connectedShop GHN này đã được kết nối (HTTP 422)
error_ghn_affiliate_check_shop_before_retryGHN lỗi khi tạo shop mới; kiểm tra trên GHN xem shop đã được tạo chưa trước khi thử lại (HTTP 422)
error_ghn_connect_failedKết nối thất bại (HTTP 422)
error_not_foundCarrier không tồn tại hoặc không thuộc công ty của bạn (HTTP 404)
error_role_not_availableKhông có quyền setting.sale (HTTP 403)

Ngoài các mã trên, thông báo lỗi do GHN trả về cũng được chuyển tiếp trong mảng error.

On this page