柳峰微信公众平台开发教程企业号修改篇(AccessToken篇)

柳峰微信公众平台开发教程企业号修改篇(AccessToken篇)

标签: 微信access_token柳峰微信公众平台企业
1317人阅读 评论(0) 收藏 举报
分类:
本文针对《微信公众平台应用开发:方法、技巧与案例》 一书中示例和代码不适用于微信企业号的情况进行修改。
 


 修改原因:


  企业号操作的链接不一样,企业号存在多个应用,因此需要支持程序ID问题


  修改方法:


  修改CommonUtil类

  


  注意事项:获得AccessToken接口频率有限制,建议进行缓存,注意有效期,本文写作时候是access_token有效期是7200秒,也就是两小时。


  1. /** 
  2.  * 通用工具类 
  3.  * 
  4.  * @author liufeng 
  5.  * @date 2013-10-17 
  6.  */  
  7. public class CommonUtil {  
  8.   
  9.   
  10.     // 凭证获取(GET)  
  11.     public final static String token_url =  
  12.         "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET";  
  13.   
  14.     static String EnterToken_url =  
  15.         "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=ENID&corpsecret=ENSECRET";  
  16.     static Token token = null;  
  17.   
  18.     /** 
  19.      * 发送https请求 
  20.      * 
  21.      * @param requestUrl 请求地址 
  22.      * @param requestMethod 请求方式(GET、POST) 
  23.      * @param outputStr 提交的数据 
  24.      * @return JSONObject(通过JSONObject.get(key)的方式获取json对象的属性值) 
  25.      */  
  26.     public static JSONObject httpsRequest(String requestUrl,  
  27.                                           String requestMethod,  
  28.                                           String outputStr) {  
  29.         JSONObject jsonObject = null;  
  30.         try {  
  31.             // 创建SSLContext对象,并使用我们指定的信任管理器初始化  
  32.             TrustManager[] tm = { new MyX509TrustManager() };  
  33.             SSLContext sslContext = SSLContext.getInstance("SSL""SunJSSE");  
  34.             sslContext.init(null, tm, new java.security.SecureRandom());  
  35.             // 从上述SSLContext对象中得到SSLSocketFactory对象  
  36.             SSLSocketFactory ssf = sslContext.getSocketFactory();  
  37.   
  38.             URL url = new URL(requestUrl);  
  39.             HttpsURLConnection conn = (HttpsURLConnection)url.openConnection();  
  40.             conn.setSSLSocketFactory(ssf);  
  41.   
  42.             conn.setDoOutput(true);  
  43.             conn.setDoInput(true);  
  44.             conn.setUseCaches(false);  
  45.             // 设置请求方式(GET/POST)  
  46.             conn.setRequestMethod(requestMethod);  
  47.   
  48.             // 当outputStr不为null时向输出流写数据  
  49.             if (null != outputStr) {  
  50.                 OutputStream outputStream = conn.getOutputStream();  
  51.                 // 注意编码格式  
  52.                 outputStream.write(outputStr.getBytes("UTF-8"));  
  53.                 outputStream.close();  
  54.             }  
  55.   
  56.             // 从输入流读取返回内容  
  57.             InputStream inputStream = conn.getInputStream();  
  58.             InputStreamReader inputStreamReader =  
  59.                 new InputStreamReader(inputStream, "utf-8");  
  60.             BufferedReader bufferedReader =  
  61.                 new BufferedReader(inputStreamReader);  
  62.             String str = null;  
  63.             StringBuffer buffer = new StringBuffer();  
  64.             while ((str = bufferedReader.readLine()) != null) {  
  65.                 buffer.append(str);  
  66.             }  
  67.   
  68.             // 释放资源  
  69.             bufferedReader.close();  
  70.             inputStreamReader.close();  
  71.             inputStream.close();  
  72.             inputStream = null;  
  73.             conn.disconnect();  
  74.             jsonObject = JSONObject.fromObject(buffer.toString());  
  75.         } catch (ConnectException ce) {  
  76.             MyLog.writelogfile("连接超时:{}", ce);  
  77.         } catch (Exception e) {  
  78.             MyLog.writelogfile("https请求异常:{}", e);  
  79.         }  
  80.         return jsonObject;  
  81.     }  
  82.   
  83.     /** 
  84.      * 获取接口访问凭证 
  85.      * 
  86.      * @param appid 凭证 
  87.      * @param appsecret 密钥 
  88.      * @return 
  89.      */  
  90.     public static Token getToken(String corpid, String appsecret) {  
  91.         if (null == token || "".equals(token.getAccessToken()) ||  
  92.             (new Date().getTime() - token.getAccess_token_date().getTime()) >=  
  93.             (token.getExpiresIn() * 1000)) {  
  94.             String requestUrl =  
  95.                 token_url.replace("APPID", corpid).replace("APPSECRET",  
  96.                                                            appsecret);  
  97.             // 发起GET请求获取凭证  
  98.             JSONObject jsonObject = httpsRequest(requestUrl, "GET"null);  
  99.   
  100.             if (null != jsonObject) {  
  101.                 try {  
  102.                     token = new Token();  
  103.                     token.setAccessToken(jsonObject.getString("access_token"));  
  104.                     token.setExpiresIn(jsonObject.getInt("expires_in"));  
  105.                 } catch (JSONException e) {  
  106.                     token = null;  
  107.                     // 获取token失败  
  108.                     MyLog.writelogfile("获取token失败 errcode:{} errmsg:{}",  
  109.                                        jsonObject.getInt("errcode"),  
  110.                                        jsonObject.getString("errmsg"));  
  111.                 }  
  112.             }  
  113.         }  
  114.         return token;  
  115.     }  
  116.   
  117.   
  118.     public static Token EntergetToken(String appid, String appsecret) {  
  119.   
  120.         if (null == token || "".equals(token.getAccessToken()) ||  
  121.             (new Date().getTime() - token.getAccess_token_date().getTime()) >=  
  122.             (token.getExpiresIn() * 1000)) {  
  123.   
  124.             String requestUrl =  
  125.                 EnterToken_url.replace("ENID", appid).replace("ENSECRET",  
  126.                                                               appsecret);  
  127.             // 发起GET请求获取凭证  
  128.             JSONObject jsonObject = httpsRequest(requestUrl, "GET"null);  
  129.   
  130.             if (null != jsonObject) {  
  131.                 try {  
  132.                     token = new Token();  
  133.                     token.setAccessToken(jsonObject.getString("access_token"));  
  134.                     token.setExpiresIn(jsonObject.getInt("expires_in"));  
  135.                 } catch (JSONException e) {  
  136.                     token = null;  
  137.                     // 获取token失败  
  138.                     MyLog.writelogfile("获取token失败 errcode:{} errmsg:{}",  
  139.                                        jsonObject.getInt("errcode"),  
  140.                                        jsonObject.getString("errmsg"));  
  141.                 }  
  142.             }  
  143.         }  
  144.         return token;  
  145.     }  
  146. }  


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值