微信小程序(抖音小程序):手机号码解析失败解决方案

这篇具有很好参考价值的文章主要介绍了微信小程序(抖音小程序):手机号码解析失败解决方案。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        在小程序开发中,可能需要用户授权获取用户信息,而用户信息涉及到手机号等敏感数据,一般的小程序开发平台,会将数据进行加密,然后通过对称加密算法进行加密解密。在获取手机号的过程中由于流程的理解错误可能会出现解密手机号失败的问题。本文介绍一种比较适用的解决办法,希望给遇到坑的同学一个参考。

1 问题描述

        本文以抖音小程序(微信小程序获取流程和接口一模一样)为例,最近在做一个抖音小程序的小项目,前端在获取用户手机号的时候,需要调用tt.login接口进行登录,登录后返回一个code,这个code有3分钟的失效时间,根据这个code可以获取到sessionKey,这个sessionKey类似于对称加密的密钥,会对用户信息进行加密。在获取用户信息的时候,前端需要将 <button> 组件 open-type 的值设置为 getPhoneNumber。用户点击后会弹出一个授权弹窗让用户确认(若该用户账户未绑定手机号码会执行一次绑定手机号码的流程;授权弹窗每次使用都会弹出)。 用户同意后,开发者可以通过 bindgetphonenumber 事件回调获取到一个加密数据,开发者可以把该数据传回到自己的服务端进行解密获取手机号。

        获取到的加密数据需要使用sessionKey进行解密,因此在获取用户信息前,需要登录一次,获取到code,然后根据code获取到sessionKey,再根据sessionKey进行加密数据的解密,解析出手机号。

       抖音在登录后会生成一个code,和一个对应的sessionKey,在会话期间(session未过期)的时候获取用户信息,会将用户信息使用sessionKey进行数据的加密,进行数据的解密也需要使用到sessionKey。code和sessionKey是对应的,但是它们的失效期是不一样的,code的失效期是3分钟,sessionKey的失效时间是不定的,只要用户活跃在页面上都不会失效。在获取到code的3分钟内调用code-2-session接口,会获取到sessionKey,如果3分钟后根据code获取sessionKey将会获取失败,因此解密也会失败。

1.1 初始实现

因为无法判断用户什么时候开始获取用户信息,所以用户一进入页面,前端就会调用tt.login接口进行登录,然后放到localstorage缓存中,在用户点击按钮时,弹出授权框用户确认后获取到用户信息的加密数据,然后前端将缓存的code和加密数据一并传给后端。后端用code先去调用code-2-session接口获取到sessionKey,然后以sessionKey为密钥进行AES解密,获取到手机号返回给前台。整个流程看起来没什么问题,但是一旦用户在页面停留时间超过3分钟,然后再去获取用户信息会失败,主要是因为code已经失效,获取sessionKey会失败。

微信小程序(抖音小程序):手机号码解析失败解决方案

 文章来源地址https://www.toymoban.com/news/detail-462944.html

2 解决办法

2.1 缓存sessionKey

目前的问题就是过了code的有效期后,根据code获取sessionKey失败。那么在前端login获取到code后,先缓存到本地,然后立即调用后台接口去获取sessionKey然后缓存到redis里面,key为code,value为sessionKey。失效时间根据自己的业务设置(小程序页面用户不会停留太久,因此缓存失效时间设置为30分钟),用户退出小程序后,会重新login,然后也会存一份新的code和sessionKey的对应值。

用户在授权到用户信息后,前端直接将缓存的code和加密后的用户信息上传到服务到进行解密。服务端根据code从缓存中先获取到sessionKey,然后再用sessionKey进行解密,解析出手机号进行返回。

微信小程序(抖音小程序):手机号码解析失败解决方案

 

 

2.2 存在问题

以上解决办法每次基本都可以获取手机号成功,但是也会存在一些问题

  • 会存在很多冗余数据:因为缓存是根据code进行缓存的,无法根据用户唯一id进行缓存,如果用户多次进行登录,将会存储多份,因此需要根据自己的业务时间进行设置缓存失效时间
  • 实现更加复杂:因为后端还涉及到redis服务 以及加密解密的过程

3 附上源码

3.1 用户信息controller

UserInfoController主要提供两个接口,一个是解密手机号和code2seesion操作

微信小程序(抖音小程序):手机号码解析失败解决方案

TiktokEncryptedParam 主要是前端传过来的code和加密后的数据 

微信小程序(抖音小程序):手机号码解析失败解决方案

 

3.2 抖音接口SPI

TiktokUserInfoSPI 主要是对接口的封装

微信小程序(抖音小程序):手机号码解析失败解决方案

 TiktokUserInfoSPIAdapter 实现接口

微信小程序(抖音小程序):手机号码解析失败解决方案

 

3.3 加密解密

使用AES对称加密

微信小程序(抖音小程序):手机号码解析失败解决方案

微信小程序(抖音小程序):手机号码解析失败解决方案 

 

到了这里,关于微信小程序(抖音小程序):手机号码解析失败解决方案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 微信小程序登录+获取手机号码(前端+后端)

    微信小程序登录+获取手机号码(前端+后端)

    上面这张是微信小程序官方原图,登录流程如上图所示,下面一步步进行以及说一下碰到的坑。 1.wx.login()获取code         调用微信小程序官方提供的方法获取code提供给后端用以换取session_key、openid。         注意:code只能使用一次就会失效,且有效期为5分钟 2.后端收到

    2024年02月12日
    浏览(53)
  • 【微信小程序】纯前端获取用户手机号码

    【微信小程序】纯前端获取用户手机号码

    2024.02.04更新 作者最近做了一个小程序项目,证明了纯前端获取手机号是不可以发布的,首先审核时会因为appsecret明文而不通过,就算你使用某种加密方法绕过审核,正式发布后在真机环境还是不可以使用的,所以本方法仅供练习使用,在第二步拿到code之后传给后端就可以了

    2024年02月03日
    浏览(16)
  • 微信小程序获取用户手机号码教程(前端+后端)

    微信小程序获取用户手机号码教程(前端+后端)

    在开发一款微信小程序时,需要用户进行微信登录,获取用户的手机号码来作为用户的唯一标识(userId),于是探索获取用户手机号码的方式; (当然,通过wx.login来获取code,进而换取用户的openid也是可以的) 目前版本的微信小程序获取用户手机号码的方式如下: 前端开发

    2024年02月12日
    浏览(19)
  • 微信小程序获取用户手机号码教程(前端+后端)

    微信小程序获取用户手机号码教程(前端+后端)

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 在开发微信小程序时,获取用户手机号码是常见的需求之一。本教程将为你详细介绍如何在前端和后端实现获取用

    2024年02月08日
    浏览(20)
  • 【微信小程序】使用 Cryptojs 解密微信绑定手机号码

    【微信小程序】使用 Cryptojs 解密微信绑定手机号码

         很抱歉断更了一段时间,因为最近在做一个项目比较忙,正好项目中小程序板块需要解密手机号码来提交给接口,小程序中虽然提供了获取手机号按钮点击事件: bindgetphonenumber ,但是该事件的处理函数中只能获取到加密过的手机号码, 网上大部分教程都是使用 java,

    2024年02月09日
    浏览(17)
  • java 微信小程序授权获取用户手机号码 (完整demo)
  • 微信小程序获取手机号码 phonenumber.getPhoneNumber 提示47001错误

    微信小程序获取手机号码 phonenumber.getPhoneNumber 提示47001错误

    微信小程序获取手机号码 phonenumber.getPhoneNumber 提示47001错误 经过测试, 文档说的是body 类型 实际却是json类型 正确代码如下:

    2024年02月06日
    浏览(16)
  • 【微信小程序】新版获取手机号码实现一键登录(uniapp语法)(完整版附源码)

    【微信小程序】新版获取手机号码实现一键登录(uniapp语法)(完整版附源码)

    需求 如图,点击按钮,获取用户手机号实现一键登录,当然,用户也可以自行输入其他手机号进行登录 问题 要想获取用户手机号并不复杂,但由于近几年微信小程序获取手机号的api进行了更新,当前很多帖子使用的仍是旧的方式,先调wx.login()获取code,iv,等等加密数据, 给到

    2024年02月05日
    浏览(15)
  • 抖音小程序、微信小程序创建广告位

    抖音小程序、微信小程序创建广告位

    抖音开放平台-流量主行为规范 这个是抖音文档,但是妮妮手把手教你写代码~ 必须满足开通条件才能开通广告位!!! 满足条件之后,点击 开通按钮 ,填写 绑定账户 和 广告位类型,你就拥有广告ID啦,恭喜恭喜~ 激励视频 妮妮这次主要写的是抖音开放平台-tt.createRewarde

    2024年02月10日
    浏览(13)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包