您的位置:首页 > 移动开发 > 微信开发

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

2016-03-30 11:41 651 查看

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

标签:
微信access_token柳峰微信公众平台企业
2016-03-30 11:41
1317人阅读 评论(0)收藏举报


分类:

自己软件开源代码(38)


本文针对《微信公众平台应用开发:方法、技巧与案例》 一书中示例和代码不适用于微信企业号的情况进行修改。

 

 修改原因:

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

  修改方法:

  修改CommonUtil类

  

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

[java]
view plain
copy

/** 
 * 通用工具类 
 * 
 * @author liufeng 
 * @date 2013-10-17 
 */  
public class CommonUtil {  
  
  
    // 凭证获取(GET)  
    public final static String token_url =  
        "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET";  
  
    static String EnterToken_url =  
        "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=ENID&corpsecret=ENSECRET";  
    static Token token = null;  
  
    /** 
     * 发送https请求 
     * 
     * @param requestUrl 请求地址 
     * @param requestMethod 请求方式(GET、POST) 
     * @param outputStr 提交的数据 
     * @return JSONObject(通过JSONObject.get(key)的方式获取json对象的属性值) 
     */  
    public static JSONObject httpsRequest(String requestUrl,  
                                          String requestMethod,  
                                          String outputStr) {  
        JSONObject jsonObject = null;  
        try {  
            // 创建SSLContext对象,并使用我们指定的信任管理器初始化  
            TrustManager[] tm = { new MyX509TrustManager() };  
            SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE");  
            sslContext.init(null, tm, new java.security.SecureRandom());  
            // 从上述SSLContext对象中得到SSLSocketFactory对象  
            SSLSocketFactory ssf = sslContext.getSocketFactory();  
  
            URL url = new URL(requestUrl);  
            HttpsURLConnection conn = (HttpsURLConnection)url.openConnection();  
            conn.setSSLSocketFactory(ssf);  
  
            conn.setDoOutput(true);  
            conn.setDoInput(true);  
            conn.setUseCaches(false);  
            // 设置请求方式(GET/POST)  
            conn.setRequestMethod(requestMethod);  
  
            // 当outputStr不为null时向输出流写数据  
            if (null != outputStr) {  
                OutputStream outputStream = conn.getOutputStream();  
                // 注意编码格式  
                outputStream.write(outputStr.getBytes("UTF-8"));  
                outputStream.close();  
            }  
  
            // 从输入流读取返回内容  
            InputStream inputStream = conn.getInputStream();  
            InputStreamReader inputStreamReader =  
                new InputStreamReader(inputStream, "utf-8");  
            BufferedReader bufferedReader =  
                new BufferedReader(inputStreamReader);  
            String str = null;  
            StringBuffer buffer = new StringBuffer();  
            while ((str = bufferedReader.readLine()) != null) {  
                buffer.append(str);  
            }  
  
            // 释放资源  
            bufferedReader.close();  
            inputStreamReader.close();  
            inputStream.close();  
            inputStream = null;  
            conn.disconnect();  
            jsonObject = JSONObject.fromObject(buffer.toString());  
        } catch (ConnectException ce) {  
            MyLog.writelogfile("连接超时:{}", ce);  
        } catch (Exception e) {  
            MyLog.writelogfile("https请求异常:{}", e);  
        }  
        return jsonObject;  
    }  
  
    /** 
     * 获取接口访问凭证 
     * 
     * @param appid 凭证 
     * @param appsecret 密钥 
     * @return 
     */  
    public static Token getToken(String corpid, String appsecret) {  
        if (null == token || "".equals(token.getAccessToken()) ||  
            (new Date().getTime() - token.getAccess_token_date().getTime()) >=  
            (token.getExpiresIn() * 1000)) {  
            String requestUrl =  
                token_url.replace("APPID", corpid).replace("APPSECRET",  
                                                           appsecret);  
            // 发起GET请求获取凭证  
            JSONObject jsonObject = httpsRequest(requestUrl, "GET", null);  
  
            if (null != jsonObject) {  
                try {  
                    token = new Token();  
                    token.setAccessToken(jsonObject.getString("access_token"));  
                    token.setExpiresIn(jsonObject.getInt("expires_in"));  
                } catch (JSONException e) {  
                    token = null;  
                    // 获取token失败  
                    MyLog.writelogfile("获取token失败 errcode:{} errmsg:{}",  
                                       jsonObject.getInt("errcode"),  
                                       jsonObject.getString("errmsg"));  
                }  
            }  
        }  
        return token;  
    }  
  
  
    public static Token EntergetToken(String appid, String appsecret) {  
  
        if (null == token || "".equals(token.getAccessToken()) ||  
            (new Date().getTime() - token.getAccess_token_date().getTime()) >=  
            (token.getExpiresIn() * 1000)) {  
  
            String requestUrl =  
                EnterToken_url.replace("ENID", appid).replace("ENSECRET",  
                                                              appsecret);  
            // 发起GET请求获取凭证  
            JSONObject jsonObject = httpsRequest(requestUrl, "GET", null);  
  
            if (null != jsonObject) {  
                try {  
                    token = new Token();  
                    token.setAccessToken(jsonObject.getString("access_token"));  
                    token.setExpiresIn(jsonObject.getInt("expires_in"));  
                } catch (JSONException e) {  
                    token = null;  
                    // 获取token失败  
                    MyLog.writelogfile("获取token失败 errcode:{} errmsg:{}",  
                                       jsonObject.getInt("errcode"),  
                                       jsonObject.getString("errmsg"));  
                }  
            }  
        }  
        return token;  
    }  
}  

上一篇柳峰微信公众平台开发教程企业号修改篇(AES验证)
下一篇柳峰微信公众平台开发教程企业号修改篇(企业菜单篇)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: