java根据物流单号查询物流信息
package com.yoyo.expressage.controller;
import com.alibaba.fastjson.JSON;
import com.yoyo.expressage.resquest.KdNiaoDto;
import com.yoyo.expressage.util.KdNiaoUtil;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.Map;
@RestController
public class KDNiao {
//以圆通快递测试
    static  final  String fastId ="YTO";
    static  final  String fastName="圆通快递";
    @ApiOperation(value = "获取的物流跟踪数据")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "traceId", paramType = "query", value = "快递单号", required = true, dataType = "String"), })
    @GetMapping(value = "/getKdNiaoFastList")
    public Object getKdNiao( @RequestParam(value = "traceId") String traceId) throws Exception {
        if(StringUtils.isEmpty(traceId)){
            return new Exception("快递单号不能为空");
        }
        //接入第三方快递鸟 获取物流状态
        String  json = KdNiaoUtil.getOrderTracesByJson(fastId,traceId);
        if (json == null)
            throw new Exception("物流信息不存在");
        KdNiaoDto kdNiaoDto = JSON.parseObject(json, KdNiaoDto.class);
        // 物流状态(0:无轨迹 ,1已揽收 2在途中 3签收 4问题件)
        if ("false".equals(kdNiaoDto.getSuccess()))
            throw new Exception("不支持该运单号,请到官网查询");

Map<String, Object> map = new HashMap<>();
        map.put("fastName",fastName);
        map.put("traceId", traceId);
        map.put("state", kdNiaoDto.getState());
        map.put("success", kdNiaoDto.getSuccess());
        map.put("dataList", kdNiaoDto.getTraces());
        return map;

}
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package com.yoyo.expressage.util;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.security.MessageDigest;
import java.util.HashMap;
import java.util.Map;

/**
 * 整合第三方物流(快递鸟)接口的工具类
 */
public class KdNiaoUtil {

//快递鸟官网自己申请一个账号
    private static String URL = "";

private static String EBUSINESSID = "";

private static String APPKEY = "";

/**
     * 即时查询工具
     */

/**
     * Json方式 查询订单物流轨迹
     * expCode: 快递公司的id
     * expNo:运单id
     * @throws Exception
     */
    public static String getOrderTracesByJson(String expCode, String expNo) throws Exception {
        String requestData = "{'OrderCode':'','ShipperCode':'" + expCode + "','LogisticCode':'" + expNo + "'}";

Map<String, String> params = new HashMap<String, String>();
        params.put("RequestData", urlEncoder(requestData, "UTF-8"));
        params.put("EBusinessID", EBUSINESSID);
        params.put("RequestType", "1002");
       // params.put("CustomerName","徐少彬");
        String dataSign = null;
        try {
            dataSign = encrypt(requestData,APPKEY, "UTF-8");
            params.put("DataSign", urlEncoder(dataSign, "UTF-8"));
            params.put("DataType", "2");
            String result = sendPost(URL, params);
            return result;
        } catch (Exception e) {
            e.printStackTrace();
        }

//根据公司业务处理返回的信息......

return null;
    }

/**
     *
     * @param content
     * @param keyValue
     * @param charset
     * @return
     */
    private static  String encrypt(String content, String keyValue, String charset) throws Exception {
        if (keyValue != null)
        {
            return base64(MD5(content + keyValue, charset), charset);
        }
        return base64(MD5(content, charset), charset);
    }

/**
     * @param str
     * @param charset
     * @return
     */
    private static String urlEncoder(String str, String charset) throws Exception {

String result = null;
        try {
            result = URLEncoder.encode(str, charset);
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return result;
    }

private static String sendPost(String url, Map<String, String> params) {
        OutputStreamWriter out = null;
        BufferedReader in = null;
        StringBuilder result = new StringBuilder();
        try {
            java.net.URL realUrl = new URL(url);
            HttpURLConnection conn =(HttpURLConnection) realUrl.openConnection();
            // 发送POST请求必须设置如下两行
            conn.setDoOutput(true);
            conn.setDoInput(true);
            // POST方法
            conn.setRequestMethod("POST");
            // 设置通用的请求属性
            conn.setRequestProperty("accept", "*/*");
            conn.setRequestProperty("connection", "Keep-Alive");
            conn.setRequestProperty("user-agent",
                    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
            conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
            conn.connect();
            // 获取URLConnection对象对应的输出流
            out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");
            // 发送请求参数
            if (params != null) {
                StringBuilder param = new StringBuilder();
                for (Map.Entry<String, String> entry : params.entrySet()) {
                    if(param.length()>0){
                        param.append("&");
                    }
                    param.append(entry.getKey());
                    param.append("=");
                    param.append(entry.getValue());
                    //System.out.println(entry.getKey()+":"+entry.getValue());
                }
                //System.out.println("param:"+param.toString());
                out.write(param.toString());
            }
            // flush输出流的缓冲
            out.flush();
            // 定义BufferedReader输入流来读取URL的响应
            in = new BufferedReader(
                    new InputStreamReader(conn.getInputStream(), "UTF-8"));
            String line;
            while ((line = in.readLine()) != null) {
                result.append(line);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        //使用finally块来关闭输出流、输入流
        finally{
            try{
                if(out!=null){
                    out.close();
                }
                if(in!=null){
                    in.close();
                }
            }
            catch(IOException ex){
                ex.printStackTrace();
            }
        }
        return result.toString();

}

/**
     * 物流跟踪查询工具
     */
    private static String base64(String str, String charset) throws UnsupportedEncodingException{
        String encoded = base64Encode(str.getBytes(charset));
        return encoded;
    }

private static char[] base64EncodeChars = new char[] {
            'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
            'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
            'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
            'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f',
            'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',
            'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
            'w', 'x', 'y', 'z', '0', '1', '2', '3',
            '4', '5', '6', '7', '8', '9', '+', '/' };

public static String base64Encode(byte[] data) {
        StringBuffer sb = new StringBuffer();
        int len = data.length;
        int i = 0;
        int b1, b2, b3;
        while (i < len) {
            b1 = data[i++] & 0xff;
            if (i == len)
            {
                sb.append(base64EncodeChars[b1 >>> 2]);
                sb.append(base64EncodeChars[(b1 & 0x3) << 4]);
                sb.append("==");
                break;
            }
            b2 = data[i++] & 0xff;
            if (i == len)
            {
                sb.append(base64EncodeChars[b1 >>> 2]);
                sb.append(base64EncodeChars[((b1 & 0x03) << 4) | ((b2 & 0xf0) >>> 4)]);
                sb.append(base64EncodeChars[(b2 & 0x0f) << 2]);
                sb.append("=");
                break;
            }
            b3 = data[i++] & 0xff;
            sb.append(base64EncodeChars[b1 >>> 2]);
            sb.append(base64EncodeChars[((b1 & 0x03) << 4) | ((b2 & 0xf0) >>> 4)]);
            sb.append(base64EncodeChars[((b2 & 0x0f) << 2) | ((b3 & 0xc0) >>> 6)]);
            sb.append(base64EncodeChars[b3 & 0x3f]);
        }
        return sb.toString();
    }

private static String MD5(String str, String charset) throws Exception {
        MessageDigest md = MessageDigest.getInstance("MD5");
        md.update(str.getBytes(charset));
        byte[] result = md.digest();
        StringBuffer sb = new StringBuffer(32);
        for (int i = 0; i < result.length; i++) {
            int val = result[i] & 0xff;
            if (val <= 0xf) {
                sb.append("0");
            }
            sb.append(Integer.toHexString(val));
        }
        return sb.toString().toLowerCase();
    }

}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
package com.yoyo.expressage.resquest;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.io.Serializable;
import java.util.List;

@Data
@ApiModel(value = "跟踪物流信息")
public class KdNiaoDto implements Serializable {

/**
     * 快递单号
     */
    @ApiModelProperty("快递单号")
    private String LogisticCode;

/**
     * 物流状态(0:无轨迹 ,1已揽收 2在途中 3签收 4问题件)
     */
    @ApiModelProperty("物流状态(0:无轨迹 ,1已揽收 2在途中 3签收 4问题件)")
    private String State;

/**
     * 公司快递鸟账号
     */
    @ApiModelProperty("快递鸟账号")
    private String EBusinessID;

/**
     * 返回状态
     */
    @ApiModelProperty("返回状态")
    private String Success;

/**
     * 快递的轨迹数据
     */
    @ApiModelProperty("快递的轨迹数据")
    private List<TraceDto> Traces;

/**
     * 原因
     */
    @ApiModelProperty("失败的原因")
    private String Reason;

}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
package com.yoyo.expressage.resquest;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.io.Serializable;
/**
 * 订单对应的快递轨迹信息
 */
@Data
@ApiModel(value = "快递轨迹信息")
public class TraceDto implements Serializable {
    /**
     * 快递的轨迹
     */
    @ApiModelProperty("快递的轨迹")
    private String AcceptStation;

/**
     * 轨迹对应的时间
     */
    @ApiModelProperty("轨迹对应的时间")
    private String AcceptTime;
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package com.yoyo.expressage;

import com.spring4all.swagger.EnableSwagger2Doc;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@EnableSwagger2Doc
@SpringBootApplication
public class ExpressageApplication {

public static void main(String[] args) {
        SpringApplication.run(ExpressageApplication.class, args);
    }

}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
server:
  port: 8080
#swagger配置
swagger:
  base-package: com.yoyo.expressage
  title: center
  version: 1.0.0
  exclude-path: /ops/**, /error
  contact:
    name: yoyo
    email: 619296212@qq.com
————————————————
版权声明:本文为CSDN博主「xiaoxiaoyuere」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/xiaoxiaoyuere/article/details/109495209

java根据物流单号查询物流详细相关推荐

  1. Java快递物流查询接口,怎么接入物流接口API,如何根据单号查询物流跟踪的详细信息的Demo详细说明。

    Java怎么写物流接口,怎么接入物流接口,如何根据单号查询物流跟踪的详细信息 1. 需求 根据用户输入的订单号,我们的后台识别订单号并根据快递鸟查询快递Api接口,实现自动查询的功能 2. demo实 ...

  2. Java快递物流查询接口,怎么接入物流接口API,如何根据单号查询物流跟踪的详细信息的Demo详细说明

    Java怎么写物流接口,怎么接入物流接口,如何根据单号查询物流跟踪的详细信息 实现需求: 根据用户输入的订单号,我们的后台识别订单号并根据快递鸟查询快递Api接口,实现自动查询的功能 应用场景 实现的 ...

  3. 快递鸟全球物流单号查询api接口

    快递鸟全球物流单号查询API接口旨在为电商.电商平台.物流工具.打单工具.仓储系统.移动APP等系统提供专业.稳定.优质的API 接口服务,满足不同用户的物流管理需求.本文档就各个API接口进行详细说 ...

  4. Java通过快递鸟-查询物流

    Java通过快递鸟-查询物流 先申请快递鸟账号 填入账号信息 //电商IDprivate String EBusinessID = EBusinessID;//电商加密私钥,快递鸟提供,注意保管,不要 ...

  5. 物流信息根服务器,SHOPEX快递物流单号查询插件 v8.2

    SHOPEX快递物流单号查询插件提供国内外近2000家快递物流订单单号查询服务例如申通快递.顺丰快递.圆通快递.EMS快递.汇通快递.宅急送快递.德邦物流.百世快递.汇通快递.中通快递.天天快递等知名 ...

  6. 快递查询 教你一个方法使用物流单号查询物流信息

    当我们有很多快递单号的时候,该怎么通过快递单号查询物流信息呢?小编分享一个方法使用快递批量查询高手批量查询物流信息,一起来看看具体的操作步骤. 运行快递批量查询高手,首先设置一下查询接口,没有设置查询 ...

  7. 快递单号发出物流如何查询,快递单号查询物流方法

    当你有大批的快递单号,如何快速查询快递单号发出的物流信息呢?这里分享一个批量查询快递单号物流的方法,下面来看操作步骤. 准备一个查询工具,快递批量查询高手.在浏览器上搜索可下载到,先注册后再登录上. ...

  8. 物流单号查询,在哪里查询快递

    如果在快递单号多的情况,你还在一个个复制粘贴到官网上手动查询,是一件非常麻烦的事情.于是乎今天小编给大家分享一个新的技巧,下面一起来试试. 需要哪些工具? 安装一个快递批量查询高手 快递单号 怎么快速 ...

  9. 教你快递查询单号查询物流

    现在用到快递寄东西出去后,如果到了预计的时间还没有到,需要查看快递物流,怎么用快递单号查询快递物流信息?下面教大家这个批量查询快递物流的技巧,一起看操作步骤. 准备工具: 在电脑上打开浏览器,进入电脑 ...

最新文章

  1. 前沿技术探秘:知识图谱构建流程及方法
  2. 软件开发模式对比(瀑布、迭代、螺旋、敏捷)
  3. Java实现URL下载图片到本地
  4. CSS3:FlexBox的详解
  5. Windows系统带你一步一步无脑使用babel
  6. Mysql 如果有多个可选条件怎么加索引_MySQL|mysql-索引
  7. Kali Linux中的VEIL Framework绕过防病毒软件实验
  8. 使用docker连接远程仓库反复出现密码错误
  9. 2018 开源分布式中间件 DBLE 年报
  10. 皮卡丘为什么不进化_神奇宝贝:为什么皮卡丘一直不愿意进化?原因竟然是这个!...
  11. 攻防世界-music-高手进阶区-miscmisc
  12. 云小课|3种常用Git工作流推荐
  13. 在线随机抛硬币正反面统计工具
  14. [BeiJing2006]狼抓兔子
  15. 嵌入式单片机基础篇(十九)之一般TFTLCD 模块的使用流程
  16. 虹科OPC UA SDK案例:虹科OPC UA SDK助力立功科技ZWS云平台
  17. Grid++Report报表开发工具介绍
  18. minio error occured
  19. css flash布局_跳过简介-CSS3是新的Flash
  20. java登陆界面背景_Java登录界面的实现(注册、登录、背景图片)

热门文章

  1. Glide加载圆角矩形图片
  2. 微信公共平台信息查询系统
  3. Excel批量设置数字转化成“以文本形式存储的数字”
  4. Snug(舒适) as a Bug(小虫) in a Rug(小地毯)(2019/1/2)
  5. 阿里云CAC_DevOps课程详细文字文档
  6. Java面试题:单核CPU支持多线程吗?
  7. c语言输入r1 r2垫片的面积,C语言上机实验答案Word版
  8. 姜烧猪肉+日式厚蛋烧+蚝油青笋
  9. mysql和mongo+查询效率_Mongodb VS Mysql 查询性能
  10. PostgreSQL 各种查询