Django 微信公众号对接开发demo

原创 2017年04月28日 13:30:16
from django.http import HttpResponse
from django.views.decorators.csrf import csrf_exempt
from django.views.generic.base import View
from lxml import etree
from django.utils.encoding import smart_str
import hashlib
import time
from django.template.loader import render_to_string
from django.views.decorators.csrf import ensure_csrf_cookie

# Create your views here.


#csrf_exempt装饰器是取消Django的csrf标记的,毕竟微信不会有这种标记。这次认证通过之后,这个方法你注销了都行,除非你再次认证,不然不会再使用这个方法了。
@csrf_exempt
#如果request提供,它必须是一个HttpRequest。然后,引擎必须将其以及模板中可用的CSRF令牌。
@ensure_csrf_cookie

def weixin(request):

    if request.method == 'GET':
        #下面这四个参数是在接入时,微信的服务器发送过来的参数
        signature = request.GET.get('signature', None)
        timestamp = request.GET.get('timestamp', None)
        nonce = request.GET.get('nonce', None)
        echostr = request.GET.get('echostr', None)

        #这里的token需要自己设定,主要是和微信的服务器完成验证使用
        token = 'WEIXIN_TOKEN'

        #把token,timestamp, nonce放在一个序列中,并且按字符排序
        hashlist = [token, timestamp, nonce]
        hashlist.sort()

        #将上面的序列合成一个字符串
        hashstr = ''.join([s for s in hashlist])

        #通过python标准库中的sha1加密算法,处理上面的字符串,形成新的字符串。
        hashstr = hashlib.sha1(hashstr.encode(encoding='utf-8')).hexdigest()

        #把我们生成的字符串和微信服务器发送过来的字符串比较,
        #如果相同,就把服务器发过来的echostr字符串返回去
        if hashstr == signature:
          return HttpResponse(echostr)

    if request.method == 'POST':
        #将程序中字符输出到非 Unicode 环境(比如 HTTP 协议数据)时可以使用 smart_str 方法
        data = smart_str(request.body)
        print(data)
        #将接收到数据字符串转成xml
        xml = etree.fromstring(data)

        #从xml中读取我们需要的数据。注意这里使用了from接收的to,使用to接收了from,
        #这是因为一会我们还要用这些数据来返回消息,这样一会使用看起来更符合逻辑关系
        fromUser = xml.find('ToUserName').text
        toUser = xml.find('FromUserName').text
        msgType = xml.find('MsgType').text

        #这里获取当前时间的秒数,time.time()取得的数字是浮点数,所以有了下面的操作
        nowtime = str(int(time.time()))

        #加载text.xml模板,参见render()调用render_to_string()并将结果馈送到 HttpResponse适合从视图返回的快捷方式 。
        if msgType =='text':
            content = xml.find('Content').text
            rendered = render_to_string('wechat/text.xml',{'toUser': toUser,'fromUser': fromUser,'nowtime': nowtime,'content': '文本消息,功能正在开发中'})
            return HttpResponse(rendered)
        if msgType =='image':
            rendered = render_to_string('wechat/text.xml',{'toUser': toUser,'fromUser': fromUser,'nowtime': nowtime,'content': '图片消息,功能正在开发中'})
            return HttpResponse(rendered)
        if msgType =='voice':
            rendered = render_to_string('wechat/text.xml',{'toUser': toUser,'fromUser': fromUser,'nowtime': nowtime,'content': '语音消息,功能正在开发中'})
            return HttpResponse(rendered)
        if msgType =='video':
            rendered = render_to_string('wechat/text.xml',{'toUser': toUser,'fromUser': fromUser,'nowtime': nowtime,'content': '视频消息,功能正在开发中'})
            return HttpResponse(rendered)
        if msgType =='shortvideo':
            rendered = render_to_string('wechat/text.xml',{'toUser': toUser,'fromUser': fromUser,'nowtime': nowtime,'content': '小视频消息,功能正在开发中'})
            return HttpResponse(rendered)
        if msgType =='location':
            rendered = render_to_string('wechat/text.xml',{'toUser': toUser,'fromUser': fromUser,'nowtime': nowtime,'content': '地理位置消息,功能正在开发中'})
            return HttpResponse(rendered)
        if msgType =='link':
            rendered = render_to_string('wechat/text.xml',{'toUser': toUser,'fromUser': fromUser,'nowtime': nowtime,'content': '链接消息,功能正在开发中'})
            return HttpResponse(rendered)
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jueyings/article/details/70904211

使用Django进行微信公众号开发

一、微信公众号的准备:1. 注册访问地址:https://mp.weixin.qq.com/ 按照提示注册即可 注意:本文样例使用个人公众号,由于个人公众号没有接口权限,自定义菜单无法进行开发,同...
  • u013205877
  • u013205877
  • 2017-08-26 16:08:56
  • 3891

Django开发微信公众号(5) -- 实现消息的接收与发送

其实这个功能一早就完成了,但是直到今天才有空把它记录下来~~ 准备工作 在正式开始之前,需要做一些准备:     a: 安装好wechat_sdk(怎么安装请看我前面写>);     b:...
  • yuuuuchang
  • yuuuuchang
  • 2017-12-19 21:41:38
  • 414

django搭建微信后台——获取用户信息(7.20)

略坑啊,啃文档啃得要吐了,pythonanywhere上又不好看问题出在哪又跑到本地各种测试才知道原来要授权,又跑去N久之前弄的测试账号,总之各种坑。。。不过总算是弄清楚怎么实现的了...
  • zhu_free
  • zhu_free
  • 2015-07-20 17:50:55
  • 2740

Python利用 Django开发网站

1、创建Django project 1) start project 创建一个文件夹,命名为root(或者自己喜欢的名字),用命令打开文件夹,也就是cd+文件路径: cd /Use...
  • yelin042
  • yelin042
  • 2017-12-29 14:15:34
  • 845

django搭建微信公众号后台——自动回复(7.20)

其实大部分还是依赖开发包,然后这个流程一直没怎么搞清楚所以略坑。
  • zhu_free
  • zhu_free
  • 2015-07-20 14:34:15
  • 1670

Django搭建微信后端(1)---回复消息和自定义菜单

Django wechatpy 搭建微信后端
  • Tangzongyu123
  • Tangzongyu123
  • 2017-07-17 22:57:21
  • 1976

Python3: Django开发微信公众号平台功能测试之普通消息回复

在开发微信公众号平台时,若上层或自己要求实现自动化的消息回复模块功能测试...
  • qq_30213181
  • qq_30213181
  • 2017-10-16 14:44:21
  • 141

Django开发微信公众平台

处理微信发来的信息,实际上就是出来xml的过程,先写xml工具类 # -*- coding:utf-8 -*- from xml.dom import minidom from Web.model.W...
  • linzhichao12345
  • linzhichao12345
  • 2015-03-17 17:34:36
  • 1913

基于python的微信公众号开发

最近想自学服务器方面的知识,用微信公众号开发来练手。阅读了一些文章,实践以后总结一下。 租了腾讯云服务器,操作系统为 Ubuntu Server 14.04.1 LTS 64位,分配了一个公网IP地址...
  • superzmd
  • superzmd
  • 2016-12-07 14:43:54
  • 6203

django后台开发微信小程序

测试要求: 1.通过公众号的自定义菜单转到一个收付费的界面。 在没有足够的权限的情况下,实现的方法有两种, 1)通过测试号,开发微信网页,然后通过菜单绑定网页url进行跳转。(本人正在写这一块,当初没...
  • sinat_30062549
  • sinat_30062549
  • 2017-08-01 13:54:48
  • 3801
收藏助手
不良信息举报
您举报文章:Django 微信公众号对接开发demo
举报原因:
原因补充:

(最多只允许输入30个字)