需求:以微信公众号为入口,提供h5页面共用户进行业务操做,用户信息彻底依赖公众号;mysql
方案:建立公众号-》用户关注公众号-》静默受权到h5页面-》h5页面获取用户信息-》用户在h5页面上进行业务操做;web
准备:公众号一个(必须是须要认证的,认证须要硬性条件,无奈只能用测试帐号,测试帐号有一个坑的地方,下边会讲到), 能够进行域名访问80端口的服务器一台(域名和服务器都好搞也便宜,可是域名须要备案才能访问,无奈只能找内网穿透的工具,我用的是natapp,一开始用的是免费版的,可是域名很不稳定,每变一次都须要改代码改设置,索性在natapp上买了一个vpi隧道9块钱一个月,而后又在上面买了个域名,3块钱一年,用了一下午还算稳定,用来作开发绰绰有余了)sql
工具:VS+HBuilderX+Mysql+微信开发工具数据库
步骤:api
1 .net建立webapi提供接口 实现功能A 用户验证和信息获取 2 具体业务接口跨域
2 mysql数据库存储用户信息和业务数据服务器
3 uni-app建立后h5页面微信
也没什么高深的代码,分享一下页面受权部分代码微信开发
onLoad() { var appId = 'xxx'; var reg = new RegExp("(^|&)" + "code" + "=([^&]*)(&|$)"); var r = window.location.search.substr(1).match(reg); var code = ""; if (r != null) code = unescape(r[2]); if (code == null || code == "") { window.location.href = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + appId + "&redirect_uri=" + encodeURIComponent("xxx") + "&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect"; //页面受权 } else {
//受权后根据返回的code获取用户信息 uni.request({ url: 'xxxx', header: { 'content-type': 'application/x-www-form-urlencoded' //自定义请求头信息 }, method: 'POST', data: { Code: code }, success: res => { this.Data= res.data; }, fail: fail => {}, complete: () => {} }); } }
踩坑的地方:app
a js跨域的问题,网上解决方案不少,我索性把web站点和api站点部署到一个站点下,其中一个布置成站点,另外一个布置成该站点下的应用程序;
b 若是用户还没有关注公众号,则提示需关注该公众号,错误码10006。眼下之意不关注不能玩。问题缘由网上大都说是测试帐号的缘由;
c 我一开始受权那里思路错了,按照需求,由于用户是在关注公众号的前提下操做,因此我只要经过静默受权拿到用户的openId就能够经过公众号接口拿到用户详细信息 ,一开始觉得必定须要非静默受权。非静默受权通常都是用户没有关注公众号的状况下才会用的。
d 以前没接触过公众号开发,刚开始跟几个同事讨论这个东西,他们居然都很确定的说openid每一次都会变/或者从新关注公众号后会变,今天事实证实他们错了。由于openid变掉的话我都没办法标识用户了,搞得慌慌的。看来实践出真知,并且本身不肯定的技术必定不要说的很肯定的样子,对人对己都很差,切记。