接入前的准备工作参考文档:微信小程序登录接入 (必做)
登录逻辑:小程序登录逻辑梳理
使用插件参考文档:https://developers.weixin.qq.com/miniprogram/dev/framework/plugin/using.html
一、添加插件
二、引入插件
三、接入方法及参数
四、提供的方法
五、前端登录状态判断建议
六、小程序H5登录态打通
七、小程序间登录态打通
八、需要配置的域名
九、常见问题
1、demo中的代码需要复制到自己项目中吗
2、插件引入控制台报page相关错误
3、插件引入控制台报export、import相关错误
4、登录后想获取用户pin
5、登录成功缓存中有pt_key,但页面没有跳回
6、微信手机号登录提示系统繁忙,请稍后再试
7、 选择“微信手机号快捷登录”先取消授权-再确定授权,登录不成功 提示请不要重复点击
8、 插件未授权使用
9、 获取手机号失败,该appid没有权限
10、 开发工具中点登录注册没反应。控制台:开发者工具上不支持调试插件功能页,请在真机上测试。
.
一、添加插件
微信公众平台——设置——第三方服务——插件管理——添加插件——搜索“登录管理服务”——添加。
demo版本需与插件版本对应。见http://git.jd.com/h5-miniProgram-login/wx_login_plugin 权限问题请联系迟潇潇添加
二、引入插件
为确保插件的正常使用,请确保基础库版本高于2.1.0 (低版本兼容建议方案:微信管理后台——设置——基础库最低版本设置——设置——2.1.0)
app.js中
引入插件
"pages": [
"pages/demo/demo", //登录成功跳回的示例页面,可删除
"pages/login/index/index",
"pages/login/main/main",
"pages/login/union/union",
"pages/login/web-view/web-view",
"pages/login/consignee/consignee",
"pages/login/wv-common/wv-common"
],
"plugins": {
"loginPlugin": {
"version": "1.0.4",
"provider": "wxefe655223916819e"
}
},
三、接入方法及参数
在public/loginConfig.js 中可设置固定参数、不变参数、默认参数。在需要登录的地方跳转至登录页/pages/login/index/index (默认路径),并通过url传递定不同业务场景下的不同参数。原生小程序中跳转方式使用 wx.redirectTo 、wx.nagivateTo...,内嵌h5页面中跳转方式使用JSSDK中提供的方法跳回小程序原生登录页,具体跳转方式按业务需求自行选取。
跳登录时url仅需传递不同业务场景下的特殊参数,不变参数在loginConfig中配置即可。若跳转时的参数与loginConfig中参数key值相同,则取跳转时参数。
示例:
loginConfig中参数
export let config = {
wxversion: 'wxefe655223916819e',
appid: 269,
returnPage: undefined,
pageType: undefined,
isLogout: undefined,
noWXinfo: undefined,
h5path: undefined,
logoPath: undefined,
isTest: undefined
}
.
小程序跳登录url传参
Page({
toLogin(){
let returnPage='/pages/demo/demo';
wx.redirectTo({ url:`/pages/login/index/index?returnPage=${returnPage}` }) //登录成功跳回页面为demo
}
})
h5跳小程序登录url传参
let returnPage = '登录成功需跳回的页面';
let pageType = '登录成功需跳回的页面类型'
wx.miniProgram.navigateTo({ url: `/pages/login/index/index?isH5=1&returnPage=${returnPage}&pageType=${pageType}`});
参数说明: (非特殊业务需求,非必传参数请不要传递)
Key
是否必传
说明
备注
wxversion 是 小程序开发的appid 如:wxefe655223916819e
appid 是 业务方接入登录申请的appid,业务方务必申请新的appid,申请请参考《微信小程序登录接入》 如:269
returnPage 是
登录成功后跳回url
如:'/pages/demo/demo'
pageType 否
登录成功跳回页面类型,默认redirectTo跳回。
可选值:h5、switchTab、reLaunch
isLogout 否 退出后重新登录 传值即表示退出后重新登录。
noWXinfo 否 不获取微信用户信息,即分流页点登录直接进入登录页。 传值即表示不获取微信用户信息。
h5path 否 打开H5页面所需web-view所在文件路径,默认路径 /pages/login/web-view/web-view。 路径改变需传此值,不变不要传
logoPath 否 自定义logo,默认京东狗,默认尺寸 318* 390 像素。 需为线上地址
navigationBarColor
否 设置导航栏样式,设置后所有登录相关页面会改为相同样式,优先级高于app.json中统一样式 参数同微信api:setNavigationBarColor 无回调
navigationBarTitle
否 设置导航栏标题,设置后所有登录相关页面会改为相同标题 参数同微信api:setNavigationBarTitle 无回调
isTest
否 接口环境控制。 默认线上环境,传值表示预发环境(预发环境必须在内网测试)
开普勒特殊参数,非开普勒业务方勿传:
isKepler
否 是否为开普勒 传值即为开普勒
.
四、提供的方法
常用方法:getStorageSync(key)
获取插件存储的缓存:
获取插件存储的登录缓存
let plugin = requirePlugin("loginPlugin");
let ptKey = plugin.getStorageSync("jdlogin_pt_key")
其他方法:
1、public/util 中提供的方法 。 均为跳转页面所需方法,插件跳转依赖其中的方法,禁止修改。
方法名
参数
说明
redirectToH5({page, wvroute})
page 必传 h5地址,
wvroute 选传 wv-common 所在路径,如修改login中文件路径,需传递该参数,否则不要传
小程序中打开H5页面,登录态打通,调用该方法跳转到H5页面
2、插件中提供的方法。
方法名
参数
说明
支持版本
setStorageSync(key, value)
key 必传 缓存要存的key值
value 必传 需要存储的内容
存入登录插件缓存
getStorageSync(key)
key 必传 要读取的缓存key 读取登录插件中的对应缓存
formH5Url({page, wvroute})
page 必传 h5地址
wvroute 选传 wv-common 所在路径,如修改login中文件路径,需传递该参数,否则不要传
将h5地址转换成小程序中的地址
getLoginParams()
/ 获取缓存中存储的登录所需参数
logout({callback})
callback,非必传。 调用退出登录后的回调函数,会返回接口返回信息
退出登录。1、调用退出登录接口清除服务端pt_key 2、清除本地登录相关所有缓存 1.0.5
getLoginToken({callback}) callback 返回接口信息 。接口信息参考微信小程序间互跳登录打通说明 小程序间登录态打通,获取token 1.1.1
transferTokenToLogin({tokenkey, callback}) tokenkey token, callback 返回登录信息。接口信息参考微信小程序间互跳登录打通说明 小程序间登录态打通,token换登录信息 1.1.1
.
五、前端登录状态判断建议
1、判断是否登录(只有插件或只有源码)
小程序前端仅仅判断本地缓存中是否存在pt_key信息(字段名为jdlogin_pt_key),而不进行验证是否有效。
如果pt_key不存在,那么进入登录页面进行小程序登录;如果存在,以cookie形式携带pt_key调用后台业务接口,由业务后台进行判断pt_key的有效性(参考微信小程序登录接入 四登录态验证)
如果pt_key无效,返回“未登录”的错误码,提示小程序前端进行登录
2、先接的源码再接的插件,处于过渡阶段。
建议先判断源码缓存中是否有有效登录态(见1),
有:继续用该登录态;
没有:判断插件中是否有有效登录态。插件中没有:去登录。有正常使用。
即:小程序缓存和插件缓存中均无有效登录态,去登录。其他情况,哪里有用哪里的。
3、判断是否登录成功
缓存中有jdlogin_pt_key
.
六、小程序H5登录态打通
在H5页面中,如果页面未登录(pt_key不存在或无效),建议跳回小程序登录页面进行登录,登录成功后重新打通进入H5页面,实现一次登录两端有效(小程序端和H5端)
1、H5跳回小程序
示例 wx.miniProgram.navigateTo({url: '/pages/login/index/index})
具体跳回小程序的逻辑参考https://mp.weixin.qq.com/debug/wxadoc/dev/component/web-view.html
2、小程序web-view中内嵌打通登录态的H5页面,使用util.redirectToH5({page:h5url}) 见四.1
七、小程序间登录态打通
小程序间登录态打通。以A小程序跳到B小程序为例。插件中的方法见四.2
1、在A小程序中调用getLoginToken方法获取token。(确保A小程序已登录才会获取到有效的token)
A小程序获取token
let plugin = requirePlugin("loginPlugin");
Page({
gentoken(){
plugin.getLoginToken({
callback:(res)=>{
console.log(res)
}
});
}
})
2、在B小程序中调用transferTokenToLogin方法传入token获取登录信息。
B小程序用token获取登录信息
let plugin = requirePlugin("loginPlugin");
Page({
tokentologin(){
plugin.transferTokenToLogin({
tokenkey:'AAEAMB43alCsHVx8wwu_VHhTgGJQEZMxAWtQ0S01Wtg24XSAjdIk6Tx68ScRYt4e9hVdzQ',
callback:(res)=>{console.log(res)}
});
}
})
.
八、需要配置的域名
1、https://wxapplogin.m.jd.com
2、待补充
九、常见问题
1、demo中的代码需要复制到自己项目中吗
需要。pages/login和public 可直接复制,app.js和app.json按需复制,pages/demo跳转登录示例无需复制。
2、插件引入控制台报page相关错误
基础库版本低于2.1.0 或复制demo中代码有遗漏
3、插件引入控制台报export、import相关错误
开发工具详情中勾选 ES6转ES5
4、登录后想获取用户pin
前端无法获取用户pin,只能后台获取,获取用户pin流程:前端cookie中传pt_key,业务后台调用我们提供的sdk通过pt_key获取用户pin。文档 登录态验证拦截器。后台相关问题咨询:王鸿运(wanghongyun)、赵俊杰(zhaojunjie1)
5、登录成功缓存中有pt_key,但页面没有跳回
检查 returnPage 和pageType传参是否正确,控制台有无报错
6、微信手机号登录提示系统繁忙,请稍后再试
检查 loginConfig中的wxversion和project.config.json 中的appid是否一致,不一致改为一致。一致仍报错,将当前项目新建一下,新建时的appid填写wxversion配的appid。
如果还有问题请联系肖轩(xiaoxuan)。
7、 选择“微信手机号快捷登录”先取消授权-再确定授权,登录不成功 提示请不要重复点击
请按demolist 中1.1.1版本更新index.js文件
8、 插件未授权使用
微信公众平台——设置——第三方服务——插件管理——添加插件——搜索“登录管理服务”——添加。
9、 获取手机号失败,该appid没有权限
目前该接口针对非个人开发者,且完成了认证的小程序开放(不包含海外主体)
注册步骤参见微信小程序注册
10、 开发工具中点登录注册没反应。控制台:开发者工具上不支持调试插件功能页,请在真机上测试。
见微信插件功能页真机测试常见步骤和常见问题