服务热线
0574-55011290
| 腾讯企业邮箱官方api文档很简略还有一些错误和漏洞: 1. 获取token单点登录和获取未读邮件数使用的secret不一致。 此处很容易误解为最初用于获取AccessToken的corpSecret 2.获取未读邮件数这个功能可以被管理员停用,需要开启 停用的时候返回返回 {"errcode":602005,"errmsg":"no privilege to access app"} 3.获取未读邮件数的请求为post请求,官方文档是get 4.如果部署的weblogic之类的中间件可以会出现以下问题,请求的https报错证书不一致 此处的问题主要是后台发起请求的时候weblogic会去做安全校验, 解决办法:1.修改weblogic配置 2. HttpsURLConnection 配合Handler绕开证书校验 3.请求之前信任所有证书 信任证书的方法: private static void trustALLSSLCertificates(HttpURLConnection con) throws NoSuchAlgorithmException, KeyManagementException { ((HttpsURLConnection) con).setHostnameVerifier(new HostnameVerifier() { public boolean verify(String hostname, SSLSession session) { return true; } }); // Ignore Certification TrustManager ignoreCertificationTrustManger = new X509TrustManager() { public void checkClientTrusted(X509Certificate certificates[], String authType) throws CertificateException { } public void checkServerTrusted(X509Certificate[] ax509certificate, String s) throws CertificateException { } public X509Certificate[] getAcceptedIssuers() { return null; } }; // Prepare SSL Context TrustManager[] tm = { ignoreCertificationTrustManger }; SSLContext sslContext = SSLContext.getInstance("SSL"); sslContext.init(null, tm, new java.security.SecureRandom()); // 从上述SSLContext对象中得到SSLSocketFactory对象 SSLSocketFactory ssf = sslContext.getSocketFactory(); ((HttpsURLConnection) con).setSSLSocketFactory(ssf); } 后端请求: public String httpGetbak(String url) { BufferedReader in = null; try { //com.sun.net.ssl.internal.www.protocol.https.Handler URL realUrl = new URL(null,url,new sun.net.www.protocol.https.Handler()); HttpsURLConnection connection = (HttpsURLConnection) realUrl.openConnection(); trustALLSSLCertificates(connection); connection.setRequestProperty("accept", "*/*"); connection.setRequestProperty("connection", "Keep-Alive"); connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); connection.setConnectTimeout(5000); connection.setReadTimeout(5000); connection.connect(); in = new BufferedReader(new InputStreamReader(connection.getInputStream())); StringBuffer sb = new StringBuffer(); String line; while ((line = in.readLine()) != null) { sb.append(line); } return sb.toString(); } catch (Exception e) { e.printStackTrace(); } finally { try { if (in != null) { in.close(); } } catch (Exception e2) { e2.printStackTrace(); } } return null; } 单点登录与获取未读数 public String getEmailUrl(String user, String domain, String usertype){String tokenback = httpGetbak("https://api.exmail.qq.com/cgi-bin/gettoken?corpid=wm8c6ece99e54d4813&corpsecret=r8H0thugLH4ds3Jm4HAhnD_gvVtlsBIaJG4KH-5i5kW4rW_4JPF7FnOKVVa1Bc4L");JSONObject jsStr = JSONObject.fromObject(tokenback);String token =jsStr.getString("access_token");String url =" https://api.exmail.qq.com/cgi-bin/service/get_login_url?access_token="+token+"&userid="+user+"@hnust.edu.cn";String loginUrlBack = httpGetbak(url);JSONObject jsback = JSONObject.fromObject(loginUrlBack);loginUrlBack = jsback.getString("login_url");return loginUrlBack;} public String getUnRead(String user, String domain, String usertype) throws HttpException, IOException {String email = user +"@"+domain;String tokenback = httpGetbak("https://api.exmail.qq.com/cgi-bin/gettoken?corpid=wm8c6ece99e54d4813&corpsecret=WqG1CvlXqy6nrobMIrYCSXhFe80jgoZEw6Epx3s5XIgkRlvUX9H8NkyENW4uGaBH");JSONObject jsStr = JSONObject.fromObject(tokenback);String token =jsStr.getString("access_token"); Mapparams = new HashMap(); Date currentTime = new Date(); SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); String dateNow = formatter.format(currentTime); Calendar c = Calendar.getInstance(); c.setTime(new Date()); c.add(Calendar.DATE, - 7); Date daybefore = c.getTime(); String dbef = formatter.format(daybefore); params.put("type", "0"); params.put("begin_date", dateNow); params.put("end_date", dbef); String url = "https://api.exmail.qq.com/cgi-bin/mail/newcount?access_token="+token+"&userid="+email; PostMethod gmethod = new PostMethod(url); HttpClient httpclient = new HttpClient(); HttpClientParams ps = new HttpClientParams(); ps.setParameter("type", "0"); ps.setParameter("begin_date", dateNow); ps.setParameter("end_date", dbef); httpclient.setParams(ps); int responseCode = httpclient.executeMethod(gmethod); String mailContent =""; if (responseCode == HttpURLConnection.HTTP_OK) { InputStream inputStream = gmethod.getResponseBodyAsStream(); BufferedReader br = new BufferedReader(new InputStreamReader( inputStream, "ISO-8859-1")); StringBuffer resBuffer = new StringBuffer(); String tempStr = ""; while ((tempStr = br.readLine()) != null) { resBuffer.append(new String(tempStr.getBytes("ISO-8859-1"), "UTF-8")); } mailContent = resBuffer.toString(); JSONObject Str = JSONObject.fromObject(mailContent); String num = Str.getString("count"); return num; } return "0"; }
|
|||||
| >> 相关文章 | |||||