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. 测试账号地址

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

Django+wechatpy接入微信公众平台以及授权登录的更多相关文章

  1. python Django框架接入微信公众平台

    1.在接入微信公众平台之前,需要在微信公众平台配置好基本信息,如下: 这个时候点击“提交”按钮,会提示“Token校验失败”,不要着急,这是必然会出现的现象,先不要退出页面,保留各项输入的数据,按第二 ...

  2. 第二篇 :微信公众平台开发实战Java版之开启开发者模式,接入微信公众平台开发

    第一部分:微信公众号对接的基本介绍 一.填写服务器配置信息的介绍 登录微信公众平台官网后,进入到公众平台后台管理页面. 选择 公众号基本设置->基本配置 ,点击“修改配置”按钮,填写服务器地址( ...

  3. 第三方平台正式支持接入微信公众平台JS-SDK

    之前微信公众平台面向开发者开放微信内网页开发工具包,现在第三方平台也能正式支持接入微信公众平台JS-SDK了,第三方平台可以在获得公众号的授权后,通过JS-SDK帮助公众号开发和实现网页业务. 公众号 ...

  4. 【微信Java开发 --2】接入微信公众平台开发,配置自己的服务器,验证过程

    接入微信公众平台开发,开发者需要按照如下步骤完成: 1.填写服务器配置 2.验证服务器地址的有效性 3.依据接口文档实现业务逻辑好我们就开始:1.填写好我们的URL和Token[此处是已经通过验证的] ...

  5. 1.Node.js 接入微信公众平台开发

    一.写在前面的话   Node.js是一个开放源代码.跨平台的JavaScript语言运行环境,采用Google开发的V8运行代码,使用事件驱动.非阻塞和异步输入输出模型等技术来提高性能,可优化应用程 ...

  6. nodeJS接入微信公众平台开发

    一.写在前面的话   Node.js是一个开放源代码.跨平台的JavaScript语言运行环境,采用Google开发的V8运行代码,使用事件驱动.非阻塞和异步输入输出模型等技术来提高性能,可优化应用程 ...

  7. Java微信公众平台开发(一)--接入微信公众平台

    转自:http://www.cuiyongzhi.com/post/38.html (一)接入流程解析 在我们的开发过程中无论如何最好的参考工具当然是我们的官方文档了:http://mp.weixin ...

  8. Java开发微信公众号(二)---开启开发者模式,接入微信公众平台开发

    接入微信公众平台开发,开发者需要按照如下步骤完成: 1.填写服务器配置 2.验证服务器地址的有效性 3.依据接口文档实现业务逻辑 资料准备: 1.一个可以访问的外网,即80的访问端口,因为微信公众号接 ...

  9. C#/ASP.NET MVC微信公众号接口开发之从零开发(一) 接入微信公众平台

    微信公众平台接入:其实很简单,把两个参数(地址和token)填入微信公众平台后台,暂时选择明文模式 ,其中token自己定义.微信服务器会根据后台填写的地址访问,并且带上对于的参数 如 url+&am ...

随机推荐

  1. Large-Margin Softmax Loss for Convolutional Neural Networks

    paper url: https://arxiv.org/pdf/1612.02295 year:2017 Introduction 交叉熵损失与softmax一起使用可以说是CNN中最常用的监督组件 ...

  2. symfony composer安装

    参考 http://www.symfonychina.com/doc/current/setup.html 用Composer创建Symfony程序 ¶ 若你已安装过Composer,执行create ...

  3. git自动部署到服务器

    1.现在服务器配置空仓库 mkdir -p test/project.git chmod 777 test cd test/project.git/ git init --bare . cd .. c ...

  4. JS一直是单线程,异步(定时器,ajax请求等)是由浏览器来实现的!(转)

    原文地址:https://www.cnblogs.com/woodyblog/p/6061671.html 1.自己画的一张示意图 2.DOM一变化,界面就立刻重新渲染,效率必然很低,所以浏览器的机制 ...

  5. Python迭代器、生成器

    迭代器 iterator # 只要是能被for循环的数据类型 就一定拥有__iter__方法 # 迭代器多了的方法 print(set(dir([].__iter__()))-set(dir([])) ...

  6. wx:for获取 data-xxx 自定义的属性

    今天在写wx:for循环时,在事件对象上e.target.dataset上一直拿不到自定义属性 data-id. 示例: <view wx:for='{{list}}' wx:key='{{it ...

  7. 利用阿里云搭建frp实现外网远程桌面链接内网电脑

    主要应用场景:针对学生放假回家使用外网无法远程操作学校的服务器或者电脑,这里通过阿里云的云服务器搭建一个frp服务,实现内网穿透,从而可以直接通过远程桌面或者其他工具实现对校园网内的服务器或者电脑进行 ...

  8. UOJ#7. 【NOI2014】购票 点分治 斜率优化 凸包 二分

    原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ7.html 题解 这题是Unknown的弱化版. 如果这个问题出在序列上,那么显然可以CDQ分治 + 斜率 ...

  9. java精确计算、精确计算工具类

    java精确计算 package org.aisino.erp.webservice.dzfp.util; import java.math.BigDecimal; public class Math ...

  10. git clean 删除忽略文件 和 未被跟踪文件及文件夹

    git clean 删除忽略文件 和 未被跟踪文件及文件夹 概念 首先我们需要认清 忽略的文件 和 未被跟踪的文件 忽略的文件:.gitignore 中忽略的文件 未被跟踪的文件:没有被忽略,但是还没 ...