wx-大家感觉这种获取微信Access_Token方法如何

问题描述

大家感觉这种获取微信Access_Token方法如何

public class WxTokenUtil {

private static String FileName = "WxTokenUtil.properties";
private static String APPID = "fsdafsd";
private static String APPSECRET = "dfsdsaf";

public synchronized static String getAccessToken() {

    try{
    // 文件获取token值及时间
    Properties prop = new Properties();// 属性集合对象
    InputStream fis  =WxTokenUtil.class.getClassLoader().getResourceAsStream(FileName);
    prop.load(fis);// 将属性文件流装载到Properties对象中
    fis.close();// 关闭流

    String access_token = prop.getProperty("access_token");
    String expires_in = prop.getProperty("expires_in");
    String last_time = prop.getProperty("last_time");

    int int_expires_in = 0;
    long long_last_time = 0;

    try{
        int_expires_in = Integer.parseInt(expires_in);
        long_last_time = Long.parseLong(last_time);

    }catch(Exception e){

    }

    long current_time = System.currentTimeMillis();

    // 如果token时间超时,重新获取
        if ((current_time - long_last_time) / 1000 >= int_expires_in) {
            String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="
                    + APPID + "&secret=" + APPSECRET;

           JSONObject jobject = httpRequest(url);

           String  j_access_token = (String) jobject.get("access_token");
           String  j_expires_in = (String) jobject.get("expires_in");

           //保存
            if(j_access_token!=null && j_expires_in!=null){
                prop.setProperty("access_token", j_access_token);
                prop.setProperty("expires_in", j_expires_in);
                prop.setProperty("last_time", System.currentTimeMillis()+"");    

                URL url_ = WxTokenUtil.class.getClassLoader().getResource(FileName);
                FileOutputStream fos=  new FileOutputStream(new File(url_.toURI()));
                prop.store(fos, null);
                fos.close();// 关闭流
            }
            return j_access_token;
        } else {
            return access_token;
        }
    }
    catch(Exception e){
        return null;
    }

}

// --
public synchronized static JSONObject httpRequest(String requestUrl) {
    JSONObject jsonObject = null;
    StringBuffer buffer = new StringBuffer();
    try {

        URL url = new URL(requestUrl);
        HttpsURLConnection httpUrlConn = (HttpsURLConnection) url
                .openConnection();

        httpUrlConn.setDoOutput(true);
        httpUrlConn.setDoInput(true);
        httpUrlConn.setUseCaches(false);
        // 设置请求方式(GET/POST)
        httpUrlConn.setRequestMethod("GET");

        httpUrlConn.connect();

        // 将返回的输入流转换成字符串
        InputStream inputStream = httpUrlConn.getInputStream();
        InputStreamReader inputStreamReader = new InputStreamReader(
                inputStream, "utf-8");
        BufferedReader bufferedReader = new BufferedReader(
                inputStreamReader);

        String str = null;
        while ((str = bufferedReader.readLine()) != null) {
            buffer.append(str);
        }
        bufferedReader.close();
        inputStreamReader.close();
        // 释放资源
        inputStream.close();
        inputStream = null;
        httpUrlConn.disconnect();
        jsonObject = JSONObject.fromObject(buffer.toString());

    } catch (Exception e) {
        e.printStackTrace();
    }

    return jsonObject;
}

解决方案

能获取到数据么? 之前做微信公共号开发时,用的是第三方的dll

时间: 2024-10-20 09:11:08

wx-大家感觉这种获取微信Access_Token方法如何的相关文章

PHP定时任务获取微信access_token的方法_php技巧

本文实例讲述了PHP定时任务获取微信access_token的方法.分享给大家供大家参考,具体如下: 微信access_token在开发时会变的好像是几分种不一样了,这里我们来介绍关于PHP定时任务获取微信access_token的方法. 最近开发微信公众平台,公众号调用各接口时都需使用access_token,access_token是公众号的全局唯一接口调用凭据,开发时需要进行妥善保存. access_token有效期为7200秒 ,重复获取将导致上次获取的access_token失效. 由

PHP获取微信access_token后全局缓存与更新

access_token是微信公众号开发的全局唯一票据,公众号开发必须要用到access_token.access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效. access_token的请求次数是有限制的,所以不能每次都重新请求,只有将它缓存到本地了.    function accessToken() {     $tokenFile = "./access_token.txt";//缓存文件名     $data = jso

PHP定时任务获取微信access_token的例子

最近开发微信公众平台,公众号调用各接口时都需使用access_token,access_token是公众号的全局唯一接口调用凭据,开发时需要进行妥善保存. access_token有效期为7200秒 ,重复获取将导致上次获取的access_token失效. 由于微信对获取access_token的api调用次数做了限制,建议开发者全局存储与更新access_token,频繁刷新access_token会导致api调用受限,影响自身业务. 那么有什么好的解决access_token存储和刷新的办法

php使用CURL模拟GET与POST向微信接口提交及获取数据的方法_php实例

本文实例讲述了php使用CURL模拟GET与POST向微信接口提交及获取数据的方法.分享给大家供大家参考,具体如下: php CURL函数可以模仿用户进行一些操作,如我们可以模仿用户提交数据也可以模仿用户进行网站访问了,下面我们来介绍利用CURL模拟进行微信接口的GET与POST例子,例子非常的简单就两个: Get提交获取数据 /** * @desc 获取access_token * @return String access_token */ function getAccessToken()

php版微信自动登录并获取昵称的方法_php实例

本文实例讲述了php版微信自动登录并获取昵称的方法.分享给大家供大家参考,具体如下: 微信自动登录并获取昵称是可以通过api接口来获取的也是通过微信开放的接口来实现了,下面我们一起来看一个例子 仅记录:微信获取昵称自动登录 经过反复几次验证,发现我这个方法有缺陷: 微信内 未关注进入网站,无法获得昵称. 关注后用我这个方法可以获得昵称. 是否是因为第一次生成openid 所以还未生成昵称?待测试. /** * 获取当前页面完整URL地址 */ function get_url() { $sys_

php使用CURL模拟GET与POST向微信接口提交及获取数据的方法

本文实例讲述了php使用CURL模拟GET与POST向微信接口提交及获取数据的方法.分享给大家供大家参考,具体如下: php CURL函数可以模仿用户进行一些操作,如我们可以模仿用户提交数据也可以模仿用户进行网站访问了,下面我们来介绍利用CURL模拟进行微信接口的GET与POST例子,例子非常的简单就两个: Get提交获取数据 /** * @desc 获取access_token * @return String access_token */ function getAccessToken()

js获取微信版本号的方法_javascript技巧

微信现在几乎已经普遍在使用,但是微信版本一直在更新,不同的版本有不同的功能,于是了解微信的版本号很重要,以便自己及时更新体验新的功能.那么如何用js获取微信版本号呢? 一.判断微信版本号 var wechatInfo = navigator.userAgent.match(/MicroMessenger\\/([\\d\\.]+)/i) ; if( !wechatInfo ) { alert("本活动仅支持微信") ; } else if ( wechatInfo[1] < &q

微信公众号开发系列-获取微信OpenID

在微信开发时候在做消息接口交互的时候需要使用带微信加密ID(OpenId),下面讲讲述2中类型方式获取微信OpenID,接收事件推送方式和网页授权获取用户基本信息方式获取. 1.通过接收被动消息方式获取OpenId(接收事件推送方式),以下事件中都可以获取到OpenID 关注/取消关注事件 用户在关注与取消关注公众号时,微信会把这个事件推送到开发者填写的URL.方便开发者给用户下发欢迎消息或者做帐号的解绑. 微信服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次 关于重试的消息排

Magicodes.WeiChat——使用OAuth 2.0获取微信用户信息

使用Magicodes.WeiChat,可以很方便的获取到微信用户的信息.在使用OAuth 2.0之前,你先需要做以下操作: 1)在开发者中心修改[网页授权获取用户基本信息],在弹出的界面输入自己的根域名.比如:weichat.chinacloudsites.cn 如下图所示: 2)配置菜单或者链接(如果使用特性"WeChatOAuth",本步骤可以略过,这里只是介绍下原理,具体请参考步骤3的说明).Magicodes.WeiChat在控制器WeiChatController中进行处理