看到有同学在开发群里问:有些小程序为啥可以一步获取手机号和头像昵称?
正巧自己的项目最近也做了这个改造,其实只是获取了手机号,头像昵称是通过 open-data 组件展示,并没有真正获取。
提供一套登录流程思路:
- 用户初始访问页面时,通过云函数,拿到当前微信用户的 openid;
- 用这个 openid 去查询数据库,能查到则直接登录,查不到则弹出手机号授权,注册新用户;
- 用户登录后判断,如果数据库里已有头像昵称则直接展示,如果没有则用 open-data 组件展示头像昵称;
- 当用户触发某个流程时(例如支付流程),判断是否有头像昵称,没有则弹出获取头像昵称的授权,更新数据库。
这样做登录流程还有一个好处,用户只在注册时会弹出授权框,后续都是无感登录。
注意:可以在本地存储记住用户 openid,以便在上述第一步和第二步中判断使用。即便用户点击退出登录按钮也不要清除本地存储的 openid,而是用另一个本地存储键值去标记登录状态。
2021-12-28 更新:
今天在开发工具突然看到这个提示:https://developers.weixin.qq.com/community/develop/doc/000e881c7046a8fa1f4d464105b001
看起来,这个带有争议性的能力,官方在上线三年多之后,终于意识到问题的严重性了。
我们推出一个接口,可以通过根据传手机号查询返回平台头像昵称性别地区API接口
Host(htts接口域名):http://open.caiyunyi.com
————————————————
ID密钥请扫码获取
第一步 获取token:(token有效期2小时,到期后,请重新本接口刷新)
{{host}}/api/auth/token
POST调用方式
传入参数:
返回
token:3884*************************aec4e7
————————————————————————————————
第二步 传入手机号查询api
{{host}}/api/wx_user/get_wx_userinfo
POST调用方式
传入参数:
返回
token:3884*************************aec4e7
返回
状态码:code
说明:msg
code1成功;0失败
————————————————————————————————
第三步 回调地址填写
请扫码后,授权登录获得id和密钥,之后在页面设置回调地址:
仅支持https协议,系统会在获得到数据后,通过回调的方式返回给你设置的地址上
系统会将手机号对应结果回调到你的接口地址
Get请求
https://你自己的域名/回调接口地址
示例:
https://回调接口地址?nickname=昵称?sex=1?headimgur=头像地址
sex合法值 0,1,2
0未知,1男 , 2女
本文技术已过时,open-data 展示用户个人信息的能力即将被回收。
云函数获取 openid 很方便:
const getOpenid = async () => { const { OPENID } = cloud.getWXContext() return OPENID }