# 竞价系统-微信小程序

# 未登录状态处理

在未登录状态时,尝试进行“小程序登录”流程,如果登录失败,则转入“小程序绑定”的流程

# 小程序绑定

# 绑定方式

绑定方式有两种,在页面上需要提示“如果贵单位竞价网接入了统一身份认证登录(单点登录),则只能通过扫描二维码的方式完成绑定”

  • 方式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

Last Updated: 3/12/2020, 2:07:22 PM