注册小程序
- 一个邮箱只能注册一个小程序,且该邮箱不能被绑定个人微信,微信公众平台,微信开放平台
- 已经注册过微信公众号的企业可以直接添加小程序,不需要额外付费
小程序登录
第一步:小程序调用wx.login() 获取code。
第二步:小程序通过wx.request()调用服务端接口发送code,appId到开发者服务器
第三步:开发者服务器接收小程序发送的code,并携带appid、code发送到微信服务器,服务端调用微信服务器接口 auth.code2Session,换取 用户唯一标识 OpenID,unionId 和 会话密钥 session_key(session_key不会下发到小程序)
第四步:开发者服务器自己生成一个key(自定义登录状态)与openid、session_key进行关联,并存到数据库中。
第五步:开发者服务器返回生成key(自定义登录状态)到小程序。
第六步:小程序存储key(自定义登录状态)到本地。
wx.login({ success: res => { console.log(res) // 发送 res.code 到后台换取 openId, sessionKey, unionId } })
小程序授权
在调用一些API的时候,需要继续授权,比如获取用户信息,录音等功能
获取授权状态
wx.getSetting({ success (res) { console.log(res.authSetting) // res.authSetting = { // "scope.userInfo": true, // "scope.userLocation": true // } } })
发起授权弹窗
- 如果用户未接受或拒绝过此权限,会弹窗询问用户,用户点击同意后方可调用接口;
- 如果用户已授权,可以直接调用接口;
- 如果用户已拒绝授权,则不会出现弹窗,而是直接进入接口 fail 回调。请开发者兼容用户拒绝授权的场景。
// 可以通过 wx.getSetting 先查询一下用户是否授权了 "scope.record" 这个 scope wx.getSetting({ success(res) { if (!res.authSetting['scope.record']) { wx.authorize({ scope: 'scope.record', success () { // 用户已经同意小程序使用录音功能,后续调用 wx.startRecord 接口不会弹窗询问 wx.startRecord() } }) } } })
授权获取用户信息
授权获取用户信息时,调用wx.authorize不会触发弹窗
<button wx:if="{{!hasUserInfo && canIUse}}" open-type="getUserInfo" bindgetuserinfo="getUserInfo"> 获取用户信息</button>
getUserInfo: function(e) { app.globalData.userInfo = e.detail.userInfo }
引导用户去系统设置
wx.openSetting({ success (res) { console.log(res.authSetting) // res.authSetting = { // "scope.userInfo": true, // "scope.userLocation": true // } } })
授权时效
一旦用户明确同意或拒绝过授权,其授权关系会记录在后台,直到用户主动删除小程序