写在前面

本周刚在项目中实现了微信第三方网站扫码登录。因为第一次写相关项目,所以遇到了很多坑。所以写这篇文章是希望像我之前那样的小白也能从容的开发,不要浪费无谓的时间,这篇文章尽量写的详细简单。

准备与注意事项

微信公众平台跟微信开放平台是两个不同的平台,别搞混了。微信公众平台与微信开放平台的区别

微信开放平台里需要创建网站的应用,网上没找到创建网站应用的教程,链接是创建移动应用的教程,大体步骤类似,细节就不啰嗦。

创建之后注意修改回调授权域名,否则会出现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)相关推荐

  1. Django使用Social-Auth实现微信第三方网站扫码登录

    前言 之前让网页公司制作新官网的时候规划有第三方账号的登录功能,但由于当时的一些开放平台申请步骤比较繁琐(尤其是微信开放平台),所以一直拖延着,到了最近只能自己添加相关的功能. 由于是刚接触Pytho ...

  2. Django实现微信第三方网站扫码登录

    前言 之前让网页公司制作新官网的时候规划有第三方账号的登录功能,但由于当时的一些开放平台申请步骤比较繁琐(尤其是微信开放平台),所以一直拖延着,到了最近只能自己添加相关的功能. 由于是刚接触Pytho ...

  3. 彩虹登录聚合中转API程序网站源码「免授权」

    源码下载:彩虹登录聚合中转API程序网站源码「免授权」-小程序文档类资源-CSDN下载 彩虹聚合登录中转API是一个可以实现中转QQ.微信.支付宝.微博.百度等平台的快捷登录接口.有多应用管理.域名限 ...

  4. 美丽乡村建设网站php源码_2020最新亲测php网址导航源码全开源-清爽收录导航网站源码...

    2020最新亲测php网址导航源码全开源-清爽收录导航网站源码 一款轻巧.清爽的php源码,已亲测完整可用,运行十分流畅,网页加载非迅速,源码UI设计漂亮,且功能完整.为响应式设计,兼容各种手机移动端 ...

  5. python写微信小程序源码示例_python实现微信小程序用户登录、模板推送

    python实现微信小程序用户登录.模板推送 来源:中文源码网    浏览: 次    日期:2019年11月5日 [下载文档:  python实现微信小程序用户登录.模板推送.txt ] (友情提示 ...

  6. 基于python的视频监控系统_Python实现微信监控报警系统

    概述: 本文主要分享一下博主在学习wxpy 的过程中开发的一个小程序.博主在最近有一个监控报警的需求需要完成,然后刚好在学习wxpy 这个东西,因此很巧妙的将工作和学习联系在一起. 博文中主要使用到的 ...

  7. python判断性别的源代码_Python 获取微信好友地区、性别、签名信息并将结果可视化...

    序言 我之前在CSDN博客上分享过两篇有关 itchat库的教程, 本篇博客是itchat库系列的第三篇文章,它主要实现的功能是获取微信好友地区.性别.签名信息并将结果可视化 正文 根据itchat库 ...

  8. python微信自动发消息_Python使用微信itchat接口实现查看自己微信的信息功能详解...

    Python使用微信itchat接口实现查看自己微信的信息功能详解 发布时间:2020-09-09 04:20:11 来源:脚本之家 阅读:134 本文实例讲述了Python使用微信itchat接口实 ...

  9. python微信自动发消息_python操作微信自动发消息的实现(微信聊天机器人)

    前言 最近在学习python,发现一个微信自动发消息的小demo感觉很有意思,试了一下,不成功,因为demo中用的是itchat这个库来操作微信,而这个库是通过微信网页版来操作微信的,现在微信网页版已 ...

  10. 用python制作微信机器人程序编写_Python制作微信聊天机器人

    可以借助图灵机器人和itchat插件来模拟机器人聊天. 1.注册图灵机器人账号 在官网注册(http://www.tuling123.com),注册完之后可以创建一个机器人,最终需要机器人的apike ...

最新文章

  1. 自定义配置webpack打包文件
  2. c语言程序代码_10道C语言笔试模拟题,来看看你掌握的怎么样?
  3. 小冰和她的兄弟姐妹们组团出道:唱歌跳舞写文章样样都会,而且都开放版权...
  4. asp.net服务器控件button先执行js再执行后台的方法
  5. Pause/Resume Instance 操作详解 - 每天5分钟玩转 OpenStack(34)
  6. 在有序但含有空的数组中查找字符串
  7. HashMap根据value值排序
  8. 带参的信号、lamda表达式及坐标系统
  9. MAVLink 协议解析之XML定义篇
  10. uni-app微信小程序登录授权
  11. python爬虫今日头条街拍美图开发背景_【Python3网络爬虫开发实战】6.4-分析Ajax爬取今日头条街拍美图...
  12. php curl exec 返回值,php curl_exec函数返回false的解决方法
  13. 数据库:园林软件(综合类题库)
  14. 51单片机8位数码管计时器(汇编语言)
  15. java的体系结构_java体系结构介绍
  16. 流量变现的10种方式
  17. 摸鱼宝典(一)——贪吃蛇游戏改版:贪吃龙 · 双龙戏珠小游戏(Python)
  18. 开放计算十年,西部数据的思考与探索
  19. 苏宁易购网址爬虫爬取商品信息及图片
  20. html方法标签不起作用,Angular中innerHTML标签的样式不起作用的原因解析

热门文章

  1. dev c 编程语言,devc如何自定义头文件并使用
  2. python简明教程_05
  3. python函数中文手册-python手册中文版 python函数中文手册.doc
  4. linux系统镜像官方下载地址
  5. JavaSE学习脑图
  6. RFID课程设计之图书管理系统
  7. 人工智能?你需要了解的内容和AI学习路线
  8. Linux下查看软件安装与安装路径
  9. C语言程序设计的特点
  10. EDA技术实用教程 | 复习四 | 标识符、关键字和规范的书写格式