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

2023-06-0516:56:14后端程序开发Comments1,138 views字数 2757阅读模式

Django之微信公众号开发接入三步设置文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/44929.html

要开发微信公众号,首先需要和微信公众号做接入,实现数据间的交互。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/44929.html

接入微信公众平台开发需要按照如下步骤完成:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/44929.html

1、填写服务器配置文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/44929.html

2、验证服务器地址的有效性文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/44929.html

3、依据接口文档实现业务逻辑文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/44929.html

第一步:填写服务器配置

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

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

Django之微信公众号开发接入三步设置文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/44929.html

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

开发者提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上,GET请求携带参数如下表所示:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/44929.html

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

开发者通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。加密/校验流程如下:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/44929.html

1)将token、timestamp、nonce三个参数进行字典序排序文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/44929.html

2)将三个参数字符串拼接成一个字符串进行sha1加密文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/44929.html

3)开发者获得加密后的字符串可与signature对比,标识该请求来源于微信文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/44929.html

第三步 准备好服务器进入开发文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/44929.html

创建django应用配置好外网访问,这里直接上代码和效果文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/44929.html

#views.py文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/44929.html

# -*- 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增加一条记录文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/44929.html

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

测试文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/44929.html

最终形成的服务端地址http://xxxx.com.cn/djwechat,填进第一步服务器配置地址里。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/44929.html

提交成功即说明正确。接下来进行测试,实现与微信公众号的交互。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/44929.html

Django之微信公众号开发接入三步设置文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/44929.html

如果配置不正确出现失败时,会提醒:“该公众号提供的服务出现故障,请稍后再试”文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/44929.html

成功的的时候它就会反馈预制的内容。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/44929.html

写在最后文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/44929.html

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

WeChatpy地址文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/44929.html

https://www.wechatpy.org/
文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/44929.html
  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/bc/44929.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定