注意:说明:
注意:当前 TSF 同时支持微信小程序和 QQ 小程序开发,QQ 小程序插件名为 QQMPLogin。关于小程序开发的详细说明请参见微信小程序开发指南和 QQ 小程序文档。
一、操作场景
典型的微信小程序登录插件使用场景是:
·实现微信小程序用户登录:遵守微信小程序登录规范,在微服务网关侧完成登录业务,生成用户登录态凭证,并返回给小程序前端处理,同时,将微信登录成功返回的原生登录态数据传递至业务后台处理。
·实现用户登录态凭证校验:微服务网关对用户登录态凭证进行校验,若校验通过,则网关将请求放行,并携带微信原生登录态数据传递至业务后台,否则,返回失败原因至小程序前台,小程序客户端可以根据异常状态码,进行对应的操作(例如因登录态过期失效进行重新登录操作)。
注意:说明:
注意:1. 仅专业版和铂金版支持使用 Java 网关,具体说明详细参见 版本对比。
注意:2. 仅使用 TSF-Consul 注册中心的用户支持使用 Java 网关。
二、创建微信小程序登录插件
1. 登录 腾讯微服务平台控制台,前往应用管理 > 中间件应用 > 网关插件。
2. 在插件管理页面,单击新建插件,填写基本信息。
·插件类型:选择 WeChatMpLogin。
·插件名称:必填。
·插件描述:选填。
·标签:非必选。
·数据集:非必选。
3. 填写参数设置。
微信小程序QQ小程序
·APPID:登录 微信公众平台,进入小程序管理后台。左侧导航栏单击 开发 > 开发管理 > 开发设置,即可查看 AppID(小程序 ID)。
·APPSECRET:在上述 开发设置 页面中,单击 生成,使用管理员微信扫码后即可获取 AppSecret(小程序密钥)小程序唯一凭证密钥。
·APPID:登录 QQ小程序开放平台,完成注册及开发者资质认证,进入小程序设置,在基本设置中生成 AppID。
·APPSECRET:在 开发设置 页面中,单击生成 AppSecret,生成后需妥善保存。若遗忘,需在此处重新生成新密钥。
·APPID:小程序唯一凭证密钥,参考获取小程序码获取 APPID。
·APPSECRET:小程序唯一凭证密钥,参考获取小程序码获取 APPSECRET。
4. 获取登录凭证 Code。
请求 Code 携带位置:微信后台通过 Code 换取用户的登录态信息,包括用户的唯一标识(openid)及本次登录的会话密钥(session_key)。
5. 向小程序返回登录态。
·自定义登录态参数名:插件对微信登录态以及其他登录信息进行加密的参数名。
返回自定义登录态参数位置:插件对登录态进行加密后的参数携带位置。
·登录态过期时间:登录态过期时间,以分为单位。
6. 选择登录态校验。
·前台业务请求自定义登录态参数位置:小程序请求业务服务时,登录态携带位置。
·向业务后台传输登录态参数位置:网关对登录态进行解密后,将提取的微信登录信息传递至用户后台服务的携带位置。
7. 单击完成,完成创建。
三、将请求参数转 Tag
TSF 提供了一系列将请求参数转 Tag 能力,方便进行细粒度的服务治理能力。
有关请求参数转 Tag 能力的描述可参见 微服务网关 Tag 插件。
四、默认 Tag 操作说明
·平台提供了一系列微信默认参数的灰度发布能力,包含用户名、性别等信息。用户可以勾选这些参数并提供参数的填写位置,方便平台将这些请求参数转为 TSF 中的标签。
·当某个参数的传入具有请求的唯一性(该参数值不重复),则可以将该参数设置为 TraceID,平台将对该参数与平台生成的 TraceID 进行关联,方便用户进行唯一性定位与检索。
·仅支持一个参数设置为 TraceID/。
五、自定义 Tag 操作说明
自定义 Tag 使用请参见 微服务网关 Tag 插件。
六、绑定插件
创建好 WeChatMpLogin 类型的插件需要绑定到分组或 API 上才会生效。
1. 登录 腾讯微服务平台控制台,在左侧导航栏单击组件中心下的微服务网关 > 插件管理。
2. 选择刚刚创建好的插件,单击操作列的绑定对象。
3. 在绑定对象中,将插件绑定到某个分组或者某个分组下的 API 上。
4. 单击提交。当用户访问对应的微服务网关分组时,插件就会生效。
注意:说明:
注意:一个微服务网关最多支持绑定1500个插件。
七、案例说明
1. 获取 APPID 与 APPSECRET。
在开发者 微信小程序开发平台 中,可以查询到小程序的 AppID(小程序 ID)与 AppSecret(小程序密钥)。
2. 根据上述 操作步骤 ,完成微服务网关中微信小程序登录插件的创建与绑定。
3. 编写小程序登录业务。
// 登录wx.login({ success: res => { // console.log("code is : ", res.code); wx.request({ url: ${LOGIN_BUSINESS_URL}, //登录业务访问路径 header: { 'content-type': 'application/json', 'js_code': res.code, //携带js_code }, success: res => { //本地缓存 wx.setStorageSync('user_session', res.header.user_session); //let user_session = wx.getStorageSync('user_session') || '' //console.log('idsession is :', idsession); wx.showToast({ title: '登录成功' }) } } ) } })
4. 通过小程序访问业务服务。
BusinessRequestFunc: function () { //获取登录时存储的user_session let user_session = wx.getStorageSync('user_session') || ''; //console.log("user_session is :" , user_session); wx.request({ url: ${BUSINESS_URL}, //业务访问路径, header: { 'content-type': 'application/json', 'user_session': user_session }, success: res => { //console.log("response : ", res.data) // your business here } } ) //具体接口使用文档参照微信小程序使用接口文档 }