微信公眾平台開放接口後,開發者可快速接入微信生態。本文以輕量級 Bottle 框架為例,演示如何處理微信服務器驗證、消息接收與回覆,並附帶完整可運行代碼。
signature、timestamp、nonce、echostr 參數,需原樣返回 echostr。FromUserName、ToUserName、Content 等字段,構造回覆 XML 返回。注意:微信不提供本地開發環境,需部署到公網服務器調試,但接口極簡,幾次測試即可定型。
# -*- coding: utf-8 -*-
from bottle import debug, default_app, run, get, post, request
import sys, os, time, libxml2dom
@get('/')
def index():
"""微信服務器驗證:直接返回 echostr"""
return request.GET.get('echostr')
@post('/')
def index_post():
"""接收並回覆微信消息"""
for key, value in request.POST.allitems():
doc = libxml2dom.parseString(key)
to_user = doc.xpath('//FromUserName')[0].textContent
from_user = doc.xpath('//ToUserName')[0].textContent
# content = doc.xpath('//Content')[0].textContent # 可選:獲取用戶發送內容
# 構造回覆 XML
reply_xml = """<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[%s]]></Content>
<FuncFlag>0</FuncFlag>
</xml>""" % (to_user, from_user, int(time.time()), u'我了個去啊')
return reply_xml
if __name__ == "__main__":
# 開發模式:啟用 debug、自動重載
debug(True)
port = int(sys.argv[1] if len(sys.argv) > 1 else 8888)
run(host='0.0.0.0', port=port, reloader=True)
else:
# 生產模式:WSGI 部署
os.chdir(os.path.dirname(__file__))
app = default_app()
libxml2dom 解析微信推送的 XML,通過 XPath 提取字段。<![CDATA[...]]> 中,防止特殊字符破壞 XML 結構。__main__ 判斷區分開發(run())與生產(WSGI default_app())部署。Bottle 單文件、零依賴特性極適合微信輕量級接入。核心邏輯僅 50 行,掌握 GET 驗證與 POST XML 交互即可快速上線。建議後續引入 wechatpy 等成熟庫簡化簽名驗證、消息解析與構造。