package weaver.aiyh_quanshi; import aiyh.utils.zwl.common.ToolUtil; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.conn.scheme.Scheme; import org.apache.http.conn.ssl.SSLSocketFactory; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.protocol.HTTP; import org.apache.http.util.EntityUtils; import weaver.aiyh_quanshi.entity.QsConfParty; import weaver.aiyh_quanshi.entity.QsConfSetting; import weaver.aiyh_quanshi.entity.QsResponse; import javax.net.ssl.KeyManagerFactory; import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManager; import javax.net.ssl.TrustManagerFactory; import java.io.FileInputStream; import java.security.KeyStore; import java.util.HashMap; import java.util.List; import java.util.Map; public class QsAPI { private static boolean initialized = false; private static final ToolUtil logger = new ToolUtil(); private static final String KEY_STORE_TYPE_JKS = "jks"; private static final String KEY_STORE_TYPE_P12 = "PKCS12"; private static final String SCHEME_HTTPS = "https"; private static final int HTTPS_PORT = 443; private static final String KEY_STORE_PASSWORD = "111111"; private static final String KEY_STORE_TRUST_PASSWORD = "111111"; static SSLContext sslContext = null; static HttpClient httpClient = new DefaultHttpClient(); private static Integer appId = 6; private static String productId = ""; private static String siteUrl = ""; /** * 初始化 */ public static void init(String _appId, String _siteUrl, String _p12Path, String _trustPath) { // logger.writeErrorLog("Init is beginning!"); try { appId = Integer.parseInt(_appId); siteUrl = _siteUrl; if (appId == 2) { productId = "20000"; } else if (appId == 5) { productId = "50000"; } else if (appId == 3) { productId = "30000"; } else if (appId == 4) { productId = "40000"; } else if (appId == 6) { productId = "60000"; } System.setProperty("javax.net.ssl.keyStore", _p12Path); System.setProperty("javax.net.ssl.keyStorePassword", KEY_STORE_PASSWORD); System.setProperty("javax.net.ssl.keyStoreType", KEY_STORE_TYPE_P12); System.setProperty("javax.net.ssl.trustStore", _trustPath); System.setProperty("javax.net.ssl.trustStorePassword", KEY_STORE_TRUST_PASSWORD); System.setProperty("javax.net.ssl.trustStoreType", KEY_STORE_TYPE_JKS); KeyStore kstore = KeyStore.getInstance(KEY_STORE_TYPE_P12); kstore.load(new FileInputStream(_p12Path), KEY_STORE_PASSWORD.toCharArray()); //sunx509, IbmX509 KeyManagerFactory keyFactory = KeyManagerFactory.getInstance("sunx509"); keyFactory.init(kstore, KEY_STORE_PASSWORD.toCharArray()); KeyStore tstore = KeyStore.getInstance(KEY_STORE_TYPE_JKS); tstore.load(new FileInputStream(_trustPath), KEY_STORE_TRUST_PASSWORD.toCharArray()); TrustManager[] tm; // sunx509 TrustManagerFactory tmf = TrustManagerFactory.getInstance("sunx509"); tmf.init(tstore); tm = tmf.getTrustManagers(); sslContext = SSLContext.getInstance("SSL"); sslContext.init(keyFactory.getKeyManagers(), tm, null); initialized = true; // logger.writeErrorLog("Init is success!"); } catch (Exception e) { logger.writeErrorLog(e.getMessage(), e.toString()); logger.writeErrorLog("Init error:please check cert path is set correctly"); } } /** * 创建预约会议 * * @param email 创建人邮箱 * @param confTitle 会议标题 * @param confLen 会议时长,分钟为单位 * @param startTime 会议开始时间 * @param setting 会议设置 * @param inviteeList 参会人员列表 * @return */ public static QsResponse reservConference(String email, String confTitle, int confLen, String startTime, QsConfSetting setting, List inviteeList) { String URL = "https://openapi.quanshi.com/conference/conference/reservConference"; if (!initialized) { return genError(QsErrorCode.CERT_ERROR); } else { Map param = new HashMap(); param.put("appId", appId); param.put("title", confTitle); param.put("length", confLen); param.put("starttime", startTime); param.put("from", "OA"); // param.put("userId", userId); param.put("email", email); param.put("inviteeList", inviteeList); if (setting != null) { Map settingMap = new HashMap(); if (setting.isShowInfo() != null) { settingMap.put("isShowInfo", setting.isShowInfo() ? 1 : 0); } if (setting.isAllowUnmute() != null) { settingMap.put("isAllowUnmute", setting.isAllowUnmute() ? 1 : 0); } // settingMap.put("isShowVideo", setting.isShowVideo()!=null&&setting.isShowVideo() ? 1 : 0); 不用了 if (setting.isOnly() != null) { settingMap.put("isOnly", setting.isOnly() ? 1 : 0); } param.put("seting", settingMap); if (setting.isSmsNotify() != null) { param.put("sms_notify", setting.isSmsNotify()); } if (setting.isEmailNotify() != null) { param.put("email_notify", setting.isEmailNotify()); } if (setting.getPasscodeType() != null) { param.put("password_type", setting.getPasscodeType()); } if (setting.getAutoRecord() != null) { param.put("autoRecord", setting.getAutoRecord()); } if (setting.getConfLevelMute() != null) { param.put("confLevelMute", setting.getConfLevelMute()); } if (setting.getMustSelectAudio() != null) { param.put("mustSelectAudio", setting.getMustSelectAudio()); } if (setting.getExtend() != null) { param.put("extend", setting.getExtend()); } } String result = httpPost(URL, QsUtil.jsonOTS(param)); return parseResult(QsUtil.jsonSTM(result)); } } /** * 取消预约会议(参考接口文档3.3章节) * * @param conferenceId 会议ID * @param email 会议主持人邮件 * @return 服务器返回的JSON */ public static QsResponse cancelConference(String conferenceId, String email, Boolean emailNotify, Boolean smsNotify) { String URL = "https://openapi.quanshi.com/conference/conference/cancelReservConference"; if (!initialized) { return genError(QsErrorCode.CERT_ERROR); } else { String url = URL + "/" + appId + "/" + conferenceId + "/zh-CN/" + email; if (emailNotify != null && smsNotify != null) { url += "//" + emailNotify + "/" + smsNotify; } String result = httpGet(url); return parseResult(QsUtil.jsonSTM(result)); } } /** * 取消预约会议(参考接口文档3.3章节) * * @param conferenceId 会议ID * @param userId 会议主持人ID * @return 服务器返回的JSON */ public static QsResponse cancelConference(String conferenceId, Integer userId, Boolean emailNotify, Boolean smsNotify) { String URL = "https://openapi.quanshi.com/conference/conference/cancelReservConference"; if (!initialized) { return genError(QsErrorCode.CERT_ERROR); } else { String url = URL + "/" + appId + "/" + conferenceId + "/zh-CN/" + userId; if (emailNotify != null && smsNotify != null) { url += "//" + emailNotify + "/" + smsNotify; } String result = httpGet(url); return parseResult(QsUtil.jsonSTM(result)); } } /** * 通过邮箱查询账号信息 * @param emails 电子邮箱数组 * @return 服务器返回的JSON */ public static QsResponse getUserIdsByEmails(List emails) { String URL = "https://openapi.quanshi.com/confopenapi/account/getUsersByEmailsMobiles"; if (!initialized) { return genError(QsErrorCode.CERT_ERROR); } else { Map param = new HashMap(); // param.put("appId", appId); // param.put("appKey", appKey); param.put("emails", emails); String result = httpPost(URL, QsUtil.jsonOTS(param)); return parseResult(QsUtil.jsonSTM(result)); } } /** * 获取预约会议基本信息(参考接口文档3.5章节) * * @param conferenceId 会议ID * @return 服务器返回的JSON */ public static QsResponse getConferenceInfo(String conferenceId) { String URL = "https://openapi.quanshi.com/conference/conference/getConferenceBaseInfoById/6/"; if (!initialized) { return genError(QsErrorCode.CERT_ERROR); } else { String result = httpGet(URL + conferenceId); return parseResult(QsUtil.jsonSTM(result)); } } /** * 解析返回值 * * @param resultMap * @return */ private static QsResponse parseResult(Map resultMap) { QsResponse response = new QsResponse(); if (resultMap != null && resultMap.containsKey("status")) { String status = String.valueOf(resultMap.get("status")); response.setStatus(status); response.setReqid(String.valueOf(resultMap.get("reqid"))); response.setResult(String.valueOf(resultMap.get("result"))); } return response; } /** * 返回错误码 * * @param errorCode 错误代码 * @return JSON格式错误字符串 */ private static QsResponse genError(String errorCode) { Map errorMap = new HashMap(); errorMap.put("status", QsErrorCode.CERT_ERROR); if (errorCode.equals(QsErrorCode.CERT_ERROR)) { errorMap.put("desc", "please initialized API, check cert path!"); } errorMap.put("result", null); return parseResult(errorMap); } /** * Get方式请求 * * @param url 请求地址 * @return 请求Response */ public static String httpGet(String url) { try { SSLSocketFactory socketFactory = new SSLSocketFactory(sslContext); Scheme sch = new Scheme(SCHEME_HTTPS, HTTPS_PORT, socketFactory); httpClient.getConnectionManager().getSchemeRegistry().register(sch); HttpGet httpGet = new HttpGet(url); httpGet.addHeader("Content-Type", "application/json"); httpGet.addHeader("charset", HTTP.UTF_8); // logger.writeErrorLog("executing request " + httpGet.getRequestLine()); HttpResponse response = httpClient.execute(httpGet); HttpEntity entity = response.getEntity(); if (entity != null) { String result = EntityUtils.toString(entity, "utf-8"); // System.out.println(result); // logger.writeErrorLog("Response content length: " + result; // logger.writeErrorLog("Response content: " + result); /* BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(entity.getContent())); String text; StringBuffer buf = new StringBuffer(); while ((text = bufferedReader.readLine()) != null) { buf.append(text); } bufferedReader.close();*/ return result; } EntityUtils.consume(entity); } catch (Exception e) { logger.writeErrorLog(e.getMessage(), e.toString()); } return "{}"; } /** * Post方式请求 * * @param url 请求地址 * @param jsonParam 请求参数 * @return 请求Response */ public static String httpPost(String url, String jsonParam) { try { httpClient = new DefaultHttpClient(); SSLSocketFactory socketFactory = new SSLSocketFactory(sslContext); Scheme sch = new Scheme(SCHEME_HTTPS, HTTPS_PORT, socketFactory); httpClient.getConnectionManager().getSchemeRegistry().register(sch); HttpPost httpPost = new HttpPost(url); httpPost.addHeader("Content-Type", "application/json; charset=utf-8"); httpPost.setHeader("Accept", "application/json"); httpPost.addHeader("charset", HTTP.UTF_8); httpPost.setEntity(new StringEntity(jsonParam.toString(), HTTP.UTF_8)); // logger.writeErrorLog("executing request " + httpPost.getRequestLine()); // logger.writeErrorLog("executing params " + jsonParam.toString()); HttpResponse response = httpClient.execute(httpPost); HttpEntity entity = response.getEntity(); if (entity != null) { // EntityUtils.consume(entity); String result = EntityUtils.toString(entity, "utf-8"); // logger.writeErrorLog("Response content is : " + result); // BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(entity.getContent())); // String text; // StringBuffer buf = new StringBuffer(); // while ((text = bufferedReader.readLine()) != null ) { // buf.append(text); // } // bufferedReader.close(); // return buf.toString(); return result; } } catch (Exception e) { e.printStackTrace(); logger.writeErrorLog(e.getMessage(), e.toString()); } return ""; } static class QsErrorCode { /** * 客户端证书未配置 **/ public static final String CERT_ERROR = "50100"; } }