Django开发微信公众号 一:链接验证与文本信息回复

前段时间学习了一下Django(python超厉害的WEB开发框架),想着做点什么好呢?就来做个公众号吧,在此记录一下整个开发过程。

一:对接微信公众号,完成验证:

1、开发微信公众号,第一步当然是申请开通公众号,这里就不多说了。本篇主要记录代码调试开发过程

2、测试微信请求验证。

流程引用微信官方的流程图


@csrf_exempt
def weixin_data(request):
    if request.method == "GET":
        test_data(request)
    else:
        print("POST请求")

这里说一下@csrf_exempt:

django为用户实现防止跨站请求伪造的功能,通过中间件 django.middleware.csrf.CsrfViewMiddleware 来完成。而对于django中设置防跨站请求伪造功能有分为全局和局部。

全局:

中间件 django.middleware.csrf.CsrfViewMiddleware

局部:

@csrf_protect,为当前函数强制设置防跨站请求伪造功能,即便settings中没有设置全局中间件。

@csrf_exempt,取消当前函数防跨站请求伪造功能,即便settings中设置了全局中间件。

test_data方法:

上面流程图的实现

signature = request.GET.get('signature', '')
    timestamp = request.GET.get('timestamp', '')
    nonce = request.GET.get('nonce', '')
    echostr = request.GET.get('echostr', '')

    if signature == '' or timestamp == '' or nonce == '' or echostr == '':
        return HttpResponse('error')
    token = '你的TOKEN'
    try:
        list = [token, timestamp, nonce]
        print(list)
        list.sort()
        str_list = str(list[0]) + str(list[1]) + str(list[2])
        hash = hashlib.sha1()
        hash.update(str_list.encode('utf-8'))
        hashcode = hash.hexdigest()
        if hashcode == signature:
            return HttpResponse(echostr)
        else:
            return HttpResponse("error")
    except:
        return HttpResponse("error")

二:实现自动回复文本消息

1、同样是先接收微信发送过来的消息,这次我们需要处理POST请求

@csrf_exempt
def weixin_data(request):
    if request.method == "GET":
        test_data(request)
    else:
        print("POST请求")
        jiexi_data = Analysis(smart_str(request.body))
        repay_data = jiexi_data.jiexi(smart_str(request.body))
        return HttpResponse(repay_data)

2、Analysis:用来处理接收到的信息

from xml.etree import ElementTree as ET
import time


class Analysis:
    def __init__(self, xmlData):
        print("接收到的数据:" + xmlData)

    def jiexi(self, xmlText):
        xmlData = ET.fromstring(xmlText)
        msg_type = xmlData.find('MsgType').text
        if msg_type == 'text':
            text_msg = TextMsg(xmlData)
            return text_msg.repay_data(xmlData)
        elif msg_type == 'image':
            return ImageMsg(xmlData)


class TextMsg:
    def __init__(self, xmlData):
        pass

    def repay_data(self, xmlData):
        # 接受消息的公众号
        ToUserName = xmlData.find('ToUserName').text
        # 粉丝号
        FromUserName = xmlData.find('FromUserName').text

        now_time = int(time.time())
        #组装返回的消息体
        text = """
                 <xml>
                 <ToUserName><![CDATA[{0}]]></ToUserName>
                 <FromUserName><![CDATA[{1}]]></FromUserName>
                 <CreateTime>{2}</CreateTime>
                 <MsgType><![CDATA[text]]></MsgType>
                 <Content><![CDATA[返回的信息]]></Content>
                 </xml>
                 """.format(FromUserName, ToUserName, now_time)
        return text

以上是公众号开发中,验证及接受回复文本消息的实现,过程比较简单,开发过程中不能少了官方开发文档




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值