首先在微信开发文档中有提到微信网页受权的操做步骤:ajax
第一步:用户赞成受权,获取codejson
在确保微信公众帐号拥有受权做用域(scope参数)的权限的前提下(服务号得到高级接口后,默认拥有scope参数中的snsapi_base和snsapi_userinfo),引导关注者打开以下页面:api
https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri = REDIRECT_URL&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
其中scope有静默受权和非静默受权两种,在这里咱们使用非静默受权:scope等于snsapi_userinfo,为后面获取用户信息作准备。跨域
若是用户赞成受权,页面将跳转至 redirect_uri/?code=CODE&state=STATE。微信
code说明:code做为换取access_token的票据,每次用户受权带上的code将不同,code只能使用一次,5分钟未被使用自动过时。微信开发
第二步:经过code换取网页受权access_tokenapp
获取code后,请求如下连接获取access_token: https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
可是在获取access_token的过程当中,咱们会遇到一个跨域问题,什么post、get和jsonp方法都试过了,都不行,那么怎么解决这个跨域问题呢?post
首先咱们知道咱们是不可能改变微信的代码,那么咱们就只能想到的解决方法是利用别人的代理来进行中转,那么从网上找到了以下方法:jsonp
var target = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=AECRET&code="+value+"&grant_type=authorization_code";
$.ajax({//2.经过code换取网页受权access_token
url: 'http://query.yahooapis.com/v1/public/yql',//雅虎代理url
dataType: "jsonp",//雅虎代理数据格式
data:{
q:"select * from json where url=\'"+target+"'",
//代理返回格式
format:"json"
},
success: function (data) {
alert("请求成功");
alert("openid:"+data.query.results.json.openid);
console.log("openid:"+data.query.results.json.openid);
}
});
以上的用的就是yahoo的代理ypl进行一个中转,ypl是雅虎旗下一个用来转换数据的,从而获取到了access_token和openid。
url