用户唯一码获取
用户管理的两个必要条件是:
- 能够获得使用用户的唯一id,小程序里面这个id是openid。
- 用户的每次数据上传都把这个唯一id附带上传,这样服务器就知道是谁的操作
通过wx.login函数,可以在网络结果回调函数中获得一个临时的用户的码。这个码再传到服务端,用这个码使用http的api请求真正的用户唯一码openid。
每个用户的openid不会发生变化,可以长期存储。但是同一个用户针对不同小程序的openid是不同的。如果需要用户针对所有小程序都相同的id,可以使用unionid。详情见:
https://developers.weixin.qq.com/miniprogram/dev/api/unionID.html
把这个openid传回客户端,客户端保存openid,以后每次用户操作结果上传的时候都把这个openid附带上。
- 服务器参考代码:https://github.com/rabienrose/listening_training/blob/master/server/app.py
- 客户端参考代码:https://github.com/rabienrose/listening_training/blob/master/client/app.js
用户微信信息获取
出了用户唯一id以外,如果还想获得一些用户微信账号的信息,比如微信昵称,微信头像等,需要使用wx.getUserInfo函数。并在返回的回调函数中,记录这些信息。
wx.getUserInfo需要用户手动同意程序获取信息。发起同意请求的方式是使用专门的button控件:
<button open-type="getUserInfo" bindgetuserinfo="getUserCallBack"> 获取头像昵称 </button>open-type="getUserInfo"代表这个button点击后,会弹出请求用户同意的界面。并且在用户同意后,会回调getUserCallBack这个用户自定义的函数。
返回的函数中包含用户头像图片的地址,使用这个地址就可以显示用户头像了。
总结:有两种方式可以获得用户微信信息:
- 使用wx.getUserInfo,通过程序发起信息请求。前提是用户必须使用过button方式同意过请求一次。
- 使用button方式,通过用户发起请求。
用户加密信息获取
要获得用户的openid,出了使用wx.login获得临时码,然后在服务端再获得真实的openid外,也可以通过wx.getUserInfo在客户端获取。
但是客户端获得的openid是加密了的,还是需要把加密数据传输回服务器,解码后才能得到openid。但是解密的时候需要走wx.login流程才能获得的sessionKey。所以使用这种方法并不能代替wx.login流程。详情参考:
https://developers.weixin.qq.com/miniprogram/dev/api/open.html#wxgetuserinfoobject
微信小程序













