Django之微信公众号开发接入三步设置

图片

要开发微信公众号,首先需要和微信公众号做接入,实现数据间的交互。

接入微信公众平台开发需要按照如下步骤完成:

1、填写服务器配置

2、验证服务器地址的有效性

3、依据接口文档实现业务逻辑

第一步:填写服务器配置

登录微信公众平台官网后,在公众平台官网的开发-基本设置页面,勾选协议成为开发者,点击“修改配置”按钮,填写服务器地址(URL)、Token和EncodingAESKey,其中URL是开发者用来接收微信消息和事件的接口URL。Token可由开发者可以任意填写,用作生成签名(该Token会和接口URL中包含的Token进行比对,从而验证安全性)。EncodingAESKey由开发者手动填写或随机生成,将用作消息体加解密密钥。

同时,开发者可选择消息加解密方式:明文模式、兼容模式和安全模式。模式的选择与服务器配置在提交后都会立即生效,请开发者谨慎填写及选择。加解密方式的默认状态为明文模式,选择兼容模式和安全模式需要提前配置好相关加解密代码,详情请参考消息体签名及加解密部分的文档 。

图片

第二步:验证消息的确来自微信服务器

开发者提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上,GET请求携带参数如下表所示:

参数 描述
signature 微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
timestamp 时间戳
nonce 随机数
echostr 随机字符串

开发者通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。加密/校验流程如下:

1)将token、timestamp、nonce三个参数进行字典序排序

2)将三个参数字符串拼接成一个字符串进行sha1加密

3)开发者获得加密后的字符串可与signature对比,标识该请求来源于微信

第三步 准备好服务器进入开发

创建django应用配置好外网访问,这里直接上代码和效果

#views.py

# -*- coding: utf-8 -*-
from django.shortcuts import renderimport hashlibimport requestsimport xmltodictfrom django.http.response import HttpResponse@csrf_exemptdef djwechat(request):if request.method == 'GET':        signature = request.GET.get('signature','')        print('test',signature)        timestamp = request.GET.get('timestamp', '')        nonce = request.GET.get('nonce', '')        echo_str = request.GET.get('echostr', '')        token='你的token'        # ckeck_res = signature_check(WECHAT_TOKEN,  timestamp, nonce)        hashlist = [token, timestamp, nonce]        hashlist.sort()        list2 = ''.join(hashlist)        sha1 = hashlib.sha1()        sha1.update(list2.encode('utf-8'))        hashcode = sha1.hexdigest()print(hashcode,"rrr",signature)if hashcode == signature:return HttpResponse(echo_str, content_type="text/plain")else:return HttpResponse('error', content_type="text/plain")    elif request.method == 'POST':        dict_xml = request.body.decode('utf-8')        xmlData = xmltodict.parse(dict_xml)        msg_type = xmlData['xml']['MsgType']        if msg_type == 'text':            resp_data = {"xml": {"ToUserName": xmlData['xml']['FromUserName'],"FromUserName": xmlData['xml']['ToUserName'],"CreateTime": int(time.time()),"MsgType": 'news',"ArticleCount": 1,"Articles": {"item": {"Title": "Python与Django历史发布的文章","Description": "查阅历史消息请直接点击","PicUrl": "http://wx.qlogo.cn/mmhead/Q3auHgzwzM6nwqlzLmsK41HXF7Y7qiccib5T9uicNCByWdibEv8t46Hsag/132","Url": "https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz=MzAwNjE5MTE3Mw==&scene=124#wechat_redirect"                            }                        },                        }            }            xmltodict.unparse(resp_data)            response = HttpResponse(xmltodict.unparse(resp_data), content_type="text/plain")return response

在url增加一条记录

path('djwechat', views.djwechat, name='djwechat'),#python与django学习

测试

最终形成的服务端地址http://xxxx.com.cn/djwechat,填进第一步服务器配置地址里。

提交成功即说明正确。接下来进行测试,实现与微信公众号的交互。

图片

如果配置不正确出现失败时,会提醒:“该公众号提供的服务出现故障,请稍后再试”

成功的的时候它就会反馈预制的内容。

写在最后

不过也有专门开发微信公众号和小程序的python第三方包,我推荐使用wechatpy,里边功能齐全,初学者可以结合第三方包和自己写的去学习,第三方包有些地方不够灵活。接下来我将使用django和一些常规包写微信公众号相关的开发,包括网页以及小程序开发。

WeChatpy地址

https://www.wechatpy.org/
THE END