前言:中通一共有2种类型的物流接口,分别是总对总、预约寄件接口。刚开始普通公司都是用我下面这套预约寄件接口的;只有等你寄件数量达到某一个数量就会有中通工作人员联系你切换物流接口,也就是让你用总对总的接口。

简介:本文共封装中通接口有【创建订单】、【预约寄件-订单取消】、【预约寄件-订单明细查询】、【获取订单轨迹】

中通api文档:https://zop.zto.com/apiDoc/

下面是我封装的工具类和配置文件:

目录

  • 1.中通物流api工具类
  • 2.中通物流properties配置文件
  • 3.中通物流测试类

1.中通物流api工具类

package com.htcloud.xgsixteen.zto.util;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.nio.charset.Charset;
import java.security.MessageDigest;
import java.util.Base64;
import java.util.HashMap;
import java.util.Map;
import java.util.ResourceBundle;
import java.util.stream.Collectors;public class ZTOUtil {final static Logger logger = LoggerFactory.getLogger(ZTOUtil.class);public static  String company = null;public static  String companyProv = null;public static  String companyCity = null;public static  String companyCounty = null;public static  String companyAddress = null;/*** 初始化配置文件信息*/public static ResourceBundle resourceBundle = null;static {resourceBundle =  ResourceBundle.getBundle("ztotest");//测试接口
//        resourceBundle =  ResourceBundle.getBundle("ztodev");//正式接口try {//中文乱码处理company = new String(resourceBundle.getString("company").getBytes("ISO-8859-1"),"GBK");companyProv = new String(resourceBundle.getString("companyProv").getBytes("ISO-8859-1"),"GBK");companyCity = new String(resourceBundle.getString("companyCity").getBytes("ISO-8859-1"),"GBK");companyCounty = new String(resourceBundle.getString("companyCounty").getBytes("ISO-8859-1"),"GBK");companyAddress = new String(resourceBundle.getString("companyAddress").getBytes("ISO-8859-1"),"GBK");}catch (Exception e){logger.error(e.getMessage());}}public static  String companyId = resourceBundle.getString("companyId");public static  String key = resourceBundle.getString("key");public static  String createOrderUrl = resourceBundle.getString("createOrderUrl");public static  String cancelOrderUrl = resourceBundle.getString("cancelOrderUrl");public static  String getOrderDetailUrl = resourceBundle.getString("getOrderDetailUrl");public static  String getTraceInterfaceUrl = resourceBundle.getString("getTraceInterfaceUrl");public static  String typeUPDATE = resourceBundle.getString("type_UPDATE");public static  String type_SEARCHBYCODE = resourceBundle.getString("type_SEARCHBYCODE");public static  String typeNEW_TRACES = resourceBundle.getString("type_NEW_TRACES");public static  String companyPhone = resourceBundle.getString("companyPhone");/*** 中通物流-创建订单* @param map :请参考中通接口入参,有些是非必传的都不传就行了* @return* @throws Exception*/public static String createOrder(Map<String,Object> map)throws Exception{Map<String, String> parameters = new HashMap<>();parameters.put("orderGroup","{\"partnerCode\":\""+map.get("orderId").toString()+"\"," +"\"type\":1," +"\"tradeId\":\""+map.get("orderNo")+"\"," +"\"sender\":" +"{" +"\"id\":\""+map.get("sId")+"\"," +"\"name\":\""+map.get("sName")+"\"," +"\"company\":\""+map.get("sCompany")+"\"," +"\"mobile\":\""+map.get("sMobile")+"\"," +"\"prov\":\""+map.get("sProv")+"\"," +"\"city\":\""+map.get("sCity")+"\"," +"\"county\":\""+map.get("sCounty")+"\"," +"\"address\":\""+map.get("sAddress")+"\"," +"}," +"\"receiver\":" +"{" +"\"name\":\""+map.get("rName")+"\"," +"\"mobile\":\""+map.get("rMobile")+"\"," +"\"prov\":\""+map.get("rProv")+"\"," +"\"city\":\""+map.get("rCity")+"\"," +"\"county\":\""+map.get("rCounty")+"\"," +"\"address\":\""+map.get("rAddress")+"\"" +"}}");String result =  ZTOUtil.sendUrl(parameters,createOrderUrl,key);return  result;}/*** 中通物流-预约寄件-订单取消* @param orderCodes :中通的订单号* @return* @throws Exception*/public static String cancelOrder(String orderCodes)throws Exception{Map<String, String> parameters = new HashMap<>();parameters.put("data", "[{\"orderCode\":\""+orderCodes+"\",\"fieldName\":\"status\",\"fieldValue\":\"cancel\",\"reason\":\"客户取消订单\"}]");parameters.put("msg_type", typeUPDATE);parameters.put("company_id", companyId);String result =  ZTOUtil.sendUrl(parameters,cancelOrderUrl,key);return  result;}/*** 中通物流-预约寄件-订单明细查询(用来获取运单号,以便查询物流轨迹)* @param map* orderCode :中通的订单号* sendId : 配置文件内的companyId* @return* @throws Exception*/public static String getOrderDetail(Map<String,Object> map)throws  Exception{Map<String, String> parameters = new HashMap<>();parameters.put("data", "{\"orderCode\":[\""+map.get("orderCode")+"\"],\"sendId\":\""+map.get("sendId")+"\"}");parameters.put("msg_type", type_SEARCHBYCODE);parameters.put("company_id", companyId);String result =  ZTOUtil.sendUrl(parameters,getOrderDetailUrl,key);return  result;}/*** 中通物流-获取订单轨迹* @param code :中通的运单号* @return* @throws Exception*/public static String getTraceInterface(String code)throws Exception{Map<String, String> parameters = new HashMap<>();parameters.put("data", "[\""+code+"\"]");parameters.put("msg_type", typeNEW_TRACES);parameters.put("company_id", companyId);String result =  ZTOUtil.sendUrl(parameters,getTraceInterfaceUrl,key);return  result;}/*** 发送请求* @param parameters* @param Url* @param appKey* @return* @throws Exception*/public static String sendUrl(Map<String, String> parameters,String Url,String appKey)throws Exception{String strToDigest = paramsToQueryString(parameters) + key;MessageDigest md = MessageDigest.getInstance("MD5");md.update(strToDigest.getBytes(Charset.forName("UTF-8")));String dataDigest = Base64.getEncoder().encodeToString(md.digest());
//        System.out.println("============dataDigest:"+dataDigest);URL url = new URL(Url);//https://japi.zto.com/traceInterfaceNewTraces        http://58.40.16.122:8080/OpenOrderCreateHttpURLConnection con = (HttpURLConnection) url.openConnection();con.setRequestMethod("POST");con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");con.setDoOutput(true);con.setConnectTimeout(5000);con.setReadTimeout(5000);con.setRequestProperty("x-datadigest", dataDigest);con.setRequestProperty("x-companyid", companyId);DataOutputStream out = new DataOutputStream(con.getOutputStream());out.write(paramsToQueryStringUrlencoded(parameters).getBytes(Charset.forName("UTF-8")));out.flush();out.close();BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));String inputLine;StringBuffer content = new StringBuffer();while ((inputLine = in.readLine()) != null) {content.append(inputLine);}in.close();return  content.toString();}/*** 获取签名*/public static String getDatadigest(Map<String, String> parameters)throws Exception{String strToDigest = paramsToQueryString(parameters) + key;MessageDigest md = MessageDigest.getInstance("MD5");md.update(strToDigest.getBytes(Charset.forName("UTF-8")));String dataDigest = Base64.getEncoder().encodeToString(md.digest());return dataDigest;}public static String paramsToQueryString(Map<String, String> params) {return params.entrySet().stream().map(e -> e.getKey() + "=" + e.getValue()).collect(Collectors.joining("&"));}public static String paramsToQueryStringUrlencoded(Map<String, String> params) {return params.entrySet().stream().map(e -> {try {return e.getKey() + "=" + URLEncoder.encode(e.getValue(), "UTF-8");} catch (UnsupportedEncodingException e1) {return e.getValue();}}).collect(Collectors.joining("&"));}
}

2.中通物流properties配置文件

*放在resources目录下共俩个文件:测试(ztotest.properties):存放请求中通测试接口凭据正式(ztodev.properties):存放请求中通正式接口凭据

1、ztotest.properties

#合作商编码
companyId = kfpttestCode
#合作商key
key = kfpttestkey==
#中通物流-创建订单api
createOrderUrl = http://58.40.16.122:8080/OpenOrderCreate
#中通物流-取消订单api
cancelOrderUrl = http://58.40.16.122:8080/commonOrderUpdate
#中通物流-获取订单详情api
getOrderDetailUrl = http://58.40.16.122:8080/commonOrderSearchbycode
#中通物流-获取订单轨迹api
getTraceInterfaceUrl = http://58.40.16.122:8080/traceInterfaceNewTraces
#中通物流-取消订单api参数type
type_UPDATE = UPDATE
#中通物流-订单查询api参数type
type_SEARCHBYCODE = SEARCHBYCODE
#中通物流-获取订单轨迹api参数type
type_NEW_TRACES = NEW_TRACEScompany = 腾讯科技(深圳)有限公司
companyPhone = 0755-8601****
companyProv = 广东省
companyCity = 深圳市
companyCounty = 南山
companyAddress = 深圳市南山区高新区科技中一路腾讯大厦35层

2、ztodev.properties

#合作商编码
companyId = 你申请中通账号的companyId
#合作商key
key = 你申请中通账号的key
#中通物流-创建订单api
createOrderUrl = http://japi.zto.cn/OpenOrderCreate
#中通物流-取消订单api
cancelOrderUrl = http://japi.zto.cn/commonOrderUpdate
#中通物流-获取订单详情api
getOrderDetailUrl = http://japi.zto.cn/commonOrderSearchbycode
#中通物流-获取订单轨迹api
getTraceInterfaceUrl = http://japi.zto.cn/traceInterfaceNewTraces
#中通物流-取消订单api参数type
type_UPDATE = UPDATE
#中通物流-订单查询api参数type
type_SEARCHBYCODE = SEARCHBYCODE
#中通物流-获取订单轨迹api参数type
type_NEW_TRACES = NEW_TRACEScompany = 腾讯科技(深圳)有限公司
companyPhone = 0755-8601****
companyProv = 广东省
companyCity = 深圳市
companyCounty = 南山
companyAddress = 深圳市南山区高新区科技中一路腾讯大厦35层

3.中通物流测试类

public class ZTtest {/*** 中通物流-创建订单* @return* @throws Exception*/@Testpublic void createOrder()throws Exception{Map<String, String> parameters = new HashMap<>();
//        parameters.put("orderGroup", "{\"partnerCode\":\"130520142013234\",\"type\":1,\"tradeId\":\"2701843\",\"mailNo\":\"1000000000016\",\"sender\":{\"id\":\"130520142010\",\"name\":\"李琳\",\"company\":\"新南电子商务有限公司\",\"mobile\":\"13912345678\",\"phone\":\"021-87654321\",\"prov\":\"上海市\",\"city\":\"上海市\",\"county\":\"青浦区\",\"address\":\"华新镇华志路123号\",\"zipcode\":\"610012\"},\"receiver\":{\"id\":\"130520142097\",\"name\":\"杨逸嘉\",\"company\":\"逸嘉实业有限公司\",\"mobile\":\"13687654321\",\"phone\":\"010-22226789\",\"prov\":\"四川省\",\"city\":\"成都市\",\"county\":\"武侯区\",\"address\":\"育德路497号\",\"zipcode\":\"610012\"},\"items\":[{\"id\":\"1234567\",\"name\":\"迷你风扇\",\"category\":\"电子产品\",\"material\":\"金属\",\"size\":\"12,11,23\",\"weight\":\"1\",\"unitprice\":\"79\",\"quantity\":\"1\",\"remark\":\"黑色大号\"},{\"name\":\"USB3.0集线器\",\"quantity\":\"1\",\"remark\":\"\"}],\"starttime\":\"2013-05-20 12:00:00\",\"endtime\":\"2013-05-20 15:00:00\",\"weight\":753,\"size\":\"12,23,11\",\"quantity\":2,\"price\":12650,\"freight\":1000,\"premium\":50,\"packCharges\":100,\"otherCharges\":0,\"orderSum\":0,\"collectMoneytype\":\"CNY\",\"collectSum\":1200,\"remark\":\"请勿摔货\"}");parameters.put("orderGroup","{\n" +"    \"partnerCode\": \"123213\",\n" +"    \"type\": 1,\n" +"    \"tradeId\": \"12321321\",\n" +"    \"mailNo\": \"123213\",\n" +"    \"sender\": {\n" +"      \"id\": \"130520142010\",\n" +"      \"name\": \"李琳\",\n" +"      \"company\": \"新南电子商务有限公司\",\n" +"      \"mobile\": \"13912345678\",\n" +"      \"phone\": \"021-87654321\",\n" +"      \"prov\": \"上海市\",\n" +"      \"city\": \"上海市\",\n" +"      \"county\": \"青浦区\",\n" +"      \"address\": \"华新镇华志路123号\",\n" +"      \"zipcode\": \"610012\"\n" +"    },\n" +"    \"receiver\": {\n" +"      \"id\": \"130520142097\",\n" +"      \"name\": \"杨逸嘉\",\n" +"      \"company\": \"逸嘉实业有限公司\",\n" +"      \"mobile\": \"13687654321\",\n" +"      \"phone\": \"010-22226789\",\n" +"      \"prov\": \"四川省\",\n" +"      \"city\": \"成都市\",\n" +"      \"county\": \"武侯区\",\n" +"      \"address\": \"育德路497号\",\n" +"      \"zipcode\": \"610012\"\n" +"    }}");String url = "http://58.40.16.122:8080/OpenOrderCreate";String result =  ZTUtil.sendUrl(parameters,url,ZTUtil.key);System.out.println(result);}/*** 中通物流-预约寄件-订单取消* @return* @throws Exception*/@Testpublic void cancelOrder()throws Exception{Map<String, String> parameters = new HashMap<>();parameters.put("data", "[{\"orderCode\":\"100000000001\",\"fieldName\":\"status\",\"fieldValue\":\"cancel\",\"reason\":\"客户取消订单\"},{\"orderCode\":\"100000000002\",\"fieldName\":\"status\",\"fieldValue\":\"cancel\",\"reason\":\"客户取消订单\"}]");parameters.put("msg_type", "UPDATE");parameters.put("company_id", ZTUtil.companyId);String url = "http://58.40.16.122:8080/commonOrderUpdate";String result =  ZTUtil.sendUrl(parameters,url,ZTUtil.key);System.out.println(result);}/*** 中通物流-预约寄件-订单明细查询* @return* @throws Exception*/@Testpublic void getOrderDetail()throws  Exception{Map<String, String> parameters = new HashMap<>();parameters.put("data", "{\"orderCode\":[\"1234567\",\"123123123\",\"12312312312\"],\"sendId\":\"123456678\",\"partnerId\":\"123456678\"}");parameters.put("msg_type", "SEARCHBYCODE");parameters.put("company_id", ZTUtil.companyId);String url = "http://58.40.16.122:8080/commonOrderSearchbycode";String result =  ZTUtil.sendUrl(parameters,url,ZTUtil.key);System.out.println(result);}/*** 中通物流-获取订单轨迹* @return* @throws Exception*/@Testpublic void getTraceInterface()throws Exception{Map<String, String> parameters = new HashMap<>();parameters.put("data", "[\"680000000000\"]");parameters.put("msg_type", "NEW_TRACES");parameters.put("company_id", ZTUtil.companyId);String url = "http://58.40.16.122:8080/traceInterfaceNewTraces";String result =  ZTUtil.sendUrl(parameters,url,ZTUtil.key);System.out.println(result);}
}
感觉观看,希望能帮到你(#^.^#)

java中通物流api详解相关推荐

  1. java中的进制输出转换_Java I/O : Java中的进制详解

    作者:李强强 上一篇,泥瓦匠基础地讲了下Java I/O : Bit Operation 位运算.这一讲,泥瓦匠带你走进Java中的进制详解. 一.引子 在Java世界里,99%的工作都是处理这高层. ...

  2. Java中的static关键字详解

    ** Java中的static关键字详解 ** 在一个类中定义一个方法为static,即静态的,那就是说无需本类的对象就可以调用此方法.调用一个静态方法就是 "类名.方法名" ,静 ...

  3. Java中的main()方法详解

    源文作者:leizhimin    源文链接:http://lavasoft.blog.51cto.com/62575/53263 源文作者版权申明: 版权声明:原创作品,允许转载,转载时请务必以超链 ...

  4. java中Freemarker list指令详解

    java Freemarker中list指令主要是进行迭代服务器端传递过来的List集合. 定义 <#list nameList as names> ${names} </#list ...

  5. Java中的Runtime类详解

    Java中的Runtime类详解 1.类注释 /**Every Java application has a single instance of class Runtime that allows ...

  6. java中properties作用,Java中Properties的使用详解

    Java中有个比较重要的类Properties(Java.util.Properties),主要用于读取Java的配置文件,各种语言都有自己所支 持的配置文件,配置文件中很多变量是经常改变的,这样做也 ...

  7. Java 中的伪共享详解及解决方案

    转载自  Java 中的伪共享详解及解决方案 1. 什么是伪共享 CPU 缓存系统中是以缓存行(cache line)为单位存储的.目前主流的 CPU Cache 的 Cache Line 大小都是 ...

  8. java中list和map详解

    java中list和map详解 一.概叙 List , Set, Map都是接口,前两个继承至Collection接口,Map为独立接口, List下有ArrayList,Vector,LinkedL ...

  9. stringtokenizer java_基于Java中的StringTokenizer类详解(推荐)

    StringTokenizer是字符串分隔解析类型,属于:Java.util包. 1.StringTokenizer的构造函数 StringTokenizer(String str):构造一个用来解析 ...

最新文章

  1. 从事了两年 AI 研究,我学到了什么?
  2. 一文读懂支持向量机SVM(附实现代码、公式)
  3. 做过这个NLP项目的面试通过率高达 90%!!
  4. Android两个tab吸顶,Android scrollView和viewpager嵌套 指示器吸顶 根据viewpager每
  5. 华为鸿蒙 os 适配机型曝光,华为鸿蒙OS 2.0首批适配机型曝光
  6. .NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类...
  7. VC++下使用ADO编写数据库程序(关键文章)
  8. linux文件夹权限_五分钟搞定 Linux 文档全部知识,就看这篇文章
  9. U盘病毒“替身”大量交叉感染 打印店电脑助扩散
  10. mysql去掉两个最高分_Excel函数 去掉最高分和最低分取平均值?这个函数不可不知...
  11. 实现人人网爬去数据(opener)
  12. linux rz sz使用
  13. SketchUp 建筑分析图制作国外教程
  14. 2021年12月电子学会图形化四级编程题解析含答案:棕熊大战
  15. 自来水智慧水务平台(建设方案及项目经验)
  16. Latex插图片时遇到的小问题
  17. 台式机与笔记本电脑BIOS启动热键整理
  18. 群晖DSM7.0设置群晖NAS域名外网访问
  19. Mac 从命令行启动模拟器
  20. [转载]Emit学习之旅(1):Emit概览

热门文章

  1. linux之上运行Vxworks,在MPSoC上能同时运行VxWorks和Linux吗?
  2. 蓝牙Controller框架梳理
  3. 宇宙飞机(space plane)
  4. matlab解五元方程,哪位大侠帮忙解这个五元四次方程组
  5. SLAM 岗位求职与简历书写
  6. R语言中的并行计算实现
  7. PAKDD2020 阿里巴巴智能运维算法大赛 总结(初赛33,决赛19)
  8. SSH远程访问以及控制
  9. 如何在Java中实现画图(图文并茂)(内附美丽的分型图片哦)
  10. ps制作设计网站登录界面