refactor code
This commit is contained in:
@@ -1,41 +1,33 @@
|
||||
package com.peanut.common.Interface;
|
||||
|
||||
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.peanut.common.utils.HttpClientUtils;
|
||||
import com.peanut.common.utils.KdUtils;
|
||||
import com.peanut.modules.book.entity.FMSCommodity;
|
||||
import com.peanut.modules.book.entity.FMSOrderEntity;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
* @技术QQ群: 可登录官网https://www.kdniao.com/右侧查看技术群号
|
||||
* @see: https://kdniao.com/api-eorder
|
||||
* @copyright: 深圳市快金数据技术服务有限公司
|
||||
* ID和Key请到官网申请:https://kdniao.com/reg
|
||||
|
||||
|
||||
* <p>
|
||||
* <p>
|
||||
* 电子面单接口
|
||||
* 此接口用于向快递/快运公司下发订单并获取快递单号,返回电子面单html模板,通知快递员上门取件。该功能支持情况需查看技术文档。
|
||||
*正式地址:https://api.kdniao.com/api/EOrderService
|
||||
*
|
||||
*
|
||||
* 正式地址:https://api.kdniao.com/api/EOrderService
|
||||
* <p>
|
||||
* <p>
|
||||
* 系统级参数
|
||||
* RequestData String R 请求内容为JSON格式 详情可参考接口技术文档:https://www.kdniao.com/documents
|
||||
* EBusinessID String R 用户ID
|
||||
* RequestType String R 请求接口指令
|
||||
* DataSign String R 数据内容签名,加密方法为:把(请求内容(未编码)+ApiKey)进行MD5加密--32位小写,然后Base64编码,最后进行URL(utf-8)编码
|
||||
* DataType String R DataType=2,请求、返回数据类型均为JSON格式
|
||||
|
||||
* <p>
|
||||
* 应用级参数
|
||||
* R-必填(Required),O-可选(Optional),C-报文中该参数在一定条件下可选(Conditional)
|
||||
* Callback String(50) O 用户自定义回传字段
|
||||
@@ -95,258 +87,127 @@ import java.util.Map;
|
||||
|
||||
public class KdApiEOrder {
|
||||
|
||||
//用户ID,快递鸟提供,注意保管,不要泄漏
|
||||
private static String EBusinessID="1788532";//即用户ID
|
||||
// private static String EBusinessID="test1788532";//即用户ID
|
||||
//用户ID,快递鸟提供,注意保管,不要泄漏
|
||||
private static String EBusinessID = "1788532";//即用户ID
|
||||
// private static String EBusinessID="test1788532";//即用户ID
|
||||
//API key,快递鸟提供,注意保管,不要泄漏
|
||||
private static String ApiKey="f4342e6c-5cfa-458f-997b-f973eb29eb1d";//即API key
|
||||
private static String ApiKey = "f4342e6c-5cfa-458f-997b-f973eb29eb1d";//即API key
|
||||
// private static String ApiKey="34f033ae-9c73-4b9a-899e-943a65fd86bf";//即API key
|
||||
|
||||
|
||||
// 电子面单
|
||||
private static String OnlineReqURL="https://api.kdniao.com/api/EOrderService";
|
||||
// 电子面单
|
||||
private static String OnlineReqURL = "https://api.kdniao.com/api/EOrderService";
|
||||
|
||||
|
||||
// 取消电子面单
|
||||
|
||||
private static String ReqURL="https://api.kdniao.com/api/EOrderService";
|
||||
private static String ReqURL = "https://api.kdniao.com/api/EOrderService";
|
||||
|
||||
|
||||
// 物流信息跟踪
|
||||
private String TrackReqURL="https://api.kdniao.com/api/dist";
|
||||
// 物流信息跟踪
|
||||
private String TrackReqURL = "https://api.kdniao.com/api/dist";
|
||||
// private static String TrackReqURL="http://sandboxapi.kdniao.com:8080/kdniaosandbox/gateway/exterfaceInvoke.json";
|
||||
|
||||
// 即时查询物流信息
|
||||
private static String QueryReqURL="https://api.kdniao.com/Ebusiness/EbusinessOrderHandle.aspx";
|
||||
// private static String QueryReqURL="http://sandboxapi.kdniao.com:8080/kdniaosandbox/gateway/exterfaceInvoke.json";
|
||||
// 即时查询物流信息
|
||||
private static String QueryReqURL = "https://api.kdniao.com/Ebusiness/EbusinessOrderHandle.aspx";
|
||||
|
||||
/**
|
||||
* 电子面单取消接口
|
||||
* 此接口用于取消“电子面单接口”下单成功的订单,回收快递单号。
|
||||
* <p>
|
||||
* 应用级参数
|
||||
* R-必填(Required),O-可选(Optional),C-报文中该参数在一定条件下可选(Conditional)
|
||||
* ShipperCode String(10) R 快递公司编码
|
||||
* OrderCode String(30) R 订单编号
|
||||
* ExpNo String(30) R 快递单号
|
||||
* CustomerName String(50) R 电子面单客户号
|
||||
* CustomerPwd String(30) R 电子面单密码(顺丰不需要)
|
||||
*/
|
||||
@RequestMapping("/cancel")
|
||||
public static String cancelOrderByJson(@RequestParam Map<String, Object> param) throws Exception {
|
||||
|
||||
// 组装应用级参数
|
||||
String RequestData = "{" +
|
||||
"'ShipperCode':" + param.get("ShipperCode") + "," +
|
||||
"'OrderCode': " + param.get("orderSn") + "," +
|
||||
"'ExpNo': '" + param.get("ExpNo") + "'," +
|
||||
"}";
|
||||
// 组装系统级参数
|
||||
Map<String, String> params = new HashMap<String, String>();
|
||||
params.put("RequestData", KdUtils.urlEncoder(RequestData, "UTF-8"));
|
||||
params.put("EBusinessID", EBusinessID);
|
||||
params.put("RequestType", "1147");
|
||||
String dataSign = KdUtils.encrypt(RequestData, ApiKey, "UTF-8");
|
||||
params.put("DataSign", KdUtils.urlEncoder(dataSign, "UTF-8"));
|
||||
params.put("DataType", "2");
|
||||
// 以form表单形式提交post请求,post请求体中包含了应用级参数和系统级参数
|
||||
String result = HttpClientUtils.kdSendPost(ReqURL, params);
|
||||
|
||||
//根据公司业务处理返回的信息......
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
// public static void main(String[] args) {
|
||||
// try {
|
||||
// KdApiEOrder api = new KdApiEOrder();
|
||||
// System.out.println(api.orderOnlineByJson());
|
||||
// } catch (Exception e) {
|
||||
// e.printStackTrace();
|
||||
// }
|
||||
// }
|
||||
|
||||
/**
|
||||
* 电子面单接口
|
||||
* 此接口用于向快递/快运公司下发订单并获取快递单号,返回电子面单html模板,通知快递员上门取件。
|
||||
* @return
|
||||
* @throws Exception
|
||||
*/
|
||||
public static JSONArray orderOnlineByJson(List<FMSOrderEntity> fmsOrderList) throws Exception{
|
||||
String RequestData= "";
|
||||
JSONArray jsonArray = new JSONArray();
|
||||
String cust = "";
|
||||
for(FMSOrderEntity fms : fmsOrderList){
|
||||
// 组装应用级参数
|
||||
RequestData= "{"+
|
||||
"'OrderCode': '" + fms.getOrderCode() + "',"+
|
||||
"'ShipperCode': '" + fms.getShipperCode() + "',";
|
||||
if("JD".equals(fms.getShipperCode())){
|
||||
cust = "'CustomerName': '010K1598220',"+
|
||||
"'CustomerPwd': '',";
|
||||
}
|
||||
if ("YD".equals(fms.getShipperCode())){
|
||||
// cust = "'CustomerName': '114198226272',"+
|
||||
// "'CustomerPwd': 'gcs5XavNGRVqbhUmHpnkDd7Fi3T9Ef',";
|
||||
cust = "'CustomerName': 'testyd',"+
|
||||
"'CustomerPwd': 'testydpwd',";
|
||||
}
|
||||
|
||||
cust += "'MonthCode': '',"+
|
||||
"'SendSite': '',"+
|
||||
"'PayType': 1,"+
|
||||
"'MonthCode': '',"+
|
||||
"'ExpType': 1,"+
|
||||
"'Cost': 1.0,"+
|
||||
"'OtherCost': 1.0,"+
|
||||
// "'TemplateSize':'130'"+
|
||||
"'Sender': {"+
|
||||
"'Company': '众妙之门',"+
|
||||
"'Name': 'Taylor',"+
|
||||
"'Mobile': '12345678901',"+
|
||||
"'ProvinceName': '天津',"+
|
||||
"'CityName': '天津市',"+
|
||||
"'ExpAreaName': '南开区',"+
|
||||
"'Address': '天津市南开区融创中心中南广场东区2号楼605'"+
|
||||
"},"+
|
||||
"'Receiver': {"+
|
||||
"'Company': '',"+
|
||||
"'Name': '" + fms.getReceiverName() + "',"+
|
||||
"'Mobile': '" + fms.getReceiverMobile() + "',"+
|
||||
"'ProvinceName': '" + fms.getReceiverProvinceName() + "',"+
|
||||
"'CityName': '" + fms.getReceiverCityName() + "',"+
|
||||
"'ExpAreaName': '" + fms.getReceiverExpAreaName() + "',"+
|
||||
"'Address': '" + fms.getReceiverAddress() + "'"+
|
||||
"},"+
|
||||
"'Commodity': [" ;
|
||||
String s = "";
|
||||
for(FMSCommodity fmsCommodity : fms.getCommodityList() ){
|
||||
s += "{'GoodsName': '"+fmsCommodity.getGoodsName()+ "'},";
|
||||
}
|
||||
s = s.substring(0,s.lastIndexOf(','));
|
||||
String a = s + "],"+
|
||||
"'AddService': [],"+
|
||||
"'IsReturnPrintTemplate':1,"+
|
||||
"'Remark': "+ fms.getRemark()+""+
|
||||
"}";
|
||||
|
||||
// 组装系统级参数
|
||||
Map<String, String> params = new HashMap<String, String>();
|
||||
params.put("RequestData", KdUtils.urlEncoder(RequestData + cust + a, "UTF-8"));
|
||||
params.put("EBusinessID", EBusinessID);
|
||||
params.put("RequestType", "1007");
|
||||
// params.put("RequestType", "1001");
|
||||
String dataSign=KdUtils.encrypt(RequestData + cust + a, ApiKey, "UTF-8");
|
||||
System.out.println(RequestData + a);
|
||||
params.put("DataSign", KdUtils.urlEncoder(dataSign, "UTF-8"));
|
||||
params.put("DataType", "2");
|
||||
// 以form表单形式提交post请求,post请求体中包含了应用级参数和系统级参数
|
||||
String result= HttpClientUtils.kdSendPost(OnlineReqURL, params);
|
||||
jsonArray.add(result);
|
||||
}
|
||||
return jsonArray;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 电子面单取消接口
|
||||
* 此接口用于取消“电子面单接口”下单成功的订单,回收快递单号。
|
||||
*
|
||||
* 应用级参数
|
||||
* R-必填(Required),O-可选(Optional),C-报文中该参数在一定条件下可选(Conditional)
|
||||
* ShipperCode String(10) R 快递公司编码
|
||||
* OrderCode String(30) R 订单编号
|
||||
* ExpNo String(30) R 快递单号
|
||||
* CustomerName String(50) R 电子面单客户号
|
||||
* CustomerPwd String(30) R 电子面单密码(顺丰不需要)
|
||||
*
|
||||
*/
|
||||
@RequestMapping("/cancel")
|
||||
public static String cancelOrderByJson(@RequestParam Map<String,Object> param) throws Exception{
|
||||
|
||||
// 组装应用级参数
|
||||
String RequestData= "{"+
|
||||
"'ShipperCode':" +param.get("ShipperCode")+","+
|
||||
"'OrderCode': "+param.get("orderSn")+","+
|
||||
"'ExpNo': '"+param.get("ExpNo")+"',"+
|
||||
"}";
|
||||
// 组装系统级参数
|
||||
Map<String, String> params = new HashMap<String, String>();
|
||||
params.put("RequestData", KdUtils.urlEncoder(RequestData, "UTF-8"));
|
||||
params.put("EBusinessID", EBusinessID);
|
||||
params.put("RequestType", "1147");
|
||||
String dataSign=KdUtils.encrypt(RequestData, ApiKey, "UTF-8");
|
||||
params.put("DataSign", KdUtils.urlEncoder(dataSign, "UTF-8"));
|
||||
params.put("DataType", "2");
|
||||
// 以form表单形式提交post请求,post请求体中包含了应用级参数和系统级参数
|
||||
String result=HttpClientUtils.kdSendPost(ReqURL, params);
|
||||
|
||||
// JSONObject json = JSONObject.parseObject(result);
|
||||
// if(json.get("Success").equals("true")){
|
||||
// // TODO 返回值为Success时 存入到系统中的 sys_interface_log 表
|
||||
//
|
||||
// }else{
|
||||
// // TODO 存入到系统中的 sys_interface_fail 表中
|
||||
// // TODO 存入interfaceType 值为 ‘2’ 用作以后人工干预重推 区分是什么接口
|
||||
//
|
||||
// }
|
||||
|
||||
//根据公司业务处理返回的信息......
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* 即时查询接口(增值版)
|
||||
* 此接口用于向快递公司实时查询物流轨迹信息。
|
||||
*
|
||||
* 应用级参数
|
||||
* R-必填(Required),O-可选(Optional),C-报文中该参数在一定条件下可选(Conditional)
|
||||
* OrderCode String(30) O 订单编号
|
||||
* CustomerName String(50) C ShipperCode为SF时必填,对应寄件人/收件人手机号后四位;ShipperCode为其他快递时,可不填或保留字段,不可传值
|
||||
* ShipperCode String(10) R 快递公司编码 详细编码参考《快递鸟接口支持快递公司编码.xlsx》
|
||||
* LogisticCode String(30) R 快递单号
|
||||
*/
|
||||
@RequestMapping("/queryOrder")
|
||||
public static String queryOrderOnlineByJson(@RequestParam Map<String,Object> param) throws Exception{
|
||||
// 组装应用级参数
|
||||
String RequestData= "{"+
|
||||
"'ShipperCode': '"+ param.get("ShipperCode") +"',"+
|
||||
"'LogisticCode': '"+ param.get("LogisticCode") +"',"+
|
||||
"}";
|
||||
// 组装系统级参数
|
||||
Map<String,String> params = new HashMap<String,String>();
|
||||
params.put("RequestData", KdUtils.urlEncoder(RequestData, "UTF-8"));
|
||||
params.put("EBusinessID", EBusinessID);
|
||||
params.put("RequestType", "8001");//在途监控即时查询接口指令8001/地图版即时查询接口指令8003
|
||||
String dataSign=KdUtils.encrypt(RequestData, ApiKey, "UTF-8");
|
||||
params.put("DataSign", KdUtils.urlEncoder(dataSign, "UTF-8"));
|
||||
params.put("DataType", "2");
|
||||
// 以form表单形式提交post请求,post请求体中包含了应用级参数和系统级参数
|
||||
String result=HttpClientUtils.kdSendPost(QueryReqURL, params);
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* 物流跟踪接口(增值版)
|
||||
* 此接口用于向快递鸟订阅物流轨迹信息。
|
||||
*
|
||||
* 应用级参数
|
||||
* R-必填(Required),O-可选(Optional),C-报文中该参数在一定条件下可选(Conditional)
|
||||
* Callback String(50) O 用户自定义回传字段
|
||||
* ShipperCode String(10) R 快递公司编码 详细编码参考《快递鸟接口支持快递公司编码.xlsx》
|
||||
* LogisticCode String(30) R 快递单号
|
||||
* CustomerName String(50) C ShipperCode为SF时必填,对应寄件人/收件人手机号后四位;ShipperCode为其他快递时,可不填或保留字段,不可传值
|
||||
|
||||
*/
|
||||
@RequestMapping("/track")
|
||||
public String trackOrderByJson(@RequestParam Map<String,Object> param) throws Exception{
|
||||
// 组装应用级参数
|
||||
String RequestData= "{"+
|
||||
"'Callback':'OrderCode',"+
|
||||
"'ShipperCode':'" + param.get("ShipperCode") + "',"+
|
||||
"'LogisticCode':'" + param.get("LogisticCode") + "',"+
|
||||
"}";
|
||||
// 组装系统级参数
|
||||
Map<String,String> params = new HashMap<String,String>();
|
||||
params.put("RequestData", KdUtils.urlEncoder(RequestData, "UTF-8"));
|
||||
params.put("EBusinessID", EBusinessID);
|
||||
params.put("RequestType", "8008");//在途监控订阅接口指令8008/地图版订阅接口指令8005
|
||||
// params.put("RequestType", "8005");//在途监控订阅接口指令8008/地图版订阅接口指令8005
|
||||
String dataSign=KdUtils.encrypt(RequestData, ApiKey, "UTF-8");
|
||||
params.put("DataSign", KdUtils.urlEncoder(dataSign, "UTF-8"));
|
||||
params.put("DataType", "2");
|
||||
// 以form表单形式提交post请求,post请求体中包含了应用级参数和系统级参数
|
||||
String result=HttpClientUtils.kdSendPost(TrackReqURL, params);
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* 此接口用于快递鸟推送物流轨迹信息。
|
||||
* @return
|
||||
* @throws Exception
|
||||
*/
|
||||
// TODO 后续编写 获取信息存库 调用消息队列 异步推送给 一路健康 or 疯子读书
|
||||
@RequestMapping("/pushOrder")
|
||||
public String subscribeOrderByJSON() throws Exception{
|
||||
|
||||
|
||||
// JSONObject json = JSONObject.parseObject(result);
|
||||
// if(json.get("Success").equals("true")){
|
||||
// // TODO 返回值为Success时 存入到系统中的 sys_interface_log 表
|
||||
//
|
||||
// }else{
|
||||
// // TODO 存入到系统中的 sys_interface_fail 表中
|
||||
// // TODO 存入interfaceType 值为 ‘5’ 用作以后人工干预重推 区分是什么接口
|
||||
//
|
||||
// }
|
||||
return "";
|
||||
}
|
||||
/**
|
||||
* 即时查询接口(增值版)
|
||||
* 此接口用于向快递公司实时查询物流轨迹信息。
|
||||
* <p>
|
||||
* 应用级参数
|
||||
* R-必填(Required),O-可选(Optional),C-报文中该参数在一定条件下可选(Conditional)
|
||||
* OrderCode String(30) O 订单编号
|
||||
* CustomerName String(50) C ShipperCode为SF时必填,对应寄件人/收件人手机号后四位;ShipperCode为其他快递时,可不填或保留字段,不可传值
|
||||
* ShipperCode String(10) R 快递公司编码 详细编码参考《快递鸟接口支持快递公司编码.xlsx》
|
||||
* LogisticCode String(30) R 快递单号
|
||||
*/
|
||||
@RequestMapping("/queryOrder")
|
||||
public static String queryOrderOnlineByJson(@RequestParam Map<String, Object> param) throws Exception {
|
||||
// 组装应用级参数
|
||||
String RequestData = "{" +
|
||||
"'ShipperCode': '" + param.get("ShipperCode") + "'," +
|
||||
"'LogisticCode': '" + param.get("LogisticCode") + "'," +
|
||||
"}";
|
||||
// 组装系统级参数
|
||||
Map<String, String> params = new HashMap<String, String>();
|
||||
params.put("RequestData", KdUtils.urlEncoder(RequestData, "UTF-8"));
|
||||
params.put("EBusinessID", EBusinessID);
|
||||
params.put("RequestType", "8001");//在途监控即时查询接口指令8001/地图版即时查询接口指令8003
|
||||
String dataSign = KdUtils.encrypt(RequestData, ApiKey, "UTF-8");
|
||||
params.put("DataSign", KdUtils.urlEncoder(dataSign, "UTF-8"));
|
||||
params.put("DataType", "2");
|
||||
// 以form表单形式提交post请求,post请求体中包含了应用级参数和系统级参数
|
||||
String result = HttpClientUtils.kdSendPost(QueryReqURL, params);
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* 物流跟踪接口(增值版)
|
||||
* 此接口用于向快递鸟订阅物流轨迹信息。
|
||||
* <p>
|
||||
* 应用级参数
|
||||
* R-必填(Required),O-可选(Optional),C-报文中该参数在一定条件下可选(Conditional)
|
||||
* Callback String(50) O 用户自定义回传字段
|
||||
* ShipperCode String(10) R 快递公司编码 详细编码参考《快递鸟接口支持快递公司编码.xlsx》
|
||||
* LogisticCode String(30) R 快递单号
|
||||
* CustomerName String(50) C ShipperCode为SF时必填,对应寄件人/收件人手机号后四位;ShipperCode为其他快递时,可不填或保留字段,不可传值
|
||||
*/
|
||||
@RequestMapping("/track")
|
||||
public String trackOrderByJson(@RequestParam Map<String, Object> param) throws Exception {
|
||||
// 组装应用级参数
|
||||
String RequestData = "{" +
|
||||
"'Callback':'OrderCode'," +
|
||||
"'ShipperCode':'" + param.get("ShipperCode") + "'," +
|
||||
"'LogisticCode':'" + param.get("LogisticCode") + "'," +
|
||||
"}";
|
||||
// 组装系统级参数
|
||||
Map<String, String> params = new HashMap<String, String>();
|
||||
params.put("RequestData", KdUtils.urlEncoder(RequestData, "UTF-8"));
|
||||
params.put("EBusinessID", EBusinessID);
|
||||
params.put("RequestType", "8008");//在途监控订阅接口指令8008/地图版订阅接口指令8005
|
||||
String dataSign = KdUtils.encrypt(RequestData, ApiKey, "UTF-8");
|
||||
params.put("DataSign", KdUtils.urlEncoder(dataSign, "UTF-8"));
|
||||
params.put("DataType", "2");
|
||||
// 以form表单形式提交post请求,post请求体中包含了应用级参数和系统级参数
|
||||
String result = HttpClientUtils.kdSendPost(TrackReqURL, params);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user