Python+Django开发微信公众号后台

源代码Github地址:https://github.com/2637977081/workspace-django/tree/master/HelloWorld

一、微信公众号注册配置

1、进入https://mp.weixin.qq.com注册账号密码,(个人开发)选择订阅号

2、注册成功后,进入管理页面=》开发=》基本配置

公众号开发信息
1、开发者ID(AppID)
开发者ID是公众号开发识别码,配合开发者密码可调用公众号的接口能力。

2、开发者密码(AppSecret)重置 【生成后复制保存】
开发者密码是校验公众号开发者身份的密码,具有极高的安全性。切记勿把密码直接交给第三方开发者或直接存储在代码中。如需第三方代开发公众号,请使用授权方式接入。

3、IP白名单查看
通过开发者ID及密码调用获取access_token接口时,需要设置访问来源IP为白名单。

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
服务器配置(已启用)
1、服务器地址(URL) 服务器api接口

2、令牌(Token) 自定义,这里token验证的时候需要你提供的服务器URL【api】可以访问,这在Python部分会讲述

3、消息加解密密钥(EncodingAESKey) 加密秘钥

4、消息加解密方式 建议直接使用明文模式,不需要使用到加密秘钥

二、Python+Django

1、创建Django项目以及接口

1、接口需要满足token验证 get请求

2、接口需要满足我们公众号平台的简单回复响应    post请求

所以我们接口格式应该是这个样子:
if request.method == 'GET':
    # token 验证
    xxxx
elif request.method == 'POST':
    # 公众号业务逻辑消息处理
    xxx

2、token验证,微信平台会发生get请求到服务url上,我们需要对其校验返回。完成这部分代码开发后,我们就可以完成token验证了

接收参数:signature、echostr、timestamp、nonce
hash加密规则(python3):【这部分代码是根据腾讯api及网上查询修改的,吐槽腾讯api文档】

    def token_verification(token, timestamp, nonce):
		list = [token, timestamp, nonce]
		list.sort()
		sha1 = hashlib.sha1()
		sha1.update(list[0].encode('utf-8'))
		sha1.update(list[1].encode('utf-8'))
		sha1.update(list[2].encode('utf-8'))
		hashcode = sha1.hexdigest()
		return hashcode


我们需要验证返回的hashcode,验证成功返回echostr,这样可以校验成功token
	
	if hashcode==signature:
        message = echostr
    return HttpResponse(message)

3、初始化对象

使用wechat_sdk,Django版本:
	from wechat_sdk import WechatBasic
	
初始化:
	WECHAT_TOKEN = '你服务配置的token'
	WEIXIN_APPID = '公众号平台上的多appid'
	WEIXIN_APPSECRET = '生成的秘钥'
	wechat = WechatBasic(token=WECHAT_TOKEN, appid=WEIXIN_APPID,appsecret=WEIXIN_APPSECRET)

4、接收消息

【还有其它如ShortVideoMessage、LinkMessage、LinkMessage、EventMessage等】    
    from wechat_sdk.messages import TextMessage, ImageMessage, VoiceMessage, VideoMessage,LocationMessage
【注】
	文本类我们可以直接接收context内容处理
	媒体类我们使用mediaId可以指明缓存数据,用于下载或者上传
	
使用wechat的jdk转换数据
    wechat.parse_data(data=request.body)
    message = wechat.get_message()
    if isinstance(message, TextMessage):# isinstance 可以比较两个对象,用于识别message是什么类型数据
        xx业务逻辑xx

5、返回消息

【注】同接收消息
	文本类我们可以直接发送context内容处理
	媒体类我们使用mediaId可以指明缓存数据
result  = wechat.response_text(context)
result = wechat.response_image(mediaId)

最终返回http响应类型为xml
return HttpResponse(result, content_type='application/xml

6、上传下载图片

上传照片
    img = open(path, 'rb')
    we_img = wechat.upload_media(media_file=img, media_type='image')

下载照片
    we_img_bytes=wechat.download_media(we_img['media_id'])
    bytes_stream = BytesIO(we_img_bytes.content)
    img_file = Image.open(bytes_stream)

三、踩坑

1、token验证失败

检查服务器url是否有效,是否返回进行token验证,是否返回echostr

2、Invalid HTTP_HOST header

Invalid HTTP_HOST header: 'xxx'. You may need to add 'xx' to ALLOWED_HOSTS.

在settings.py中添加 ALLOWED_HOSTS = ['xxxx']

3、ip禁止

wechat_sdk.exceptions.OfficialAPIError: 40164: invalid ip xxx ipv6 ::ffff:xxx, not in whitelist hint: [Qv4aVa0443e508]

ip禁止,将该ip地址添加到白名单中

 

### 微信公众号美食列表功能的实现 #### 一、准备工作 为了实现在微信公众号中的美食列表功能,开发者需先获取微信公众平台账号并完成认证。准备好开发环境,安装必要的开发工具如微信开发者工具等[^1]。 #### 二、前端页面设计 采用HTML5、CSS3以及JavaScript来创建响应式的网页布局,用于展示美食条目。可以借鉴微信小程序的设计理念,比如使用卡片式布局显示每道菜的信息,包括名称、描述、价格及图片等内容。对于更复杂的交互需求,则可考虑引入Vue.js或React框架辅助开发[^2]。 #### 三、后端服务搭建 构建服务器端API接口,负责处理来自客户端的数据请求和服务逻辑运算。可以选择Node.js配合Express框架快速搭建RESTful风格的服务;也可以选用Python Flask/Django作为后台支撑。确保能够提供如下几个主要的功能模块: - **菜品管理**:增删改查各类菜肴详情; - **分类检索**:按照不同类别筛选查询特定类型的食品; - **用户互动**:支持访客提交评论留言给商家反馈意见。 ```javascript // Node.js Express 示例代码片段 const express = require('express'); const app = express(); app.get('/api/foods', (req, res) => { const foodsData = [ { id: '001', name: "宫保鸡丁", price: 28 }, { id: '002', name: "鱼香肉丝", price: 26 } ]; res.json(foodsData); }); app.listen(3000, () => console.log('Server running on port 3000')); ``` #### 四、数据存储方案 针对具体应用场景选取合适的关系型数据库(MySQL/PostgreSQL)或是NoSQL解决方案(MongoDB),用来持久化保存菜单项及其关联属性。如果希望进一步降低运维成本和技术门槛的话,还可以尝试腾讯云提供的CloudBase云开发产品线下的Database能力。 #### 五、安全机制设置 考虑到网络传输过程中的信息安全问题,在实际部署过程中应当启用HTTPS协议加密通信链路,并且遵循OAuth2.0授权标准保护用户的隐私权益不受侵犯。同时注意防范XSS跨站脚本攻击和CSRF伪造请求漏洞风险点。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值