美文网首页
Django2.2 开发微信公众号

Django2.2 开发微信公众号

作者: 宁大通信狗 | 来源:发表于2019-06-04 19:00 被阅读0次

1.说明

本文将上传微信公众号自动回复消息的部分代码,并作简要的说明。在网上查了很多文章,里面的代码多多少少都有问题,所以这里上传自己的代码。

2.正文

1)创建Django项目(我将它命名为wechat)并创建APP(我将它命名为robot)

2)配置路由

/wechat/wechat/urls.py代码如下:

from django.contrib import admin
from django.urls import path

import robot.views as rv

urlpatterns = [
    path('admin/', admin.site.urls),
    path('message/', rv.message),
]

3)创建xml模板文件,便于返回xml格式的结果

/wechat/templates/reply_text.xml代码如下:

<xml>
    <ToUserName><![CDATA[{{toUser}}]]></ToUserName>
    <FromUserName><![CDATA[{{fromUser}}]]></FromUserName>
    <CreateTime>{{createTime}}</CreateTime>
    <MsgType><![CDATA[text]]></MsgType>
    <Content><![CDATA[{{content}}]]></Content>
</xml>

4)编写主要功能

/wechat/robot/views.py代码如下:

from django.shortcuts import render
from django.http import HttpResponse
import hashlib
from xml.etree.ElementTree import fromstring


# Create your views here.
def message(request):
    if request.method == 'GET':
        if __verify(request.GET):
            echostr = request.GET.get('echostr')
            return HttpResponse(echostr)
        else:
            return HttpResponse("Access failed!")

    elif request.method == 'POST':
        try:
            if not __verify(request.GET):
                return HttpResponse("Access failed!")

            # openid = request.GET.get('openid')
            xml_data = fromstring(request.body)

            from_user = xml_data.find('ToUserName').text
            to_user = xml_data.find('FromUserName').text
            create_time = xml_data.find('CreateTime').text
            msg_type = xml_data.find('MsgType').text
            # msg_id = xml_data.find('MsgId').text
            if msg_type == 'text':
                content = xml_data.find('Content').text
                r_content = '[人工智障]:'+content
                c = {'toUser': to_user, 'fromUser': from_user, 'createTime': create_time, 'content': r_content}
                return render(request, 'reply_text.xml', context=c)
            else:
                pass
        except Exception as e:
            print(e)


def __verify(req_get):
    token = '你的token'
    signature = req_get.get('signature')
    timestamp = req_get.get('timestamp')
    nonce = req_get.get('nonce')
    s = [timestamp, nonce, token]
    s.sort()  # 字典序排序
    s = ''.join(s)  # 将列表转成字符串
    sha1 = hashlib.sha1()
    sha1.update(s.encode("utf8"))  # 将s变量utf8编码后加密
    return sha1.hexdigest() == signature

在验证token这一步,我查了很多文章,没一个能用的。后来发现问题出在没有进行utf8编码上,可能是因为我用的是Linux,所以才会存在这个问题。

相关文章

  • Django2.2 开发微信公众号

    1.说明 本文将上传微信公众号自动回复消息的部分代码,并作简要的说明。在网上查了很多文章,里面的代码多多少少都有问...

  • 微信开发

    微信开发 公众号开发 微信WEB开发 JSSDK 小程序开发 公众号开发 公众号 订阅号 服务号 企业号 公众号开...

  • 微信公众号开发 (4) 网页授权

    一、前言 微信公众号开发 (1) 微信接入认证成为开发者 微信公众号开发 (2) 消息处理 微信公众号开发 (3)...

  • 微信公众号开发:微信服务号和订阅号的区别!

    微信开发又称微信公众平台开发、或微信公众号开发,分为微信服务号、微信订阅号、以及微信企业号,其中服务号和订阅号是企...

  • PHP微信公众号支付开发总结

    微信公众号开发是很常见的开发,其中微信支付占有很大的比重。微信公众号分为服务号和订阅号,服务号支持微信支付。 前期...

  • 基于JavaEE——微信网页(二)微信开发

    微信开发测试公众号(沙盒号) 微信API帮助文档 微信接口在线调试 首先申请微信开发的测试公众号,登陆后会看到微信...

  • 1 - 简介

    微信公众号开发 又称微信公众号二次开发。可以将公众账号由一个媒体型营销工具转化成提供服务的产品。 微信公众号开发的...

  • 微信公众号开发 (3) 菜单处理

    一、前言 微信公众号开发 (1) 微信接入认证成为开发者 微信公众号开发 (2) 消息处理 本文将实现 根据App...

  • 微信服务器接入

    这几天正在学习微信公众号开发,后台JAVA基于SSM框架对微信公众号进行开发。 微信公众平台“基本配置”。详细请参...

  • 微信公众号开发:获取openId和用户信息

    title: 微信公众号开发:获取openId和用户信息 tags: 微信公众号 categories: 笔记 ...

网友评论

      本文标题:Django2.2 开发微信公众号

      本文链接:https://www.haomeiwen.com/subject/trvrxctx.html