package xin.glue.cargocnHttpClient; import java.io.ByteArrayOutputStream; import java.io.PrintStream; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; import org.apache.commons.lang.StringUtils; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.posdata.glue.biz.activity.PosActivity; import com.posdata.glue.context.PosContext; import com.posdata.glue.dao.PosGenericDao; import com.posdata.glue.dao.vo.PosParameter; import com.posdata.glue.dao.vo.PosRow; import com.posdata.glue.dao.vo.PosRowSet; /** * 货运中国--远程调用物流跟踪平台接口上传数据类 * * @author KangMiao * @Date 2015-4-13 下午03:25:53 * */ public class WayBillClient extends PosActivity { /** * 远程测试用的地址http://dev.cargocn.net/cargocn/ws/uploadWayBill.do */ private static String testUrl = "http://dev.cargocn.net/cargocn/ws/uploadWayBill.do"; /** * 正式调用地址http://www.cargocn.net/cargocn/ws/uploadWayBill.do * 货运中国ip地址:120.26.85.206; */ private static String runUrl = "http://120.26.85.206/cargocn/ws/uploadWayBill.do"; /** * 中转地址http://192.168.3.3:8060/XGToCargocnServer/server/ForwardCargocn-SendRZ * ST:ST_1234 */ private static String forwardUrl = "http://192.168.3.3:8060/XGToCargocnServer/server/ForwardCargocn-SendRZ"; /** * 调用物流跟踪平台接口方法,将订单数据通过此方法上传给物流跟踪平台系统; * @param pDlivDirNos运输指示号,TRNF_DTIMEs发货时间,ORD_NMs收货单位,GET_ON_PCDs发货地址,DEST_PCD_DESC收货地址, * COIL_WGTs钢卷实际重量(ACT_WGT),CUST_NMs合同单位,SHIP_COMP_CDs运输公司,TRANS_CAR_NOs车号 * ,SPEC_STL_GRDs牌号,OLD_SAMPL_NOs钢卷号,SM_CFNMs产品名称 * @return result解密后得到的返回值返回0为成功调用,所有非0均为非成功调用,目前返回值如下: 1000:签名验证失败 1001:运单对象不得为空 1002:发货人ID不得为空 1003:发货人信息加载出错 1004:发货人状态不正常 1005:订单号不得为空 1006:承运商不得为空 1007:承运商信息加载出错 1008:承运商没在货运中国平台开户 1009:运单子项不得为空 1010:车牌号不得为空 1011:车牌号信息加载出错 1012:车牌号没在货运中国平台注册 1013:该车辆在货运中国平台尚未关联司机帐号 */ public String cargocnClientPost(String[] pDlivDirNos, String[] TRNF_DTIMEs, String[] ORD_NMs, String[] DEST_PCD_DESCs, String[] COIL_WGTs, String[] CUST_NMs, String[] SHIP_COMP_CDs, String[] TRANS_CAR_NOs, String[] OLD_SAMPL_NOs, String[] SPEC_STL_GRDs, String[] SM_CFNMs,String[] SHIP_COMP_NMs,PosGenericDao dao) { int iCnt = 0; if (null != pDlivDirNos && 0 != pDlivDirNos.length) { iCnt = pDlivDirNos.length; } else return "返回结果:1001;"; Set dlivNoSet = new HashSet(); Map wayMap = new HashMap(); //汇总处理 for (int i = 0; i < iCnt; i++) { try { if(!dlivNoSet.contains(pDlivDirNos[i])) { // 主数据 WayBill b = new WayBill(); // 运送指示号 b.setOrderNo(pDlivDirNos[i]); // 默认1销售物流, 2:采购物流 3:内部物流 b.setOrderType("1"); // 发运日期TRNF_DTIME SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String trnFTime = TRNF_DTIMEs[i]; Date sendDate = null; if(StringUtils.isEmpty(trnFTime) || "-".equals(trnFTime)) sendDate = Calendar.getInstance().getTime(); else sendDate = sdf.parse(trnFTime); b.setScheduleSendDate(sendDate); // 发货企业代码, 物流跟踪平台给出的新钢集团代码6 b.setShipperCompanyId(Long.valueOf(6)); // 发货城市 b.setShipperCity("新余市"); // 发货地点 GET_ON_PCD 热轧系统默认为热卷厂 b.setShipperAddr("热卷厂"); // 收货单位 ORD_NMs String ordNm = ORD_NMs[i]; if(StringUtils.isEmpty(ordNm)) { ordNm = CUST_NMs[i]; } b.setReceiveCompanyName(ordNm); //通过到站地点从产销数据库查收货城市、收货人、电话 PosParameter param5 = new PosParameter(); param5.setWhereClauseParameter(0, DEST_PCD_DESCs[i]); PosRowSet rows5 = getDao("mesdao").find("UIJ010060_cx.select", param5); if(rows5.hasNext()){ PosRow row = rows5.next(); Object receiveCity = row.getAttribute("UNLOADDOCK"); //收货城市 Object receiveNM = row.getAttribute("SHR"); //收货人 Object receivePhone = row.getAttribute("SHRDH"); //收货人电话 if(null != receiveCity) b.setReceiveCity(receiveCity.toString()); //收货城市 else b.setReceiveCity(DEST_PCD_DESCs[i]); // b.setReceiveCity("新余市"); if(null != receiveNM) b.setReceiveContactName(receiveNM.toString()); //收货联系人 else b.setReceiveContactName(""); if(null != receivePhone) b.setReceiveContactPhone(receivePhone.toString()); //收货联系人电话 else b.setReceiveContactPhone(""); } // 到站地点 DEST_PCD_DESC b.setReceiveAddr(DEST_PCD_DESCs[i]); // 合同单位 b.setCustomerName(CUST_NMs[i]); // 运输公司若名字SHIP_COMP_NMs为空则用 SHIP_COMP_CDs[i] 新余中新物流有限公司 // b.setLogisticsCompanyName("新余中新物流有限公司"); if(StringUtils.isEmpty(SHIP_COMP_NMs[i])) { b.setLogisticsCompanyName(SHIP_COMP_CDs[i]); } else b.setLogisticsCompanyName(SHIP_COMP_NMs[i]); // 明细打印日期(实际发运日期)当前时间 b.setLoadDate(Calendar.getInstance().getTime()); // 车牌号 b.setCarNo(TRANS_CAR_NOs[i]); // b.setCarNo("赣K12345"); // 明细数据 WayBillItem wbi = new WayBillItem(); // 钢卷号或者块序号OLD_SAMPL_NOs wbi.setPackageNo(OLD_SAMPL_NOs[i]); // 钢种SPEC_STL_GRDs wbi.setGradeNo(SPEC_STL_GRDs[i]); // 产品名称SM_CFNM wbi.setProductName(SM_CFNMs[i]); // 过磅重量 wbi.setWeight(Double.valueOf(COIL_WGTs[i])/1000); // 实际过磅重量 wbi.setLoadWeight(Double.valueOf(COIL_WGTs[i])/1000); // 装车件数 wbi.setNums(Integer.valueOf(1)); // 实际装车件数 wbi.setLoadNums(Integer.valueOf(1)); ArrayList wItem = new ArrayList(); wItem.add(wbi); b.setWayBillItems(wItem); dlivNoSet.add(pDlivDirNos[i]); wayMap.put(pDlivDirNos[i], b); } else { WayBill wb = wayMap.get(pDlivDirNos[i]); // 明细数据 WayBillItem wbi = new WayBillItem(); // 钢卷号或者块序号OLD_SAMPL_NOs wbi.setPackageNo(OLD_SAMPL_NOs[i]); // 钢种SPEC_STL_GRDs wbi.setGradeNo(SPEC_STL_GRDs[i]); // 产品名称SM_CFNM wbi.setProductName(SM_CFNMs[i]); // 过磅重量 wbi.setWeight(Double.valueOf(COIL_WGTs[i])/1000); // 实际过磅重量 wbi.setLoadWeight(Double.valueOf(COIL_WGTs[i])/1000); // 装车件数 wbi.setNums(Integer.valueOf(1)); // 实际装车件数 wbi.setLoadNums(Integer.valueOf(1)); ArrayList wItem = wb.getWayBillItems(); wItem.add(wbi); } } catch (Exception e) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); e.printStackTrace(new PrintStream(baos)); String exception = baos.toString(); String errStr = "\n错误原因:" + exception; e.printStackTrace(); return errStr; } } // //公钥文件路径 // String pubPath = "/" + WayBillClient.class.getResource("/") + "cargocn_server_pub.key"; // //私钥文件路径 // String priPath = "/" + WayBillClient.class.getResource("/") + "cargocn_client_pri.p8"; //String[] restr = new String[wayMap.size()]; StringBuffer restr = new StringBuffer("共: [" + wayMap.size() + "]条,返回结果:"); String restr0 = "发送成功!"; for (WayBill value : wayMap.values()) { try { // 总件数 value.setLoadTotalNums(value.getWayBillItems().size()); // 总重量COIL_WGTs Double totalW = 0.0; for(WayBillItem item : value.getWayBillItems()){ totalW += item.getLoadWeight(); } value.setLoadTotalWeight(totalW); // json格式转换 String bill = JSON.toJSONString(value); //System.out.println("billJSON:" + bill); //直接用json数据加密传输会出现中文乱码,这里转换成unicode编码 bill = ChangeCharset.stringToUnicode(bill); System.out.println("unicBill:" + bill); // 公钥加密 // byte[] cipherData = RSAUtils.encryptByPublicKey(bill.getBytes(), RSAUtils.loadKeyStr("PUB")); String path = value.getClass().getClassLoader().getResource("cargocn_server_pub.key").getPath(); byte[] cipherData = RSAUtils.encryptByPublicKey(bill.getBytes(), RSAUtils.loadPublicKeyByFile(path)); String cipher = Base64.encode(cipherData); //System.out.println("cipher:" + cipher); // 私钥加密 // String signstr = RSAUtils.sign(cipher.getBytes(),RSAUtils.loadKeyStr("PRI")); String signstr = RSAUtils.sign(cipher.getBytes(), RSAUtils.loadPrivateKeyByFile(value.getClass().getClassLoader() .getResource("cargocn_client_pri.p8").getPath())); //System.out.println("signstr:" + signstr); // 远程接口地址 HttpPostUtil hu = new HttpPostUtil(forwardUrl); // 发送请求 String ret = hu.post(cipher, signstr); // 转换请求返回参数json // JSONObject jo = JSON.parseObject(ret); // restr.append("\n jo:" + jo.size()); // String result = jo.getString("result"); // String resultSign = jo.getString("sign"); // // 验证签名 //// boolean tmp = RSAUtils.verify(result.getBytes(), RSAUtils.loadKeyStr("PUB"), resultSign); // boolean tmp = RSAUtils.verify(result.getBytes(), // RSAUtils.loadPublicKeyByFile(value.getClass().getClassLoader() // .getResource("cargocn_server_pub.key").getPath()),resultSign); // restr.append("\n tmp:" + tmp); // if (tmp) { // // 解密 //// byte[] res = RSAUtils.decryptByPrivateKey(Base64.decode(result), RSAUtils.loadKeyStr("PRI")); // byte[] res = RSAUtils.decryptByPrivateKey(Base64.decode(result), RSAUtils // .loadPrivateKeyByFile(value.getClass().getClassLoader() // .getResource("cargocn_client_pri.p8").getPath())); // String res0 = new String(res); System.out.println("返回值restr:" + ret); if( "0".equals(ret)) { //返回0发送成功,则修改中间表数据状态为7; PosParameter param = new PosParameter(); param.setWhereClauseParameter(0, value.getOrderNo()); dao.update("UIJ010060_cargocn.update", param); } else { restr0 = "-1"; } restr.append("\n " + value.getOrderNo() + ":" + ret + ";"); } catch (Exception e) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); e.printStackTrace(new PrintStream(baos)); String exception = baos.toString(); restr.append("\n异常原因:" + exception); e.printStackTrace(); return restr.toString(); } } if(!"-1".equals(restr0)) return restr0; restr.append("\n结果值含义:0 表示发送成功,其他值都为失败"); restr.append("\n1000:签名验证失败 1001:运单对象不得为空"); restr.append("\n1002:发货人ID不得为空 1003:发货人信息加载出错"); restr.append("\n1004:发货人状态不正常 1005:订单号不得为空"); restr.append("\n1006:承运商不得为空 1007:承运商信息加载出错"); restr.append("\n1008:承运商没在货运中国平台开户 1009:运单子项不得为空"); restr.append("\n1010:车牌号不得为空 1011:车牌号信息加载出错"); restr.append("\n1012:车牌号没在货运中国平台注册\n1013:该车辆在货运中国平台尚未关联司机帐号"); return restr.toString(); } public void autoQueryData() { PosGenericDao dao = this.getDao("mesdao"); PosRowSet rowset = dao.find("UIJ010060_cargocn.select"); PosRow row = null; Set dlivNoSet = new HashSet(); Map wayMap = new HashMap(); if (rowset != null && rowset.count() > 0) { try { while (rowset.hasNext()) { row = rowset.next(); String dirNo = row.getAttribute("DLIV_DIRNO").toString(); if(!dlivNoSet.contains(dirNo)) { // 主数据 WayBill b = new WayBill(); // 运送指示号 b.setOrderNo(dirNo); // 默认1销售物流, 2:采购物流 3:内部物流 b.setOrderType("1"); // 发运日期TRNF_DTIME SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date sendDate = null; String trnFTime = row.getAttribute("TRNF_DTIME").toString(); if(null == trnFTime || "" == trnFTime) sendDate = Calendar.getInstance().getTime(); else sendDate = sdf.parse(trnFTime); b.setScheduleSendDate(sendDate); // 发货企业代码, 物流跟踪平台给出的新钢集团代码6 b.setShipperCompanyId(Long.valueOf(6)); // 发货城市 String SHIPPERCITY = "新余市"; if(null != row.getAttribute("SHIPPERCITY")) { SHIPPERCITY = row.getAttribute("SHIPPERCITY").toString(); } b.setShipperCity(SHIPPERCITY); // 发货地点 GET_ON_PCD 热轧系统默认为热卷厂 String SHIPPERADDR = "热卷厂"; if(null != row.getAttribute("SHIPPERADDR")) { SHIPPERADDR = row.getAttribute("SHIPPERADDR").toString(); } b.setShipperAddr(SHIPPERADDR); // 收货单位 ORD_NMs Object ordNm = row.getAttribute("CUST_NM"); Object CUST_NMs = row.getAttribute("CUST_NM"); if(null == ordNm) { ordNm = CUST_NMs; } b.setReceiveCompanyName(ordNm.toString()); // 收货城市,mes暂无 // Object RECEIVECITY = row.getAttribute("RECEIVECITY"); // 到站地点 DEST_PCD_DESC Object DEST_PCD_DESCs = row.getAttribute("DEST_PCD_DESC"); //通过到站地点从产销数据库查收货城市、收货人、电话 PosParameter param5 = new PosParameter(); param5.setWhereClauseParameter(0, DEST_PCD_DESCs.toString()); PosRowSet rows5 = getDao("mesdao").find("UIJ010060_cx.select", param5); if(rows5.hasNext()){ PosRow row5 = rows5.next(); Object receiveCity = row5.getAttribute("UNLOADDOCK"); //收货城市 Object receiveNM = row5.getAttribute("SHR"); //收货人 Object receivePhone = row5.getAttribute("SHRDH"); //收货人电话 if(null != receiveCity) b.setReceiveCity(receiveCity.toString()); //收货城市 else b.setReceiveCity(DEST_PCD_DESCs.toString()); // b.setReceiveCity("新余市"); if(null != receiveNM) b.setReceiveContactName(receiveNM.toString()); //收货联系人 else b.setReceiveContactName(""); if(null != receivePhone) b.setReceiveContactPhone(receivePhone.toString()); //收货联系人电话 else b.setReceiveContactPhone(""); } // b.setReceiveCity("新余市"); b.setReceiveAddr(DEST_PCD_DESCs.toString()); // 合同单位 b.setCustomerName(ordNm.toString()); // 运输公司若名字SHIP_COMP_NMs为空则用 SHIP_COMP_CDs[i] 新余中新物流有限公司 // b.setLogisticsCompanyName("新余中新物流有限公司"); String SHIP_COMP_NM = ""; if(null != row.getAttribute("SHIP_COMP_NM")) { SHIP_COMP_NM = row.getAttribute("SHIP_COMP_NM").toString(); } b.setLogisticsCompanyName(SHIP_COMP_NM); // 明细打印日期(实际发运日期)当前时间 b.setLoadDate(Calendar.getInstance().getTime()); // 车牌号 String TRANS_CAR_NO = row.getAttribute("TRANS_CAR_NO").toString(); b.setCarNo(TRANS_CAR_NO); // b.setCarNo("赣K12345"); // 明细数据 WayBillItem wbi = new WayBillItem(); // 钢卷号或者块序号COIL_NO String COIL_NO = row.getAttribute("COIL_NO").toString(); wbi.setPackageNo(COIL_NO); // 钢种SPEC_STL_GRDs String SPEC_STL_GRD = row.getAttribute("SPEC_STL_GRD").toString(); wbi.setGradeNo(SPEC_STL_GRD); // 产品名称SM_CFNM String SM_CFNM = ""; if(null != row.getAttribute("SM_CFNM")) { SM_CFNM = row.getAttribute("SM_CFNM").toString(); } wbi.setProductName(SM_CFNM); // 过磅重量 String COIL_WGT = "0"; if(null != row.getAttribute("COIL_WGT")) { COIL_WGT = row.getAttribute("COIL_WGT").toString(); } wbi.setWeight(Double.valueOf(COIL_WGT)/1000); // 实际过磅重量 wbi.setLoadWeight(Double.valueOf(COIL_WGT)/1000); // 装车件数 wbi.setNums(Integer.valueOf(1)); // 实际装车件数 wbi.setLoadNums(Integer.valueOf(1)); ArrayList wItem = new ArrayList(); wItem.add(wbi); b.setWayBillItems(wItem); dlivNoSet.add(dirNo); wayMap.put(dirNo, b); } else { WayBill wb = wayMap.get(dirNo); // 明细数据 WayBillItem wbi = new WayBillItem(); // 钢卷号或者块序号COIL_NO String COIL_NO = row.getAttribute("COIL_NO").toString(); wbi.setPackageNo(COIL_NO); // 钢种SPEC_STL_GRDs String SPEC_STL_GRD = row.getAttribute("SPEC_STL_GRD").toString(); wbi.setGradeNo(SPEC_STL_GRD); // 产品名称SM_CFNM String SM_CFNM = ""; if(null != row.getAttribute("SM_CFNM")) { SM_CFNM = row.getAttribute("SM_CFNM").toString(); } wbi.setProductName(SM_CFNM); // 过磅重量 String COIL_WGT = "0"; if(null != row.getAttribute("COIL_WGT")) { COIL_WGT = row.getAttribute("COIL_WGT").toString(); } wbi.setWeight(Double.valueOf(COIL_WGT)/1000); // 实际过磅重量 wbi.setLoadWeight(Double.valueOf(COIL_WGT)/1000); // 装车件数 wbi.setNums(Integer.valueOf(1)); // 实际装车件数 wbi.setLoadNums(Integer.valueOf(1)); ArrayList wItem = wb.getWayBillItems(); wItem.add(wbi); } } } catch (Exception e) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); e.printStackTrace(new PrintStream(baos)); String exception = baos.toString(); System.out.println(exception); // cro.setV_errMsg("\nError : " + exception); // CoreClientParam.ReturnInfo e.printStackTrace(); } String state = postCommit(wayMap,dao); } } /* * 提交请求 */ public String postCommit(Map wayMap,PosGenericDao dao) { StringBuffer restr = new StringBuffer("Result : "); for (WayBill value : wayMap.values()) { try { // 总件数 value.setLoadTotalNums(value.getWayBillItems().size()); // 总重量COIL_WGTs Double totalW = 0.0; for(WayBillItem item : value.getWayBillItems()){ totalW += item.getLoadWeight(); } value.setLoadTotalWeight(totalW); // json格式转换 String bill = JSON.toJSONString(value); //System.out.println("billJSON:" + bill); //直接用json数据加密传输会出现中文乱码,这里转换成unicode编码 bill = ChangeCharset.stringToUnicode(bill); System.out.println("unicBill:" + bill); // 公钥加密 String path = value.getClass().getClassLoader().getResource("cargocn_server_pub.key").getPath(); byte[] cipherData = RSAUtils.encryptByPublicKey(bill.getBytes(), RSAUtils.loadPublicKeyByFile(path)); String cipher = Base64.encode(cipherData); String signstr = RSAUtils.sign(cipher.getBytes(), RSAUtils.loadPrivateKeyByFile(value.getClass().getClassLoader() .getResource("cargocn_client_pri.p8").getPath())); // 远程接口地址 HttpPostUtil hu = new HttpPostUtil(forwardUrl); // 发送请求 String ret = hu.post(cipher, signstr); if( "0" == ret) { //返回0发送成功,则修改数据状态为7; PosParameter param = new PosParameter(); param.setWhereClauseParameter(0, value.getOrderNo()); dao.update("UIJ010060_cargocn.update", param); } restr.append("\n " + value.getOrderNo() + " : " + ret + ";"); } catch (Exception e) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); e.printStackTrace(new PrintStream(baos)); String exception = baos.toString(); restr.append("\nError : " + exception); e.printStackTrace(); } } System.out.println(restr.toString()); return restr.toString(); } /* * 测试用 */ public static void main(String[] args) { // 主数据 WayBill b = new WayBill(); b.setOrderNo("20150512XY007"); // 运送指示号 b.setOrderType("1"); // 默认1销售物流, 2:采购物流 3:内部物流 b.setScheduleSendDate(Calendar.getInstance().getTime()); // 发运日期TRNF_DTIME b.setShipperCompanyId(Long.valueOf(6)); // 发货企业代码 物流跟踪平台给出的新钢集团代码 b.setReceiveCompanyName("新余新钢集团测试数据:005"); // 收货企业 合同单位 CUST_NM b.setShipperCity("新余市"); // 发货城市 b.setShipperAddr("热卷厂"); // 发货地点 GET_ON_PCD b.setReceiveCity("南昌市"); // 收货城市,mes暂无 b.setReceiveAddr("新余新钢集团测试数据:005"); // 到站地点 DEST_PCD_DESC b.setLoadTotalNums(5); // 根据发运指示号获得多少件数 b.setLoadTotalWeight(new Double(22)); // 根据发运指示号获得总重量COIL_WGTs b.setCustomerName("新余新钢集团测试数据:005"); // 合同单位 b.setLogisticsCompanyName("新余中新物流有限公司"); // 运输公司 SHIP_COMP_CD 上海春风物流有限公司 b.setLoadDate(Calendar.getInstance().getTime()); // 明细打印日期(实际发运日期)当前时间 b.setCarNo("赣K12345"); // 车牌号chepai1 // 明细数据 WayBillItem i = new WayBillItem(); i.setPackageNo("package123"); // 钢卷号或者块序号OLD_SAMPL_NOs i.setGradeNo("50-1"); // 钢种SPEC_STL_GRDs i.setProductName("新余新钢集团测试数据:005"); // 产品名称SM_CFNM i.setWeight(Double.valueOf(42)); // 过磅重量 i.setLoadWeight(Double.valueOf(41.28)); // 实际过磅重量 i.setNums(Integer.valueOf(1)); // 装车件数 i.setLoadNums(Integer.valueOf(1)); // 实际装车件数 ArrayList li = new ArrayList(); li.add(i); b.setWayBillItems(li); // 加密 签名 try { String bill = JSON.toJSONString(b); System.out.println("bill:" + bill); // String iso = new String(bill.getBytes("UTF-8"),"ISO-8859-1"); // System.out.println("iso:" + iso); // String utf8 = new String(iso.getBytes("ISO-8859-1"),"UTF-8"); // System.out.println("utf8:" + utf8); String unic = ChangeCharset.stringToUnicode(bill); System.out.println("unic:" + unic); String unicTo = ChangeCharset.unicodeToString(unic); System.out.println("unicTo:" + unicTo); // 公钥加密 byte[] cipherData = RSAUtils.encryptByPublicKey( unic.getBytes(), RSAUtils.loadPublicKeyByFile(b.getClass().getClassLoader() .getResource("cargocn_server_pub.key").getPath())); // byte[] cipherData = RSAUtils.encryptByPublicKey(bill.getBytes(), // RSAUtils.loadKeyStr("PUB")); String cipher = Base64.encode(cipherData); System.out.println("cipher:" + cipher); // 私钥加密 String signstr = RSAUtils.sign( cipher.getBytes(), RSAUtils.loadPrivateKeyByFile(b.getClass().getClassLoader() .getResource("cargocn_client_pri.p8").getPath())); // String signstr = RSAUtils.sign(cipher.getBytes(),RSAUtils.loadKeyStr("PRI")); System.out.println("signstr:" + signstr); // 远程接口地址 HttpPostUtil hu = new HttpPostUtil(forwardUrl); // 发送请求 String ret = hu.post(cipher, signstr); System.out.println("ret:" + ret); // 转换请求返回参数json JSONObject jo = JSON.parseObject(ret); String result = jo.getString("result"); String resultSign = jo.getString("sign"); // 验证签名 boolean tmp = RSAUtils.verify( result.getBytes(), RSAUtils.loadPublicKeyByFile(b.getClass().getClassLoader() .getResource("cargocn_server_pub.key").getPath()), resultSign); // boolean tmp = RSAUtils.verify(result.getBytes(), RSAUtils.loadKeyStr("PUB"), // resultSign); if (tmp) { // 解密 byte[] res = RSAUtils.decryptByPrivateKey( Base64.decode(result), RSAUtils .loadPrivateKeyByFile(b.getClass() .getClassLoader() .getResource("cargocn_client_pri.p8") .getPath())); // byte[] res = RSAUtils.decryptByPrivateKey( // Base64.decode(result), RSAUtils.loadKeyStr("PRI")); String restr = new String(res); System.out.println("restr:" + restr); String unicTo1 = ChangeCharset.unicodeToString(unic); System.out.println("unicTo:" + unicTo1); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override public String runActivity(PosContext arg0) { // TODO Auto-generated method stub return null; } }