跳到主要内容

运单服务-地址校验

基本信息

  • 方法:POST
  • 路径:/label/carrier/verifyAddress
  • Handler:carrierApi.VerifyAddress
  • Service:CarrierOpenAPIService.VerifyAddress

用途

调用承运商地址校验能力,返回标准化后的地址信息、地址分类和有效性结果。

请求参数

字段类型必填说明
carrierCodestring承运商代码
accountAliasstring账号别名
accountIdint预留字段,当前未使用
addressobject待校验地址,结构见下方地址对象字段

地址对象字段

用于 address 字段。

字段类型必填说明
codestring地址编码
namestring名称/公司名
attentionNamestring联系人姓名
countryCodestring国家代码,如 US
stateCodestring州/省代码,如 CANY
citystring城市
addressLine1string地址行 1
addressLine2string地址行 2
addressLine3string地址行 3
postalCodestring邮编
phonestring联系电话
phoneExtensionstring电话分机
emailstring邮箱
memostring备注
midstringMID 标识,部分国际件场景使用
isResidentialbool是否住宅地址,默认 false
verifyStatusint地址校验状态,一般由响应回填,请求可不传

说明:Gin 绑定仅校验地址对象本身非空;实际调用时 countryCodeaddressLine1postalCode 为业务必填。

请求示例

{
"carrierCode": "UPS",
"accountAlias": "UPS_MAIN",
"accountId": 0,
"address": {
"name": "Verify Company",
"attentionName": "Alice",
"countryCode": "US",
"stateCode": "IL",
"city": "Chicago",
"addressLine1": "100 E Randolph St",
"addressLine2": "",
"postalCode": "60601",
"phone": "1234567890",
"email": "demo@example.com",
"isResidential": false
}
}

成功响应示例

{
"code": 200,
"data": {
"countryCode": "US",
"stateCode": "IL",
"city": "Chicago",
"addressLine1": "100 E Randolph St",
"addressLine2": "",
"postalCode": "60601",
"classification": "COMMERCIAL",
"isValid": true
},
"message": "success"
}

返回字段说明

字段类型说明
data.countryCodestring国家代码
data.stateCodestring州/省代码
data.citystring城市
data.addressLine1string地址 1
data.addressLine2string地址 2
data.postalCodestring邮编
data.classificationstring地址分类,RESIDENTIALCOMMERCIAL
data.isValidbool是否有效,来源于 VerifyStatus == 1

接口说明

  • 服务层会先解析账号,再调用对应平台服务的 VerifyAddress()
  • 如果平台服务没有实现地址校验能力,会返回类似错误:
{
"code": 400,
"data": null,
"message": "carrier GOFO does not support address verification"
}

账号解析规则

服务层统一通过 ResolveShipmentAccount() 解析账号,规则如下:

  • 必填:carrierCode
  • 可选:serviceCode
  • 可选:accountAlias
  • 如果筛选后只剩一个账号,直接使用
  • 如果存在多个可用账号但没有传 accountAlias,会返回错误:存在多个可用账号,请提供 accountAlias 进行消歧

注意:请求体里虽然有 accountId,但当前实现没有使用它做账号解析,可以视为预留字段。