2 min read

网站通过微信小程序实现登录

网站通过微信小程序实现登录

相比于通过微信公众号实现扫码登录,通过微信小程序扫码有一个明显的好处是可以获取用户手机号,通过手机号和现有网站系统用户做关联绑定,这个微信公众号是无法做到的。通过该方式获取手机号的成功率比普通短信方式要高,费用要低(0.3 元/次),而且仅需要对新用户获取手机号,老用户只需要获取 OpenID 即可。

实现原理

  • 网站服务端调用微信小程序服务端生成二维码,二维码携带临时ID
  • 前端展示二维码给用户,通过临时ID轮询等方式监听二维码状态,用户通过微信扫码,进入微信小程序,微信小程序中获取临时 ID、微信 openID、用户手机号,发送给网站后端,后端校验通过后和已有用户关联或生成新用户
  •  向轮询接口返回登录态完成登录

关键细节

  • 服务端通过 getUnlimitedQRCode 接口获取小程序码,利用 scene 参数传递临时 ID,Redis 记录临时 ID 状态
  • 微信小程序中通过 wx.login 获取 code,然后通过服务端换取openID, 当 openID 匹配到已有用户时,直接完成登录,更新临时ID 状态并关联openID,网站轮询接口根据openID返回对应登录态
  • 当 openID 未匹配到用户时(新用户),小程序展示授权登录按钮,利用 bindgetphonenumber 属性获取 code,进而通过服务端换取手机号,完成新用户注册,更新临时ID 状态并关联openID,网站轮询接口根据openID返回对应登录态

增强还可以通过 official-account 组件,实现在用户授权登录后,展示微信公众号组件,引导用户关注微信公众号。