微信公众号获取access_token的方法实例分析

 更新时间:2019年10月25日 09:14:33   作者:游语  
这篇文章主要介绍了微信公众号获取access_token的方法,结合实例形式分析了java实现微信公众号获取access_token的相关原理、实现方法及操作注意事项,需要的朋友可以参考下

本文实例讲述了微信公众号获取access_token的方法。分享给大家供大家参考,具体如下:

上一版需求做了微信公众号开发,秀了一波操作,也遇到了很多坑。现在把微信公众号一些基本的操作记录一下。

微信公众号获取access_token  官方文档地址

access_token是公众号的全局唯一接口调用凭据,我们和微信服务器进行交互,服务器通过access_token判断我们是谁(哪个公众号服务的请求)。所以 我们在开发过程中服务端拿到的access_token是一定不能显式暴露给外部,否则将导致数据安全问题。别人拿到你的accessToken操作你的公众号。access_token的有效期目前为2个小时,过期需要再次获取。

下面是一种获取access_token方式

1.项目添加httpclient相关依赖,示例使用httpclient请求微信服务器,获取微信返回结果。

<!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient -->
  <dependency>
   <groupId>org.apache.httpcomponents</groupId>
   <artifactId>httpclient</artifactId>
   <version>4.5.3</version>
  </dependency>
  <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpcore -->
  <dependency>
   <groupId>org.apache.httpcomponents</groupId>
   <artifactId>httpcore</artifactId>
   <version>4.4.6</version>
  </dependency>

2.httpClientUtil类,网上随手找的 试了一下本例的doget方法 没有问题,其他的 暂不考虑

public class HttpClientUtil {
  public static String doGet(String url, Map<String, String> param) {
    // 创建Httpclient对象
    CloseableHttpClient httpclient = HttpClients.createDefault();
    String resultString = "";
    CloseableHttpResponse response = null;
    try {
      // 创建uri
      URIBuilder builder = new URIBuilder(url);
      if (param != null) {
        for (String key : param.keySet()) {
          builder.addParameter(key, param.get(key));
        }
      }
      URI uri = builder.build();
      // 创建http GET请求
      HttpGet httpGet = new HttpGet(uri);
      // 执行请求
      response = httpclient.execute(httpGet);
      // 判断返回状态是否为200
      if (response.getStatusLine().getStatusCode() == 200) {
        resultString = EntityUtils.toString(response.getEntity(), "UTF-8");
      }
    } catch (Exception e) {
      e.printStackTrace();
    } finally {
      try {
        if (response != null) {
          response.close();
        }
        httpclient.close();
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
    return resultString;
  }
  public static String doGet(String url) {
    return doGet(url, null);
  }
  public static String doPost(String url, Map<String, String> param) {
    // 创建Httpclient对象
    CloseableHttpClient httpClient = HttpClients.createDefault();
    CloseableHttpResponse response = null;
    String resultString = "";
    try {
      // 创建Http Post请求
      HttpPost httpPost = new HttpPost(url);
      // 创建参数列表
      if (param != null) {
        List<NameValuePair> paramList = new ArrayList<>();
        for (String key : param.keySet()) {
          paramList.add(new BasicNameValuePair(key, param.get(key)));
        }
        // 模拟表单
        UrlEncodedFormEntity entity = new UrlEncodedFormEntity(paramList,"utf-8");
        httpPost.setEntity(entity);
      }
      // 执行http请求
      response = httpClient.execute(httpPost);
      resultString = EntityUtils.toString(response.getEntity(), "utf-8");
    } catch (Exception e) {
      e.printStackTrace();
    } finally {
      try {
        response.close();
      } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
    }
    return resultString;
  }
  public static String doPost(String url) {
    return doPost(url, null);
  }
  public static String doPostJson(String url, String json) {
    // 创建Httpclient对象
    CloseableHttpClient httpClient = HttpClients.createDefault();
    CloseableHttpResponse response = null;
    String resultString = "";
    try {
      // 创建Http Post请求
      HttpPost httpPost = new HttpPost(url);
      // 创建请求内容
      StringEntity entity = new StringEntity(json, ContentType.APPLICATION_JSON);
      httpPost.setEntity(entity);
      // 执行http请求
      response = httpClient.execute(httpPost);
      resultString = EntityUtils.toString(response.getEntity(), "utf-8");
    } catch (Exception e) {
      e.printStackTrace();
    } finally {
      try {
        response.close();
      } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
    }
    return resultString;
  }
}

3.第三步就是简单的测试代码了

public class WeChatAccessTokenTest {
  public static void main(String[] args) {
    Map<String, String> params = new HashMap<>();
    // TODO: 2018/11/16 *号改成真实appid
    params.put("appid", "******");
    // TODO: 2018/11/16 *号改成真实secret
    params.put("secret", "******");
    params.put("grant_type", "client_credential");
    String response = HttpClientUtil.doGet("https://api.weixin.qq.com/cgi-bin/token", params);
    JSONObject accessTokenObject = JSONObject.parseObject(response);
    String accessToken = accessTokenObject.getString("access_token");
    Long expire = accessTokenObject.getLong("expires_in");
    System.out.println(accessToken);
  }
}

以上就是微信公众号基础却比较重要的获取access_token操作了!

更多关于java算法相关内容感兴趣的读者可查看本站专题:《Java字符与字符串操作技巧总结》、《Java数组操作技巧总结》、《Java数学运算技巧总结》、《Java编码操作技巧总结》和《Java数据结构与算法教程

希望本文所述对大家java程序设计有所帮助。

相关文章

  • 在Spring中自动装配Bean的属性

    在Spring中自动装配Bean的属性

    今天小编就为大家分享一篇关于在Spring中自动装配Bean的属性,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • Java编程实现从尾到头打印链表代码实例

    Java编程实现从尾到头打印链表代码实例

    这篇文章主要介绍了Java编程实现从尾到头打印链表代码实例,小编觉得挺不错的,这里分享给大家,供需要的朋友参考。
    2017-10-10
  • spring mvc配置bootstrap教程

    spring mvc配置bootstrap教程

    这篇文章主要为大家详细介绍了spring mvc配置bootstrap,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • maven为MANIFEST.MF文件添加内容的方法

    maven为MANIFEST.MF文件添加内容的方法

    这篇文章主要介绍了maven为MANIFEST.MF文件添加内容的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • Spring Boot配置读取实现方法解析

    Spring Boot配置读取实现方法解析

    这篇文章主要介绍了Spring Boot配置读取实现方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • Java二维码登录流程实现代码(包含短地址生成,含部分代码)

    Java二维码登录流程实现代码(包含短地址生成,含部分代码)

    近年来,二维码的使用越来越风生水起,本篇文章主要介绍了Java二维码登录流程实现代码,其中包含短地址生成,有兴趣的可以了解一下。
    2016-12-12
  • Java中使用开源库JSoup解析HTML文件实例

    Java中使用开源库JSoup解析HTML文件实例

    这篇文章主要介绍了Java中使用开源库JSoup解析HTML文件实例,Jsoup是一个开源的Java库,它可以用于处理实际应用中的HTML,比如常见的HTML格式化就可以用它来实现,需要的朋友可以参考下
    2014-09-09
  • Android应用开发的一般文件组织结构讲解

    Android应用开发的一般文件组织结构讲解

    这篇文章主要介绍了Android应用开发的一般文件组织结构讲解,同时附带介绍了一个获取Android的文件列表的方法,需要的朋友可以参考下
    2015-12-12
  • J2EE基础之EJB全面了解

    J2EE基础之EJB全面了解

    下面小编就为大家带来一篇J2EE基础之EJB全面了解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-07-07
  • SpringBoot内部调用事务不起作用问题的解决方案

    SpringBoot内部调用事务不起作用问题的解决方案

    这篇文章主要介绍了SpringBoot事务不起作用问题的解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10

最新评论