前言
平常开发都是微信小程序,它是运行于微信应用App的小程序,最近碰巧要开发一个企业微信小程序,有点慌张~,特意了解下,记录下酱子~
企业微信小程序是什么
企业微信小程序是运行于企业微信App里面的小程序,本质上企业微信小程序是微信小程序的一个扩展子集,微信小程序的大部分能力都可以在企业微信上运行,同时企业微信扩展了部分和企业相关的能力以满足更多的场景需求。
怎么开发企业微信小程序
按照所说的,它仅仅是微信小程序上拓展的,那么开发工具依然是微信开发者工具,只是在调试运行的时候,和微信小程序稍有不同~
微信开发者工具下载地址: developers.weixin.qq.com/miniprogram…
手机需要下载企业微信App,在调试时,通过app上扫描微信开发者工具上的预览生成的二维码即可在手机上调试。
微信开发者工具上需要做的调整如下
第一步:添加企业微信小程序插件
第二步:开发调试时的切换
第三步:可以选择所属的企业或者用测试账号
企业微信小程序有一个很大的特点,就是用户有可能是有所属的企业,一个或者多个企业,为什么这么说呢,因为我们开发的小程序需要用户登录,需要拿取的用户信息,那么我们可能就需要根据用户所属的企业展示不一样的功能。
在微信小程序中,openid是辨别用户的唯一标识,而在企业微信小程序中,userid是辨别用户的唯一标识。
扯远了~,回来,我只想说这个步骤,你可以选择所属企业进行开发。
然后可以开发啦~
企业微信小程序的登录流程
先说下两者的区别,其实差别也不大,只是要了解下,方便我们搭建登录流程的代码而已~
左图是企业微信小程序的登录流程,右图是微信小程序的登录流程,其中两者流程差异不大,红色箭头就是具体的差异,只是我们前端要给的参数不同。
其实不用考虑太复杂,前端仅仅需要知道,企业微信小程序通过wx.qy.login获取code传给后端,后端根据当前code获取用户当前归属的企业corpid去微信后台获取了当前用户唯一标识userid做好后端的数据记录,再给我们前端返回token,我们在storage保存即可!
同理,微信小程序通过wx.login获取code传给后端,后端根据当前code获取用户appid去微信后台获取了当前用户唯一标识openid做好后端的数据记录,再给我们前端返回token,我们在storage保存即可!
具体代码思路:
进入小程序,先判断用户是否授权(wx.getSetting),如果没有授权,跳转授权页面,确认授权后用户登录wx.qy.login,先调用获取后端接口获取sessionkey和userid后,再调用后端登录接口获取token。
如已经授权,则直接获取用户信息(wx.getUserProfile,这里特别注意,2021年4月29日前是用wx.getUserInfo,这个api是有弹窗的,而在4月29日后则改变为无弹窗,官方建议用wx.getUserProfile获取用户信息),然后调用wx.qy.login获取code,调用获取后端接口获取sessionkey和userid后,再调用后端登录接口获取token。
在app.js中的代码:
下面这段代码在进入小程序就会立马执行
onLaunch: function (options) {
// 判断用户是否授权,授权之后再登录
wx.getSetting({
success: res0 => {
if (res0.authSetting['scope.userInfo']) {
// 已经授权,可以直接调用 getUserInfo 获取头像昵称,不会弹框
wx.getUserProfile({
success: res1 => {
console.log('获取用户信息')
wx.qy.login({
success: res2 => {
// 这里配合后端发起请求接口获取sessionkey和userid后,再请求token
// 模拟代码
// getSessionkeyAndUserid().then(res=>{
// if(res.code==200){
// getToken({}).then(res=>{
// wx.setStorageSync('token', res.data.token)
// })
// }
// })
}
})
}
})
} else {
wx.reLaunch({
url: '/pages/login/index',
})
}
}
})
}
接上面代码,跳转到login页面后,在login页面的代码如下:
login.wxml
<view>
<button type="primary" bindtap="getUserProfile">授权登录</button>
</view>
login.js
getUserProfile() {
wx.getUserProfile({
desc: '用于完善会员资料', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写
success: (res) => {
wx.qy.login({
success: res1 => {
// 这里配合后端发起请求接口获取sessionkey和userid后,再请求token
// 模拟代码
// getSessionkeyAndUserid().then(res=>{
// if(res.code==200){
// getToken({}).then(res=>{
// wx.setStorageSync('token', res.data.token)
// })
// }
// })
}
})
}
})
}
具体的登录流程大概是这样子,如果你有更好的登录流程的建议,也可以分享出来,有错也欢迎指正,希望大家一起进步! 后续做到小程序遇到的各种问题,我会继续修改和更新在文章上滴~