微信公众号授权登录,微信sdk的使用,及ios配置微信sdk失败

前期配置:(微信公众平台)
需要配置项:设置ip白名单、服务配置、业务域名、js接口安全域名、网页授权域名(获取到AppID和AppSecret)

1 设置ip白名单
通过开发者ID及密码调用获取access_token接口时,需要设置访问来源IP为白名单(一个公众号可换行设置多个)
2 服务配置
由后端提供url和token进行配置
在这里插入图片描述
3 业务域名、js接口安全域名、网页授权域名
配置需要授权的网站域名地址(前台页面地址),不需要加http以及子路径
业务域名:配置你的程序地址域名
在这里插入图片描述

在这里插入图片描述

JS安全域名:配置不正确则影响你公众号网页的jssdk使用(比如无法获取用户的地理位置、收货地址等)
网页授权域名:配置不正确则用户授权访问会报错,无法进入到网址页面在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

4 授权流程
1) 获取code

//微信授权
          let redirect_uri = encodeURI(window.location.href).split('#')[0],
          appid = "";
          let wx_url = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appid}&redirect_uri=${redirect_uri}&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect`;
          window.location.href = wx_url;

授权成功后,路径会跟上code
跳转回调redirect_uri,应当使用https链接来确保授权code的安全性

注:scope有snsapi_base和snsapi_userinfo两种模式
1、以snsapi_base为scope发起的网页授权,是用来获取进入页面的用户的openid的,并且是静默授权并自动跳转到回调页的。用户感知的就是直接进入了回调页(往往是业务页面)
2、以snsapi_userinfo为scope发起的网页授权,是用来获取用户的基本信息的。但这种授权需要用户手动同意,并且由于用户同意过,所以无须关注,就可在授权后获取该用户的基本信息。(对于已关注公众号的用户,如果用户从公众号的会话或者自定义菜单进入本公众号的网页授权页,即使是scope为snsapi_userinfo,也是静默授权,用户无感知。)
3、用户管理类接口中的“获取用户基本信息接口”,是在用户和公众号产生消息交互或关注后事件推送后,才能根据用户OpenID来获取用户基本信息。这个接口,包括其他微信接口,都是需要该用户(即openid)关注了公众号后,才能调用成功的。

2)根据code去请求后端接口获取access_token和refresh_token

注:2022 年 7 月 12 日官方对微信网页授权能力调整生效,如果网页开发的需求时用户一进入程序,就调取了授权,此时会进入快照模式(快照页内也无法使用微信其它 JS-SDK 的能力)这样调整的目的就是不强制用户允许网页获取用户信息后才能使用网页服务,如果需要取消进入快照模式,可以自己写一个授权弹出或页面让用户去确认。

5 微信jssdk授权
1)配置sdk,也需要请求后端接口进行配置

// 获取微信授权配置
    async getWxConfig(){      
      const res = await getWxConfig({url:encodeURI(window.location.href.split('#')[0])});
      if(res.code ===0){
        this.jsApiList=['checkJsApi','scanQRCode','getLocation','updateAppMessageShareData','updateTimelineShareData','openLocation'];
        this.configData={
          debugger:true,
          appId: res.data.appId, // 必填,公众号的唯一标识
          timestamp: res.data.timestamp , // 必填,生成签名的时间戳
          nonceStr: res.data.nonceStr, // 必填,生成签名的随机串
          signature: res.data.signature,// 必填,签名
          jsApiList: this.jsApiList // 必填,需要使用的JS接口列表
        }
        this.$wx.config(this.configData);//vue中使用,已将微信sdk挂在到vue原型链
    },

注:vue单页面开发时当使用hash模式,路径应该传#以前的路径进行配置,如果使用的history需要传全路径即:encodeURI(window.location.href),使用history模式是在ios手机上如果初始进来路由发生了重定向发生变化的(即使是参数变化了)就会配置错误(原因是ios会锁定第一次进入页面的地址,如果在配置之前路径就重定向了,此时请求的url签名地址和ios锁定的不一致,当页面发生跳转时去使用js-sdk会提示签名错误,原因就是你所请求的url签名地址和浏览器执行jweixin-1.x.x.js时锁定的地址 不一致。ios下解决这个问题需要记录用户第一次进入的url进行授权,可以将第一次进入的url保存到store里面;使用history在安卓手机上每次路由变化,发起签名请求的url参数必须是当前页面的url(不是最初进入页面时的)

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
UniApp是一个跨平台的开发框架,可以用于同时开发iOS、Android和Web应用。而微信公众号微信提供的一种平台,可以用于发布信息、与用户互动等。在UniApp中,可以通过使用微信JS-SDK来实现微信公众号的分享功能,并生成分享二维码。 要实现UniApp中的微信公众号分享二维码,可以按照以下步骤进行操作: 1. 在UniApp项目中引入微信JS-SDK,可以通过在`index.html`文件中添加如下代码来引入: ```html <script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script> ``` 2. 在需要分享的页面中,调用微信JS-SDK提供的接口进行分享设置。可以通过在页面的`mounted`生命周期函数中调用以下代码来实现: ```javascript mounted() { // 异步加载微信JS-SDK this.loadWechatSDK().then(() => { // 配置分享信息 this.configWechatShare(); }); }, methods: { loadWechatSDK() { return new Promise((resolve, reject) => { // 异步加载微信JS-SDK const script = document.createElement('script'); script.src = 'https://res.wx.qq.com/open/js/jweixin-1.6.0.js'; script.onload = resolve; script.onerror = reject; document.head.appendChild(script); }); }, configWechatShare() { // 使用微信JS-SDK提供的接口进行分享设置 wx.config({ // 配置参数,具体参考微信JS-SDK文档 appId: 'YOUR_APP_ID', timestamp: 'YOUR_TIMESTAMP', nonceStr: 'YOUR_NONCESTR', signature: 'YOUR_SIGNATURE', jsApiList: ['onMenuShareTimeline', 'onMenuShareAppMessage'] }); // 设置分享信息 wx.ready(() => { wx.onMenuShareTimeline({ title: '分享标题', link: '分享链接', imgUrl: '分享图片链接', success: function () { // 分享成功回调 }, cancel: function () { // 分享取消回调 } }); wx.onMenuShareAppMessage({ title: '分享标题', desc: '分享描述', link: '分享链接', imgUrl: '分享图片链接', success: function () { // 分享成功回调 }, cancel: function () { // 分享取消回调 } }); }); } } ``` 3. 生成分享二维码。可以使用第三方库或API来生成二维码,例如使用`qrcode.js`库或调用在线API生成二维码。具体的实现方式可以根据项目需求选择合适的方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值