微信小程序开发
注册小程序
- 一个邮箱只能注册一个小程序,且该邮箱不能被绑定个人微信,微信公众平台,微信开放平台
- 已经注册过微信公众号的企业可以直接添加小程序,不需要额外付费
小程序登录
第一步:小程序调用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
// }
}
})
授权时效
一旦用户明确同意或拒绝过授权,其授权关系会记录在后台,直到用户主动删除小程序
浙公网安备 33010602011771号