微信开发当中很多需要和服务器搞验证,比如token拿令牌或者是拿其他什么东西,都需要appid和secret这两个东西。
这两个东西怎么去使用或者是维护又是一个话题了。你不可能说你所有的程序在这块你都去给appid和secret去赋值。appid和secret它还需要用,这显然不是最佳解决方案。建议大家这两个东西还是需要处理一下,因为你的项目一旦部署上去,比如现在appid和secret你忍住不使了或者说过两天它换号了或者说你的程序需要复用了那么你这块还是很重要的,你换起来就比较多了。所以建议把appid和secret封装一下。
import java.io.IOException;
import wx.util.WX_Token;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
WX_Token.getAccessTokenByNet();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
package wx.util;
/**
* *这是微信基础信息类,在这个类中,说明微信公众账号的相关信息。*
* @author zhongzh
*
*/
public class WX_Info {
public static String APPID = "wx51d48729cf5ce7ce";
public static String SECRET = "5b14c8d2cb46ddc389936cdb135f18ac";
//可以把APPID和SECRET的值写到配置文件里面,当服务启动的时候把APPID和SECRET初始化
//这个处理的方式就比较多了
}
package wx.util;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import base.token.AccessToken;
public class WX_Token {
public static AccessToken getAccessTokenByNet() throws IOException{//做一个关于它的缓存
//刷新获取token要求非常严格 自动创建二维码的小项目 需求:在服务启动的时候去数据库读取它相应的信息
//根据相应的信息自动生成二维码 生成二维码就需要用到token。生成二维码的数量比较多,生成一个到服务器去
//得到一个token。生成一个得到一个token。因为生成二维码需要AccessToken。然后如果你不加控制,你说我
//生成一个二维码重新获得一次token,然后你的二维码生成的呢又过于频繁,致使token的生成就过于频繁,这个时候
//服务器就可能对于你的功能账号有一个限制。也就是说你的服务启动不了或者是报错了。
//不能无止境的拿token。
/*
String appid = " ";// 是 第三方用户唯一凭证
String secret = "";// 是 第三方用户唯一凭证密钥,即appsecret
*/
/*返回的accessToken*/
AccessToken accessToken = new AccessToken();
/*进行连接网络、进行一系列的操作*/
/*网络操作*/
/*这块主要是涉及到J2SE的网络操作,网络操作在开源这一部分会找到很多的工具包,有N多种*/
//使用JDK自身带的、原生带的功能
//菜单这块调用的频率也不是特别高,你也不可能说一天换一次菜单,你来一个用户换一次菜单来一个用户换一次菜单也是不现实的.
//它的功能也不是这么使的.
//这块所调用的频率对于它的响应时间或者是效率的要求还是比较低的.所以这块你用一下原生的就OK了.
HttpURLConnection connection = null;
//得到的网络信息
StringBuffer strb = new StringBuffer();
//这是微信得到url_AccessToken所需的url
String url_AccessToken = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+WX_Info.APPID+"&secret="+WX_Info.SECRET+"";
try {//异常不往外抛了
//得到AccessToken的URL
URL url = new URL(url_AccessToken);
//打开url
connection = (HttpURLConnection) url.openConnection();
connection.connect();//连接才刚刚被打开
//得到InputStream
InputStream in = connection.getInputStream();
//得到InputStreamReader
InputStreamReader reader = new InputStreamReader(in);
//得到BufferedReader
BufferedReader breader = new BufferedReader(reader);
String str = null;
/*读取网络信息*/
while(null !=(str = breader.readLine())){
strb.append(str);
}
System.out.println(strb);
//关闭breader
breader.close();
//关闭reader
reader.close();
//关闭in
in.close();
/* if(null!=connection){
connection.disconnect();
}*/
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(null!=connection){
connection.disconnect();
}
return accessToken;
}
}
package base.token;
public class AccessToken {
private String access_token = null;// 获取到的凭证
private String expires_in =null;// 凭证有效时间,单位:秒
public AccessToken() {
super();
// TODO Auto-generated constructor stub
}
public AccessToken(String access_token, String expires_in) {
super();
this.access_token = access_token;
this.expires_in = expires_in;
}
public String getAccess_token() {
return access_token;
}
public void setAccess_token(String access_token) {
this.access_token = access_token;
}
public String getExpires_in() {
return expires_in;
}
public void setExpires_in(String expires_in) {
this.expires_in = expires_in;
}
@Override
public String toString() {
return "AccessToken [access_token=" + access_token + ", expires_in="
+ expires_in + "]";
}
}
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wx51d48729cf5ce7ce&secret=5b14c8d2cb46ddc389936cdb135f18ac
{"access_token":"zTZFxLrhM1vHAjXmq1ymk1JT8nlOKja4urFIr9PWqLYvFH9ZbWo8R6BmQqUr7VbArzBoZWOfBNI_fYGlO37r5t9s5jeYlxXXg4UXISCz2G9fOWvwzrOM86e8rv9f1eSOGYVhAHAPHE","expires_in":7200}