import requests import json from io import BytesIO def upload_image_to_wechat(access_token, image_url): """ 上传图片到微信公众号素材库 参数: access_token (str): 公众号的access_token image_url (str): 图片的URL地址 返回: str: 成功时返回media_id None: 失败时返回None """ if not access_token or not image_url: return None # 微信上传临时素材接口 upload_url = f"https://api.weixin.qq.com/cgi-bin/media/upload?access_token={access_token}&type=image" try: # 先从URL下载图片 image_response = requests.get(image_url, timeout=15) image_response.raise_for_status() # 检查请求是否成功 # 将图片内容转换为文件对象 image_file = BytesIO(image_response.content) # 构造表单数据 files = { 'media': ('image.jpg', image_file, 'image/jpeg') } # 上传图片到微信服务器 response = requests.post(upload_url, files=files, timeout=15) result = json.loads(response.text) # 检查是否返回错误 if "errcode" in result and result["errcode"] != 0: return None # 返回media_id media_id = result.get("media_id") if media_id: return media_id else: return None except requests.exceptions.RequestException: return None except json.JSONDecodeError: return None except Exception: return None