對接快遞100 查看快遞信息

快遞100工具類

package com.ctrl.akuaidi100.Util;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;


/**
 * 實時查詢請求Demo
 * @author Administrator
 *
 */
public class SynQueryDemo {

    /**
     * 實時查詢請求地址
     */
    private static final String SYNQUERY_URL = "http://poll.kuaidi100.com/poll/query.do";

    private String key;			//受權key
    private String customer;	//實時查詢公司編號

    public SynQueryDemo(String key, String customer) {
        this.key = key;
        this.customer = customer;
    }

    /**
     * 實時查詢快遞單號
     * @param com			快遞公司編碼
     * @param num			快遞單號
     * @param phone			手機號
     * @param from			出發地城市
     * @param to			目的地城市
     * @param resultv2		開通區域解析功能:0-關閉;1-開通
     * @return
     */
    public String synQueryData(String com, String num, String phone, String from, String to, int resultv2) {
        String order = "desc";
        String show = "0";
        StringBuilder param = new StringBuilder("{");
        param.append("\"com\":\"").append(com).append("\"");
        param.append(",\"num\":\"").append(num).append("\"");
        param.append(",\"from\":\"").append(from).append("\"");
        param.append(",\"phone\":\"").append(phone).append("\"");
        param.append(",\"to\":\"").append(to).append("\"");
        if(1 == resultv2) {
            param.append(",\"resultv2\":1");
        } else {
            param.append(",\"resultv2\":0");
        }
        param.append(",\"show\":\"").append(show).append("\"");
        param.append(",\"order\":\"").append(order).append("\"");
        param.append("}");
        Map<String, String> params = new HashMap<String, String>();
        params.put("customer", this.customer);
        String sign = MD5Utils.encode(param + this.key + this.customer);
        //對漢字進行加密有問題 與快遞100加密的匹配不上
        params.put("sign", sign);
        params.put("param", param.toString());
        return this.post(params);
    }

    /**
     * 發送post請求
     */
    public String post(Map<String, String> params) {
        StringBuffer response = new StringBuffer("");

        BufferedReader reader = null;
        try {
            StringBuilder builder = new StringBuilder();
            for (Map.Entry<String, String> param : params.entrySet()) {
                if (builder.length() > 0) {
                    builder.append('&');
                }
                builder.append(URLEncoder.encode(param.getKey(), "UTF-8"));
                builder.append('=');
                builder.append(URLEncoder.encode(String.valueOf(param.getValue()), "UTF-8"));
            }
            byte[] bytes = builder.toString().getBytes("UTF-8");

            URL url = new URL(SYNQUERY_URL);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setConnectTimeout(3000);
            conn.setReadTimeout(3000);
            conn.setRequestMethod("POST");
            conn.setRequestProperty("accept", "*/*");
            conn.setRequestProperty("connection", "Keep-Alive");
            conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
            conn.setRequestProperty("Content-Length", String.valueOf(bytes.length));
            conn.setDoOutput(true);
            conn.getOutputStream().write(bytes);

            reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));

            String line = "";
            while ((line = reader.readLine()) != null) {
                response.append(line);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (null != reader) {
                    reader.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return response.toString();
    }
}

MD5加密

package com.ctrl.akuaidi100.Util;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
/**
 * md5加密
 */
public class MD5Utils {
    private static MessageDigest mdigest = null;
    private static char digits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};

    private static MessageDigest getMdInst() {
        if (null == mdigest) {
            try {
                mdigest = MessageDigest.getInstance("MD5");
            } catch (NoSuchAlgorithmException e) {
                e.printStackTrace();
            }
        }
        return mdigest;
    }

    public static String encode(String s) {
        if(null == s) {
            return "";
        }

        try {
            byte[] bytes = s.getBytes();
            getMdInst().update(bytes);
            byte[] md = getMdInst().digest();
            int j = md.length;
            char str[] = new char[j * 2];
            int k = 0;
            for (int i = 0; i < j; i++) {
                byte byte0 = md[i];
                str[k++] = digits[byte0 >>> 4 & 0xf];
                str[k++] = digits[byte0 & 0xf];
            }
            return new String(str);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}

Controller層

package com.ctrl.mobile.ctrlAppController.akuaidi100;

import com.alibaba.fastjson.JSON;
import com.ctrl.akuaidi100.Util.SynQueryDemo;
import com.ctrl.ctrlexpressdeliveryinfo.entity.CtrlExpressDeliveryInfo;
import com.ctrl.ctrlexpressdeliveryinfo.service.CtrlExpressDeliveryInfoService;
import com.ctrl.ctrlorderinfo.entity.CtrlOrderInfo;
import com.ctrl.ctrlorderinfo.service.CtrlOrderInfoService;
import com.ctrl.mobile.respUtils.ApiResponseEnum;
import com.ctrl.mobile.respUtils.AppMessage;
import com.ctrl.mobile.respUtils.CtrlApiUtil;
import com.ctrl.mobile.respUtils.RespUtils;
import com.thinkgem.jeesite.common.mapper.JsonMapper;
import com.thinkgem.jeesite.common.persistence.Page;
import com.thinkgem.jeesite.common.utils.StringUtils;
import com.thinkgem.jeesite.common.web.BaseController;
import org.activiti.engine.impl.util.json.JSONArray;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.LinkedHashMap;
import java.util.Map;

@Controller
@RequestMapping(value = "/app/AKuaiDi100",method = RequestMethod.POST)
public class AKuaiDi100 extends BaseController {
    @Value("${kuaiDi.key}")
    private String key;
    @Value("${kuaiDi.customer}")
    private String customer;
    @Value("${kuaiDi.requestMethod}")
    private String requestMethod;
    @Autowired
    private CtrlOrderInfoService ctrlOrderInfoService;
    @Autowired
    private CtrlExpressDeliveryInfoService ctrlExpressDeliveryInfoService;

    /**
     * @Author Lipeimin
     * @Description //TODO  //獲取快遞信息
     * @Date 2019/10/16
     * @Param [request, response, lists]
     * @return java.lang.String
     **/
    @RequestMapping("getKuaiDi100")
    public String  getKuaiDi100(HttpServletResponse response, HttpServletRequest request ,CtrlOrderInfo ctrlOrderInfo){
        Map<String,Object> maps = new LinkedHashMap<String, Object>();
        int resultv2 = 0;       //開啓行政規劃解析
        String result = "";
        if(StringUtils.isNotBlank(ctrlOrderInfo.getId())){
            CtrlOrderInfo ctrlOrderInfo1 = ctrlOrderInfoService.get(ctrlOrderInfo.getId());
            SynQueryDemo demo = new SynQueryDemo(key, customer);
            //獲取手機號碼的後四位
            String phone=ctrlOrderInfo1.getReceiverPhone().substring(ctrlOrderInfo1.getReceiverPhone().length()-4);
            String url = "http://www.kuaidi100.com/autonumber/auto?num="+ctrlOrderInfo1.getNum()+"&key="+key;
            //經過運單號 自動獲取快遞公司的簡稱
            JSONArray jsonArray = new JSONArray(httpRequest(url,requestMethod,null));
            String com =jsonArray.getJSONObject(0).get("comCode").toString();
            result = demo.synQueryData(com, ctrlOrderInfo1.getNum(), phone, null, null, resultv2);
            maps = (Map) JSON.parse(result);
            RespUtils.getMsgSuccess(maps);
            maps.put("kuaidi",ctrlOrderInfo1.getCom());
        }else{
            maps.put(AppMessage.MESSAGE, CtrlApiUtil.getApiResponseErrpr(ApiResponseEnum.PARAMETER_EXCEPTION));
        }
        return renderString(response, JsonMapper.toJsonString(maps), "application/json");

    }
    //處理http請求  requestUrl爲請求地址  requestMethod請求方式,值爲"GET"或"POST" 
    public String httpRequest(String requestUrl,String requestMethod,String outputStr){
        StringBuffer buffer=null;
        try{
            URL url=new URL(requestUrl);
            HttpURLConnection conn=(HttpURLConnection)url.openConnection();
            conn.setDoOutput(true);
            conn.setDoInput(true);
            conn.setRequestMethod(requestMethod);
            conn.connect();
            //往服務器端寫內容 也就是發起http請求須要帶的參數
            if(null!=outputStr){
                OutputStream os=conn.getOutputStream();
                os.write(outputStr.getBytes("utf-8"));
                os.close();
            }

            //讀取服務器端返回的內容
            InputStream is=conn.getInputStream();
            InputStreamReader isr=new InputStreamReader(is,"utf-8");
            BufferedReader br=new BufferedReader(isr);
            buffer=new StringBuffer();
            String line=null;
            while((line=br.readLine())!=null){
                buffer.append(line);
            }
        }catch(Exception e){
            e.printStackTrace();
        }
        return buffer.toString();
    }


}

訂單實體類

/**
 * Copyright &copy; 2012-2016 <a href="https://github.com/thinkgem/jeesite">JeeSite</a> All rights reserved.
 */
package com.ctrl.ctrlorderinfo.entity;

import com.ctrl.ctrlmemberinfo.entity.CtrlMemberInfo;
import com.ctrl.ctrlshoppingcart.entity.CtrlShoppingCart;
import com.ctrl.mobile.ctrlAppController.shoppingcart.ShoppingCart;
import org.hibernate.validator.constraints.Length;
import java.util.List;
import com.google.common.collect.Lists;

import com.thinkgem.jeesite.common.persistence.DataEntity;

/**
 * 訂單信息管理Entity
 * @author swordmeng
 * @version 2019-08-22
 */
public class CtrlOrderInfo extends DataEntity<CtrlOrderInfo> {
	
	private static final long serialVersionUID = 1L;
	private String orderCode;		// 訂單編號
	private String memberId;		// 藝術家/會員id
	private String buyerId;		// 購買人id
	private String receiver;		// 收貨人
	private String receiverPhone;		// 收貨人手機號
	private String orderAddr;		// 收貨地址
	private String leaveComments;		// 留言
	private String deduction;		// 優惠券減免額
	private String fare;		// 運費
	private String realPay;		// 實付款
	private String orderStatus;		// 訂單狀態
	private String payMethod;		// 支付方式
	private String totalAmount;		// 商品總額
	private String balancePay;		// 餘額支付額
	private String payWechatAlipay;		// 支付寶/微信支付額
	private String orderType;
	private CtrlMemberInfo ctrlMemberInfo; // 會員表實體類
	private List<CtrlOrderInfoChild> ctrlOrderInfoChildList = Lists.newArrayList();		// 子表列表
	private List<CtrlOrderInfoChild> orderInfoChildList;
	private List<String> idList;
	private Integer sizePage;//一頁顯示多少數據
	private Integer noPage;//第幾頁
	private Integer startPage;//開始位置
	private List<CtrlOrderInfo> lists;
	private Double befores;//優惠前
	private Double afters;//優惠後
	private List<CtrlShoppingCart> shoppingCartList;
	private String com;//快遞公司
	private String num;//單號
	private String froms;//發貨地址
	
	public CtrlOrderInfo() {
		super();
	}

	public CtrlOrderInfo(String id){
		super(id);
	}

	@Length(min=0, max=50, message="訂單編號長度必須介於 0 和 50 之間")
	public String getOrderCode() {
		return orderCode;
	}

	public void setOrderCode(String orderCode) {
		this.orderCode = orderCode;
	}
	
	@Length(min=0, max=64, message="藝術家/會員id長度必須介於 0 和 64 之間")
	public String getMemberId() {
		return memberId;
	}

	public void setMemberId(String memberId) {
		this.memberId = memberId;
	}
	
	@Length(min=0, max=255, message="購買人id長度必須介於 0 和 255 之間")
	public String getBuyerId() {
		return buyerId;
	}

	public void setBuyerId(String buyerId) {
		this.buyerId = buyerId;
	}
	
	@Length(min=0, max=255, message="收貨人長度必須介於 0 和 255 之間")
	public String getReceiver() {
		return receiver;
	}

	public void setReceiver(String receiver) {
		this.receiver = receiver;
	}
	
	@Length(min=0, max=11, message="收貨人手機號長度必須介於 0 和 11 之間")
	public String getReceiverPhone() {
		return receiverPhone;
	}

	public void setReceiverPhone(String receiverPhone) {
		this.receiverPhone = receiverPhone;
	}
	
	@Length(min=0, max=255, message="收貨地址長度必須介於 0 和 255 之間")
	public String getOrderAddr() {
		return orderAddr;
	}

	public void setOrderAddr(String orderAddr) {
		this.orderAddr = orderAddr;
	}
	
	@Length(min=0, max=4000, message="留言長度必須介於 0 和 4000 之間")
	public String getLeaveComments() {
		return leaveComments;
	}

	public void setLeaveComments(String leaveComments) {
		this.leaveComments = leaveComments;
	}
	
	public String getDeduction() {
		return deduction;
	}

	public void setDeduction(String deduction) {
		this.deduction = deduction;
	}
	
	public String getFare() {
		return fare;
	}

	public void setFare(String fare) {
		this.fare = fare;
	}
	
	public String getRealPay() {
		return realPay;
	}

	public void setRealPay(String realPay) {
		this.realPay = realPay;
	}
	
	@Length(min=0, max=1, message="訂單狀態長度必須介於 0 和 1 之間")
	public String getOrderStatus() {
		return orderStatus;
	}

	public void setOrderStatus(String orderStatus) {
		this.orderStatus = orderStatus;
	}
	
	@Length(min=0, max=1, message="支付方式長度必須介於 0 和 1 之間")
	public String getPayMethod() {
		return payMethod;
	}

	@Length(min=0, max=1, message="訂單狀類型度必須介於 0 和 1 之間")
	public String getOrderType() {
		return orderType;
	}

	public void setOrderType(String orderType) {
		this.orderType = orderType;
	}

	public void setPayMethod(String payMethod) {
		this.payMethod = payMethod;
	}
	
	public String getTotalAmount() {
		return totalAmount;
	}

	public void setTotalAmount(String totalAmount) {
		this.totalAmount = totalAmount;
	}
	
	public String getBalancePay() {
		return balancePay;
	}

	public void setBalancePay(String balancePay) {
		this.balancePay = balancePay;
	}
	
	public String getPayWechatAlipay() {
		return payWechatAlipay;
	}

	public void setPayWechatAlipay(String payWechatAlipay) {
		this.payWechatAlipay = payWechatAlipay;
	}
	
	public List<CtrlOrderInfoChild> getCtrlOrderInfoChildList() {
		return ctrlOrderInfoChildList;
	}

	public void setCtrlOrderInfoChildList(List<CtrlOrderInfoChild> ctrlOrderInfoChildList) {
		this.ctrlOrderInfoChildList = ctrlOrderInfoChildList;
	}

	public CtrlMemberInfo getCtrlMemberInfo() {
		return ctrlMemberInfo;
	}

	public void setCtrlMemberInfo(CtrlMemberInfo ctrlMemberInfo) {
		this.ctrlMemberInfo = ctrlMemberInfo;
	}

	public List<CtrlOrderInfoChild> getOrderInfoChildList() {
		return orderInfoChildList;
	}

	public void setOrderInfoChildList(List<CtrlOrderInfoChild> orderInfoChildList) {
		this.orderInfoChildList = orderInfoChildList;
	}

	public List<String> getIdList() {
		return idList;
	}

	public void setIdList(List<String> idList) {
		this.idList = idList;
	}

	public Integer getSizePage() {
		return sizePage;
	}

	public void setSizePage(Integer sizePage) {
		this.sizePage = sizePage;
	}

	public Integer getNoPage() {
		return noPage;
	}

	public void setNoPage(Integer noPage) {
		this.noPage = noPage;
	}

	public Integer getStartPage() {
		return startPage;
	}

	public void setStartPage(Integer startPage) {
		this.startPage = startPage;
	}

	public List<CtrlOrderInfo> getLists() {
		return lists;
	}

	public void setLists(List<CtrlOrderInfo> lists) {
		this.lists = lists;
	}

	public Double getBefore() {
		return befores;
	}

	public void setBefore(Double befores) {
		this.befores = befores;
	}

	public Double getAfter() {
		return afters;
	}

	public void setAfter(Double afters) {
		this.afters = afters;
	}

	public List<CtrlShoppingCart> getShoppingCartList() {
		return shoppingCartList;
	}

	public void setShoppingCartList(List<CtrlShoppingCart> shoppingCartList) {
		this.shoppingCartList = shoppingCartList;
	}

	public String getCom() {
		return com;
	}

	public void setCom(String com) {
		this.com = com;
	}

	public String getNum() {
		return num;
	}

	public void setNum(String num) {
		this.num = num;
	}

	public String getFroms() {
		return froms;
	}

	public void setFroms(String froms) {
		this.froms = froms;
	}
}

配置文件

#============================#
#===== 快遞100配置信息 ======#
#============================#
kuaiDi.key=
kuaiDi.customer=
#  requestMethod請求方式,值爲"GET"或"POST"
kuaiDi.requestMethod=POST
相關文章
相關標籤/搜索