企业微信开发快速入门指南:基于wechatpy的实践
2025-07-09 01:27:52作者:齐添朝
企业微信开发模式概述
企业微信开发主要分为两种模式,开发者需要根据业务需求选择合适的开发方式:
-
回调模式(被动响应)
- 微信服务器主动向开发者服务器推送消息
- 开发者需要处理用户消息和事件(如文本消息、扫码事件等)
- 本质上是微信服务器作为客户端向开发者服务器发送HTTP请求
-
主动调用模式
- 开发者主动调用企业微信API进行操作
- 可实现消息推送、用户管理等功能
- 需要获取并管理AccessToken
回调模式开发实践
1. 验证请求有效性
企业微信的回调请求都经过AES加密,开发者需要验证签名确保请求来自微信服务器:
from wechatpy.work.crypto import WeChatCrypto
from wechatpy.exceptions import InvalidSignatureException
# 初始化加密工具
crypto = WeChatCrypto(TOKEN, EncodingAESKey, CorpId)
try:
# 验证签名
echo_str = crypto.check_signature(
signature,
timestamp,
nonce,
echo_str
)
except InvalidSignatureException:
# 处理签名验证失败的情况
raise
2. 解析XML消息
微信服务器推送的消息以XML格式存在于HTTP请求体中:
from wechatpy.work import parse_message
# 假设raw_message是从请求中获取的原始消息
try:
# 解密消息
decrypted_xml = crypto.decrypt_message(
raw_message,
signature,
timestamp,
nonce
)
# 解析消息
msg = parse_message(decrypted_xml)
except (InvalidSignatureException, InvalidCorpIdException):
# 处理异常情况
raise
解析后的消息对象包含消息类型、发送者等信息,开发者可根据业务逻辑处理不同消息。
3. 回复消息处理
企业微信的回复消息也需要进行加密处理:
from wechatpy.work import create_reply
# 创建回复消息
reply = create_reply("这是回复内容", msg)
xml = reply.render()
# 加密回复消息
encrypted_xml = crypto.encrypt_message(xml, nonce, timestamp)
主动调用模式开发实践
1. 初始化客户端
from wechatpy.work import WeChatClient
# 初始化企业微信客户端
wechat_client = WeChatClient(
CorpId, # 企业ID
secret # 应用的Secret
)
2. AccessToken管理
wechatpy会自动管理AccessToken,开发者无需手动处理。如需获取当前token:
current_token = wechat_client.access_token
3. 存储方案配置
wechatpy支持多种存储方案来持久化AccessToken:
Redis存储示例
from wechatpy.session.redisstorage import RedisStorage
from redis import Redis
redis_client = Redis.from_url('redis://127.0.0.1:6379/0')
session_interface = RedisStorage(
redis_client,
prefix="wechatpy"
)
wechat_client = WeChatClient(
CorpId,
secret,
session=session_interface
)
内存存储示例
from wechatpy.session.memorystorage import MemoryStorage
storage = MemoryStorage()
wechat_client = WeChatClient(CorpId, secret, session=storage)
4. 自定义存储实现
如需实现自定义存储,需继承SessionStorage类并实现必要方法:
from wechatpy.session import SessionStorage
class CustomStorage(SessionStorage):
def __init__(self, *args, **kwargs):
# 初始化代码
pass
def get(self, key, default=None):
# 实现获取逻辑
pass
def set(self, key, value, ttl=None):
# 实现设置逻辑
pass
def delete(self, key):
# 实现删除逻辑
pass
# 使用自定义存储
wechat_client = WeChatClient(
CorpId,
secret,
session=CustomStorage()
)
最佳实践建议
- 错误处理:始终对微信API调用和消息处理进行异常捕获
- 性能优化:在生产环境推荐使用Redis等外部存储方案
- 日志记录:记录关键操作和错误信息以便排查问题
- 消息安全:确保正确处理消息加密解密流程
- 资源管理:合理管理AccessToken,避免频繁刷新
通过wechatpy库,开发者可以高效地实现企业微信的各种功能,无论是处理用户消息还是主动调用API,该库都提供了简洁易用的接口。