首先,需要在微信公众平台中开发者中心的“基本配置”中设置服务器配置,填写服务器地址、Token等信息,并将Token和服务器地址保存在代码中,如下所示:

import hashlib
from flask import Flask, request, make_response

app = Flask(__name__)

# 设置Token和服务器地址
TOKEN = 'your_token'
SERVER_URL = 'http://your_server_url/'

@app.route('/', methods=['GET', 'POST'])
def wechat_auth():
    if request.method == 'GET':
        # 验证服务器地址的有效性
        signature = request.args.get('signature')
        timestamp = request.args.get('timestamp')
        nonce = request.args.get('nonce')
        echostr = request.args.get('echostr')
        token = TOKEN
        list = [token, timestamp, nonce]
        list.sort()
        sha1 = hashlib.sha1()
        map(sha1.update, list)
        hashcode = sha1.hexdigest()
        if hashcode == signature:
            return echostr
        else:
            return ''
    else:
        # 处理用户发送的消息
        xml_recv = request.stream.read()
        msg = xmltodict.parse(xml_recv)['xml']
        # TODO: 处理消息
        return ''

然后,在处理用户发送的消息时,如果用户发送了图片消息,可以通过微信公众平台提供的素材管理接口,获取图片素材,并将其返回给用户。具体步骤如下:

  1. 在公众平台中获取access_token,用于调用素材管理接口。
import requests

# 获取access_token
def get_access_token():
    url = 'https://api.weixin.qq.com/cgi-bin/token'
    params = {
        'grant_type': 'client_credential',
        'appid': 'your_appid',
        'secret': 'your_secret'
    }
    response = requests.get(url, params=params)
    access_token = response.json().get('access_token')
    return access_token
  1. 调用素材管理接口,获取用户发送的图片素材。
import json

# 获取图片素材
def get_image_media(media_id):
    access_token = get_access_token()
    url = 'https://api.weixin.qq.com/cgi-bin/media/get'
    params = {
        'access_token': access_token,
        'media_id': media_id
    }
    response = requests.get(url, params=params)
    return response.content
  1. 将获取到的图片素材返回给用户。
# 处理消息
if msg['MsgType'] == 'image':
    media_id = msg['MediaId']
    image_data = get_image_media(media_id)
    response = make_response(image_data)
    response.headers['Content-Type'] = 'image/jpeg'
    return response

完整代码如下:

import hashlib
import requests
import xmltodict
from flask import Flask, request, make_response

app = Flask(__name__)

# 设置Token和服务器地址
TOKEN = 'your_token'
SERVER_URL = 'http://your_server_url/'

# 获取access_token
def get_access_token():
    url = 'https://api.weixin.qq.com/cgi-bin/token'
    params = {
        'grant_type': 'client_credential',
        'appid': 'your_appid',
        'secret': 'your_secret'
    }
    response = requests.get(url, params=params)
    access_token = response.json().get('access_token')
    return access_token

# 获取图片素材
def get_image_media(media_id):
    access_token = get_access_token()
    url = 'https://api.weixin.qq.com/cgi-bin/media/get'
    params = {
        'access_token': access_token,
        'media_id': media_id
    }
    response = requests.get(url, params=params)
    return response.content

@app.route('/', methods=['GET', 'POST'])
def wechat_auth():
    if request.method == 'GET':
        # 验证服务器地址的有效性
        signature = request.args.get('signature')
        timestamp = request.args.get('timestamp')
        nonce = request.args.get('nonce')
        echostr = request.args.get('echostr')
        token = TOKEN
        list = [token, timestamp, nonce]
        list.sort()
        sha1 = hashlib.sha1()
        map(sha1.update, list)
        hashcode = sha1.hexdigest()
        if hashcode == signature:
            return echostr
        else:
            return ''
    else:
        # 处理用户发送的消息
        xml_recv = request.stream.read()
        msg = xmltodict.parse(xml_recv)['xml']
        if msg['MsgType'] == 'image':
            media_id = msg['MediaId']
            image_data = get_image_media(media_id)
            response = make_response(image_data)
            response.headers['Content-Type'] = 'image/jpeg'
            return response
        else:
            return ''

if __name__ == '__main__':
    app.run()
使用python语言和flask框架给微信公众号返回图片消息

原文地址: https://www.cveoy.top/t/topic/zG8 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录