我是靠谱客的博主 甜美长颈鹿,最近开发中收集的这篇文章主要介绍java中通物流api详解1.中通物流api工具类2.中通物流properties配置文件3.中通物流测试类,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
前言:中通一共有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/OpenOrderCreate
HttpURLConnection 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_TRACES
company = 腾讯科技(深圳)有限公司
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_TRACES
company = 腾讯科技(深圳)有限公司
companyPhone = 0755-8601****
companyProv = 广东省
companyCity = 深圳市
companyCounty = 南山
companyAddress = 深圳市南山区高新区科技中一路腾讯大厦35层
3.中通物流测试类
public class ZTtest {
/**
* 中通物流-创建订单
* @return
* @throws Exception
*/
@Test
public 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
*/
@Test
public 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
*/
@Test
public 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
*/
@Test
public 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.中通物流api工具类2.中通物流properties配置文件3.中通物流测试类的全部内容,希望文章能够帮你解决java中通物流api详解1.中通物流api工具类2.中通物流properties配置文件3.中通物流测试类所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复