# 全局配置

# 全局配置
#### **API域名：**
`//label-api.last-mile.com.cn`
#### **API版本：**
    正式环境：/v1
    测试环境：/test
    示例：//label-api.last-mile.com.cn/test/接口名
#### **访问方式**
    POST
    GET
#### **请求头**
	Content-Type: application/x-www-form-urlencoded
#### **请求体格式**
	urlencoded
#### **全局参数**
    Authorization: Bearer <Token> 
说明：HTTP鉴权通过 Bearer 令牌认证。令牌 Token 通过API：/auth/token获取，后续API的请求头增加 Authorization: Bearer <Token> 以传递访问令牌，通过令牌鉴权后执行程序。
#### **响应格式**
```json
{
	"err_code": Int,
	"msg": String,
	"result": Json
}
```

#### **全局错误码表**
|code错误码|msg描述|
| :------------: | ------------ |
|200|操作成功|
|400|操作失败，参数错误，请检查请求参数或提交请求报文给客服|
|401|API鉴权失败，请通过/auth/token获取Token后再重试|
|402|操作失败，账户余额不足|
|403|服务器拒绝，无权访问|
|404|数据库中没有相关数据|
|421|获取用户配置失败，请联系客服|
|422|系统异常，请联系客服|
|500|服务端故障，请联系客服|
|502|无效的响应，请重试|
|503|服务器过载或者正在维护，请联系客服|
|其他|详见响应结果的msg|


---

# 获取App Token

# 获取App Token
[查看API域名](/doc/1.html "查看API域名")
#### 接口地址：
`/auth/token`
#### 请求方式：`POST`
#### 请求头：
|参数名|参数值|
| ------------ | ------------ |
|Content-Type|application/x-www-form-urlencoded|

#### 请求参数：
|参数名|参数值|描述|
| ------------ | ------------ | ------------ |
|app_key|string|AppKey|
|app_secret|string|AppSecret|

#### 响应结果：
|参数名|参数值|是否一定回传|描述|
| ------------ | ------------ | ------------ | ------------ |
|err_code|int|是|状态码，详见状态码表|
|msg|string|是|描述信息|
|result|string（JSON）|否，code为200回传 |结果（结果集）|

##### result结果集（code=200回传）：
|参数名|参数值|是否一定回传|描述|
| ------------ | ------------ | ------------ | ------------ |
|access_token|string|是|Token值|
|token_type|string|是|鉴权方式|
|remarks|string|是|备注|
|expires_in|int|是|Token有效期|

#### 响应示例：
###### 成功：
```json
{
	"err_code": 200,
	"msg": "Success",
	"result": {
		"access_token": "M1puImxeen2x1VucR3GRvXIDaXht5A3lG1wAoW9o0ixmGCKb2-QoCJFWnCHuwFhz",
		"token_type": "Bearer ",
		"remarks": "http请求头 Authorization: Bearer “access_token值”，Bearer后面有一个空格",
		"expires_in": 7200
	}
}
```
###### 失败：
```json
{
	"err_code": 401,
	"msg": "Invalid app_key or app_secret"
}
```

---

# 获取发货渠道地址

# 获取发货渠道地址
[查看API域名](/doc/1.html "查看API域名")
#### 接口地址：
`/customer-user/channel-list`
#### 请求方式：`POST、GET`
#### 请求头：
|参数名|参数值|
| ------------ | ------------ |
|Content-Type|application/x-www-form-urlencoded|
|Authorization|Bearer <Token>|

#### 请求参数：无

#### 响应结果：
|参数名|参数值|是否一定回传|描述|
| ------------ | ------------ | ------------ | ------------ |
|err_code|int|是|状态码，详见状态码表|
|msg|string|是|描述信息|
|result|string（JSON）|否，code为200回传 |结果（结果集）|

##### result结果集（code=200回传）：
|参数名|参数值|是否一定回传|描述|
| ------------ | ------------ | ------------ | ------------ |
|id|int|是|渠道ID|
|address_id|int|是|地址ID|
|is_default|int|是|是否默认（是：10，否：9）|
|remarks|string|是|渠道地址描述|
|product_code|string|是|渠道地址名|
|postal_code|int|是|发货地邮编（type=9时为空）|
|country|string|是|发货地国家（type=9时为空）|
|province|string|是|发货地洲（type=9时为空）|
|city|int|string|发货地城市（type=9时为空）|
|address_1|string|是|街道地址1（type=9时为空）|
|address_2|string|是|街道地址2（type=9时为空）|
|type|int|是|类型，仓库地址=>9，GOFO和UNI上门取件=>10|
|grouping_name|string|是|地址分组|

#### 响应示例：
###### 成功：
```json
{
	"err_code": "200",
	"success": true,
	"msg": "操作成功",
	"result": [
		{
			"id": "1",
			"address_id": "2",
			"is_default": "9",
			"remarks": "",
			"product_code": "FedEx-Economy-C-YM-08036",
			"address_1": "100 Lawrence Blvd",
			"address_2": "",
			"city": "Hainesport",
			"country": "US",
			"province": "NJ",
			"postal_code": "08036",
			"type": "9",
			"grouping_name": "美国西部"
		},
		{
			"id": "2",
			"address_id": "3",
			"is_default": "9",
			"remarks": "",
			"product_code": "YWHM-39FHD19",
			"address_1": "19",
			"address_2": "",
			"city": "Santa Ana",
			"country": "US",
			"province": "CA",
			"postal_code": "92707",
			"type": "9",
			"grouping_name": "美国西部"
		},
		{
			"id": "3",
			"address_id": "4",
			"is_default": "9",
			"remarks": "",
			"product_code": "GOFO-ATL",
			"address_1": "",
			"address_2": "",
			"city": "",
			"country": "",
			"province": "",
			"postal_code": "",
			"type": "10",
			"grouping_name": "美国东部"
		}
	]
}
```
###### 失败：
```json
{
	"err_code": 404,
	"msg": "未查询到可用发货渠道地址，请联系客服"
}
```

---

# 价格试算

# 价格试算
[查看API域名](/doc/1.html "查看API域名")
#### 接口地址：
`/order/rate`
#### 请求方式：`POST`
#### 请求头：
|参数名|参数值|
| ------------ | ------------ |
|Content-Type|application/x-www-form-urlencoded|
|Authorization|Bearer <Token>|

#### 请求参数：
|参数名|参数值|必填|描述|
| ------------ | ------------ | ------------ | ------------ |
|product_code|string|是|渠道地址名（在获取发货渠道地址API中获取）|
|currency_code|string|否|货币代码，如美元：USD。不填默认为USD|
|customer_order_num|string|是|客户订单号|
|shipper_name|string|是|发件人姓名|
|shipper_phone|int|是|发件人电话|
|shipper_postal_code|string|否|发件邮编，有申报需求的如(gofo、uniuni需传)|
|shipper_country|string|否|发件人国家，有申报需求的如(gofo、uniuni需传)|
|shipper_state|string|否|发件州，有申报需求的如(gofo、uniuni需传)|
|shipper_city|string|否|发件城市，有申报需求的如(gofo、uniuni需传)|
|shipper_add_1|string|否|发件地址1，有申报需求的如(gofo、uniuni需传)|
|shipper_add_2|string|否|发件地址2|
|shipper_company|string|否|发件人公司|
|unit|int|是|尺寸-重量单位: Lbs-Inch/Kgs-Cm (9=>Lbs-Inch,10=>Kgs-Cm)默认Kgs-Cm|
|target_name|string|是|收货人姓名|
|target_phone|string|是|收货人电话|
|target_postal_code|int|是|收货地邮编|
|target_country|string|是|收货地国家（如：US）|
|target_state|string|是|收货地洲|
|target_city|string|是|收货地城市|
|target_add_1|string|是|街道地址1|
|target_add_2|string|否|街道地址2|
|target_company|string|否|收货地公司|
|signature_service|string|否|签名服务: None/Normal signature/Adult signature (传值填写：-/SSF/ASS)|
|package_qty|int|是|包裹数量|
|packages|JSON[]|是|包裹信息|

##### **packages参数：**
|参数名|参数值|必填|描述|
| ------------ | ------------ | ------------ | ------------ |
|x|double|是|长|
|y|v|是|宽|
|z|double|是|高|
|net_weight|double|是|净重|
|qty|int|是|数量|
|seq|int|否|箱号|
|name_cn|string|否|申报中文名，有申报需求的如(gofo、uniuni需传)|
|name_en|string|否|申报英文名，有申报需求的如(gofo、uniuni需传)|
|declared_value|string|否|申报价格，有申报需求的如(gofo、uniuni需传)|
|declaring_unit|string|否|申报单位，有申报需求的如(gofo、uniuni需传)|
|declared_weight|string|否|申报重量，有申报需求的如(gofo、uniuni需传)|
|declared_quantity|string|否|申报数量，有申报需求的如(gofo、uniuni需传)|
|sku|string|否|SKU，有申报需求的如(gofo、uniuni需传)|
|remark|string|否|备注|

#### 响应结果：
|参数名|参数值|是否一定回传|描述|
| ------------ | ------------ | ------------ | ------------ |
|err_code|int|是|状态码，详见状态码表|
|msg|string|是|描述信息|
|result|string（JSON）|否，code为200回传 |结果（结果集）|

##### result结果集（code=200回传）：
|参数名|参数值|是否一定回传|描述|
| ------------ | ------------ | ------------ | ------------ |
|total|double|是|总费用|
|fee_list|string（JSON）|否|费用清单|
|rate_order_num|string|是|测价订单号|
|customer_order_num|string|是|客户订单号|

##### fee_list结果集（code=200回传）：
|参数名|参数值|是否一定回传|描述|
| ------------ | ------------ | ------------ | ------------ |
|name|string|是|费用名|
|sum|double|是|地址ID|
|zon_code|string|否|计费区间|

#### 响应示例：
###### 成功：
```json
{
	"success": true,
	"err_code": 200,
	"msg": "价格测算成功",
	"result": {
		"total": "7.07",
		"fee_list": [
			{
				"name": "快递费",
				"zon_code": "2",
				"sum": "5.94"
			},
			{
				"name": "燃油附加费",
				"zon_code": "2",
				"sum": "1.13"
			}
		],
		"rate_order_num": "RATE371529484479893504",
		"customer_order_num": "test1234567896069"
	}
}
```
###### 失败：
```json
{
	"err_code": 404,
	"msg": "错误描述"
}
```

---

# 创建运单

# 创建运单
[查看API域名](/doc/1.html "查看API域名")
#### 接口地址：
`/order/create-order`
#### 请求方式：`POST`
#### 请求头：
|参数名|参数值|
| ------------ | ------------ |
|Content-Type|application/x-www-form-urlencoded|
|Authorization|Bearer <Token>|

#### 请求参数：
|参数名|参数值|必填|描述|
| ------------ | ------------ | ------------ | ------------ |
|async|int|否|异步获取面单设置，9：不启用（默认），10：启用（可在用户后台->设置->异步设置中填入URL并启用）|
|product_code|string|是|渠道地址名（[在获取发货渠道地址API中获取](/doc/3.html "在获取发货渠道地址API中获取")）|
|type|int|否|类型，仓库地址=>9（传空或不传值则默认9），GOFO和UNI上门取件（一票一件）=>10（[在获取发货渠道地址API中获取](/doc/3.html "在获取发货渠道地址API中获取")）|
|currency_code|string|否|货币代码，如美元：USD。不填默认为USD|
|customer_order_num|string|是|客户订单号|
|rate_order_num|string|是|报价单号，由价格试算接口获取|
|shipper_name|string|是|发件人姓名|
|shipper_phone|int|是|发件人电话|
|shipper_postal_code|string|否|发件邮编，有申报需求的如(gofo、uniuni需传)|
|shipper_country|string|否|发件人国家，有申报需求的如(gofo、uniuni需传)|
|shipper_state|string|否|发件州，有申报需求的如(gofo、uniuni需传)|
|shipper_city|string|否|发件城市，有申报需求的如(gofo、uniuni需传)|
|shipper_add_1|string|否|发件地址1，有申报需求的如(gofo、uniuni需传)|
|shipper_add_2|string|否|发件地址2|
|shipper_company|string|否|发件人公司|
|unit|int|是|尺寸-重量单位: Lbs-Inch/Kgs-Cm (9=>Lbs-Inch,10=>Kgs-Cm)默认Kgs-Cm|
|target_name|string|是|收货人姓名|
|target_phone|string|是|收货人电话|
|target_postal_code|int|是|收货地邮编|
|target_country|string|是|收货地国家（如：US）|
|target_state|string|是|收货地洲|
|target_city|string|是|收货地城市|
|target_add_1|string|是|街道地址1|
|target_add_2|string|否|街道地址2|
|target_company|string|否|收货地公司|
|signature_service|string|否|签名服务: None/Normal signature/Adult signature (传值填写：-/SSF/ASS)|
|package_qty|int|是|包裹数量|
|packages|JSON[]|是|包裹信息|

##### **packages参数：**
|参数名|参数值|必填|描述|
| ------------ | ------------ | ------------ | ------------ |
|x|double|是|长|
|y|v|是|宽|
|z|double|是|高|
|net_weight|double|是|净重|
|qty|int|是|数量|
|seq|int|否|箱号|
|name_cn|string|否|申报中文名，有申报需求的如(一票一件，gofo、uniuni需传)|
|name_en|string|否|申报英文名，有申报需求的如(一票一件，gofo、uniuni需传)|
|declared_value|string|否|申报价格，有申报需求的如(一票一件，gofo、uniuni需传)|
|sku|string|否|SKU，有申报需求的如(一票一件，gofo、uniuni需传)|
|remark|string|否|备注|

#### 响应结果：
|参数名|参数值|是否一定回传|描述|
| ------------ | ------------ | ------------ | ------------ |
|err_code|int|是|状态码，详见状态码表|
|msg|string|是|描述信息|
|result|string（JSON）|否，code为200回传 |结果（结果集）|

##### result结果集（code=200回传）：
|参数名|参数值|是否一定回传|描述|
| ------------ | ------------ | ------------ | ------------ |
|async|int|是|是否异步查询下单结果，（是：10，否：9）|
|total|int|是|预付总金额|
|fee_list_cost|JSON[]|否|费用清单|
|customer_order_num|int|是|客户订单号|
|master_tracking_number|string|是|主跟踪号|
|merge_label|string|是|面单下载链接|
|order_num|string|是|订单号|
|packages_list|JSON[]|是|包裹单号、面单、箱号等|

#### 响应示例：
###### 成功：
```json
{
	"err_code": 0,
	"msg": "执行成功",
	"result": {
		"customer_order_num": "test1234567890001",
		"total": "14.43",
		"fee_list_cost": [
			{
				"code": "431580860",
				"name": "快递费",
				"currency": "USD",
				"zone_code": "2",
				"amount": "5.94"
			},
			{
				"code": "431580861",
				"name": "燃油附加费",
				"currency": "USD",
				"zone_code": "2",
				"amount": "1.13"
			},
			{
				"code": "431580862",
				"name": "快递费",
				"currency": "USD",
				"zone_code": "2",
				"amount": "5.94"
			},
			{
				"code": "431580864",
				"name": "燃油附加费",
				"currency": "USD",
				"zone_code": "2",
				"amount": "1.13"
			}
		],
		"master_tracking_number": "1ZK6B4420330175884",
		"merge_label": "xxxxxxxxx",
		"order_num": "LSM370918409065598976",
		"packages_list": [
			{
				"tracking_number": "96320019602069871xxxxxxxxx",
				"is_main": 10,
				"seq": "test1234567890001-1",
				"box_num": "1",
				"package_label": "http://xxxxxxx.pdf"
			},
			{
				"tracking_number": "9632001960206987xxxxxxxxx",
				"is_main": 9,
				"seq": "test1234567890001-2",
				"box_num": "2",
				"package_label": "http://xxxxxxx.pdf"
			}
		],
		"async": 9
	}
}
```
###### 失败：
```json
{
	"err_code": 404,
	"msg": "错误描述"
}
```

---

# 查询运单

# 查询运单
[查看API域名](/doc/1.html "查看API域名")
#### 接口地址：
`/order/query`
#### 请求方式：`POST`
#### 请求头：
|参数名|参数值|
| ------------ | ------------ |
|Content-Type|application/x-www-form-urlencoded|
|Authorization|Bearer <Token>|

#### 请求参数：
|参数名|参数值|必填|描述|
| ------------ | ------------ | ------------ | ------------ |
|customer_order_num|string|是|客户订单号|

#### 响应结果：
|参数名|参数值|是否一定回传|描述|
| ------------ | ------------ | ------------ | ------------ |
|err_code|int|是|状态码，详见状态码表|
|msg|string|是|描述信息|
|result|string（JSON）|否，code为200回传 |结果（结果集）|

##### result结果集（code=200回传）：
|参数名|参数值|是否一定回传|描述|
| ------------ | ------------ | ------------ | ------------ |
|total|int|是|预付总金额|
|fee_list_cost|JSON[]|否|费用清单|
|customer_order_num|int|是|客户订单号|
|master_tracking_number|string|是|主跟踪号|
|merge_label|string|是|面单下载链接|
|order_num|string|是|订单号|
|packages_list|JSON[]|是|包裹单号、面单、箱号等|

#### 响应示例：
###### 成功：
```json
{
	"err_code": 200,
	"success": true,
	"msg": "获取成功",
	"result": {
		"customer_order_num": "test1234567896061",
		"total": "14.43",
		"master_tracking_number": "8766876xxxxxxx",
		"merge_label": "http://xxxxxxxxxxx.pdf",
		"packages_list": [
			{
				"tracking_number": "9632001960206987169500xxxxxxxxxxx",
				"is_main": 10,
				"seq": "test1234567896061-1",
				"box_num": "1",
				"package_label": "http://xxxxxxx.pdf"
			},
			{
				"tracking_number": "9632001960206987169500xxxxxxxxxxx",
				"is_main": 9,
				"seq": "test1234567896061-2",
				"box_num": "2",
				"package_label": "http://xxxxxxx.pdf"
			}
		]
	}
}
```
###### 失败：
```json
{
	"err_code": 404,
	"msg": "错误描述"
}
```

---

# 退单退款申请

# 退单退款申请
[查看API域名](/doc/1.html "查看API域名")
#### 接口地址：
`/order/refund`
#### 请求方式：`POST`
#### 请求头：
|参数名|参数值|
| ------------ | ------------ |
|Content-Type|application/x-www-form-urlencoded|
|Authorization|Bearer <Token>|

#### 请求参数：
|参数名|参数值|必填|描述|
| ------------ | ------------ | ------------ | ------------ |
|customer_order_num|string|是|客户订单号|

#### 响应结果：
|参数名|参数值|是否一定回传|描述|
| ------------ | ------------ | ------------ | ------------ |
|err_code|int|是|状态码，详见状态码表|
|msg|string|是|描述信息|
|result|string（JSON）|否，code为200回传 |结果（结果集）|

##### result结果集（code=200回传）：
|参数名|参数值|是否一定回传|描述|
| ------------ | ------------ | ------------ | ------------ |
|total|double|是|总价|
|master_tracking_number|string|是|主跟踪号|
|customer_order_num|string|是|客户订单号|

#### 响应示例：
###### 成功：
```json
{
	"success": true,
	"err_code": 200,
	"msg": "执行成功",
	"result": {
		"total": "16.25",
		"master_tracking_number": "1ZK6B4420318835185",
		"customer_order_num": "test123456789000124"
	}
}
```
###### 失败：
```json
{
	"err_code": 404,
	"msg": "错误描述"
}
```

---

