通过小程序实现网站扫码登录!每年都可以省 300 块... - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
TANKING
V2EX    微信

通过小程序实现网站扫码登录!每年都可以省 300 块...

  •  1
     
  •   TANKING 2018-07-14 17:04:29 +08:00 7100 次点击
    这是一个创建于 2724 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我们知道,要接入微信登陆有两种方式

    1、微信开放平台

    2、微信服务号

    这两种方式均可生成带参数的二维码,然后扫码获取用户基本信息的,所以我们可以在网站上用这两种方式开发网站的扫码登录,也是现在很多网站的通用做法。

    微信开放平台要认证开发者,需要 300 块 /年,微信服务号也需要提交企业资料认证,需要 300 块 /年。有些想要学习的或者自己的网站完全没有盈利的,其实不舍得花这个钱,特别是个人开发者,没有企业资料去做认证,因为微信开放平台就算是个人,也需要盖章的,我也试过。

    免费的方法来了

    既然微信开放平台和微信认证的服务号每年都需要 300 块认证费,个人学习不舍得,没资料,那么咱们把矛头指向微信小程序了。

    微信小程序无论是个人还是企业的,都开放了获取用户基本信息的,无须认证,不收费。而且,还提供了 3 个生成带参数的二维码的接口,注意哦,是带参数的二维码,所以这三个接口为我们提供了这样的方法。

    既然能够获取用户基本信息,还可以生成二维码,那么就可以实现网站扫码登录了!

    我这里做了一个测试。


    实现方法是:

    1、登陆页面生成带参数的二维码

    2、扫码,获取参数

    3、等待用户授权

    4、授权后,把用户基本信息(头像、昵称)和参数一起插入数据库

    5、登陆页面轮询数据库当前参数的数据变化

    6、如果登陆信息有变化(可以用一个状态码检测是否已经扫码,如果有数据进来则扫码了,如果没有数据进来则没扫码,继续轮询)

    7、扫码成功,页面输出用户的基本信息,存 SESSION,登录!

    8、登陆成功后,小程序端自动注销登陆,方便下次扫码。

    12 条回复    2019-02-11 00:57:53 +08:00
    yao990
        1
    yao990  
       2018-07-14 17:58:54 +08:00 via Android
    哇,大神你真厉害。不过我这边最后还是老老实实的认证了服务号,因为做微信登录的初衷是方便用户在手机端不用扫码,点击直接登录直接登录,能省钱更好,实在不能省就不省了。小程序登录确实省钱也很方便,不过在手机端每次登录来回跳转,感觉违背了做微信登录的初衷。所以最后没有选择这个方法,另外也没有选开放平台,因为网站主要用户都是手机端的,仔细研究开放平台之后发现开放平台主要针对电脑用户,所以就没有选择。最后谢谢大神了,大神这种钻研精神值得学习!相信这种方案在手机端需求不高的情况下会很好用的!
    vibbow
        2
    vibbow  
       2018-07-14 18:01:23 +08:00
    所以没有和微信的服务器进行任何验证?
    也就是说前端可以伪造任何请求?
    GG668v26Fd55CP5W
        3
    GG668v26Fd55CP5W  
       2018-07-14 18:19:21 +08:00 via iPhone
    我做了一个反向场景的扫码,网站已注册用户加了一个二维码,通过小程序扫一扫,把网站的用户绑定到小程序里,小程序里同步原来网站用户的信息。
    TANKING
        4
    TANKING  
    OP
       2018-07-14 19:08:32 +08:00
    @vibbow 请求二维码算不算?
    vibbow
        5
    vibbow  
       2018-07-14 19:39:14 +08:00
    @TANKING 但是你小程序往服务器提交用户资料后,没有和微信服务器进行二次验证把。
    这一步可以伪造请求就足够了。
    also24
        6
    also24  
       2018-07-14 19:47:57 +08:00
    @vibbow #5
    微信在小程序接口内有提供 session_key 来用于做数据校验,当然这里有个前提是开发者有正确使用: https://developers.weixin.qq.com/miniprogram/dev/api/signature.html#wxchecksessionobject
    z0ne
        7
    z0ne  
       2018-07-14 19:50:29 +08:00
    卧槽,哥们,这个。。

    和我做的一样,并且我已经用在自己的网站中了(多个子网站,统一小程序或者微信扫描登陆管理认证)

    https://dev.vpush.cloud
    登陆就是直接扫一扫确认~
    并且其中用户的 openId 和 access_token 都经过了微信后端的认证
    aWangami
        8
    aWangami  
       2018-07-15 09:11:56 +08:00 via Android
    思路不错~
    tiaod
        9
    tiaod  
       2018-07-15 10:49:36 +08:00
    公众号生成带参数的二维码也行啊。其实很多微信登录都是利用公众号生成带参数二维码,这样可以顺便吸粉。。
    TANKING
        10
    TANKING  
    OP
       2018-07-15 11:09:49 +08:00
    @tiaod 公众号需要认证,300 块一年
    cdwyd
        11
    cdwyd  
       2019-02-02 09:15:00 +08:00 via Android
    @yao990 你好,请问在非微信浏览器的手机访客怎么实现微信登录?需要保存二维码然后扫描吗?
    有认证的服务号但是没有开放平台账号,谢谢。
    yao990
        12
    yao990  
       2019-02-11 00:57:53 +08:00 via Android
    @cdwyd 这个需要微信开发者账号,同样需要认证
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1026 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 17:41 PVG 01:41 LAX 09:41 JFK 12:41
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86