Django+wechatpy接入微信公众平台以及授权登录
确定Django环境可以正常运行,环境搭建见:Linux 搭建Nginx+uwsgi+Django环境
安装 wechatpy[cryptography]
sudo pip3 install wechatpy[cryptography]
修改settings.py
接入微信公众号的连接去掉csrf验证,详情参考:解决Django+Vue前后端分离的跨域问题及关闭csrf验证的后半部分
在settings.py 加入微信公众号配置
AppID = ''
AppSecret = ''
Token = ''
接入
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方法来获取当前授权登录的用户的信息
微信后台设置
如需转载请注明出处:https://www.cnblogs.com/zhuchenglin/p/10755547.html
Django+wechatpy接入微信公众平台以及授权登录的更多相关文章
- python Django框架接入微信公众平台
1.在接入微信公众平台之前,需要在微信公众平台配置好基本信息,如下: 这个时候点击“提交”按钮,会提示“Token校验失败”,不要着急,这是必然会出现的现象,先不要退出页面,保留各项输入的数据,按第二 ...
- 第二篇 :微信公众平台开发实战Java版之开启开发者模式,接入微信公众平台开发
第一部分:微信公众号对接的基本介绍 一.填写服务器配置信息的介绍 登录微信公众平台官网后,进入到公众平台后台管理页面. 选择 公众号基本设置->基本配置 ,点击“修改配置”按钮,填写服务器地址( ...
- 第三方平台正式支持接入微信公众平台JS-SDK
之前微信公众平台面向开发者开放微信内网页开发工具包,现在第三方平台也能正式支持接入微信公众平台JS-SDK了,第三方平台可以在获得公众号的授权后,通过JS-SDK帮助公众号开发和实现网页业务. 公众号 ...
- 【微信Java开发 --2】接入微信公众平台开发,配置自己的服务器,验证过程
接入微信公众平台开发,开发者需要按照如下步骤完成: 1.填写服务器配置 2.验证服务器地址的有效性 3.依据接口文档实现业务逻辑好我们就开始:1.填写好我们的URL和Token[此处是已经通过验证的] ...
- 1.Node.js 接入微信公众平台开发
一.写在前面的话 Node.js是一个开放源代码.跨平台的JavaScript语言运行环境,采用Google开发的V8运行代码,使用事件驱动.非阻塞和异步输入输出模型等技术来提高性能,可优化应用程 ...
- nodeJS接入微信公众平台开发
一.写在前面的话 Node.js是一个开放源代码.跨平台的JavaScript语言运行环境,采用Google开发的V8运行代码,使用事件驱动.非阻塞和异步输入输出模型等技术来提高性能,可优化应用程 ...
- Java微信公众平台开发(一)--接入微信公众平台
转自:http://www.cuiyongzhi.com/post/38.html (一)接入流程解析 在我们的开发过程中无论如何最好的参考工具当然是我们的官方文档了:http://mp.weixin ...
- Java开发微信公众号(二)---开启开发者模式,接入微信公众平台开发
接入微信公众平台开发,开发者需要按照如下步骤完成: 1.填写服务器配置 2.验证服务器地址的有效性 3.依据接口文档实现业务逻辑 资料准备: 1.一个可以访问的外网,即80的访问端口,因为微信公众号接 ...
- C#/ASP.NET MVC微信公众号接口开发之从零开发(一) 接入微信公众平台
微信公众平台接入:其实很简单,把两个参数(地址和token)填入微信公众平台后台,暂时选择明文模式 ,其中token自己定义.微信服务器会根据后台填写的地址访问,并且带上对于的参数 如 url+&am ...
随机推荐
- Spring Cloud Commons模块
上一篇介绍了 Spring Cloud Context模块 ,本文介绍SpringCloud的另一个基础模块 SpringCloud Commons模块 .只要在项目的pom文件中引入了spring- ...
- Shell中字符串的切割、拼接、比较、替换
[截取] 一.Linux shell 截取字符变量的前8位,有方法如下: expr substr “$a” 1 8 : 二.按指定的字符串截取 第一种方法: ${varible##*string} # ...
- 解析查询 queryString 请求参数的函数
quety string 请求参数 本质上可以理解为一种序列化的格式,与 json 类似,它是一种字典类型的容器,里面可以保存键值对(key-value pair).只不过 querystring 这 ...
- 解决SecureCRT中文版"数据库里没找到防火墙'无'"的错误提示
问题描述: 最近从同事那拷贝到一个中文版的SecureCRT,但是每次打开都会有个防火墙的错误提示,“数据库里没找到防火墙“无”.此会话将尝试不通过防火墙进行连接. 出现这个错误的原因是在Secure ...
- jquery +ajax 上传加预览
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- 重磅发布:阿里 OpenJDK终于开源啦! 将长期支持版本 Dragonwell
前几天的北京阿里云峰会,阿里巴巴正式宣布对外开源 OpenJDK 长期支持版本 Alibaba Dragonwell.作为 Java 全球管理组织 Java Community Process (JC ...
- SpringBoot参数注解
1.@RequestParam有无区别 1.1 @GetMapping("/name/id")public Result managerNameIsRepeat(@RequestP ...
- P4391 [BOI2009]Radio Transmission 无线传输(KMP)
题目描述 给你一个字符串,它是由某个字符串不断自我连接形成的. 但是这个字符串是不确定的,现在只想知道它的最短长度是多少. 输入输出格式 输入格式: 第一行给出字符串的长度,1 < L ≤ 1, ...
- 树链剖分——边权poj2763
边权操作起来也和点权一样,只要把边的权值映射到点上即可,要注意的地方是向上爬的过程中和点权不太一样,还有个特判(WA了几次..) 完整代码 #include<cstring> #inclu ...
- 奇葩最小生成树--->走廊泼水节(tyvj1391)
题目描述 话说,中中带领的OIER们打算举行一次冬季泼水节,当然这是要秘密进行的,绝对不可以让中中知道.不过中中可是老江湖了,当然很快就发现了我们的小阴谋,于是他准备好水枪迫不及待的想要加入我们了. ...