package com.zskk.service; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.security.KeyFactory; import java.security.PrivateKey; import java.security.Signature; import java.util.Date; import java.util.HashMap; import java.util.*; import java.security.spec.PKCS8EncodedKeySpec; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import org.apache.commons.codec.binary.Hex; import org.apache.commons.lang3.StringUtils; import org.apache.commons.codec.binary.Base64; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.jfinal.kit.PropKit; import okhttp3.FormBody; import okhttp3.MediaType; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; public class DataService { private static String GET_EXAM_URL = "https://risserver3.pacsonline.cn/butt/getExam"; private static String SAVE_REPORT_URL = "https://risserver3.pacsonline.cn/butt/saveReport"; private static String UPDATE_PATIENT_URL = "https://risserver3.pacsonline.cn/butt/saveExam"; private static String FEE_URL = "https://risserver3.pacsonline.cn/film/callback"; private static final OkHttpClient OKHTTP_CLIENT = new OkHttpClient(); private static final MediaType JSON_TYPE = MediaType.parse("application/json; charset=utf-8"); /** * 获取未出报告的检查列表 * @param instutionId * @param number */ // public JSONArray getExamList(Integer number) { // Map map = new HashMap(); // map.put("institution_id", PropKit.get("institution_id")); // map.put("num", number.toString()); // String content = postWithParameters(GET_EXAM_URL, map); // JSONObject jsonObject = JSON.parseObject(content); // if (!jsonObject.getString("msg").equals("success")) { // return null; // } // JSONArray jsonArray = JSON.parseArray(jsonObject.getString("data")); // return jsonArray; // // } /** * 写入报告 * @param instutionId * @param number */ // public void saveReport(Map map) { // postWithParameters(SAVE_REPORT_URL, map); // // } /** * 更新患者信息 *  * @param instutionId * @param number */ // public void updatePatientInfo(Map map) { // postWithParameters(UPDATE_PATIENT_URL, map); // } /* * 医院代收 */ // public void fee(JSONObject jsonObject) { // postWithJson(FEE_URL, jsonObject); // } public static String postWithParameters(String url, Map map,String sj,String ps) throws Exception { FormBody.Builder formbody = new FormBody.Builder(); for (Map.Entry entry : map.entrySet()) { formbody.add(entry.getKey(), entry.getValue()); } RequestBody requestBody = formbody.build(); Request request = new Request.Builder() .url(url) .header("orgId", "10179").addHeader("hospitalId", "10179001").addHeader("appId", "app5994124361340817290").addHeader("signType", "RSA2").addHeader("sign", getSign(ps,"MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAKpWTmdc7hhqndi2NjKQZ706GnQpRbIRCQifuUBTyENSj3ZaHDzoJF4d/KjejFL5XQUAb+6BFtG0qBMLn+CNiIRHzS+mITEWPf0ab0ksFe1MjtU4kY+Ie39YU+6/w7cFeoSvsokz03zsXG6TdvKvm1f3HhlMtmwLZKamn5LlbdDjAgMBAAECgYBeyVol0KO5uJKPxo2QQ6VGum+AFntvJGWng+I9dqHpPKcSkABIsFGUghFYE0d44MSvhNfEm9cL6QDiYESeW4QMVY88Drlu+yb0VKQbA9m+tgBrXXItKcpl2BsRiSuA2auck1FbhBCT9flWWU4emnBHzcAE4Ljm4dvK4U8xODxhyQJBAPAdEoeDwQomz97T/d5l29D/zqK1vMwHiHI9dKw8WKb1OvKy6EdZCTgKxK0oiEQcEss//aBYsUA3hoQ78Hd0NW8CQQC1m2T3Uo+f49MRcYeTF8QLJRp+fIbqwfvH6vxNqIeEaqPCRx41Ko+f7L8r9YiNKEC2slmjPfuGDIcupuvWk+nNAkA4qRObSNr/s0LwOSQ6G90wR30SZkJj/w8Sri/fCOp+k3XSmac4VulXASuCFQN61wkUT0hhUyyYk8G5aI+JELIfAkAneUhf7cUkJtwI7ZlfYooNNhplJeIZguKcWLpQkvIp2RgRMW4idkbTpx0CjBMLQ5WVYHzVW7KhN3XmsQeQE4R9AkBagT4KPrDgOBoTm8WADsYlie88DVSlXaXTGyWG59ypBuI37QZwsFfdlkoN3cAjCVseyEuUydF5pX1Pyc3CPryO")).addHeader("timestamp", sj) .post(requestBody) .build(); try (Response response = OKHTTP_CLIENT.newCall(request).execute()) { if (!response.isSuccessful()) throw new IOException("Unexpected code " + response); String content = response.body().string(); System.out.println(content); return content; } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); return null; } } public static String postWithJson(String url, JSONObject jsonObject,String sj,String ps) throws Exception { RequestBody requestBody = RequestBody.create(JSON_TYPE, jsonObject.toJSONString()); Request request = new Request.Builder().url(url).header("orgId", "10179").addHeader("hospitalId", "10179001").addHeader("appId", "app5994124361340817290").addHeader("signType", "RSA2").addHeader("sign", getSign(ps,"MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAKpWTmdc7hhqndi2NjKQZ706GnQpRbIRCQifuUBTyENSj3ZaHDzoJF4d/KjejFL5XQUAb+6BFtG0qBMLn+CNiIRHzS+mITEWPf0ab0ksFe1MjtU4kY+Ie39YU+6/w7cFeoSvsokz03zsXG6TdvKvm1f3HhlMtmwLZKamn5LlbdDjAgMBAAECgYBeyVol0KO5uJKPxo2QQ6VGum+AFntvJGWng+I9dqHpPKcSkABIsFGUghFYE0d44MSvhNfEm9cL6QDiYESeW4QMVY88Drlu+yb0VKQbA9m+tgBrXXItKcpl2BsRiSuA2auck1FbhBCT9flWWU4emnBHzcAE4Ljm4dvK4U8xODxhyQJBAPAdEoeDwQomz97T/d5l29D/zqK1vMwHiHI9dKw8WKb1OvKy6EdZCTgKxK0oiEQcEss//aBYsUA3hoQ78Hd0NW8CQQC1m2T3Uo+f49MRcYeTF8QLJRp+fIbqwfvH6vxNqIeEaqPCRx41Ko+f7L8r9YiNKEC2slmjPfuGDIcupuvWk+nNAkA4qRObSNr/s0LwOSQ6G90wR30SZkJj/w8Sri/fCOp+k3XSmac4VulXASuCFQN61wkUT0hhUyyYk8G5aI+JELIfAkAneUhf7cUkJtwI7ZlfYooNNhplJeIZguKcWLpQkvIp2RgRMW4idkbTpx0CjBMLQ5WVYHzVW7KhN3XmsQeQE4R9AkBagT4KPrDgOBoTm8WADsYlie88DVSlXaXTGyWG59ypBuI37QZwsFfdlkoN3cAjCVseyEuUydF5pX1Pyc3CPryO")).addHeader("timestamp", sj).post(requestBody).build(); try (Response response = OKHTTP_CLIENT.newCall(request).execute()) { if (!response.isSuccessful()) throw new IOException("Unexpected code " + response); String content = response.body().string(); System.out.println(content); return content; } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); return null; } } public static String sj() { Date date = new Date(); Long time =System.currentTimeMillis();; return time.toString(); } public static String presign(String sj) { MessageDigest md=null; try { md = MessageDigest.getInstance("MD5"); } catch (NoSuchAlgorithmException e) { // TODO Auto-generated catch block e.printStackTrace(); } Map map = new HashMap(); map.put("startDate", "2023-09-06 00:00:00"); map.put("endDate", "2023-09-06 12:00:00"); String data = JSON.toJSONString(map)+sj; System.out.println(data); String md5Str = Hex.encodeHexString(md.digest(data.getBytes(StandardCharsets.UTF_8))); return md5Str; } public static String getSign(String preStr, String appSecret) throws Exception { appSecret = appSecret.replace("-----BEGIN PRIVATE KEY-----", "").replace("-----END PRIVATE KEY-----", "").replace("\r", "").replace("\n", "").trim(); String suite = "SHA256WithRSA"; //初始化算法 SHA256 Signature signature = Signature.getInstance(suite); PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(Base64.decodeBase64(appSecret)); //初始化私钥+RSA KeyFactory keyFac = KeyFactory.getInstance("RSA"); PrivateKey privateKey = keyFac.generatePrivate(keySpec); signature.initSign(privateKey); //待签名字符串转 byte 数组使用 UTF8 byte[] msgBuf = preStr.getBytes("UTF8"); signature.update(msgBuf); byte[] byteSign = signature.sign(); //签名值 byte 数组转字符串用 BASE64 String strSign = Base64.encodeBase64String(byteSign); return strSign; } public static void main(String[] args) throws Exception { Map map = new HashMap(); map.put("startDate", "2023-09-06 00:00:00"); map.put("endDate", "2023-09-06 12:00:00"); String sj = sj(); String ps = presign(sj); JSONObject gg = new JSONObject(); gg.put("startDate", "2023-09-06 00:00:00"); gg.put("endDate", "2023-09-06 12:00:00"); postWithJson("https://nyxzyy.msunhis.com/msun-middle-business-pacs/v1/patients", gg,sj,ps); String aaa = "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBA\n" + "IxuagdiKqsvabbRxclFcLAIJXCBfj7nbMAnL5r+uUr3n2qXDXLRP8AoI\n" + "pwa2kiVJdLLtK2dQlQD0b5VzNTTYDOWjC/SL2l41r8kXxBHD3cLjS\n" + "SP2d0KxIrybdVrjof18Y/H0bS8uskNfoZcVOo/lH6z3c9RUrZUnAvFQd\n" + "GiQZXrAgMBAAECgYBj71dI9dUDiXQjg9jKyL3Op51tGNnsjehYPgq\n" + "ktEzMSreJtQD/CmXhqy4mBP391RXbktd7DYRcIXOrjYd8lQfJ2xCmvp\n" + "WMMqeQ1uzxTddHfl3FrlPLqc5UZLdjiAxINme33TDarscsc/KnDy1WE\n" + "85pE5iHwgZtbKgUsyOvY9nf0QJBAOhMzUzc9Lw5QJxV+zFGWDJw\n" + "Hy1G956Wzgxz9ljLAYQEskgOrDVVuwSiJMxWNMasksCZzkkIMkPi\n" + "KjxPhUroZFUCQQCawjDZSBPMZGN6fVcG1IT9r4kUIzy78jPA1o2hG\n" + "5c0dXcUJl1QuWeC9DssOSC5Btpzdb0bfaqMgfkCtAnAClE/AkEA3qim\n" + "67KqPjPeUzsyvyM+7HF94KcyN2cy7srD6I4E0Oazf8/YjnKzBJjqDpXel\n" + "kPZkhSannPlwh1pAE/0Yj1n1QJAWkdEJcylOAur+G2b0fExr6exyJyRtn\n" + "Yg+LJwpnYo68JGd+u1bfzqRHti9XZR/33e+5HIgnv5fMPpVklekreyEwJ\n" + "AFAeBw+T39QRWf5gPs1mGGMKKpBpfk74Pk9r+W9Uk7thP0pzmbo\n" + "RM5ExXt960uoEn9OY9MfIrmFzwhku+8lLIBg=="; String bb = "MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAKpWTmdc7hhqndi2NjKQZ706GnQpRbIRCQifuUBTyENSj3ZaHDzoJF4d/KjejFL5XQUAb+6BFtG0qBMLn+CNiIRHzS+mITEWPf0ab0ksFe1MjtU4kY+Ie39YU+6/w7cFeoSvsokz03zsXG6TdvKvm1f3HhlMtmwLZKamn5LlbdDjAgMBAAECgYBeyVol0KO5uJKPxo2QQ6VGum+AFntvJGWng+I9dqHpPKcSkABIsFGUghFYE0d44MSvhNfEm9cL6QDiYESeW4QMVY88Drlu+yb0VKQbA9m+tgBrXXItKcpl2BsRiSuA2auck1FbhBCT9flWWU4emnBHzcAE4Ljm4dvK4U8xODxhyQJBAPAdEoeDwQomz97T/d5l29D/zqK1vMwHiHI9dKw8WKb1OvKy6EdZCTgKxK0oiEQcEss//aBYsUA3hoQ78Hd0NW8CQQC1m2T3Uo+f49MRcYeTF8QLJRp+fIbqwfvH6vxNqIeEaqPCRx41Ko+f7L8r9YiNKEC2slmjPfuGDIcupuvWk+nNAkA4qRObSNr/s0LwOSQ6G90wR30SZkJj/w8Sri/fCOp+k3XSmac4VulXASuCFQN61wkUT0hhUyyYk8G5aI+JELIfAkAneUhf7cUkJtwI7ZlfYooNNhplJeIZguKcWLpQkvIp2RgRMW4idkbTpx0CjBMLQ5WVYHzVW7KhN3XmsQeQE4R9AkBagT4KPrDgOBoTm8WADsYlie88DVSlXaXTGyWG59ypBuI37QZwsFfdlkoN3cAjCVseyEuUydF5pX1Pyc3CPryO\n"; String aaa1 = getSign("2f2b0ec46ea8cfe4e256649eb873777d",aaa.replaceAll("\n","")); String bbbq = getSign(ps,bb); System.out.println(aaa1); System.out.println(bbbq); } }