想要在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,即可实现受权性能