请教各位一下,微信内授权登录,这样的功能该如何实现呢? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
chengxiao
V2EX    Python

请教各位一下,微信内授权登录,这样的功能该如何实现呢?

  •  
  •   chengxiao 2017-10-04 16:01:32 +08:00 5021 次点击
    这是一个创建于 2980 天前的主题,其中的信息可能已经有所发展或是发生改变。
    看了微信的文档,迷迷糊糊的,登录方式有好多种,搞迷糊了
    我想实现的是 公众号内点底部链接 然后需要微信授权,授权成功后就能访问具体页面了
    另外有没有适合 django 的微信开发库呢
    16 条回复    2017-10-06 11:20:20 +08:00
    zybzzc
        1
    zybzzc  
       2017-10-04 16:35:21 +08:00 via Android
    参阅公众号开发文档微信网页授权一栏,具体做法是点击之后跳转到微信授权链接,用户授权后会自动重定向到授权链接接中的 redirect_url 并带上 code,浏览器拿到 code 之后传给服务器换取 accesstoken,到这里就算是授权成功了
    Sikoay
        2
    Sikoay  
       2017-10-04 16:44:20 +08:00 via Android   1
    PHP 我倒是自己二次封装了一版..
    zybzzc
        3
    zybzzc  
       2017-10-04 16:44:40 +08:00 via Android   1
    @zybzzc 需要说明的是,服务器用浏览器传过来的 code 向微信服务器换取到的 accesstoken 以及 openid 等不应该传回给客户端浏览器
        4
    jhdxr  
       2017-10-04 18:03:37 +08:00   1
    微信授权有不同类别,有需要用户手动点击同意的,也有直接通过的,能访问到的信息不同,但都是 OAuth,跳到微信的一个网址即可。

    php 的话我推荐 overture 的。。。Python 的。。。不知道,也许是个自己造轮子的机会?
    FullBridgeRect
        5
    FullBridgeRect  
       2017-10-04 19:58:15 +08:00 via Android   1
    @jhdxr python 有不止一个轮子,以关键词 django wechat 搜出来一堆结果
    shiny
        6
    shiny  
    PRO
       2017-10-04 20:03:45 +08:00   1
    公众号内点底部链接的情况,如果是服务号
    1. 已关注用户:可以直接获取
    2. 未关注的情况下,如果要详细资料需要授权
    3. 如果只获取 openid 来区分唯一用户不需要点击授权

    如果是订阅号:不行,但你可以配置一个第三方的服务号,通过 unionid 关联到当前订阅号

    造个轮子并不难,时间多的话可以试试,还是比较有乐趣的。
    chengxiao
        7
    chengxiao  
    OP
       2017-10-04 21:53:48 +08:00
    @pop123zxc 兄弟 搜不到啊
    scriptB0y
        8
    scriptB0y  
       2017-10-04 21:59:32 +08:00   1
    做过一次 感觉轮子没啥用处…… 看不懂文档很多地方还是迷迷糊糊的,要给公账号设置一堆东西,文档不看这些东西就混了,文档能看明白 SDK 也没啥用了。

    所以还是老老实实看文档,虽然文档确实屎一样…… 静下心来慢慢看
    moooooo
        9
    moooooo  
       2017-10-04 22:37:01 +08:00
    你要的可能是一个单点登录系统...
    moooooo
        10
    moooooo  
       2017-10-04 22:41:44 +08:00   1
    @moooooo 或者只是在微信客户端中打开你的网页,微信客户端打开的网页需要指明授权级别,基础授权和用户信息授权。
    其中 用户信息授权会弹出一个是否信任该网页(类似的意思),选择是那么你就可以使用微信给你的该账号与你的公众号绑定生成的 openId 你可以依据这个 openId + 应用 Token+AppId 可以获得用户的一些基本信息,包括但不限于微信头像和微信昵称等
    chengxiao
        11
    chengxiao  
    OP
       2017-10-04 22:43:11 +08:00
    @scriptB0y 对的,就是文档迷迷糊糊的....好多地方摸不着头脑 公众号后面也要设置很多东西....另外这个该如何在本地调试呢?我看回调函数都要从固定域名发起.....
    scriptB0y
        12
    scriptB0y  
       2017-10-04 22:50:53 +08:00
    @chengxiao 我是在 vps 上开发的…… 看有的人好像是申请两个微信号,一个测试用,设置 host,本地通过域名访问
    loveCoding
        13
    loveCoding  
       2017-10-05 00:00:50 +08:00
    先把逻辑理清楚 , 所谓微信登录其实只是借助微信验证用户合法性 主要流程如下:
    网站->微信登录->成功->发放登录凭证(session/token)
    loveCoding
        14
    loveCoding  
       2017-10-05 00:03:12 +08:00
    @chengxiao #11 反向代理 , 本地起一个 ngrok 或者 huashengke
    bfbd
        15
    bfbd  
       2017-10-06 09:52:32 +08:00
    这儿有现成的:
    https://github.com/aiportal/wechat-proxy

    你所要做的仅仅是把用户的请求跳转到:/app/test/auth?call=...&state=&lang=
    call 参数就是你最终接收用户 openid 的网址。
    chengxiao
        16
    chengxiao  
    OP
       2017-10-06 11:20:20 +08:00 via iPhone
    @bfbd 非常感谢,研究了一天终于搞明白了,在回调域名那坑了 3 个多小时,最后还是搞出来了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3413 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 00:42 PVG 08:42 LAX 16:42 JFK 19:42
    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