在微信开发中,就有一些接口会涉及到获取接口凭证的接口,开发文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140183
比如我们在微信公众号创建菜单中就会有获取接口凭证要去,还有就是微信小程序在做消息推送功能时也会有调用access_token获取微信接口凭证的要求
获取access_token:https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
参数:
grant_type:默认添client_credential
appid:第三方用户唯一凭证 (微信后台中获取)(微信用户唯一的)
secret:第三方用户唯一凭证密钥,即appsecret(微信后台中获取)(微信用户唯一的)
返回过来的参数:
access_token:获取到的凭证(这个凭证是需要保存起来,获取的次数是有限制的)
expires_in:凭证的时间
这个接口凭证,我自己是获取当前的时间搓加上凭证时间保存在数据库中,当使用时凭证时,都会去数据库中查询,用时间去进行比较看是否过期,过期就重新调用接口凭证,除了这种还可以放到Redis缓存中进行保存
代码实例:
Httprequests.java(发送请求的工具类)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.URL;
import java.net.URLConnection;
import java.util.List;
import java.util.Map;
import java.util.Random;
import javax.servlet.http.HttpServletRequest;
/**
*
User: qrn
*
Date: 14-1-28
*
Version: 1.0
* 描述: http发起请求:
*/
public class Httprequests {
public static void main(String[] aegs) {
String string = Httprequests.sendGet("http://v.qq.com/x/cover/kvehb7okfxqstmc.html?vid=e01957zem6o","");
System.out.print(string);
}
public static String sendGet (String url,String param) {
String result ="";
BufferedReader in =null;
try {
String urlNameString = url +"?" +param;
System.out.println("发送的链接请求:"+urlNameString);
URL reaurl = new URL(urlNameString);
URLConnection connection = reaurl.openConnection();
//设置通用
connection.setRequestProperty("accept", "*/*");
connection.setRequestProperty("connection", "keep-Alive");
connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
//建立实际的连接
connection.connect();
Map
//定义 BufferedReader输入流来读取URL的响应
in = new BufferedReader(new InputStreamReader(
connection.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
result += line;
}
} catch (Exception e) {
System.out.println("发送GET请求出现异常!" + e);
e.printStackTrace();
}
// 使用finally块来关闭输入流
finally {
try {
if (in != null) {
in.close();
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
return result;
}
/**
* 向指定 URL 发送POST方法的请求
* @param url 发送请求的 URL
* @param param 参数
* @return String 所代表远程资源的响应结果
*/
public static String sendPost(String url, String param) {
PrintWriter out = null;
BufferedReader in = null;
String result = "";
try {
URL realUrl = new URL(url);
// 打开和URL之间的连接
URLConnection conn = realUrl.openConnection();
// 设置通用的请求属性
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("user-agent",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
// 发送POST请求必须设置如下两行
conn.setDoOutput(true);
conn.setDoInput(true);
// 获取URLConnection对象对应的输出流
out = new PrintWriter(conn.getOutputStream());
// 发送请求参数
out.print(param);
// flush输出流的缓冲
out.flush();
// 定义BufferedReader输入流来读取URL的响应
in = new BufferedReader(
new InputStreamReader(conn.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
result += line;
}
} catch (Exception e) {
System.out.println("发送 POST 请求出现异常!"+e);
e.printStackTrace();
}
//使用finally块来关闭输出流、输入流
finally{
try{
if(out!=null){
out.close();
}
if(in!=null){
in.close();
}
}
catch(IOException ex){
ex.printStackTrace();
}
}
return result;
}
/**
* 拿到ip
* @param req request作用域:
* @return String
*/
public static String getRemoteIP(HttpServletRequest req) {
String ip = req.getHeader("X-Real-IP");
if (ip == null || ("").equals(ip)) {
ip = req.getRemoteAddr() == null ? "127.0.0.1" : req.getRemoteAddr();
}
return ip;
}
/**
* 生成
* @param num 参数
* @return String
*/
public static String getPamens(Integer num){
String base = "abcdefghijklmnopqrstuvwxyz0123456789";
Random random = new Random();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < num; i++) {
int number = random.nextInt(base.length());
sb.append(base.charAt(number));
}
return sb.toString();
}
}
TokenServiceImpl.java(获取接口):
/**
* 接口凭证:
*/
@Override
public Map
String param="grant_type="+WeChatTool.access_token_grant_type+"&appid="+WeChatTool.wxspAppid+"&secret="+WeChatTool.wxspSecret;
//获取接口凭证
String sendGet=Httprequests.sendGet(WeChatTool.select_access_token,param);
System.out.println("发送git请求的返回值:"+sendGet);
JSONObject json = JSONObject.fromObject(sendGet);
String access_token=json.getString("access_token"); //凭证
System.out.println("获取的access_token:"+access_token);
int expires_in= json.getInt("expires_in"); //凭证有效时间,单位:秒
System.out.println("有效的时间:"+expires_in);
System.out.print("获取凭证成功");
System.out.println("返回的数据:"+access_token);
Map
map.put("access_token", access_token);
map.put("expires_in", expires_in);
return map;
}
这样就可以获取到接口凭证了,希望都微信开发的朋友会有一点帮助,如果有疑问请在下发评论。