目前正在开发的业务,有微信小程序端和 PC 网页端两个版本。
小程序端的登录逻辑,是通过调用微信的接口,获取用户的 openid ,把它作为用户的身份标识。
PC 网页端为了开发方便,也想让用户通过微信扫码登录,获取用户在小程序中的 openid ,这样就可以和小程序端共用一套用户身份。
目前的整体流程如下:
PC 网页端调用接口来生成小程序码,然后显示在前端页面中让用户扫码。生成小程序码时,可以传入一个 scene 参数,后端在返回小程序码时,把这个 scene 参数一并返回,前端进行存储。
微信小程序扫码,拿到 scene 参数,然后把小程序用户的 openid 和 scene 作为 key-value 传给后端存储。
PC 网页端查询后端接口,检查 scene 参数是否有对应的 openid ,是的话就将 openid 存储在前端。
现在的问题是,整体流程都走通了,但是最后一步 PC 网页端查询后端接口,以怎样的间隔轮询接口才是合理的方式?
我目前想的是每隔 5 秒轮询一次,累计轮询 5 次(这个值可以调整)都没能获取到 scene 对应的 openid 的话,就认为用户没有用微信扫码,然后停止轮询,不知道这样合不合适。
1
pytth 142 天前 via Android 1
不用这么麻烦吧,无论是小程序端还是 pc 端,都是在同一个小程序,openid 都是一样的。pc 端生成的小程序码,微信扫码仍然可以调用一次 wx.login 获取 openid ,然后对比数据库的 openid 是否已存在,如果存在则登陆,不存在则走注册的流程。轮询的目的是检查是否已经授权登陆获取到 openid ,设置一个过期时间,例如 2 分钟内没有获取到 openid 则代表没完成整个登陆过程,则停止轮询。
可以看一下我的: https://segmentfault.com/a/1190000044295229 |
2
vczyh 142 天前
一般来说 PC 扫码和小程序各用各的,同一个主体 unionid 是相同的,可以通过这个判断用户唯一。如果非要走 PC 扫码小程序登录可以参考腾讯云登录流程。
|
3
chairuosen 142 天前
3 秒一次,轮询 5 分钟,然后二维码罩一个蒙层说失效了,点一下刷新继续轮询
|
4
GPT6 142 天前
用 unionid 比较好
|
5
dj721xHiAvbL11n0 142 天前
1. 为什么不用二维码链接拉起小程序做登录,你去看看一些用案例,比如腾讯云的扫码登录( https://developers.weixin.qq.com/miniprogram/introduction/qrcode.html )
2. 不要用生成小程序码去做登录,因为会有频率限制( https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/qrcode-link/qr-code/getUnlimitedQRCode.html ) |
6
dream4ever OP @x2420390517 刚知道可以用二维码链接拉起小程序,之前搜索没看到这方面的信息,多谢。
另外虽然目前的业务可能上线后访问量不高,不过万一访问量高了,生成小程序码接口受限了是有点麻烦,这么一看的确还是前端生成二维码更省心一些,对后端的压力小。 |
7
dream4ever OP |
8
TArysiyehua 142 天前
直接用网页生成一个随机串,生成一个二维码,小程序扫码的时候把这个随即串带给后端,设置超时时间。
网页 3 秒轮询这个随机串,并检查自身或后端返回是否超时,超时显示二维码过期重新刷新。。。 |
9
pota 142 天前
我之前做的网站类似逻辑,不过是用的关注事件,当时做的是 2 秒一次。这个具体时间需要看你需要达到的用户体验和用户量以及 QPS 的承担量。不过这部分还是推荐独立程序做,防止影响已登陆业务
|
11
cnbattle 141 天前 via Android
你的方案可以,轮询时间短点 1-3s ,过期时间一般长点 三五分钟,轮询 scene 值 落到 redis ,别的没啥了
|
12
dj721xHiAvbL11n0 141 天前
@dream4ever #6 只是那个链接可以拉起小程序,参数你可以自定义,然后在小程序页面获取
|
14
tallest 141 天前
SSE ,服务器处理完了直接返回到前端去,ChatGPT 的流式输出就是用的这个,后端生成一点儿就返回给前端一点儿,一样的逻辑
|