# 竞价系统-微信小程序
# 未登录状态处理
在未登录状态时,尝试进行“小程序登录”流程,如果登录失败,则转入“小程序绑定”的流程
# 小程序绑定
# 绑定方式
绑定方式有两种,在页面上需要提示“如果贵单位竞价网接入了统一身份认证登录(单点登录),则只能通过扫描二维码的方式完成绑定”
方式1:扫描竞价网“账户设置”页面二维码绑定
- 页面提示“请登录贵单位竞价网,点击右上角“点击绑定微信”,或者进入“账户设置”-“个人信息”-“绑定微信”,点击下方按钮扫描页面上的二维码”
- 点击按钮“扫描二维码”,直接调起微信扫一扫,扫描成功后,PC页面会自动跳转完成绑定;
- 由于小程序不支持调起原生的微信扫一扫,只有微信公众号js-sdk(类似于公众号的页面)中提供了此功能, 因此“扫描二维码”的按钮就使用了js-sdk,实际上是打开了一个webview, 指向地址为https://mpwx.easyjcx.com/scanQrCode (HTML文件存放在html-1的/data0/nginx/mini-program/下)
- 完成扫描后,页面显示按钮“已完成绑定,点击登录”,点击后进入“小程序登录”流程
方式2:通过账号密码绑定
- 用户选取高校后,调用接口 /login/isSsoCollege 获取该高校是否接入了单点登录,需要提供高校ID;
- 如果已接入单点登录,则提醒用户“贵单位竞价网已接入统一身份认证/单点登录,请使用扫描二维码方式完成绑定”
- 用户输入账号密码点击“绑定”按钮后,调用接口 /login/getMpBindData 获取竞价网绑定凭据 (后台可能返回错误信息,如账户密码错误等,直接提示给用户),需提供高校ID,账号、密码(和原登录接口加密方式一致)、验证码等,详见接口文档
- 小程序使用wx.login()获取code
- 小程序使用wx.getUserInfo获取微信用户信息(需要返回登录态信息,即withCredentials=true)
- 调用小程序绑定接口 /weixinCli/college/wxUser/mpBindWx, 需提交code、竞价网绑定凭据(加密用户信息)、微信用户信息,详见接口字段说明 绑定成功后,进入“小程序登录”流程
# 高校端扫码绑定流程
- 使用微信扫描高校端“账户设置”-“个人信息”-“绑定微信”中的二维码
- 扫描成功后在微信点击确定,随后高校端PC页面会跳转到预设的回调地址(中心端处理绑定的url), 并携带用户信息、时间戳(过期时间:5分钟,需要定时刷新)
- 如果信息有效,则记录微信绑定信息(wx_user)并调用即时交换回到高校端;如果无效,则在页面提示错误
- 在检测重复绑定时,程序会优先判断unionId,再判断openId(通过扫码绑定,即微信开放平台openId)、 mpOpenId(通过小程序绑定,即微信公众平台-小程序openId), 否则使用微信登录和小程序能够重复绑定
- 绑定成功后PC端页面跳转到展示小程序二维码的页面(扫一扫打开小程序)
【注意事项】扫描成功后PC页面跳转回调地址这一步,独立端高校是会被浏览器拦截的。
# 微信的用户标识
通过上文可以了解到,目前涉及的微信用户标识为UNION ID、微信开放平台OPEN ID、小程序OPEN ID。
- 如果微信开放平台和小程序是绑定关系,则同一微信用户的UNION ID是相同的(目前已绑定);
- 如果没有绑定,则即使是同一用户,UNION ID也是不同的;
- 无论是否绑定,同一用户从微信开放平台获取的OPEN ID和小程序的OPEN ID都是不同的,尽管这两个ID都叫OPEN ID。
# 小程序扫描二维码H5页面
小程序调起扫一扫只能扫描出二维码代表的字符串,即使在小程序中打开该链接,也会报“无scope权限”, 无法实现原生的扫一扫所能完成的扫描登录的效果。
查阅过微信文档后,发现微信在jssdk(即为公众号中的H5页面提供的工具包)中提供了调起微信扫一扫的功能, 因此需要开发一个H5页面,调用jssdk的接口。 关键方法:
- wx.config,需要提供:
- appId(必须为公众号的appId,小程序的无效),
- 签名信息(不保证长期有效,因此每次打开页面都要调用后端接口生成签名) 后端生成签名时还需要提供页面地址,比如https://mpwx.easyjcx.com/scanQrCode/, 如果将此页面文件放到其它地址,则签名会失效
- 随后使用wx.scanQrCode即可调起微信扫一扫
# 小程序登录
- 小程序使用wx.login()获取code
- 调用中心端接口获取高校微信登录凭据 (包括data和ts)/weixinCli/college/wxUser/mpBindWx/mpLoginCode,需携带code;
- 如果此微信尚未绑定竞价网账号,则后台返回错误信息
- 调用高校微信登录接口 /login/wxLoginPost,需要携带高校微信登录凭据,接口会返回高校端访问token
- 登录成功后,进入小程序主界面
# 备注
为中心端api地址,测试环境为 https://api1.easyjcx.com/api 为高校端api地址,测试环境为 https://cgweixin.easyjcx.com/college