专栏首页LIN_ZONEDjango+wechatpy接入微信公众平台以及授权登录

Django+wechatpy接入微信公众平台以及授权登录

  1. 确定Django环境可以正常运行,环境搭建见:Linux 搭建Nginx+uwsgi+Django环境
  2. 安装 wechatpy[cryptography] sudo pip3 install wechatpy[cryptography]
  3. 修改settings.py
    1. 接入微信公众号的连接去掉csrf验证,详情参考:解决Django+Vue前后端分离的跨域问题及关闭csrf验证的后半部分
    2. 在settings.py 加入微信公众号配置 AppID = '' AppSecret = '' Token = ''
  4. 接入
    1. Django接入微信公众号代码 # wx.view代码 from wechatpy.utils import check_signature from back import settings from wechatpy.exceptions import InvalidSignatureException from django.http import HttpResponse from wechatpy import parse_message, create_reply from wechatpy.replies import BaseReply from wechatpy import WeChatClient from wechatpy.oauth import WeChatOAuth from django.shortcuts import redirect import wx.wechat as wx_wechat # 连接微信公众号的方法 def serve(request): # GET 方式用于微信公众平台绑定验证 if request.method == 'GET': signature = request.GET.get('signature', '') timestamp = request.GET.get('timestamp', '') nonce = request.GET.get('nonce', '') echo_str = request.GET.get('echostr', '') try: check_signature(settings.Token, signature, timestamp, nonce) except InvalidSignatureException: echo_str = '错误的请求' response = HttpResponse(echo_str) else: msg = parse_message(request.body) msg_dict = msg.__dict__['_data'] # print(msg.id, msg.source, msg.create_time, msg.type, msg.target, msg.time, msg.__dict__['_data']['Event'], '====') if msg.type == 'text': pass elif msg.type == 'event': if msg_dict['Event'] == 'subscribe': # 关注后 将获取的用户的信息保存到数据库 wx_wechat.subscribe(getWxUserInfo(msg.source)) elif msg_dict['Event'] == 'unsubscribe': # 取关后,将用户的关注状态更改为 未关注 wx_wechat.unsubscribe(msg.source) else: pass response = HttpResponse('', content_type="application/xml") return response def getWxClient(): return WeChatClient(settings.AppID, settings.AppSecret) def getWxUserInfo(openid): wxClient = getWxClient() wxUserInfo = wxClient.user.get(openid) return wxUserInfo def getWeChatOAuth(redirect_url): return WeChatOAuth(settings.AppID, settings.AppSecret, redirect_url) # 定义授权装饰器 def oauth(method): def warpper(request): if request.session.get('user_info', None) is None: code = request.GET.get('code', None) wechat_oauth = getWeChatOAuth(request.get_raw_uri()) url = wechat_oauth.authorize_url if code: try: wechat_oauth.fetch_access_token(code) user_info = wechat_oauth.get_user_info() except Exception as e: print(str(e)) # 这里需要处理请求里包含的 code 无效的情况 # abort(403) else: request.session['user_info'] = user_info else: return redirect(url) return method(request) return warpper @oauth def get_wx_user_info(request): user_info = request.session.get('user_info') return HttpResponse(str(user_info)) # wx.url代码 from django.urls import path from . import views urlpatterns = [ path('wechat/', views.serve), path('user/info', views.get_wx_user_info) ] 这样等后台配置完毕后,就可以通过访问get_wx_user_info方法来获取当前授权登录的用户的信息
    2. 微信后台设置
      1. 参考:接入指南
      2. 微信公众平台后台登录地址
        1. 正式地址
        2. 测试账号地址

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • ubuntu16.04中supervisor安装与简单使用(转载)

    supervisor 可以将每个进程分别写成一个文件,supervisor 的进程文件放在 /etc/supervisor/conf.d/ 目录下,本例创建 t...

    lin_zone
  • ubuntu下安装php扩展

    参考原文地址:http://www.php.cn/php-weizijiaocheng-341528.html

    lin_zone
  • Nginx+PHP环境配置

    注:如需转载请注明出处:https://www.cnblogs.com/zhuchenglin/p/11126373.html

    lin_zone
  • python开发_email_读取邮件头信息

    ===========================================

    Hongten
  • Django 中间件

    中间件就是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出。因为改变的是全局,所以需要谨慎使...

    py3study
  • Django学习(第五天:Django中的MTV模型)

    罗罗攀
  • scrapy的下载器中间件

    2. process_response(request, response, spider) process_response() 必须返回以下之一: ...

    爱撒谎的男孩
  • Python爬虫从入门到放弃(十七)之 Scrapy框架中Download Middleware用法

    这篇文章中写了常用的下载中间件的用法和例子。 Downloader Middleware处理的过程主要在调度器发送requests请求的时候以及网页将respo...

    coders
  • Django 处理http请求之中间件

    中间件“工厂”是一个携带一个可调用get_response参数并返回一个中间件的的可调用对象。中间件则是一个携带request参数并返回一个response的可...

    授客
  • Twitter开源云环境时间序列数据断层检测工具BreakoutDetection

    【编者按】区别于传统环境,鉴于云环境中众多不可预测的因素和异常,其时间序列breakout检测并不容易。近日,Twitter开源了一款基于E-Divisive ...

    CSDN技术头条

扫码关注云+社区

领取腾讯云代金券