package com.iamberry.rst.utils; import com.alibaba.fastjson.JSONObject; import com.iamberry.rst.core.order.EOrderRequestData; import com.iamberry.wechat.tools.HttpClient431Util; import com.sun.org.apache.xml.internal.security.utils.Base64; import java.io.FileOutputStream; import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.security.MessageDigest; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * @author 献 * @company 深圳爱贝源科技有限公司 * @date 2018/5/25 17:50 * @tel 18271840547 * @website www.iamberry.com */ public class OrderUtils { //电商ID private static final String EBusinessID="1343593"; //电商加密私钥,快递鸟提供 private static final String AppKey="3597c368-9dc0-40b5-9cf2-86d9cb90e38a"; // 正式环境地址:http://api.kdniao.cc/api/Eorderservice // 测试环境地址:http://testapi.kdniao.cc:8081/api/EOrderService private static final String ReqURL="http://api.kdniao.cc/api/Eorderservice"; public static void main(String[] args) throws Exception { EOrderRequestData eOrderRequestData = new EOrderRequestData(); eOrderRequestData.setShipperCode("SF"); eOrderRequestData.setOrderCode("28230283280823"); eOrderRequestData.setPayType(1); eOrderRequestData.setExpType("1"); eOrderRequestData.setCost(3680.00); eOrderRequestData.setOtherCost(0.0); // 收件人信息 Map Receiver = new HashMap(); Receiver.put("Name", "何秀刚"); Receiver.put("Tel", "18989890909"); Receiver.put("ProvinceName", "广东省"); Receiver.put("CityName", "深圳市"); Receiver.put("Address", "莲花街道深南大道特区报业大厦12B"); eOrderRequestData.setReceiver(Receiver); // 发件人信息 Map Sender = new HashMap(); Sender.put("Name", "何秀刚"); Sender.put("Tel", "18778780808"); Sender.put("ProvinceName", "广东省"); Sender.put("CityName", "深圳市"); Sender.put("Address", "莲花街道深南大道特区报业大厦12B"); eOrderRequestData.setSender(Sender); // 产品信息 List> Commodity = new ArrayList<>(); Map product1 = new HashMap(); product1.put("GoodsName", "美国WaterO净饮水一体机"); Map product2 = new HashMap(); product2.put("GoodsName", "爱贝源智能冲奶机M1"); Commodity.add(product1); // Commodity.add(product2); eOrderRequestData.setCommodity(Commodity); eOrderRequestData.setWeight(11.9); eOrderRequestData.setQuantity(2); eOrderRequestData.setIsReturnPrintTemplate(1); // 执行 String json = orderOnlineByJson(eOrderRequestData); System.out.println(json); JSONObject jsonObject = JSONObject.parseObject(json); Object template = jsonObject.get("PrintTemplate"); // 写入本地磁盘 OutputStream outputStream = new FileOutputStream("C:\\Users\\Administrator\\Desktop\\test.html"); outputStream.write(template.toString().getBytes("UTF-8")); outputStream.flush(); outputStream.close(); } /** * Json方式 电子面单 * @throws Exception */ public static String orderOnlineByJson(EOrderRequestData orderRequestData) throws Exception { // 生成电子面单的请求数据 String requestData = JSONObject.toJSONString(orderRequestData); // 生成系统级请求数据 Map params = new HashMap(); params.put("RequestData", urlEncoder(requestData, "UTF-8")); params.put("EBusinessID", EBusinessID); params.put("RequestType", "1007"); String dataSign=encrypt(requestData, AppKey, "UTF-8"); params.put("DataSign", urlEncoder(dataSign, "UTF-8")); params.put("DataType", "2"); // 发送请求 return HttpClient431Util.doPost(params, ReqURL); } /** * 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(); } /** * 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); } }