错误码 -41000
是微信公众号开发中常见的错误码之一,通常表示 "不合法的access_token"。这个错误通常是由于以下原因之一引起的:
access_token
是有有效期的(通常为2小时),如果超过有效期,access_token
将失效,导致发送模板消息失败。access_token
,并在发送模板消息时使用新的 access_token
。access_token
的缓存机制,定期刷新 access_token
,避免过期。access_token
时,可能由于网络问题、AppID 或 AppSecret 错误等原因,导致获取的 access_token
无效。access_token
的接口调用成功,并且返回的 access_token
是有效的。access_token
,可能会导致 access_token
被刷新,旧的 access_token
失效。access_token
的获取和使用是集中管理的,避免多个服务重复获取 access_token
。access_token
缓存在本地,但缓存时间过长,可能导致 access_token
过期。access_token
时,记录获取时间,并在接近过期时间(如1小时50分钟)时主动刷新 access_token
。touser
、template_id
、data
等字段。import requests
import time
# 获取 access_token
def get_access_token(appid, appsecret):
url = f"https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={appid}&secret={appsecret}"
response = requests.get(url)
if response.status_code == 200:
data = response.json()
if 'access_token' in data:
return data['access_token'], data['expires_in']
return None, None
# 缓存 access_token
class AccessTokenCache:
def __init__(self, appid, appsecret):
self.appid = appid
self.appsecret = appsecret
self.access_token = None
self.expire_time = 0
def get_token(self):
if time.time() < self.expire_time - 600: # 提前10分钟刷新
return self.access_token
token, expires_in = get_access_token(self.appid, self.appsecret)
if token:
self.access_token = token
self.expire_time = time.time() + expires_in
return self.access_token
# 使用缓存的 access_token 发送模板消息
def send_template_message(cache, touser, template_id, data):
access_token = cache.get_token()
if not access_token:
return False
url = f"https://api.weixin.qq.com/cgi-bin/message/template/send?access_token={access_token}"
payload = {
"touser": touser,
"template_id": template_id,
"data": data
}
response = requests.post(url, json=payload)
return response.json()
# 示例使用
appid = "your_appid"
appsecret = "your_appsecret"
cache = AccessTokenCache(appid, appsecret)
result = send_template_message(cache, "user_openid", "template_id", {"key": "value"})
print(result)
错误码 -41000
通常是由于 access_token
无效或过期引起的。通过重新获取 access_token
并确保其有效性和及时刷新,可以解决这个问题。如果问题仍然存在,建议检查请求参数和微信服务器状态。