123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177 |
- package com.iamberry.rst.service.kdn;
- import com.alibaba.fastjson.JSONArray;
- import com.alibaba.fastjson.JSONObject;
- import com.iamberry.rst.faces.kdn.KuaiDiNiaoService;
- import com.iamberry.wechat.tools.HttpClient431Util;
- import com.sun.org.apache.xml.internal.security.utils.Base64;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.stereotype.Service;
- import java.io.*;
- import java.net.URLEncoder;
- import java.security.MessageDigest;
- import java.util.HashMap;
- import java.util.Map;
- @Service
- public class KuaiDiNiaoServiceImpl implements KuaiDiNiaoService {
- private static Logger LOGGER = LoggerFactory.getLogger(KuaiDiNiaoServiceImpl.class);
- private static String ERRORPATH = "D:\\testJavaPath\\error.txt";
- private static String SUCCESSPATH = "D:\\testJavaPath\\success.txt";
- //电商ID
- private static final String EBusinessID="1343593";
- //电商加密私钥,快递鸟提供
- private static final String AppKey="3597c368-9dc0-40b5-9cf2-86d9cb90e38a";
- //单号识别API
- private final static String URL = "http://api.kdniao.com/Ebusiness/EbusinessOrderHandle.aspx";
- //获取EBusinessID
- public String getEBusinessID(){
- return EBusinessID;
- }
- @Override
- public String selectCourierCompany(String code) {
- String courierCompang="";
- Map<String,Object> requestMap = new HashMap();
- requestMap.put("LogisticCode",code);
- try {
- // 第三方接口对时效性有要求,并发数不超过多少,此处Sleep 1200ms
- Thread.sleep(1200);
- // 生成电子面单的请求数据
- String requestData = JSONObject.toJSONString(requestMap);
- // 生成系统级请求数据
- Map<String, String> params = new HashMap<String, String>();
- params.put("RequestData", urlEncoder(requestData, "UTF-8"));
- params.put("EBusinessID", EBusinessID);
- params.put("RequestType", "2002");
- String dataSign=encrypt(requestData, AppKey, "UTF-8");
- params.put("DataSign", urlEncoder(dataSign, "UTF-8"));
- params.put("DataType", "2");
- // 发送请求
- String json = HttpClient431Util.doPost(params, URL);
- Map responseMap = JSONObject.parseObject(json);
- JSONArray shippersAyyar = (JSONArray) responseMap.get("Shippers");
- if(shippersAyyar.size() < 1){
- LOGGER.info("=========快递单号:"+code+";查询不到快递公司");
- String errorMsg = "快递单号:" + code+";查询不到快递公司+"+"\n";
- writeTxt(ERRORPATH,errorMsg);
- }
- if(shippersAyyar.size()>0 && shippersAyyar.size() < 2){
- JSONObject job = shippersAyyar.getJSONObject(0); // 遍历 jsonarray 数组,把每一个对象转成 json 对象
- String shipperName = (String) job.get("ShipperName");
- String shipperCode = (String) job.get("ShipperCode");
- courierCompang = shipperCode;
- if(courierCompang == null || "".equals(courierCompang) ){
- LOGGER.info("=========快递单号:"+code+";查询不到快递公司,其中有一个快递公司");
- String errorMsg = "快递单号:" + code+";查询不到快递公司+"+"\n";
- writeTxt(ERRORPATH,errorMsg);
- }else{
- LOGGER.info("=========快递单号:"+code+";查询成功,快递公司:"+shipperName+":"+shipperCode);
- String errorMsg = "快递单号:" + code+"快递公司:"+shipperName+":"+shipperCode +"\n";
- writeTxt(SUCCESSPATH,errorMsg);
- }
- }else{
- StringBuffer company = new StringBuffer();
- for(int i=0;i<shippersAyyar.size();i++){
- JSONObject job = shippersAyyar.getJSONObject(i);
- company.append(job.get("ShipperName")+":");
- company.append(job.get("ShipperCode")+";");
- }
- LOGGER.info("=========快递单号:"+code+";查询到多个快递公司:"+company.toString());
- String errorMsg = "快递单号:"+code+";查询到多个快递公司:"+company.toString()+"\n";
- writeTxt(ERRORPATH,errorMsg);
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- return courierCompang;
- }
- /**
- * 写入文件
- * @param path
- * @param s
- */
- public static void writeTxt(String path,String s){
- File file = new File(path);
- try{
- FileWriter fw = new FileWriter(file, true);
- if(!file.exists()){
- file.createNewFile();
- }
- BufferedWriter bw = new BufferedWriter(fw);
- PrintWriter pw = new PrintWriter(bw);
- pw.println(s);
- pw.flush();
- fw.flush();
- pw.close();
- fw.close();
- }catch (Exception e){
- e.printStackTrace();
- }
- }
- /**
- * base64编码
- * @param str 内容
- * @param charset 编码方式
- * @throws UnsupportedEncodingException
- */
- private static String base64(String str, String charset) throws UnsupportedEncodingException {
- return Base64.encode(str.getBytes(charset));
- }
- @SuppressWarnings("unused")
- private static String urlEncoder(String str, String charset) throws UnsupportedEncodingException {
- return URLEncoder.encode(str, charset);
- }
- /**
- * 电商Sign签名生成
- * @param content 内容
- * @param keyValue Appkey
- * @param charset 编码方式
- * @throws UnsupportedEncodingException ,Exception
- * @return DataSign签名
- */
- @SuppressWarnings("unused")
- private static String encrypt (String content, String keyValue, String charset) throws UnsupportedEncodingException, Exception {
- if (keyValue != null)
- {
- return base64(MD5(content + keyValue, charset), charset);
- }
- return base64(MD5(content, charset), charset);
- }
- /**
- * MD5加密
- * @param str 内容
- * @param charset 编码方式
- * @throws Exception
- */
- @SuppressWarnings("unused")
- private static String MD5(String str, String charset) throws Exception {
- MessageDigest md = MessageDigest.getInstance("MD5");
- md.update(str.getBytes(charset));
- byte[] result = md.digest();
- StringBuilder sb = new StringBuilder(32);
- for (byte aResult : result) {
- int val = aResult & 0xff;
- if (val <= 0xf) {
- sb.append("0");
- }
- sb.append(Integer.toHexString(val));
- }
- return sb.toString().toLowerCase();
- }
- }
|