微信小程序和公众号提供很多接口,我们实现一些功能需要调用这些接口,一般情况下只需参数文档即可,本文主要介绍Python中,使用requests调用微信接口的方法,以及相关的示例代码。

1、使用requests执行GET和POST请求

1)GET请求

import requests

# 目标URL
url = 'http://example.com/api'

# 可选的参数字典
params = {
    'key1': 'value1',
    'key2': 'value2'
}

# 发起GET请求
response = requests.get(url, params=params)

# 检查响应状态码
if response.status_code == 200:
    # 处理响应内容,例如解析JSON
    data = response.json()
    print(data)
else:
    print('GET请求失败,状态码:', response.status_code)

2)POST请求

import requests

# 目标URL
url = 'http://example.com/api'

# 要发送的数据
data = {
    'key1': 'value1',
    'key2': 'value2'
}

# 发起POST请求
response = requests.post(url, data=data)

# 检查响应状态码
if response.status_code == 200:
    # 处理响应内容
    data = response.json()
    print(data)
else:
    print('POST请求失败,状态码:', response.status_code)

3)json参数和上传文件

json参数会使用json模块中的dumps方法转成json字符串,会请求头中的Content-Type:application/json,

import requests

# 目标URL
url = 'http://example.com/api'

# 发送JSON数据
response = requests.post(url, json=data)  # `json=data`会自动将字典序列化为JSON字符串

# 上传文件
files = {'file': open('report.xls', 'rb')}
response = requests.post(url, files=files)

注意:json参数不需要提前使用json模块的方法转成json字符串。

2、调用微信接口

调用微信公众号或小程序接口时,需要注意POST请求传入数据编码问题,请求头中是否添加Content-Type:application/json

1)GET请求

import requests


url ='https://api.weixin.qq.com/cgi-bin/token'
# 可选的参数字典
params = {
    'grant_typ': 'client_credential',
    'appid': 'value1',#
    'secret': 'value2'#
}
resp = requests.get(url, params=params)
access_token = None
expires_in = None
if resp.status_code != 200:
    print(resp.status_code)
else:
    json = resp.json()
    if "errcode" in json:
        print(json)
    else:
        access_token = json['access_token']
        expires_in = json['expires_in']

2)POST请求

import requests
import json


url ='https://api.weixin.qq.com/wxa/msg_sec_check?access_token='+"token"

params = {
     "content": content
 }
 headers = {
     "Content-Type": "application/json"
 }
dataString = json.dumps(params, ensure_ascii=False)
# 发起POST请求
response = requests.post(post_url, data=dataString.encode("utf-8"), headers=headers)

# 检查响应状态码
if response.status_code == 200:
    # 处理响应内容
    data = response.json()
    print(data)
else:
    print('POST请求失败,状态码:', response.status_code)
"""
    # 发送 POST 请求
    # 如果 requests 使用的是 2.28.2,则使用这种方式
    #resp = requests.post(post_url, data=dataString.encode("utf-8").decode("latin1"), headers=headers)
    # 如果 requests 使用的是 2.30.0,则使用这种方式
    #resp = requests.post(post_url, data=dataString.encode("utf-8"), headers=headers)
"""

注意:Python 中使用的 requeset 版本,可能同样的代码在不同版本出现不同的结果。

推荐文档