最近微信登录开放公测,为了方便微信用户使用,我们的产品也决定加上微信登录功能,然后就有了这篇笔记。

根据需求选择相应的登录方式

微信现在提供两种登录接入方式

移动应用微信登录

网站应用微信登录

这里我们使用的是网站应用微信登录

1 注册并通过开放平台开发者资质认证

注册微信开放平台帐号后,在帐号中心中填写开发者资质认证申请,并等待认证通过。

2 创建网站应用

通过填写网站应用名称、简介和图标,以及各平台下载地址等资料,创建网站应用

3 接入微信登录

在资源中心查阅网站应用开发文档,开发接入微信登陆功能,让用户可使用微信登录你的网站应用

如果已经完成上面的操作,请继续往下看

微信网站应用微信登录是基于OAuth2.0协议标准构建的微信OAuth2.0授权登录系统。

微信OAuth2.0授权登录目前支持authorization_code模式,适用于拥有server端的应用授权。该模式整体流程为:

第三方发起微信授权登录请求,微信用户允许授权第三方应用后,微信会拉起应用或重定向到第三方网站,并且带上授权临时票据code参数;

通过code参数加上AppID和AppSecret等,通过API换取access_token;

通过access_token进行接口调用,获取用户基本数据资源或帮助用户实现基本操作。

具体流程请参考官方文档,我们这里只说一下python的实现方法。官方文档地址 点这里

参考python-instagram 我写了一个 python-weixin (https://github.com/zongxiao/python-weixin)一个微信python SDK

不过现在还只有微信接入、获取用户信息、 刷新refresh_token 等简单功能

首先 需要把代码clone到本地

然后执行

python setup.py install

使用方式非常简单

1 from weixin.client importWeixinAPI

2

3 APP_ID = 'your app id'

4 APP_SECRET = 'your app secret'

5 REDIRECT_URI = 'http://your_domain.com/redirect_uri' #这里一定要注意 地址一定要加上http/https

6

7 scope = ("snsapi_login", )

8 api = WeixinAPI(appid=APP_ID,

9 app_secret=APP_SECRET,

10 redirect_uri=REDIRECT_URI)

11

12 authorize_url = api.get_authorize_url(scope=scope)

现在将

authorize_url 地址在浏览器打开, 将跳转到微信登录页面,使用手机扫码登录后将跳转到

http://your_domain.com/redirect_uri?code=CODE&state=STATE 页面

现在我们就可以使用code 来获取登录的 access_token

access_token = api.exchange_code_for_access_token(code=code)

access_token 信息为

{

"access_token":"ACCESS_TOKEN",

"expires_in":7200,

"refresh_token":"REFRESH_TOKEN",

"openid":"OPENID",

"scope":"SCOPE"}

参数说明

access_token

接口调用凭证(有效期目前为2个小时)

expires_in

access_token接口调用凭证超时时间,单位(秒)

refresh_token

用户刷新access_token(有效期目前为30天)

openid

授权用户唯一标识

scope

用户授权的作用域,使用逗号(,)分隔

获取access_token后,就可以进行接口调用,有以下前提:

access_token有效且未超时;

微信用户已授权给第三方应用帐号相应接口作用域(scope)。

对于接口作用域(scope),能调用的接口有以下:

授权作用域(scope)接口接口说明

snsapi_base

/sns/oauth2/access_token

通过code换取access_token、refresh_token和已授权scope

/sns/oauth2/refresh_token

刷新或续期access_token使用

/sns/auth

检查access_token有效性

snsapi_userinfo

/sns/userinfo

获取用户个人信息

api = WeixinAPI(appid=APP_ID,

app_secret=APP_SECRET,

redirect_uri=REDIRECT_URI)

#刷新或续期access_token使用

refresh_token = api.exchange_refresh_token_for_access_token(refresh_token=auth_info['refresh_token'])

api = WeixinAPI(access_token=auth_info['access_token'])

#获取用户个人信息

user = api.user(openid=auth_info['openid'])

#检查access_token有效性

v = api.validate_token(openid=auth_info['openid'])

现在就微信登录就完成了

下面是用 flask 实现的完整的例子

from flask importFlask

from flask importMarkup

from flask importredirect

from flask importrequest

from flask importjsonify

from weixin.client importWeixinAPI

from weixin.oauth2 importOAuth2AuthExchangeError

app = Flask(__name__)

APP_ID = 'appid'APP_SECRET = 'app secret'REDIRECT_URI = 'http://localhost.com/authorization'@app.route("/authorization")

defauthorization():

code = request.args.get('code')

api = WeixinAPI(appid=APP_ID,

app_secret=APP_SECRET,

redirect_uri=REDIRECT_URI)

auth_info = api.exchange_code_for_access_token(code=code)

api = WeixinAPI(access_token=auth_info['access_token'])

resp = api.user(openid=auth_info['openid'])

returnjsonify(resp)

@app.route("/login")

deflogin():

api = WeixinAPI(appid=APP_ID,

app_secret=APP_SECRET,

redirect_uri=REDIRECT_URI)

redirect_uri = api.get_authorize_login_url(scope=("snsapi_login",))

returnredirect(redirect_uri)

@app.route("/")

defhello():

return Markup('weixin login!') % '/login'

if __name__ == "__main__":

app.run(debug=True)

参考链接:

python实现网页微信登陆_(转帖)网站微信登录-python 实现相关推荐

  1. python制作网页的步骤_使用httplib模块来制作Python下HTTP客户端的方法

    httplib 是 python中http 协议的客户端实现,可以使用该模块来与 HTTP 服务器进行交互.httplib的内容不是很多,也比较简单.以下是一个非常简单的例子,使用httplib获取g ...

  2. python打印皮卡丘步骤_编程作战丨如何利用python绘制可爱皮卡丘?

    好莱坞真人电影<精灵宝可梦:大侦探皮卡丘>预告片已经发布了,正片将于今年5月10日上映. 如果要做一个「童年梦想排行榜」的话,相信「拥有一只皮卡丘」这个梦想一定会名列前茅! 毕竟,谁不想揉 ...

  3. python打开网页并输入数据_使用Python登陆网站读取表格数据

    近期有经常使用的数据,需要登陆到某个网站,将其中的表格数据读取出来,为了提高效率节省工作时间,决定写一个程序,使用Python自动登陆到该网站然后将某日(参数)的数据读取并存放于excel表格中. 1 ...

  4. python的网页解析器_网页解析器(BeautifulSoup)-- Python

    分享一下关于 Python的网页解析器(BeautifulSoup) BeautifulSoup解析器 为了实现解析器,可以选择使用正则表达式.html.parser.BeautifulSoup.lx ...

  5. python制作网页难吗_怎么做网页制作(用python做网页与html)

    想要做一个大型的网站,必须拥有较强的网站设计能力,而且photoshop.flash.Cool 3d.Gif Animator等网页制作的辅助工具必须都懂,数据库是网站的强大支持,因此,数据也需要懂. ...

  6. python模拟淘宝登陆_【Python】selenium模拟淘宝登录

    # -*- coding: utf-8 -*- from selenium import webdriver from selenium.webdriver.common.by import By f ...

  7. python创建类统计属性_轻松创建统计数据的Python包

    python创建类统计属性 介绍 (Introduction) Sometimes you may need a distribution figure for your slide or class ...

  8. python怎么复数乘方开方_运维必须掌握的 Python 宝典:值得每天复习一遍

    前言 本文旨在更好地总结 Python 基础知识,力求简明扼要,以供实战演练时能够快速查询遗忘的知识点. 学一门语言贵在坚持用它,不用就淡忘了,而记录下一篇文章也有助于日后快速回忆.全文分为两大部分, ...

  9. python转go感觉难_读《我为什么从python转向go》的一些感受

    一开始我以为是一篇2013年的老帖子,没想到竟然是2015年.不懂Python不要乱喷啊.你直接说"我不懂Python,我也不愿意维护前任写的糟糕代码,我Go牛B,所以我要重构一遍!&quo ...

  10. python运用在哪些地方_必看 | 2020年,Python十大应用领域介绍!

    原标题:必看 | 2020年,Python十大应用领域介绍! python作为一门当下极其火爆的编程语言,得到世界范围内无数编程爱好者和开发者喜欢并不是偶然的,除了要比其他编程语言更容易入门,pyth ...

最新文章

  1. 996.icu 不加班的程序员有前途吗?
  2. C#通过工厂模式,我把一大堆if干掉了
  3. 前端学习(2937):vue对象之间的实例属性
  4. Python 中argparse模块的使用
  5. JAVA动态绑定浅析
  6. 免疫算法(Immune Algorithm,IA)实例详解
  7. 如何在手机上快速制作小一寸证件照
  8. Flutter发送表情接收表情库
  9. 阵列天线方向图-均匀直线/平面阵列matlab仿真
  10. 关于Opencv出现的错误“ 0x000007fefdf6a06d (KernelBase.dll) Microsoft C++ 异常的几种尝试解决方式
  11. appcan 文件下载到根目录(pdf)
  12. JavaScript:实现ROT13密码算法(附完整源码)
  13. 计算机睡眠重启后无法识别网络,教您一招解决电脑休眠唤醒后无法使用USB键盘的操作方法...
  14. java下载Excel文件并设置表头内容与下拉框
  15. vue-cli · Failed to download repo vuejs-templates/webpack-simple: tunneling socket could not be esta
  16. 代数基础 | Kronecker积
  17. mac备忘录 英文引号自动转中文引号
  18. Activiti7笔记(二)Activiti7一共涉及到25张表,哪些操作会涉及哪些表,每张表的作用是什么
  19. mysql驱动下载mac
  20. 微信小程序——页面之间传递值

热门文章

  1. python打开rar_使用Python解压zip、rar文件
  2. 中兴新支点操作系统_中兴新支点国产操作系统体验报告:使用流畅,性能稳定!...
  3. 中兴新支点操作系统——背景、徽标大起底
  4. 如何提高团队的研发效率呢?
  5. 日常网页bug页面收集
  6. IPS和IDS的区别
  7. Photoshop脚本 图层的栅格化
  8. 易基因|干货:m6A RNA甲基化MeRIP-seq测序分析实验全流程解析
  9. 多维多重背包问题_多重选择背包问题,multiple choice knapsack problem,音标,读音,翻译,英文例句,英语词典...
  10. 错误变惊喜,10个有趣的404页面设计(转)