微信公众平台接口测试帐号:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login

1,微信提供生成带参数的二维码的接口,参数就是唯一值(场景值,我用的时间戳)

参考 微信文档 生成带参数的二维码

import requestsclass MyWeChatOAuth(object):def get_token(self):"""获取授权跳转地址:return: URL 地址"""url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={}&secret={}".format(self.app_id, self.secret)ret = requests.get(url=url)content = (ret.content).decode("utf-8")js = json.loads(content)print(js)return js.get("access_token")def get_ticket(self):url = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token={}".format(self.get_token())scene_id = int(time.time()*100000)data = {"expire_seconds": 36000,"action_name": "QR_SCENE","action_info": {"scene": {"scene_id": scene_id}}}rep = requests.post(url, json=data)content = (rep.content).decode("utf-8")js = json.loads(content)ticket = js.get("ticket")ret_url = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket={}".format(ticket)print(ret_url)return ret_url

将场景值 scene_id 保存到 redis

2,网站调用微信系统,获取生成的二维码图片

获取到 ret_url 返回给前端 直接显示 二维码图片

用 scene_id 创建一个websocket 连接

3 、微信公众号配置

设置好微信 回调的地址 httl.../wx/ 用户扫码后会请求此地址

注意 配置url时 确保服务器可以访问到 以验证token

def weixin(request):# 自己写的授权print(request.method)body = request.bodyif request.method == "POST":return HttpResponse(body.decode('utf-8'))data = request.GETprint(data)signature = data.get("signature")if not signature:return HttpResponse("dasdfafd")print("sign", signature)timestamp = data.get("timestamp")nonce = data.get("nonce")echostr = data.get("echostr")# token 为用户在微信公众平台自定义tokentoken = "fjklsdjfksdjkflsd"# 将token、timestamp、nonce三个参数进行字典序排序list = [token, timestamp, nonce]list.sort()# 将三个参数字符串拼接成一个字符串进行sha1加密info = "".join(list)sha1 = hashlib.sha1()sha1.update(info.encode())hashcode = sha1.hexdigest()# 比对相同就返回 echostrif hashcode == signature:return HttpResponse(echostr)else:return ""

4、处理推送事件 httl.../wx/

扫描带参数二维码事件

 参考文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140454

代码: 我这里使用到了 werobot

from werobot import WeRoBot
myrobot = WeRoBot()# todo http://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&t=sandbox/index
# todo 账号来自测试账号
myrobot.config["APP_ID"] = "wx8fe512646732596d"
myrobot.config["APP_SECRET"] = "8725fc1e12b9750e3c90a38d3201dec2"
myrobot.token = "fjklsdjfksdjkflsd"
client = myrobot.client# 用户未关注时,进行关注后的事件推
@myrobot.subscribe
def mysubscribe(message):EventKey = message.EventKey# EventKey 无值扫码关注if not EventKey:# .....return ""#  EventKey 有值扫码登录FromUserName = message.FromUserName# todo 通过 FromUserName(openid) 查询用户  如果确定用户使用的unionid 要再通过openid获取到 unionidinfo = client.get_user_info(FromUserName)  # jsonusers = Users.objects.filter(openid=FromUserName)if users.exists():user = users[0]# 用户存在直接返回用户登录信息# send_channel_msg(EventKey, {"user": userinfo,"type":"login"})else:# todo 用户不存在 可以把openid 推送到前端转到注册或绑定页面# send_channel_msg(EventKey, {"openid": FromUserName,"type":"register"})passreturn "text"# 用户已关注时的事件推送
@myrobot.scan
def myscan(message):EventKey = message.EventKeyFromUserName = message.FromUserName# todo 通过 FromUserName(openid) 查询用户  如果确定用户使用的unionid 要再通过openid获取到 unionidinfo = client.get_user_info(FromUserName) # jsonusers = Users.objects.filter(openid=FromUserName)if users.exists():user = users[0]# 用户存在直接返回用户登录信息# send_channel_msg(EventKey, {"user": userinfo,"type":"login"})else:# todo 用户不存在 可以把openid 推送到前端转到注册或绑定页面# send_channel_msg(EventKey, {"openid": FromUserName,"type":"register"})passreturn ""
  • EventKey 场景值 就是上面生成的 scene_id = int(time.time()*100000)
  • 找到 scene_id = EventKey 的websocket连接 把用户的登录信息等发送到前端 实现登录
  • 注: 我使用的是websocket 也可以前端长轮询

python 网站实现扫描二维码关注微信公众号,实现自动登陆相关推荐

  1. 如何在H5页面中实现长按二维码关注微信公众号?

    一.平台 1.微信公众号平台 2.WPS的秀堂H5 3.在线二维码解码器 二.步骤 1.登录"微信公众平台" --> 左侧"设置"中的"公众号设 ...

  2. thinkphp5 获取带参数公众号二维码 以及如何接收二维码参数 微信公众号开发(一)

    // 获取公众号带参数二维码     public function getqrcodeticket($value='')     {         // @header('Content-type ...

  3. 生成有时间限制的二维码_微信公众号渠道二维码怎么制作?监测渠道效果的利器来了...

    每逢营销节点,各种渠道推广少不了,非常时刻需要能够统计不同渠道二维码的数据情况. 微信引流效果好不好怎么判断?新增人数为什么一团乱麻?粉丝又分别是从哪个渠道来的? 用渠道二维码就能搞定这些问题. 一. ...

  4. 浅谈扫描二维码登录微信网页版与摇一摇传图的实现原理

    前言:简单体验了下微信网页版通过二维码登录和摇一摇传图功能,从技术角度看,网上专家吹捧的 [隔空取物]其实并不神秘,我先简单分析一下. 1. 微信移动端扫描二维码登录(C-S-C模式) CSC模式为: ...

  5. 实现微信扫描二维码关注公众号,直接注册登录网站

    互联网时代,不管是以哪种形式存在的应用,移动端或者PC网站,注册登录功能是用户访问应用的第一步,可以说,注册登录用的方不方便在一定程度上能决定用户的去留.对于用户来说,能够越简单,不用动手做过多操作就 ...

  6. 【转】借助第三方支持https协议的存储实现自己网站上扫描二维码安装IOS APP

    使用plist安装,一般是企业级开发者账号不需要登录到APP STORE的IOS设备应用发布时所用到的技巧. 准备: *一台运行着OSX的苹果电脑,最新版的XCODE,用于导出ipa和plist 一个 ...

  7. 扫描二维码打开微信小程序,携带参数,含配置和代码详解

    今天有个新需求,需要用户扫码打开我们小程序,需要携带信息记录邀请人是谁. 废话不多说,我们进入主题,首先要到小程序里面做配置.在开发管理里面,找到开发配置,往下滑到扫普通链接二维码打开小程序配置项里, ...

  8. 微信扫描二维码关注公众号并成为下级

    一.微信公众号配置"服务器配置" https://blog.csdn.net/qq_31267183/article/details/83181157 二.生成带标识符的二维码 1 ...

  9. 扫描二维码启动微信打开特定页面

    问题来源 由于微信引流具备快速性和高效的二次传播性,故众多商家纷纷选择微信推广为主要的推广方式.但在使用微信分享链接和营销方案的过程中经常会遇到分享链接在微信内被拦截的情况,导致引流来的用户由于无法打 ...

最新文章

  1. oracle中master实例,oracle基础(基本介绍)
  2. Jackson解析JavaBean空值不显示问题
  3. python中实例方法与实例属性-Python中的类属性和实例属性以及静态方法和类方法...
  4. JAVA数字处理类使用2
  5. C# XML的序列化与反序列化
  6. CSS 类选择器详解——CSS 多类选择器
  7. 高通收购恩智浦为什么要中国批准?
  8. python爬虫什么意思-网络爬虫是什么(python爬虫有什么用)
  9. VC6.0编译错误解决方法集锦
  10. 百度如何使用Go语言重构日请求量千亿级别的系统?
  11. 【雷达与对抗】【2014.06】荷兰人工育滩工程Sand Motor的X波段雷达深度反演模型研制
  12. PLUTO SDR入门系列之九:强大的开源软件“gnu radio”
  13. 室友哪些不该看的东西被你无意之间看到了?
  14. java 正则表达式匹配冒号_用于匹配与冒号连接的单词对的正则表达式
  15. 测试技术总监需要具备哪些能力
  16. Eureka Client 源码解析
  17. 社区人物志|缪翎:见证开源世界的女性力量
  18. 带固态硬盘的电脑Ubuntu和Windows双系统安装
  19. 关于Springboot定时任务
  20. google code 免费svn服务器使用说明

热门文章

  1. 想学python制作脚本_十分钟利用Python制作属于你自己的个性logo
  2. AI Studio常规赛:量子电路合成之单量子比特门近似(参考题解)
  3. 3星|《我的创业史》:刘强东奋斗史,京东做大前的故事比较有意思
  4. 有哲理的一些话【转】
  5. iOS开发 UILabel 详细介绍(属性+富文本)
  6. CENTOS 7 静态ip设置不成功和解决方法(乱试)
  7. 戴尔微型计算机特性,搭载第十代酷睿,戴尔推出全新XPS 13二合一笔记本
  8. mysql查询成绩最好的十个学生_mysql中一张学生表,查询出单科成绩前十名学生的所有信息 和总分成绩前十名学生的所有信息 在线等...
  9. fpu测试_苹果MacBook Pro 16补充性能测试:更大,更强大
  10. ANDROID PAD模拟器设置