##接口访问凭证
###简介
平台为开发者提供的一系列接口,在调用时都需要传入接口访问凭证access_token。
###获取接口凭证
自定义菜单的创建、查询、删除都需要调用公众平台开放的自定义菜单接口,而调用接口需要先获取 access_token(接口访问凭证)。获取凭证接口的请求地址如下
~~~
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
~~~
通过发起HTTP GET请求调用该接口,调用接口时需传入参数grant_type、appid和sercet。其中grant_type是授权类型,这里只需要传入固定值 client_credential即可,appid和secret可以再公众号开发者中心找到。如果接口调用成功,会返回如下json结果
~~~
{"access_token":"ACCESS_TOKEN","expires_in":7200}
~~~
其中 access_token 就是我们需要的接口访问凭证,它是一个长度上百位的加密字符串;而expires_in 是凭证的有效期,单位是秒
* * * * *
######**提示**:access_token的有效期是7200秒,也就是2个小时。这就意味着,并不是每次访问通用接口都需要重新获取access_token,可以将获取到的access_token存储到缓存或数据库中,只要access_token没有过期,就能取出来继续使用
* * * * *
###获取访问凭证的方式
获取凭证的方式可以分为两种: 手动获取和程序获取。手动获取就是讲请求地址放到浏览器地址栏进行访问,而程序获取是指通过编程调用获取凭证接口。两种获取方式本质都是向微信服务器发送HTTPS GET请求。
####1.手动获取
手动获取比较简单,直接将替换好参数的url放到浏览器上进行访问,正常情况下就会返回所需要的凭证信息
####2.程序获取
在Java中,访问HTTPS链接需要用到HttpsURLConnection类。代码示例如下
ps: 代码中需要用到 “自定义信任管理器”请点击链接 :
[自定义信任管理器](http://www.kancloud.cn/yongxin/wxapi/196780)
~~~
/*
* 测试获取凭证(HTTPS GET请求)
*/
public class TokenTest{
public static void man(String[] args) throws Exception{
//获取凭证接口地址
String tokneUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET";
//建立连接
URL url = new URL(tokenUrl);
HttpsURLConnection coon = (HTTPSURLConnection) url.openConnection();
//使用自定义的信任管理器
TrusManager[] tm = {new MyX509TrustManager()};
SSLContext sslContext = SSLContext.getInstance("SSL","SunJSSE");
sslContext.init(null,tm,new java.security.SecureRandom());
SSLSocketFactory ssf = sslContext.getSocketFactory();
conn.setSSLSocketFactory(ssf);
conn.setDoInput(true);
//设置请求方式
conn.setRequestMethod("GET");
//取得输入流
InputStream inputStream = conn.getInputStream();
InputStreamReader inputStreamReader = new InputStreamReader(inputStream,"utf-8");
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
//设置相应内容
StringBuffer buffer = new StringBuffer();
String str = null;
while((str = bufferedReader.readLine()) != null){
buffer.append(str);
}
//关闭、释放资源
bufferedReader.close();
inputStreamReader.close();
inputStream.close();
conn.disconnect();
//输出返回结果
System.out.println(buffer);
}
}
~~~
以上代码先通过URL对象的 openConnection()方法与微信的凭证处理服务建立连接,并将HTTPS请求方式设置为GET。再使用HttpsURLConnection类的getInputStream()方法得到输入流,读取输入流中的内容(正常情况下得到的就是凭证信息)。接下来从Json字符串中解析出access_token 和 expires_in 就可以了