微信公众号开发从入门到精通教程
一、微信公众号开发基础
1. 微信公众号类型介绍
- 订阅号:适合媒体和个人,每天可群发1条消息
- 服务号:适合企业,每月可群发4条消息,开放更多接口
- 企业微信:企业内部使用,提供OA功能
2. 开发前准备
- 注册微信公众号(订阅号或服务号)
- 完成微信认证(服务号必须认证)
- 准备服务器(推荐阿里云/腾讯云)
- 域名备案(必须)
3. 开发环境配置
- 服务器:PHP/Node.js/Java/Python等
- 开发工具:微信开发者工具、Postman等
- 调试工具:微信web开发者工具
二、开发流程详解
1. 服务器配置
# Flask示例代码
from flask import Flask, request, make_response
import hashlib
app = Flask(__name__)
@app.route('/wechat', methods=['GET', 'POST'])
def wechat():
if request.method == 'GET':
# 微信验证
token = 'your_token'
signature = request.args.get('signature')
timestamp = request.args.get('timestamp')
nonce = request.args.get('nonce')
echostr = request.args.get('echostr')
# 校验签名
tmp_list = [token, timestamp, nonce]
tmp_list.sort()
tmp_str = hashlib.sha1(''.join(tmp_list).encode('utf-8')).hexdigest()
if tmp_str == signature:
return echostr
else:
return '验证失败'
else:
# 处理消息
return '消息处理'
2. 接收普通消息
微信服务器会POST XML格式的消息到你的服务器
<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>1348831860</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[this is a test]]></Content>
<MsgId>1234567890123456</MsgId>
</xml>
3. 回复消息
def reply_text(to_user, from_user, content):
return f"""
<xml>
<ToUserName><![CDATA[{to_user}]]></ToUserName>
<FromUserName><![CDATA[{from_user}]]></FromUserName>
<CreateTime>{int(time.time())}</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[{content}]]></Content>
</xml>
"""
三、高级功能开发
1. 自定义菜单
import requests
def create_menu(access_token):
url = f"https://api.weixin.qq.com/cgi-bin/menu/create?access_token={access_token}"
menu_data = {
"button": [
{
"type": "click",
"name": "今日歌曲",
"key": "V1001_TODAY_MUSIC"
},
{
"name": "菜单",
"sub_button": [
{
"type": "view",
"name": "搜索",
"url": "http://www.soso.com/"
}
]
}
]
}
response = requests.post(url, json=menu_data)
return response.json()
2. 网页授权
- 用户同意授权,获取code
- 通过code换取网页授权access_token
- 刷新access_token(如果需要)
- 拉取用户信息(需scope为snsapi_userinfo)
3. 模板消息
def send_template_message(access_token, openid, template_id, data, url=None):
api_url = f"https://api.weixin.qq.com/cgi-bin/message/template/send?access_token={access_token}"
payload = {
"touser": openid,
"template_id": template_id,
"data": data
}
if url:
payload["url"] = url
response = requests.post(api_url, json=payload)
return response.json()
四、常见问题解决
-
Token验证失败
- 检查服务器时间是否正确
- 确认Token一致
- 检查URL编码问题
-
消息无法接收/回复
- 检查服务器是否返回正确XML格式
- 确认消息类型处理正确
- 检查5秒内是否响应
-
接口调用频率限制
- 订阅号:5000次/天
- 服务号:100000次/天
- 超出限制后次日恢复
五、实践
-
使用微信JS-SDK
- 分享功能
- 图片预览
- 地理位置
- 微信支付
-
消息加解密
- 安全模式必须实现
- 使用WXBizMsgCrypt类
-
性能优化
- 缓存access_token(7200秒有效期)
- 异步处理耗时操作
- 使用CDN加速静态资源
六、学习资源推荐
- 官方文档:https://developers.weixin.qq.com/doc/
- 微信公众平台接口调试工具
- GitHub开源项目参考
- 微信开发者社区
通过以上系统学习,你可以从零开始掌握微信公众号开发的核心技术,实现从基础功能到高级应用的全面覆盖。