想要在h5页面获取用户code从而失去用户openid的形式有两种,scope=snsapi_base(静默形式,会重定向到当前页并将code返回在url上)或者scope=snsapi_userinfo(非静默形式,会弹出用户受权页面,用户确认受权才会重定向url)两种形式,两者的区别是,前者只能拿到用户oppenid,后者能够拿到用户的其余信息,当然我这里做的性能比较简单,只须要晓得用户是否关注该公众号,应用的是第一种形式,本文两种形式都会介绍到。
在html页面中肯定要 <script src="http://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script> 引入微信的js文件,否则无奈应用wx.的形式进行须要的设置及操作,这点很重要
微信开发官网文档:https://developers.weixin.qq....
1.依据微信公众号官网文档提供的办法失去用户:appId,timestamp,nonceStr,signature,应用
wx.config({ debug: false, appId: appId, timestamp:timestamp, nonceStr:nonceStr, signature:signature, jsApiList: ["onMenuShareTimeline", "onMenuShareAppMessage"] //这里依据本人需要设置,能够在 微信公众号文档查找相干设置,这里不过多介绍 }); getUserInfo(appId,window.location.href) //获取用户code //wx.confg设置胜利后,即可通过 wx.ready(function(){ wx.onMenuShareTimeline({ imgUrl:"", //绝对路径 desc:"", //形容 }) //这个是设置h5页面分享的一些参数,比方非公众号公布文档分享的小图片和形容等等,这只是举个例子,与获取用户code无关,能够疏忽 })})
2.wx.config设置之后,就能够走获取用户code了,官网文档:https://developers.weixin.qq....
设置网页受权接口,设置——公众号设置——性能设置,微信后盾前期如果更新,不在这个地位,能够在开发——接口权限中找到相应配置即可更改
代码:
function getUserInfo(appId,redUrl){ //公众号appid //redirect_uri 重定向的url,个别状况下会设置为以后url //response_type=code 默认值为code //scope=snsapi_base/snsapi_userinfo 静默/非静默形式 let url = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appId}&redirect_uri=${encodeURI(redUrl)}&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect` //window.location.href = url //这里有一个问题,如果间接跳转,会始终不停的跳转,咱们只须要他跳转一次,失去code即可,所以须要在获取到code之后进行跳转 //因为重定向跳转之后的url中肯定带有code=字样,所以我就将他作为进行跳转,如果有更好的办法欢送指出 if(window.location.href.indexOf('code=') != -1){ const obj = new URLSearchParams(window.location.search) let params = {} for (const iterator of obj) { params[iterator[0]] = iterator[1]} }else{ window.location.href = url } } /**这里的url我用了encodeURI形式转换了一下,微信官网文档没有提到须要应用这个办法转换一下url*encodeURI办法转换url很重要,因为一开始没有应用encodeURI转换,始终报错redirect_uri域名谬误,找了很久才发现是这个问题导致的* 网上也有很多教程显示说是url与公众号后盾设置的网页受权url不统一,都是瞎扯,明明设置的一样也会提醒这个谬误,齐全是因为没有应用encodeURI办法转换url导致的* 微信官网网页受权设置文档https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html*/
如果在调用getUserInfo的办法呈现redirect_uri参数谬误字样,肯定就是redirect_uri的url没有应用 encodeURI 办法,这个很重要
我这里配置的是 www.XXXX.cn
redirect_uri的url是:http://www.XXXX.cn/XXXX.html 或者 http://www.XXXX.cn/XXXX/XXXX.... 都能够失常失去openid
会失去一个重定向的url,code=前面的参数就是用户code
如果应用非静默形式,会先弹出受权页面,点击确定后会返回静默形式的url,将失去的code发送给后盾,后盾会给你返回用户openid,即可实现受权性能