python 微信扫码登录_python实现微信第三方网站扫码登录(Django)
写在前面
本周刚在项目中实现了微信第三方网站扫码登录。因为第一次写相关项目,所以遇到了很多坑。所以写这篇文章是希望像我之前那样的小白也能从容的开发,不要浪费无谓的时间,这篇文章尽量写的详细简单。
准备与注意事项
微信公众平台跟微信开放平台是两个不同的平台,别搞混了。微信公众平台与微信开放平台的区别
微信开放平台里需要创建网站的应用,网上没找到创建网站应用的教程,链接是创建移动应用的教程,大体步骤类似,细节就不啰嗦。
创建之后注意修改回调授权域名,否则会出现scope参数错误或没有scope权限错误。注意里面的域名格式,例如www.qq.com,不要加http
准备好微信开放平台的APPID和APPSECRET两个参数。参数在微信开放平台中查看。
开发时使用到的python第三方库requests
开发
二维码授权链接
https://open.weixin.qq.com/connect/qrconnect?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
其中的
APPID = '你的APPID'
APPSECRET = '你的APPSECRET'
REDIRECT_URL = '指向微信登录的处理函数,例如django的view地址,注意URL必须编码'
SCOPE = 'snsapi_login'
STATE = '不是必须的,作用时重定向后会带上state参数,开发者可以填写a-zA-Z0-9的参数值,最多128字节,'
我刚写的网站的例子,可以帮忙点一下增加下注册量(笑),点开链接可以看具体的参数。
https://open.weixin.qq.com/co...
不知道现在工作的网站会不会倒闭,防止链接失效,就再付一个一号店的链接吧。同样可以点进去看相关参数。
https://open.weixin.qq.com/co...
下面就是处理授权时的函数了
class WeiXinLogin(View):
appid = 'wxe0d95453c412f118' # 你自己的
appsecret = 'd785bt925fbc7ebed62734cfdpe5951c' # 你自己的
code = ''
state = ''
# 为了方便大家看,我都写在一个函数里
def get_info(self):
# 第一步获取code跟state
try:
self.code = self.request.GET.get("code")
self.state = self.request.GET.get("state")
except Exception, e:
add_log.info("获取code和stat参数错误:\n%s" % str(traceback.format_exc()))
# 2.通过code换取网页授权access_token
try:
url = u'https://api.weixin.qq.com/sns/oauth2/access_token'
params = {
'appid': self.appid,
'secret': self.appsecret,
'code': self.code,
'grant_type': 'authorization_code'
}
res = requests.get(url, params=params).json()
access_token = res["access_token"] # 只是呈现给大家看,可以删除这行
openid = res["openid"] # 只是呈现给大家看,可以删除这行
except Exception, e:
add_log.info("获取access_token参数错误:\n%s" % str(traceback.format_exc()))
raise Http404()
# 3.如果access_token超时,那就刷新
# 注意,这里我没有写这个刷新功能,不影响使用,如果想写的话,可以自己去看文档
# 4.拉取用户信息
try:
user_info_url = u'https://api.weixin.qq.com/sns/userinfo'
params = {
'access_token': res["access_token"],
'openid': res["openid"],
}
res = requests.get(user_info_url, params=params).json()
"""
注意,这里有个坑,res['nickname']表面上是unicode编码,
但是里面的串却是str的编码,举个例子,res['nickname']的返回值可能是这种形式
u'\xe9\x97\xab\xe5\xb0\x8f\xe8\x83\x96',直接存到数据库会是乱码.必须要转成
unicode的编码,需要使用
res['nickname'] = res['nickname'].encode('iso8859-1').decode('utf-8')
这种形式来转换.
你也可以写个循环来转化.
for value in res.values():
value = value.encode('iso8859-1').decode('utf-8')
"""
except Exception, e:
add_log.info("拉取用户信息错误:\n%s" % str(traceback.format_exc()))
# 保存到数据库及登录
# 返回的数据全部在res字典中
剩下就要看不同项目的第三方登录的表是怎么设计的了.主要的思路是维护一张第三方登录的表,把以后第三方登录的信息都放在里面,设计思路可以借鉴廖雪峰的文章.
设计一个可扩展的用户登录系统 (1)
设计一个可扩展的用户登录系统 (2)
设计一个可扩展的用户登录系统 (3)
注意,判断登录的时候是验证该用户的unionid,不是openid,因为如果你的网站还有微信公众平台的微信授权的话,同一用户
使用你的微信公众平台跟微信开放平台登录之后,两次的openid是不一样的,但是unionid是唯一的.
关于UnionID机制
请注意,网页授权获取用户基本信息也遵循UnionID机制。即如果开发者有在多个公众号,或在公众号、移动应用之间统一用户帐号的需求,需要前往微信开放平台(open.weixin.qq.com)绑定公众号后,才可利用UnionID机制来满足上述需求。
UnionID机制的作用说明:如果开发者拥有多个移动应用、网站应用和公众帐号,可通过获取用户基本信息中的unionid来区分用户的唯一性,因为同一用户,对同一个微信开放平台下的不同应用(移动应用、网站应用和公众帐号),unionid是相同的。
PyChina将联合JetBrain(出品PyCharm的公司)一起在北京举办一次Python沙龙活动。
时间:11月26日晚上19:00-21:00
地点:科技寺北新桥 北京市东城区东四北大街107号科林大厦B座107室(近北新桥地铁站)
欢迎大家报名参加本次活动,特别需要志愿者来帮忙组织本次活动。
python 微信扫码登录_python实现微信第三方网站扫码登录(Django)相关推荐
- Django使用Social-Auth实现微信第三方网站扫码登录
前言 之前让网页公司制作新官网的时候规划有第三方账号的登录功能,但由于当时的一些开放平台申请步骤比较繁琐(尤其是微信开放平台),所以一直拖延着,到了最近只能自己添加相关的功能. 由于是刚接触Pytho ...
- Django实现微信第三方网站扫码登录
前言 之前让网页公司制作新官网的时候规划有第三方账号的登录功能,但由于当时的一些开放平台申请步骤比较繁琐(尤其是微信开放平台),所以一直拖延着,到了最近只能自己添加相关的功能. 由于是刚接触Pytho ...
- 彩虹登录聚合中转API程序网站源码「免授权」
源码下载:彩虹登录聚合中转API程序网站源码「免授权」-小程序文档类资源-CSDN下载 彩虹聚合登录中转API是一个可以实现中转QQ.微信.支付宝.微博.百度等平台的快捷登录接口.有多应用管理.域名限 ...
- 美丽乡村建设网站php源码_2020最新亲测php网址导航源码全开源-清爽收录导航网站源码...
2020最新亲测php网址导航源码全开源-清爽收录导航网站源码 一款轻巧.清爽的php源码,已亲测完整可用,运行十分流畅,网页加载非迅速,源码UI设计漂亮,且功能完整.为响应式设计,兼容各种手机移动端 ...
- python写微信小程序源码示例_python实现微信小程序用户登录、模板推送
python实现微信小程序用户登录.模板推送 来源:中文源码网 浏览: 次 日期:2019年11月5日 [下载文档: python实现微信小程序用户登录.模板推送.txt ] (友情提示 ...
- 基于python的视频监控系统_Python实现微信监控报警系统
概述: 本文主要分享一下博主在学习wxpy 的过程中开发的一个小程序.博主在最近有一个监控报警的需求需要完成,然后刚好在学习wxpy 这个东西,因此很巧妙的将工作和学习联系在一起. 博文中主要使用到的 ...
- python判断性别的源代码_Python 获取微信好友地区、性别、签名信息并将结果可视化...
序言 我之前在CSDN博客上分享过两篇有关 itchat库的教程, 本篇博客是itchat库系列的第三篇文章,它主要实现的功能是获取微信好友地区.性别.签名信息并将结果可视化 正文 根据itchat库 ...
- python微信自动发消息_Python使用微信itchat接口实现查看自己微信的信息功能详解...
Python使用微信itchat接口实现查看自己微信的信息功能详解 发布时间:2020-09-09 04:20:11 来源:脚本之家 阅读:134 本文实例讲述了Python使用微信itchat接口实 ...
- python微信自动发消息_python操作微信自动发消息的实现(微信聊天机器人)
前言 最近在学习python,发现一个微信自动发消息的小demo感觉很有意思,试了一下,不成功,因为demo中用的是itchat这个库来操作微信,而这个库是通过微信网页版来操作微信的,现在微信网页版已 ...
- 用python制作微信机器人程序编写_Python制作微信聊天机器人
可以借助图灵机器人和itchat插件来模拟机器人聊天. 1.注册图灵机器人账号 在官网注册(http://www.tuling123.com),注册完之后可以创建一个机器人,最终需要机器人的apike ...
最新文章
- 自定义配置webpack打包文件
- c语言程序代码_10道C语言笔试模拟题,来看看你掌握的怎么样?
- 小冰和她的兄弟姐妹们组团出道:唱歌跳舞写文章样样都会,而且都开放版权...
- asp.net服务器控件button先执行js再执行后台的方法
- Pause/Resume Instance 操作详解 - 每天5分钟玩转 OpenStack(34)
- 在有序但含有空的数组中查找字符串
- HashMap根据value值排序
- 带参的信号、lamda表达式及坐标系统
- MAVLink 协议解析之XML定义篇
- uni-app微信小程序登录授权
- python爬虫今日头条街拍美图开发背景_【Python3网络爬虫开发实战】6.4-分析Ajax爬取今日头条街拍美图...
- php curl exec 返回值,php curl_exec函数返回false的解决方法
- 数据库:园林软件(综合类题库)
- 51单片机8位数码管计时器(汇编语言)
- java的体系结构_java体系结构介绍
- 流量变现的10种方式
- 摸鱼宝典(一)——贪吃蛇游戏改版:贪吃龙 · 双龙戏珠小游戏(Python)
- 开放计算十年,西部数据的思考与探索
- 苏宁易购网址爬虫爬取商品信息及图片
- html方法标签不起作用,Angular中innerHTML标签的样式不起作用的原因解析