首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

微信公众号调教记录(1)—— 后台配置服务器

  • 25-02-16 14:01
  • 2977
  • 5737
blog.csdn.net

文章目录

  • 写在前面
  • 配置后的效果
  • 后台配置过程
    • 公众号后台配置
    • 后台服务搭建
  • 总结与展望

写在前面

最近在探索微信公众号时,发现个人订阅号也支持配置开发接口了,刚好有个服务器,就折腾了一下后台配置,期间遇到一些坑记录一下,给有需要的兄弟参考。如果有兄弟也想复刻一把本文内容,那么你需要提前准备以下内容:

  1. 一台服务器,有公网IP地址,IPv4/IPv6均可,80/443端口未被封禁(有些家用宽带虽然开了IPv6地址,但是80/443端口一般是被运营商封禁的),可以租一台云服务器,【广告位】,当然也有一些厂商提供了免费的服务器(例如serv00.com),但是稳定性不太好;
  2. 有一个微信公众号,并且开通了微信开发者权限;

如果读完本文还有你未解决的问题,请参考 微信官方文档 ,请注意: 官方文档提供的Demo比较老,例如Python示例是基于Python2的,并且对中文消息兼容不太友好,如果你也打算用Python实现,建议参考本文提供的示例,提前避坑。

如果你恰好没有一台服务器,但是也想给自己的公众号引入一些好玩的东西,请先阅读 “配置后的效果” 这一节,然后快速滑到文末,结尾的彩蛋你也许会感兴趣!

配置后的效果

微信公众号本身就具备和用户进行简单的互动,但是存在以下问题:

  1. 只能在后台配置回复规则,并且回复的内容 “十分固定”,用户发送的回复规则必须满足一定条件(例如:关键词回复必须满足匹配规则)才会回复用户,否则要么回复给用户是单一的图文链接,要么用户发送的消息 “石沉大海”,互动体验较差;
  2. 对于后台配置的关键词回复,一旦关键词数量过多,管理维护起来十分复杂,其中无法支持批量修改是一大痛点;

考虑到以上问题,本文以Python3+Flask为例搭建后台服务,实现的效果:

  1. 互动消息统一管理,可灵活定制用户消息自动回复效果;
  2. 支持文本/图片/视频/音乐/语音/图文互动消息类型,理论上后台接口开放的权限应该都是可以支持的,比如设置菜单栏等;

后台配置过程

公众号后台配置

首先进入后台界面,开启开发者权限:路径为 “设置与开发 --> 开发接口管理”,复制出app_id 这个字符串。然后配置服务器信息:点击 “修改配置”,如下图,进入服务器配置界面:
配置服务器后台信息
依次填写:
详细配置界面

  • URL,可以是IP也可以是域名,只能选择http://或者 https://开头,但是不能修改端口,例如“http://your_remote_ip/wechat_msg_server_demo”
  • Token:定义例如“AAAAA”,填写完毕后请记下这个字符串;
  • EncodingAESKey:直接点击 随机生成 按钮即可,填写完毕后也记下这个字符串;
  • 模式选择推荐的安全模式;

配置完成后直接点击提交是保存不了的,需要先把Server端的服务bringup,微信服务器收到了配置服务器的ack消息,才能保存成功,具体见下一节。

后台服务搭建

免责声明!!!
以下示例仅供参考,请勿直接部署到生产环境,否则造成的损失本人不承担任何责任!
以下示例仅供参考,请勿直接部署到生产环境,否则造成的损失本人不承担任何责任!
以下示例仅供参考,请勿直接部署到生产环境,否则造成的损失本人不承担任何责任!

使用pip安装falsk,创建一个app.py文件,写入以下内容:

import time
import xml.etree.cElementTree as ET
from flask import Flask, request, jsonify
from WXBizMsgCrypt import WXBizMsgCrypt


app = Flask(__name__)
dcp = WXBizMsgCrypt(params['token'], params['aes_key'], params['app_id'])
 
@app.route('/wechat_msg_server_demo', methods=['GET', 'POST'])
def wechat_msg_server():
    sMsgSignature = request.args.get("msg_signature", "")
    sSignature = request.args.get("signature", "")
    sTimeStamp = request.args.get("timestamp", '12345')
    sNonce = request.args.get("nonce", "None")
    sEchoStr = request.args.get("echostr", "")

    if request.method == "GET":
        ret, sReplyEchoStr = dcp.VerifyURL(sSignature, sMsgSignature, sTimeStamp, sNonce, sEchoStr)
        if ret == 0: # reply
            return sReplyEchoStr
        else: # error
            print(ret, sReplyEchoStr)
            return "ParseError"
    elif request.method == "POST":
        sReqData = request.get_data()
        ret, sMsg = dcp.DecryptMsg(sReqData, sMsgSignature, sTimeStamp, sNonce)
        if ret == 0:
			xml_tree = ET.fromstring(sMsg)
			print("收到用户发送的消息", xml_tree.find('Content').text)
			# 根据收到用户发送的消息,先加密处理,再回复,这里直接返回用户发送的消息
			str_rpl = xml_tree.find('Content').text
			to_user = xml_tree.find('FromUserName').text
			msg_id = xml_tree.find('MsgId').text
			str_reply = f"""{to_user}]]>\n{你的公众号的原始ID,账号设置中可以查看}]]>\n{str(int(time.time()))}\n\n{str_rpl}]]>\n{msg_id}\n"""
			ret, replyMsg = dcp.EncryptMsg(str_reply, sNonce)
            if ret == 0:
                return replyMsg, 200
            return "", 401
        else:
            print("Error: ret = {}, content = {}".format(ret, sMsg))

        return "", 404

# 处理GET请求
@app.route('/', methods=['GET'])
def get_example():
    return "hello, demo!"

 
if __name__ == '__main__':
	# 注意,开了debug模式,务必不要直接在生产环境开启
    app.run(debug=True, port=80)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53

上面示例代码运行前把代码中的三个参数填充为自己的信息:

  • 开发者ID(AppID)
  • 令牌(Token)
  • 消息加解密密钥 (EncodingAESKey)

通过python app.py运行app,如果打开浏览器访问 http://your_ip_addr,如果能显示出 “hello, demo!”,说明flask框架成功运行。
此时回到后台配置界面,点击“提交”,即可保存成功!配置成功后,点击“启用”按钮,即可实现由服务器处理用户消息的逻辑。
注意:一旦启用服务器处理的逻辑,自动回复中配置的规则将立即失效,请谨慎开启!!!

实例代码中,仅贴出了原封不动转发用户消息的逻辑,实际可以将用户消息处理的逻辑进一步封装,返回想给用户互动的内容;

总结与展望

到这里,已实现基本的互动功能,除了文本互动外,还可以根据用户发送的消息,发送文本/图片/视频/音乐/语音/图文等消息类型,参考 官方文档 。

除了以上玩法,还可以打通百度开发者平台,接入“文心一言”等AI大模型,实现更智能化的交互体验。

完整示例代码将会开源在微信公众号 24K纯学渣 上面,回复关键词 “公众号Server配置demo” 即可获取。

文末彩蛋:如果你没有服务器,但是也想灵活配置自己的微信公众号,笔者将开放自己的服务器能力,转到这里体验与配置,免费白嫖 (删除线不消除,说明还没上线,快去笔者的公众号后台回复 “体验后台配置” kick一下吧,如果有足够多的小伙伴需要,笔者将会开放&上线噢~)

注:本文转载自blog.csdn.net的24K纯学渣的文章"https://blog.csdn.net/qq_42144047/article/details/144802828"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2491) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

121
服务器
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top