微信现在在国内的使用度还是非常高的,现在差不多的互联网应用都需要开发微信绑定功能,呃,其实这个功能并不复杂,不过网上的文档的都写得太官方、太繁琐了。
我自己总结了一下,开发微信绑定功能的全过程。尽量说得清晰、明白,便于理解
一、前提准备
1、服务器,包括ip地址:这个我就不说啦,开发互联网应用,没有服务器和IP,额,难道你开发的是纯客户端滴?
2、域名:开发互联网应用不一定需要域名,不过要绑定微信的话,就一定需要域名了。
3、80端口:微信绑定必须用80端口,不能用其他端口
4、微信公众号:申请一个微信公众号,拿到 APPID 和 secret
二、开发过程
原理说明:所谓绑定微信,其实就是绑定微信的OPENID,所以需要获取微信用户的openid,然后存到我们数据库里就可以了。获取openid需要获取code,获取code需要appid 和 secret。所以说,绑定微信账户,其实需要两个请求。第一个请求获取用户code,第二个请求获取openid
开发步骤
1、登录公众号,自定义菜单,菜单名称随意,登录应用或者登录账户
2、菜单绑定URL地址:https://open.weixin.qq.com/connect/oauth2/authorize?appid=XXXX&redirect_uri=http://www.fei1314.com/weixin.do&response_type=code&scope=snsapi_base&state=123&connect_redirect=1#wechat_redirect
说明一下:redirect_uri 是我们的域名请求地址,微信官方文档说这个地址要用https,我本人测试结果是http也可以用,还有一个注意点是redirect_uri 的值需要转码,所以这个值是
https://open.weixin.qq.com/connect/oauth2/authorize?appid=XXXX&redirect_uri=http%3A%2F%2Fwww.fei1314.com%2Fweixin.do&response_type=code&scope=snsapi_base&state=123&connect_redirect=1#wechat_redirect
3、java代码,获取code和openid
public void weixin(){
String code = this.getReqParam("code");
StringBuilder sb = new StringBuilder("https://api.weixin.qq.com/sns/oauth2/access_token");
sb.append("?appid=").append(Const.APPID);
sb.append("&secret=").append(Const.APPSECRET);
sb.append("&code=").append(code);
sb.append("&grant_type=authorization_code");
String accessToken = "0";
String openid = "0";
try {
URL urlGet = new URL(sb.toString());
HttpURLConnection http = (HttpURLConnection) urlGet.openConnection();
http.setRequestMethod("GET"); //必须是get方式请求
http.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
http.setDoOutput(true);
http.setDoInput(true);
System.setProperty("sun.net.client.defaultConnectTimeout", "30000");// 连接超时30秒
System.setProperty("sun.net.client.defaultReadTimeout", "30000");// 读取超时30秒
http.connect();
InputStream is = http.getInputStream();
int size = is.available();
byte[] jsonBytes = new byte[size];
is.read(jsonBytes);
String message = new String(jsonBytes, "UTF-8");
JSONObject demoJson = new JSONObject(message);
accessToken = demoJson.getString("access_token");
openid = demoJson.getString("openid");
}catch(Exception e){
e.printStackTrace();
}
//保存 openid
……
……
}
4、OVER,把获取到的openid保存下来就行了,然后下次请求的时候只要将获取到的openid与数据库里的openid比较下,就知道微信有没有绑定过了。