场景
使用uni app开发微信小程序,但是需要与之前的公众号进行用户关联。考虑到用户的唯一性,后端采用“UnionID”作为唯一标识。
【UnionID获取途径】
- 调用接口 wx.getUserInfo,从解密数据中获取 UnionID。注意本接口需要用户授权,请开发者妥善处理用户拒绝授权后的情况。
- 如果开发者帐号下存在同主体的公众号,并且该用户已经关注了该公众号。开发者可以直接通过 wx.login + code2Session 获取到该用户 UnionID,无须用户再次授权。
- 如果开发者帐号下存在同主体的公众号或移动应用,并且该用户已经授权登录过该公众号或移动应用。开发者也可以直接通过 wx.login + code2Session 获取到该用户 UnionID ,无须用户再次授权。
步骤
1、由于业务需求,进入小程序的场景有两种:直接进入小程序和扫描普通二维码进入小程序,所以我这里首先需要先做一些前置处理。
2、小程序中进行公众号跳转授权
小程序中使用webView嵌套一个授权公众号的H5页面;
<web-view :src="webSrc"></web-view> onLoad() { this.webSrc = `${_config.AUTH_URL}?appid=${_config.APP_ID}`; }//授权的h5页面 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title></title> <style> </style> </head> <body></body> <script type="text/javascript"> //如果只需要兼容微信小程序,只引入微信的js-sdk就可以了 var userAgent = navigator.userAgent; if (userAgent.indexOf('AlipayClient') > -1) { // 支付宝小程序的 JS-SDK 防止 404 需要动态加载,如果不需要兼容支付宝小程序,则无需引用此 JS 文件。 document.writeln('<script src="https://appx/web-view.min.js"' + '>' + '<' + '/' + 'script>'); } else if (/QQ/i.test(userAgent) && /miniProgram/i.test(userAgent)) { // QQ 小程序 document.write('<script type="text/javascript" src="https://qqq.gtimg.cn/miniprogram/webview_jssdk/qqjssdk-1.0.0.js"><\/script>'); } else if (/miniProgram/i.test(userAgent)) { // 微信小程序 JS-SDK 如果不需要兼容微信小程序,则无需引用此 JS 文件。 document.write('<script type="text/javascript" src="https://res.wx.qq.com/open/js/jweixin-1.4.0.js"><\/script>'); } else if (/toutiaomicroapp/i.test(userAgent)) { // 头条小程序 JS-SDK 如果不需要兼容头条小程序,则无需引用此 JS 文件。 document.write('<script type="text/javascript" src="https://s3.pstatp.com/toutiao/tmajssdk/jssdk-1.0.1.js"><\/script>'); } else if (/swan/i.test(userAgent)) { // 百度小程序 JS-SDK 如果不需要兼容百度小程序,则无需引用此 JS 文件。 document.write('<script type="text/javascript" src="https://b.bdstatic.com/searchbox/icms/searchbox/js/swan-2.0.18.js"><\/script>'); } if (!/toutiaomicroapp/i.test(userAgent)) { document.querySelector('.post-message-section').style.visibility = 'visible'; } </script> <!-- uni 的 SDK --> <script type="text/javascript" src="https://js.cdn.aliyun.dcloud.net.cn/dev/uni-app/uni.webview.1.5.2.js"></script> <script> //获取url参数 function parseUrl(name) { let reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); let r = window.location.search.substr(1).match(reg); if (r != null) { return decodeURI(r[2]); } else { return null; } } //授权成功后会走回调,带回个code,通过code是否授权,成功后跳回小程序 if(parseUrl('code')){ document.addEventListener('UniAppJSBridgeReady', function() { uni.redirectTo({ url: `/pages/custom/public_welfare/lottery?code=${parseUrl("code")}` }); })} else { let url = window.location.href; let appid = parseUrl('appid'); window.location.href = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appid}&redirect_uri=${encodeURIComponent(url)}&user_info=0&response_type=code&scope=snsapi_base&state=1#wechat_redirect`; } </script> </html>授权成功,回到小程序对应页面,option参数里面接收公众号授权后的code码进行后续操作;
wx.login + code2Session 获取到该用户 UnionID
版权声明:本文为qq_41595903原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。