快递智能地址解析API接口对接实现指南

举报
kwan的解忧杂货铺 发表于 2024/12/11 21:52:27 2024/12/11
【摘要】 @TOC 快递智能地址解析 API 接口对接实现指南随着电商和物流行业的快速发展,地址解析已成为提高效率和优化用户体验的重要技术手段。本文将详细介绍快递 100 智能地址解析 API 的功能、应用效果以及对接实现过程,帮助开发者快速上手。 一、智能地址解析接口介绍快递 100 智能地址解析接口,是一款高效地址解析服务。它可以精准识别输入内容中的 姓名、电话、地址 等关键信息,并将杂乱无序的地...

@TOC

快递智能地址解析 API 接口对接实现指南

随着电商和物流行业的快速发展,地址解析已成为提高效率和优化用户体验的重要技术手段。本文将详细介绍快递 100 智能地址解析 API 的功能、应用效果以及对接实现过程,帮助开发者快速上手。


一、智能地址解析接口介绍

快递 100 智能地址解析接口,是一款高效地址解析服务。
它可以精准识别输入内容中的 姓名、电话、地址 等关键信息,并将杂乱无序的地址数据纠错、补全和标准化,输出为结构化的地址信息:

格式
省 - 市 - 区 - 详细地址
例如
浙江省 杭州市 滨江区 长河街道春波小区*幢*单元***号

功能亮点

  1. 文本与图片解析:支持文本与图片两种输入形式,方便灵活。
  2. 地址自动补全:对缺失字段(如省市区)进行智能补全,确保地址完整性。
  3. 纠错与优化:自动纠正常见错别字或错误地址描述。
  4. 高效对接:简单易用的接口,适配多种开发环境。

二、应用场景与效果

通过快递 100 智能地址解析 API,用户能够在地址录入场景中更加高效地填写订单信息,尤其适用于个人地址薄管理和寄件操作。以下是具体应用效果:

结构化输出

输入任意格式的地址信息后,API 将其按 省-市-区-详细地址 的标准格式输出,减少手动录入带来的失误,显著提升录入效率。
在这里插入图片描述

关键信息提取

能够精准提取寄件人或收件人信息中的 联系方式和姓名,并自动生成结构化数据,免去人工整理的麻烦,进一步降低错误率。
在这里插入图片描述

地址补全

结合 地图 POI 数据,在用户地址填写中自动补全缺失的地理位置信息,如门牌号或具体地点。用户可通过搜索地址坐标快速生成完整的地址,提升填写效率。

错误纠正与优化

针对用户输入的错误地址(如省、市、区字段),API 提供智能纠正功能,确保下单信息完整、准确,有效避免因地址不全或错误导致的揽派问题。
这项技术为用户提供了高效、便捷的地址管理能力,同时帮助企业优化物流流程,提高订单的处理质量。

三、接口测试与对接指南

在对接快递 100 智能地址解析 API 前,我们需要完成以下步骤:

1. 注册与获取 API Key

2. 智能地址解析接口

该接口提供智能识别姓名、电话、地址的功能,并解析地址返回对应信息。
在这里插入图片描述

1.1 接口格式

提供统一格式的 HTTP POST 调用接口,并返回统一格式的 JSON 数据。

1.2 请求地址

https://api.kuaidi100.com/address/resolution
请求参数(header):
参数名 类型 默认值
Content-Type string application/x-www-form-urlencoded
请求参数(body):
参数名 是否必填 类型 说明
key 是 string 授权码,请申请企业版获取
sign 是 string 32 位大写签名,用于验证身份,按 MD5(param + t + key + secret) 的顺序加密,不需要加上 “+” 号,secret 在企业管理后台查看
t 是 string 时间戳,如:1576123932000
param 是 param 由其他字段拼接
param 数据结构:
参数名 是否必填 类型 说明
content 否 string 需要解析的内容,例如:张三广东省深圳市南山区粤海街道科技南十二路金蝶软件园 13088888888
image 否 string 图片 base64 编码,最大限制 4M
imageUrl 否 string 图片 URL,通过该 URL 下载后得到的文件文件类型应当是图片,最大限制 4M
pdfUrl 否 string PDF URL,通过该 URL 下载后得到的文件文件类型应当是 PDF,最大限制 4M
htmlUrl 否 string HTML URL,通过该 URL 下载后得到的文件文件类型应当是 HTML,最大限制 4M

注意: 接口超时为 5 秒。content、image、imageUrl、pdfUrl、htmlUrl 必填其一,优先顺序为:content > image > imageUrl > pdfUrl > htmlUrl。

1.3 返回结果

字段 类型 说明 备注
success boolean 提交结果 true 提交成功,false 失败
code string 返回编码
message string 返回报文描述
time string 时间 可忽略
data Object 响应数据
data 数据结构:
字段 类型 说明 备注
taskId string 任务 ID
result list 解析结果列表
result 中数据项的数据结构:
字段 类型 说明 备注
content string 入参的解析内容
mobile list 手机号码列表 列表中的手机号码为字符串格式
name string 姓名
address string 详细地址
xzq object 行政区信息
xzq 中数据项的数据结构:
字段 类型 说明 备注
fullName string 完整地址 返回省市区全称,例如:广东省,深圳市,南山区
province string 省份名称 返回省份简称,例如:广东
city string 城市名称 返回市级行政区简称,例如:深圳市
district string 区县名称 返回区县简称,例如:南山区
subArea string 详细地址
parentCode string 行政区父节点编码
code string 行政区编码
level int 行政区级别

1.4 请求参数示例

示例 1
key = kytRstexx
sign = 4BBDE07660E5EFF90873642CFAE9A8DD
t = 1470304729724
param = {
    "content": "张三广东省深圳市南山区粤海街道科技南十二路金蝶软件园13088888888"
}
示例 2
key = kytRstexx
sign = 4BBDE07660E5EFF90873642CFAE9A8DD
t = 1470304729724
param = {
    "imageUrl": "https://api.kuaidi100.com/getImage/123456789"
}

1.5 返回结果示例

成功示例
{
  "code": 200,
  "data": {
    "taskId": "0333CB76E70442A0BD275F5541549C30",
    "result": [
      {
        "content": "张三广东省深圳市南山区粤海街道科技南十二路金蝶软件园 13088888888",
        "mobile": ["13088888888"],
        "name": "张三",
        "address": "粤海街道科技南十二路金蝶软件园",
        "xzq": {
          "fullName": "广东省,深圳市,南山区",
          "province": "广东",
          "city": "深圳市",
          "district": "南山区",
          "subArea": "粤海街道科技南十二路金蝶软件园",
          "parentCode": "440300",
          "code": "440305",
          "level": 3
        }
      }
    ]
  },
  "message": "success",
  "time": 0,
  "success": true
}
错误示例
{
  "code": 10002,
  "message": "请求参数不能为空:content",
  "time": 0,
  "success": false
}

1.6 返回信息代码含义

信息代码 信息内容描述 原因及建议处理方式
-1 解析失败/异常,请稍后重试 快递 100 的服务器出现间歇或临时性异常,解析超时,也会报此错误
200 提交成功 提交成功
10000 解析失败 解析失败,请检查入参内容是否正确
10002 请求参数错误 检查参数传参是否正确
10007 系统内部调用异常 系统内部调用异常,文件识别结果为空、识别失败、解析失败,请联系管理员处理
10025 非法请求,异常文件 接口请求下载文件识别报错会报此错误,请检查文件(URL 中的文件)是否完整、格式是否正确
30002 验证签名失败 检查加密方式,param +t+key+ secret 的顺序进行 MD5 加密,加密后字符串转 32 位大写,不用加上“+”号
30004 账号单量不足需要充值 账号单量不足需要充值

3. java 示例代码 (直接拿去用)

以下是两种场景的整合测试对接示例:

测试代码

public class AddressResolutionTest {

    // 替换为实际的 key 和 secret,来源于快递100管理后台 - 我的信息 - 企业信息
    private static final String KEY = "kJg******63";
    private static final String SECRET = "957**********************f58";
    private static final String API_URL = "https://api.kuaidi100.com/address/resolution";

    public static void main(String[] args) throws Exception {
        testTextParsing();
        testImageParsing();
    }

    // 文本解析测试
    public static void testTextParsing() throws Exception {
        String content = "张三广东省深圳市南山区粤海街道科技南十二路金蝶软件园13088888888";
        Map<String, Object> param = new HashMap<>();
        param.put("content", content);

        String response = sendRequest(param);
        System.out.println("文本解析响应:" + response);
    }

    // 图片解析测试
    public static void testImageParsing() throws Exception {
        String imageUrl = "https://ahaofile-1304457300.cos.ap-guangzhou.myqcloud.com/kuaidi100.png";
        Map<String, Object> param = new HashMap<>();
        param.put("imageUrl", imageUrl);

        String response = sendRequest(param);
        System.out.println("图片解析响应:" + response);
    }

    // 发送请求
    private static String sendRequest(Map<String, Object> param) throws Exception {
        // 时间戳
        String timestamp = String.valueOf(System.currentTimeMillis());
        // 参数 JSON 字符串
        String paramJson = new ObjectMapper().writeValueAsString(param);
        // 生成签名
        String sign = generateMD5(paramJson + timestamp + KEY + SECRET);

        // 构造请求参数
        Map<String, String> body = new HashMap<>();
        body.put("key", KEY);
        body.put("sign", sign);
        body.put("t", timestamp);
        body.put("param", paramJson);

        // 发送 POST 请求
        return post(API_URL, body);
    }

    // 生成 MD5
    private static String generateMD5(String input) throws Exception {
        MessageDigest md = MessageDigest.getInstance("MD5");
        byte[] digest = md.digest(input.getBytes(StandardCharsets.UTF_8));
        StringBuilder sb = new StringBuilder();
        for (byte b : digest) {
            sb.append(String.format("%02X", b));
        }
        return sb.toString();
    }

    // 发送 POST 请求
    private static String post(String url, Map<String, String> body) throws Exception {
        try (CloseableHttpClient client = HttpClients.createDefault()) {
            HttpPost post = new HttpPost(url);
            post.setHeader("Content-Type", "application/x-www-form-urlencoded");

            // 构造请求体
            StringBuilder formData = new StringBuilder();
            for (Map.Entry<String, String> entry : body.entrySet()) {
                if (formData.length() > 0) {
                    formData.append("&");
                }
                formData.append(entry.getKey()).append("=").append(entry.getValue());
            }
            post.setEntity(new StringEntity(formData.toString(), StandardCharsets.UTF_8));

            // 执行请求
            try (CloseableHttpResponse response = client.execute(post)) {
                HttpEntity entity = response.getEntity();
                return entity != null ? EntityUtils.toString(entity, StandardCharsets.UTF_8) : null;
            }
        }
    }
}

场景一:识别文本地址信息 测试结果

测试文本

张三广东省深圳市南山区粤海街道科技南十二路金蝶软件园13088888888
文本解析响应:
{
	"code": 200,
	"data": {
		"taskId": "840225995A8E4576B56BEBDD5B308D40",
		"result": [
			{
				"content": "张三广东省深圳市南山区粤海街道科技南十二路金蝶软件园13088888888",
				"mobile": [
					"13088888888"
				],
				"name": "张三",
				"address": "粤海街道科技南十二路金蝶软件园",
				"xzq": {
					"fullName": "广东省,深圳市,南山区",
					"province": "广东",
					"city": "深圳市",
					"district": "南山区",
					"subArea": "粤海街道科技南十二路金蝶软件园",
					"parentCode": "440300",
					"code": "440305",
					"level": 3
				}
			}
		]
	},
	"message": "success",
	"time": 0,
	"success": true
}

场景二:识别图片中的地址信息 测试结果

图片已传入腾讯云 COS,可直接使用
在这里插入图片描述
在这里插入图片描述

图片解析响应:
{
	"code": 200,
	"data": {
		"taskId": "B02798CABE7F4A69994C4079D1691D34",
		"result": [
			{
				"content": "阿豪15288888888浙江省杭州市滨江区长河街道春波小区六幢六单元666",
				"mobile": [
					"15288888888"
				],
				"name": "阿豪",
				"address": "长河街道春波小区六幢六单元666",
				"xzq": {
					"fullName": "浙江省,杭州市,滨江区",
					"province": "浙江省",
					"city": "杭州市",
					"district": "滨江区",
					"subArea": "长河街道春波小区六幢六单元666",
					"parentCode": "330100",
					"code": "330108",
					"level": 3
				}
			}
		]
	},
	"message": "success",
	"time": 0,
	"success": true
}

四、总结

快递 100 智能地址解析 API 通过其强大的文本和图片解析能力,为电商和物流行业提供了标准化地址管理的高效解决方案。
通过本文的指南,相信您可以快速完成接口对接,并利用这项技术提升用户体验和业务效率。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。