当前位置:首页 > Python > 正文

Python调用小程序接口完整教程 | 微信小程序API开发指南

Python调用小程序接口完整教程

本教程将详细介绍如何使用Python语言调用微信小程序的各种API接口,包含access_token获取、用户数据解密、模板消息发送等核心功能。

教程目录

  • 小程序接口概述
  • 准备工作与环境配置
  • 获取access_token
  • 用户登录与数据解密
  • 发送模板消息
  • 错误处理与调试技巧
  • 完整示例代码
  • 最佳实践与注意事项

小程序接口概述

微信小程序提供了丰富的API接口供开发者使用,主要包括:

  • 登录接口 - 获取用户登录凭证code
  • 用户信息接口 - 获取用户基本信息
  • 模板消息接口 - 向用户发送服务通知
  • 内容安全接口 - 检测文本/图片是否合规
  • 数据分析接口 - 获取小程序访问数据
  • 客服消息接口 - 处理用户客服消息

在调用这些接口前,必须先获取有效的access_token,这是调用大多数小程序接口的凭证。

获取access_token

access_token是调用小程序接口的重要凭证,有效期为2小时,需要定时刷新。

Python实现代码:

import requests
import time

class WechatAPI:
    def __init__(self, appid, secret):
        self.appid = appid
        self.secret = secret
        self.access_token = None
        self.token_expires = 0
        
    def get_access_token(self):
        # 检查token是否有效
        if self.access_token and time.time() < self.token_expires:
            return self.access_token
            
        # 请求新的access_token
        url = f"https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={self.appid}&secret={self.secret}"
        response = requests.get(url)
        data = response.json()
        
        if 'access_token' in data:
            self.access_token = data['access_token']
            # 提前5分钟过期,避免边界问题
            self.token_expires = time.time() + data['expires_in'] - 300
            return self.access_token
        else:
            raise Exception(f"获取access_token失败: {data.get('errmsg', '未知错误')}")
                    
# 使用示例
wechat = WechatAPI("你的小程序AppID", "你的小程序AppSecret")
token = wechat.get_access_token()
print("获取到的access_token:", token)
                    

关键点说明:

  • access_token有效期为7200秒(2小时)
  • 应全局缓存access_token,避免频繁请求
  • 每个access_token每日请求上限为2000次
  • 使用HTTPS GET方式请求

用户登录与数据解密

小程序前端通过wx.login()获取code,传给后端交换openid和session_key。

Python解密用户数据:

import base64
import json
from Crypto.Cipher import AES

def decrypt_user_data(encrypted_data, iv, session_key):
    # Base64解码
    encrypted_data = base64.b64decode(encrypted_data)
    iv = base64.b64decode(iv)
    session_key = base64.b64decode(session_key)
    
    # AES解密
    cipher = AES.new(session_key, AES.MODE_CBC, iv)
    decrypted = cipher.decrypt(encrypted_data)
    
    # 去除填充
    pad = decrypted[-1]
    decrypted = decrypted[:-pad]
    
    # 转换为JSON对象
    user_data = json.loads(decrypted.decode('utf-8'))
    return user_data

# 使用示例
encrypted_data = "前端传来的加密数据"
iv = "前端传来的初始向量"
session_key = "通过code获取的session_key"

user_info = decrypt_user_data(encrypted_data, iv, session_key)
print("解密后的用户数据:", user_info)
                    

注意: 解密需要安装pycryptodome库:pip install pycryptodome

关键注意事项

  • !
    AppSecret是敏感信息,切勿暴露在客户端
  • !
    access_token需要全局缓存并定时刷新
  • !
    用户敏感数据需在服务端解密
  • !
    接口调用频率有限制,需做好错误处理
  • !
    小程序接口域名必须配置到服务器白名单

常见错误代码

错误码 说明
40001 access_token无效
40029 code无效
41008 缺少code参数
45011 API调用太频繁
48001 API功能未授权

更多错误码请参考微信官方文档

最佳实践与优化建议

缓存策略优化

使用Redis存储access_token,设置自动过期时间(建议7100秒),避免多服务器token不一致问题。

错误处理机制

实现自动重试机制,当token失效时自动刷新并重试请求,对频率限制类错误实现退避算法。

日志与监控

详细记录接口调用日志,监控access_token获取频率和错误率,设置异常报警机制。

本教程提供的代码示例仅用于学习参考,实际生产环境请根据需求进行修改和完善。

© 2023 Python小程序接口开发教程 | 遵循MIT开源协议

发表评论