资讯专栏INFORMATION COLUMN

微信小程序授权登录、解密unionId出错

tinysun1234 / 1540人阅读

摘要:注没有在微信开放平台做开发者资质认证的就不要浪费时间了,没认证无法获取,认证费用元年,微信授权登录流程第一步获取用户临时登录凭证第二步获取加密过的数据和解密参数第三步把步骤一二中的传到开发者自己服务端第三步服务端获取到之后用方法请求如下微信

注:没有在微信开放平台做开发者资质认证的就不要浪费时间了,没认证无法获取unionId,认证费用300元/年,emmmm....

微信授权登录流程

第一步:wx.login获取 用户临时登录凭证code

第二步:wx.getUserInfo获取加密过的数据encryptedData和解密参数iv

第三步:把步骤一、二中的code、encryptedData、iv传到开发者自己服务端

第三步:服务端获取到code、encryptedData、iv之后用get方法请求如下微信接口

https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code

appid:小程序appid
secret: 小程序密钥
js_code: 第一步获取的临时登录凭证code
grant_type:"authorization_code"
接口会返回 openid, session_key,注意:用户已经授权过的平台还会返回unionId,如果你只是需要unionId,则到此为止

官方文档说法如图:

没有授权过则用encryptedData、session_key、iv、appid、secret进行解密,官方多语言解密示例下载链接:
unionId解密示例
包含c++ php python node

第四步:仿照示例解密后获得unionId,想做什么就做什么了~

以下是授权登录前端代码:

authLogin () {
    wx.login({
      success: loginRes => {
        let code = loginRes.code  // 获取用户临时code
        wx.getUserInfo({
          success: function (res) {
            let encryptedData = res.encryptedData  // 获取加密数据
            let iv = res.iv  //  解密参数
            // 发送解密必要数据到服务端
            wx.request({
              url: "http://localhost",
              methods: "POST",
              data: {
                code: code,
                encryptedData: encryptedData,
                iv: iv
              },
              succeess: res => {
                // 服务端首先调用微信接口获取session_key
                // 用户已经授权过的平台会直接返回unionId
                // 没有授权过则用session_key进行解密
                // 解密成功后服务端根据逻辑返回自定义信息
              }
            })
          }
        })
      }
    })
  }

以上步骤可行,但是微信调整了用户授权方式

新的授权需用button组件调用getUserInfo,所以在这之前无法调用wx.login,但是如果先调用获取用户信息再调用wx.login的话,解密过程会出错,猜测code对应的session_key和之前getUserInfo获取的encryptedData不匹配

解决办法:
在页面的onLoad生命周期里调用wx.login,获取的code存入data以备需要的时候使用,但是code失效时间为5分钟,如果用户停留页面时间过长后点击授权登录,此时的code已经过期了,所以,获取code的函数应该每4分钟左右调用一次

wxml按钮授权:

js:

  // 获取code
  onLoad: function (options) {
    this.getCodeTimer()
  },
  getCodeTimer () {
    wx.login({
      success: res => {
        this.data.code = res.code
        setTimeout(() => {
          this.getCodeTimer()
        }, 4 * 60 * 1000)
      }
    })
  },
  // 授权登录
  authLogin(event) {
    if (event.detail.errMsg == "getUserInfo:ok") {
      wx.showLoading()
      let reqData = {
        code: this.data.code,
        encryptedData: event.detail.encryptedData,
        iv: event.detail.iv
      }
      wx.request({
        url: "http://localhost:8080",
        methods: "POST",
        data: reqData,
        success: (res) => {
          console.log(res)
            // 请求完成
        }
      })
    } else {
      console.log("用户拒绝授权")
    }
  }

授权逻辑修改后实测没有出过错

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/108544.html

相关文章

  • 程序登录微信网页授权(Java版)

    摘要:小程序登录微信网页授权版首先呢,登录授权授权登录,是一样的意思,不用纠结。写小程序授权登录的代码前,需要了解清楚与的区别,这里再简单介绍一下腾讯有个微信开放平台,只有企业才能注册账号,可理解为微信体系里,最顶级的账号。 小程序登录、微信网页授权(Java版) 首先呢,登录、授权、授权登录,是一样的意思,不用纠结。 写小程序授权登录的代码前,需要了解清楚openid与unionid的区别...

    joywek 评论0 收藏0
  • PHP实现信小程序用户授权的工具类

    摘要:事先准备工作申请一个小程序,申请地址传送门仔细阅读小程序的用户授权登陆官方文档用户授权登陆的流程仔细阅读微信用户数据解密的相关文档用户数据解密说明文档在小程序后台配置好相应的后端请求地址,路径是开发开发设置,如图小程序如果需要做多个 事先准备工作 1.申请一个小程序,申请地址:传送门 2.仔细阅读小程序的用户授权登陆官方文档:《用户授权登陆的流程》 3.仔细阅读微信用户数据解密的相关文...

    seanHai 评论0 收藏0
  • 信小程序开发:python+sanic 实现小程序登录注册

    摘要:参考链接微信小程序七日谈第五天你可能要在登录功能上花费大力气理解认证及实践网站微信登录实现最后,感谢女朋友支持。 开发微信小程序时,接入小程序的授权登录可以快速实现用户注册登录的步骤,是快速建立用户体系的重要一步。这篇文章将介绍 python + sanic + 微信小程序实现用户快速注册登录全栈方案。 微信小程序登录时序图如下: showImg(https://segmentfaul...

    antz 评论0 收藏0
  • 信小程序开发:python+sanic 实现小程序登录注册

    摘要:参考链接微信小程序七日谈第五天你可能要在登录功能上花费大力气理解认证及实践网站微信登录实现最后,感谢女朋友支持。 开发微信小程序时,接入小程序的授权登录可以快速实现用户注册登录的步骤,是快速建立用户体系的重要一步。这篇文章将介绍 python + sanic + 微信小程序实现用户快速注册登录全栈方案。 微信小程序登录时序图如下: showImg(https://segmentfaul...

    Nino 评论0 收藏0
  • 优雅解决信小程序授权登录需要button触发

    摘要:优雅解决微信小程序授权登录需要触发聊一聊最近的一个项目,这个项目是一个收书售书的小程序,有商城专栏信息发布论坛等功能。微信不会把的有效期告知开发者。 优雅解决微信小程序授权登录需要button触发 聊一聊最近的一个项目,这个项目是一个收书、售书的小程序,有商城、专栏、信息发布论坛等功能。虽然不是面向所有用户,但要求无论用户是否授权都皆可使用,但同时也要求部分功能对不授权的用户限制开放。...

    plus2047 评论0 收藏0

发表评论

0条评论

tinysun1234

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<