1.快递查询API
这里使用的是阿里云全国快递物流查询-快递查询接口:https://market.aliyun.com/products/56928004/cmapi021863.html
该接口支持只通过快递运单号查询物流信息, 不需要在额外设置参数. 该种方式95%能自动识别, 填写查询速度会更快, 已经满足一般开发的需求, 并能极大方便开发者的使用.
请求参数说明
返回结果说明
官方提供的示例代码:
1 | public static void main(String[] args) { |
正常返回示例:
1 | { |
失败返回示例:
1 | { |
错误码定义:
错误码 | 错误信息 | 描述 |
---|---|---|
201 | 快递单号错误 | status:快递单号错误 |
203 | 快递公司不存在 | status:快递公司不存在 |
204 | 快递公司识别失败 | status:快递公司识别失败 |
205 | 没有信息 | status:没有信息 |
207 | 该单号被限制,错误单号 | status:该单号被限制,错误单号;一个单号对应多个快递公司,请求须指定快递公司 |
0 | 正常 | status:正常查询 |
2.核心代码
工具类:
HttpUtils(官方提供)
下载地址 http://code.fegine.com/HttpUtils.zip
TextUtil 用于判断输入发送的消息是否为英文字母+数字或纯数字(即符合快递运单号基本规则)
1
2
3
4
5
6
7public class TextUtil {
public static boolean DecText(String text){
Pattern p=Pattern.compile("^[A-Za-z0-9]+$"); //正则表达式
Matcher matcher = p.matcher(text);
return matcher.matches();
}
}ExpressUtil 调用API查询物流信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23public class ExpressUtil {
public static String QueryExpress(String num) throws Exception {
String host = "https://wuliu.market.alicloudapi.com";
String path = "/kdi";
String method = "GET";
String appcode = "06a9e928218141bxxxxxxx"; // !!!替换填写自己的AppCode 在买家中心查看
Map<String, String> headers = new HashMap<String, String>();
headers.put("Authorization", "APPCODE " + appcode); //格式为:Authorization:APPCODE 83359fd73fe11248385f570e3c139xxx
Map<String, String> querys = new HashMap<String, String>();
querys.put("no", num);// !!! 请求参数
HttpResponse response = HttpUtils.doGet(host, path, method, headers, querys);
//System.out.println(response.toString());
//获取response的body
String str = EntityUtils.toString(response.getEntity());//输出json
JSONObject jsonObject = JSONObject.parseObject(str);
// 获取到key为result的值
String result = jsonObject.getString("result");
jsonObject = JSONObject.parseObject(result);
// 获取到key为list的值
String list = jsonObject.getString("list");
return list;
}
}此时返回的数据为:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22[{
"time": "2020-02-29 19:45:12",
"status": "快件由【浙江嘉善公司】发往【下一站浙江嘉兴转运中心】,扫描员【何海桃】"
}, {
"time": "2020-02-29 19:45:12",
"status": "快件在【浙江嘉善公司】进行装车,扫描员【何海桃】,车签号【】"
}, {
"time": "2020-02-29 19:42:13",
"status": "快件由【浙江嘉善公司】发往【下一站浙江嘉兴转运中心】,扫描员【何德文】"
}, {
"time": "2020-02-29 19:42:13",
"status": "快件在【浙江嘉善公司】进行装包,扫描员【何德文】,袋号【9005261902881】"
}, {
"time": "2020-02-29 19:41:07",
"status": "快件由【浙江嘉善公司】发往【下一站浙江嘉兴转运中心】,扫描员【何德文】"
}, {
"time": "2020-02-29 19:29:40",
"status": "【浙江嘉善公司】的【公司称重()】已收件,扫描员【公司出港1】"
}, {
"time": "2020-02-29 18:32:52",
"status": "快件由【浙江嘉善公司】发往【下一站浙江嘉兴转运中心】,扫描员【何德文】"
}]
MsgService
1 | if (TextUtil.DecText(content)==true){ |