云计算百科
云计算领域专业知识百科平台

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

文章目录

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

写在前面

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

  • 一台服务器,有公网IP地址,IPv4/IPv6均可,80/443端口未被封禁(有些家用宽带虽然开了IPv6地址,但是80/443端口一般是被运营商封禁的),可以租一台云服务器,【广告位】,当然也有一些厂商提供了免费的服务器(例如serv00.com),但是稳定性不太好;
  • 有一个微信公众号,并且开通了微信开发者权限;
  • 如果读完本文还有你未解决的问题,请参考 微信官方文档 ,请注意: 官方文档提供的Demo比较老,例如Python示例是基于Python2的,并且对中文消息兼容不太友好,如果你也打算用Python实现,建议参考本文提供的示例,提前避坑。

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

    配置后的效果

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

  • 只能在后台配置回复规则,并且回复的内容 “十分固定”,用户发送的回复规则必须满足一定条件(例如:关键词回复必须满足匹配规则)才会回复用户,否则要么回复给用户是单一的图文链接,要么用户发送的消息 “石沉大海”,互动体验较差;
  • 对于后台配置的关键词回复,一旦关键词数量过多,管理维护起来十分复杂,其中无法支持批量修改是一大痛点;
  • 考虑到以上问题,本文以Python3+Flask为例搭建后台服务,实现的效果:

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

    公众号后台配置

    首先进入后台界面,开启开发者权限:路径为 “设置与开发 –> 开发接口管理”,复制出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"""<xml><ToUserName><![CDATA[{to_user}]]></ToUserName>\\n<FromUserName><![CDATA[{你的公众号的原始ID,账号设置中可以查看}]]></FromUserName>\\n<CreateTime>{str(int(time.time()))}</CreateTime>\\n<MsgType><![CDATA[text]]></MsgType>\\n<Content><![CDATA[{str_rpl}]]></Content>\\n<MsgId>{msg_id}</MsgId>\\n</xml>"""
    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)

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

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

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

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

    总结与展望

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

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

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

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

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » 微信公众号调教记录(1)—— 后台配置服务器
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!