第一步:首先是配置微信菜单,官网demo
****在微信的跳转菜单中,就写入一下路径:****
https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx520c15f417810387&redirect_uri=https%3A%2F%2Fchong.qq.com%2Fphp%2Findex.php%3Fd%3D%26c%3DwxAdapter%26m%3DmobileDeal%26showwxpaytitle%3D1%26vb2ctag%3D4_2030_5_1194_60&response_type=code&scope=snsapi_base&state=123#wechat_redirect
通过 urldecode解码,可看见为:
http://open.weixin.qq.com/connect/oauth2/authorize?appid=wx520c15f417810387&redirect_uri=http://chong.qq.com/tws/entra/getpanel?id=147&response_type=code&scope=snsapi_base&state=qqchongzhi#wechat_redirect
备注:redirect_uri,为一个有域名的网页地址,ip地址不行
用户同意授权,页面将跳转至redirect_uri/?code=CODE&state=STATE,带了参数 code
多加一句,重定向url需要在微信公众号后台,授权接口,网页授权,js回凋域名那里进行配置,将对应的txt文件放入项目中,保证配置时能够访问到
第二步:通过code换取网页授权access_token
请求方法
获取code后,请求以下链接获取access_token: https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
返回数据为:
正确时返回的JSON数据包如下:
{"access_token":"ACCESS_TOKEN",
"expires_in":7200,
"refresh_token":"REFRESH_TOKEN",
"openid":"OPENID",
"scope":"SCOPE"}
成功,则会拿到微信公众号用户的openid,此时就可以使用openid做别的操作。
错误:一般情况下,会出现access_token 失效的情况,处理办法也非常简单,再次获取一遍access_token****即可,使用新的access_token再请求一次,就会成功拿到用户的openid
部分代码示例:
- 前台页面:
假如微信点击进入的网页为下面的网页,网页中js使用以下写法,
var appid="wx12345678";//微信公众号的aapid
var secret="12345678";//微信公众号的secret
//发送get 请求,至后台
var path ="<%=request.getContextPath() %>/ClassName?code=
<%=request.getParameter("code")%>&appid="+appid+"&secret="+secret;
$.ajaxSetup({
async: false //同步
});
$.get(path,function(data){
data=JSON.parse(data);
//alert(data.openid);//获取用户的openid
});
- 后台代码:
String url="[https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code](https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code)";
//参数说明
//Appid:微信公众号id
/Secret:密钥
//Code:第一步结束后,url中含有此信息使用request.getParemeter(”code“)获取
//grant_type:默认值authorization_code
//HttpRequest工具类(博客中有),使用普通的get请求即可
String result = HttpRequest.sendGet(url, “”);
JSONObject jsonObject = JSONObject.fromObject(result);
System.out.println(jsonObject.openid);//获取用户的 openid
//此时就可以使用openid进行各种操作,例如向用户推送消息,留言交流一下........