评论

小程序“表面一键获取手机号、头像、昵称”的思路

本文技术已过时,open-data 展示用户个人信息的能力已被回收。

看到有同学在开发群里问:有些小程序为啥可以一步获取手机号和头像昵称?

正巧自己的项目最近也做了这个改造,其实只是获取了手机号,头像昵称是通过 open-data 组件展示,并没有真正获取。

提供一套登录流程思路:

  1. 用户初始访问页面时,通过云函数,拿到当前微信用户的 openid;
  2. 用这个 openid 去查询数据库,能查到则直接登录,查不到则弹出手机号授权,注册新用户;
  3. 用户登录后判断,如果数据库里已有头像昵称则直接展示,如果没有则用 open-data 组件展示头像昵称;
  4. 当用户触发某个流程时(例如支付流程),判断是否有头像昵称,没有则弹出获取头像昵称的授权,更新数据库。

这样做登录流程还有一个好处,用户只在注册时会弹出授权框,后续都是无感登录。

注意:可以在本地存储记住用户 openid,以便在上述第一步和第二步中判断使用。即便用户点击退出登录按钮也不要清除本地存储的 openid,而是用另一个本地存储键值去标记登录状态。

2021-12-28 更新:

今天在开发工具突然看到这个提示:https://developers.weixin.qq.com/community/develop/doc/000e881c7046a8fa1f4d464105b001

看起来,这个带有争议性的能力,官方在上线三年多之后,终于意识到问题的严重性了。

最后一次编辑于  2021-12-28  
点赞 0
收藏
评论

3 个评论

  • 轻兔小程序服务商
    轻兔小程序服务商
    2022-08-08

    我们推出一个接口,可以通过根据传手机号查询返回平台头像昵称性别地区API接口

    Host(htts接口域名):http://open.caiyunyi.com

    • client_id:2022*****************8675
    • client_secret:1a308***************************b34a5e

    ————————————————

    ID密钥请扫码获取



    第一步 获取token:(token有效期2小时,到期后,请重新本接口刷新)

    {{host}}/api/auth/token

    POST调用方式

    传入参数:

    • client_id
    • client_secret

    返回

    token:3884*************************aec4e7

    ————————————————————————————————

    第二步 传入手机号查询api

    {{host}}/api/wx_user/get_wx_userinfo

    POST调用方式

    传入参数:

    • token
    • phone

    返回

    token:3884*************************aec4e7

    返回

    状态码:code

    说明:msg

    code1成功;0失败

    ————————————————————————————————

    第三步 回调地址填写

    请扫码后,授权登录获得id和密钥,之后在页面设置回调地址:



    仅支持https协议,系统会在获得到数据后,通过回调的方式返回给你设置的地址上

    系统会将手机号对应结果回调到你的接口地址

    Get请求

    https://你自己的域名/回调接口地址

    示例:

    https://回调接口地址?nickname=昵称?sex=1?headimgur=头像地址

    sex合法值 0,1,2

    0未知,1男 , 2女

    2022-08-08
    赞同 4
    回复
  • 朱高
    朱高
    2021-12-28

    本文技术已过时,open-data 展示用户个人信息的能力即将被回收。

    2021-12-28
    赞同
    回复
  • 朱高
    朱高
    2021-12-08

    云函数获取 openid 很方便:

    const getOpenid = async () => {
      const { OPENID } = cloud.getWXContext()
      return OPENID
    }
    
    2021-12-08
    赞同
    回复
登录 后发表内容