在调用企业微信的API接口之前,需要自行编写HTTPS请求的方法,在这里用Java实现
钉钉API直接为我们准备好了HTTPS请求,只需导包即可,而企业微信需要自行实现
本文主要介绍,如何使用Java代码,发起企业微信API支持的HTTPS请求,获取access_token
目录
一、编写HTTPS请求
首先创建一个类,实现 X509TrustManager 接口
1. import javax.net.ssl.*; 2. import java.io.BufferedReader; 3. import java.io.InputStream; 4. import java.io.InputStreamReader; 5. import java.io.OutputStream; 6. import java.net.URL; 7. import java.security.cert.CertificateException; 8. import java.security.cert.X509Certificate; 9. 10. public class WeChatUtils implements X509TrustManager { 11. 12. /** 13. * 处理https GET/POST请求 14. * @param requestUrl 请求地址 15. * @param requestMethod 请求方法 16. * @param outputStr 参数 17. * @return 18. */ 19. public static String httpsRequest(String requestUrl,String requestMethod,String outputStr){ 20. StringBuffer buffer=null; 21. try{ 22. //创建SSLContext 23. SSLContext sslContext=SSLContext.getInstance("SSL"); 24. TrustManager[] tm={new WeChatUtils()}; 25. //初始化 26. sslContext.init(null, tm, new java.security.SecureRandom());; 27. //获取SSLSocketFactory对象 28. SSLSocketFactory ssf=sslContext.getSocketFactory(); 29. URL url=new URL(requestUrl); 30. HttpsURLConnection conn=(HttpsURLConnection)url.openConnection(); 31. conn.setDoOutput(true); 32. conn.setDoInput(true); 33. conn.setUseCaches(false); 34. conn.setRequestMethod(requestMethod); 35. //设置当前实例使用的SSLSoctetFactory 36. conn.setSSLSocketFactory(ssf); 37. conn.connect(); 38. //往服务器端写内容 39. if(null!=outputStr){ 40. OutputStream os=conn.getOutputStream(); 41. os.write(outputStr.getBytes("utf-8")); 42. os.close(); 43. } 44. //读取服务器端返回的内容 45. InputStream is=conn.getInputStream(); 46. InputStreamReader isr=new InputStreamReader(is,"utf-8"); 47. BufferedReader br=new BufferedReader(isr); 48. buffer=new StringBuffer(); 49. String line=null; 50. while((line=br.readLine())!=null){ 51. buffer.append(line); 52. } 53. }catch(Exception e){ 54. e.printStackTrace(); 55. } 56. return buffer.toString(); 57. } 58. 59. @Override 60. public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException { 61. 62. } 63. 64. @Override 65. public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException { 66. 67. } 68. 69. @Override 70. public X509Certificate[] getAcceptedIssuers() { 71. return new X509Certificate[0]; 72. } 73. }
原文CSDN链接:https://zwz99.blog.csdn.net/article/details/113845625
二、获取 access_token
获取access_token是调用企业微信API接口的第一步,相当于创建了一个登录凭证,其它的业务API接口,都需要依赖于access_token来鉴权调用者身份。
因此开发者,在使用业务接口前,要明确access_token的颁发来源,使用正确的access_token。
请求方式: GET(HTTPS)
请求地址: https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=ID&corpsecret=SECRET
corpid:每个企业都拥有唯一的corpid,获取此信息可在管理后台“我的企业”-“企业信息”下查看“企业ID”
corpsecret:secret是企业应用里面用于保障数据安全的“钥匙”,每一个应用都有一个独立的访问密钥,为了保证数据的安全,secret务必不能泄漏
1. import com.alibaba.fastjson.JSON; 2. import com.alibaba.fastjson.JSONObject; 3. 4. public static String getToken(){ 5. String str= httpsRequest("https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=" + "wwxxxxxxxxxxxxxxxx" + "&corpsecret=" + "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx","GET",null); 6. JSONObject err = JSON.parseObject(str); 7. if(err.getString("errmsg").equals("ok")){ 8. return err.getString("access_token"); 9. } 10. return null; 11. }
调用getToken方法,即可获得到最新的Token,用以调用企业微信各类API接口。
返回结果
1. { 2. "errcode": 0, 3. "errmsg": "ok", 4. "access_token": "fhafhdsajhfjkshfjkshjkfsjkdfhjkahfkjahjfhajkfhajk", 5. "expires_in": 7200 6. }
方法返回
fhafhdsajhfjkshfjkshjkfsjkdfhjkahfkjahjfhajkfhajk
附:fastjson maven
1. <dependency> 2. <groupId>com.alibaba</groupId> 3. <artifactId>fastjson</artifactId> 4. <version>1.2.9</version> 5. </dependency>