复盘一下。客户当时新增的需求。查了下,没找到对外开放的手机号查物流接口,但是有通过物流单号查询的。
思路如下:首先我们可以通过手机号。查出物流单号。再用物流单号去调用这个对外开放的物流信息接口。然后将得到的物流信息提取你想要的封装一下给前端显示就行了。至于物流单号的话,入库由发货人员填写。提供一个接口就好。用poi 下载发货信息表。然后发货人员填完已发货的一批单号后再导入。导入后就可以通过手机号查询到物流信息。导入前则显示商家暂未发货。
我用的接口
购买完去这里找Appcode 参数。代码会用到。这个接口有免费的100次可以测试。
下边写一下如何调用阿里云接口
1.导入依赖
<!--快递单号物流查询阿里云接口begin-->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.2.1</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<version>4.2.1</version>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
<!--快递单号物流查询end-->
2.自己写的工具类。
就是把阿里云提供的java-sdk封装到方法里,提取一个参数。方便用手机号查出物流单号后。好调用。
import org.apache.http.HttpResponse;
import org.apache.http.util.EntityUtils;
import java.util.HashMap;
import java.util.Map;
public class ExpressUtil {
/**
* 根据物流单号查询物流信息
* @param expressNumbers
*/
public static String getExpress(String expressNumbers){
String host = "https://qyexpress.market.alicloudapi.com";
String path = "/composite/queryexpress";
String method = "GET";
String appcode= "这里填你自己的Appcode";
Map<String, String> headers = new HashMap<String, String>();
//最后在header中的格式(中间是英文空格)为Authorization:APPCODE
headers.put("Authorization", "APPCODE " + appcode);
Map<String, String> querys = new HashMap<String, String>();
// querys.put("mobile", "mobile");
querys.put("number", expressNumbers);//这里的expressNumbers是物流单号
try {
/**
* 重要提示如下:
* HttpUtils请从
* https://github.com/aliyun/api-gateway-demo-sign-java/blob/master/src/main/java/com/aliyun/api/gateway/demo/util/HttpUtils.java
* 下载
*
* 相应的依赖请参照
* https://github.com/aliyun/api-gateway-demo-sign-java/blob/master/pom.xml
*/
HttpResponse response = HttpUtils.doGet(host, path, method, headers, querys);
// System.out.println(response.toString());
String s = EntityUtils.toString(response.getEntity());
//获取response的body
// System.out.println(s);
return s;
} catch (Exception e) {
e.printStackTrace();
return "";
}
}
public static void main(String[] args) {
String express = getExpress("DPK368033655132");//这个单号是接口控制台提供的测试物流号
System.out.println(express);
}
}
物流单号查询的返回数据如下
"data": {
"number": "75426039407699",
"deliverystatus": 3,
"logo": "http://img.lundroid.com/zhongtong.png",
"list": [
{
"time": "2021-01-05 18:45",
"status": "您的快递已签收, 签收人在【菜鸟的广州吉山上街9号店】领取。如有疑问请电联:(18200933813), 投诉电话:(9519666), 您的快递已经妥投。风里来雨里去, 只为客官您满意。上有老下有小, 赏个好评好不好?【请在评价快递员处帮忙点亮五颗星星哦~】"
},
{
"time": "2020-12-31 16:53",
"status": "您的快递已暂存至【菜鸟的广州吉山上街9号店】。如有问题请电联:(18200933813), 投诉电话:(9519666), 感谢您使用中通快递, 期待再次为您服务!"
},
{
"time": "2020-12-31 15:04",
"status": "【广州黄埔】 的刘文浩(18200933813) 正在第1次派件, 请保持电话畅通,并耐心等待(95720为中通快递员外呼专属号码,请放心接听)"
},
{
"time": "2020-12-31 14:29",
"status": "快件已经到达 【广州黄埔】"
},
{
"time": "2020-12-31 08:24",
"status": "快件离开 【广州中心】 已发往 【广州黄埔】"
},
{
"time": "2020-12-31 08:09",
"status": "快件已经到达 【广州中心】"
},
{
"time": "2020-12-29 22:37",
"status": "快件离开 【华北转运中心】 已发往 【广州中心】"
},
{
"time": "2020-12-29 22:37",
"status": "快件已经到达 【华北转运中心】"
},
{
"time": "2020-12-29 20:49",
"status": "快件离开 【北京朝阳高碑店】 已发往 【华北转运中心】"
},
{
"time": "2020-12-29 17:31",
"status": "【北京朝阳高碑店】(010-65775900、010-59431892) 的 文兆国(13911850561) 已揽收"
}
],
"type": "zhongtong",
"typename": "中通速递"
},
"resp": {
"RespCode": 0,
"RespMsg": "ok"
}
}