当前位置: 首页 > 后端技术 > PHP

Ajax实现微信网页授权登录

时间:2023-03-30 02:35:12 PHP

项目背景由于项目采用了前后端完全分离的方案,无法使用常规的微信授权登录方式,需要ajax实现微信授权登录。需求分析因为本人是phper,微信开发使用的是EasyWeChat,所以实现方式是基于EW的。其实实现这一点很麻烦。在实现之前,我们需要了解一下微信授权的全过程。引导用户进入授权页面同意授权,获取code并兑换code为网页授权access_token(区别于基础支持中的access_token)。如有需要,开发者可以刷新网页授权access_token,避免过期。通过网页授权access_token和openid获取用户基本信息(支持UnionID机制??)其实说白了,前端只需要做一件事,引导用户发起微信授权页面,然后获取code,然后跳转到当前页面,然后请求后端交换用户等相关信息。实现该功能是为了引导用户唤起微信授权确认页面。我们需要在这里做两件事。首先配置jsapi域名。二、配置微信网页授权的回调域名,构建微信授权的URL"https://open.weixin.qq.com/connect/oauth2/authorize?appid="+appId+"&redirect_uri="+location.href.split('#')[0]+"&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect我们从连接中看到有两个变量,appId,redirect_uri不用说,appId就是appId微信的公众号我们会授权,另外一个回调url其实就是我们当前页面的url,用户微信登录授权后的回调url会携带两个参数,一个是code,一个是state。我们要做的就是获取code传给后台,后台通过code获取用户的基本信息,后台获取code之后,获取用户的基本信息,返回其他相关信息传给前端,前端获取后存储l局部或其他。functiongetUrlParam(name){varreg=newRegExp("(^|&)"+name+"=([^&]*)(&|$)");varr=window.location.search.substr(1).match(reg);如果(r!=null)返回unescape(r[2]);返回空值;}functionwxLogin(callback){varappId='xxxxxxxxxxxxxxxxxxx';varoauth_url='xxxxxxxxxxxxxxxxxxx/oauth';varurl="https://open.weixin.qq.com/connect/oauth2/authorize?appid="+appId+"&redirect_uri="+location.href.split('#')[0]+"&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect"varcode=getUrlParam("code");如果(!代码){window.location=url;}else{$.ajax({type:'GET',url:oauth_url,dataType:'json',data:{code:code},success:function(data){if(data.code===200){回调(数据。数据)}},错误r:function(error){thrownewError(error)}})}}