原文链接:https://blog.csdn.net/qq_37655607/article/details/134102103
要将微信公众号集成文心一言API,并使用Python语言和Flask技术实现,可以按照以下步骤进行操作:
from flask import Flask, request,jsonify,make_response
import erniebot
from gevent import pywsgi
import xml.etree.cElementTree as ET
import hashlib
import time
app = Flask(__name__)
@app.route('/wx',methods=['GET','POST'])
def wechat():
if request.method == 'GET':
signature = request.args.get("signature", "")
timestamp= request.args.get("timestamp", "")
nonce= request.args.get("nonce", "")
echostr= request.args.get("echostr", "")
print(signature, timestamp, nonce, echostr)
token="微信公众平台设置的token与此处token一致"
data =[token, timestamp, nonce]
data.sort()
temp = ''.join(data)
sha1= hashlib.sha1(temp.encode('utf-8'))
hashcode=sha1.hexdigest()
if hashcode == signature:
return echostr
else:
return "error"
else:
xmlData = ET.fromstring(request.stream.read())
msg_type = xmlData.find('MsgType').text
print(msg_type)
if msg_type == 'text':
ToUserName = xmlData.find('ToUserName').text
FromUserName = xmlData.find('FromUserName').text
Content = ''
erniebot.api_type = 'aistudio'
#获取令牌 https://aistudio.baidu.com/index/accessToken
erniebot.access_token = 'access_token'
try:
response = erniebot.ChatCompletion.create(model='ernie-bot-turbo',messages=[ {'role': 'user','content': xmlData.find('Content').text}])
Content= response.get_result()
except e:
print(e)
reply = '''
%s
'''
response = make_response(reply % (FromUserName, ToUserName, str(int(time.time())), Content))
response.content_type = 'application/xml'
return response
elif msg_type == 'event':
event_type = xmlData.find('Event').text
if event_type== "subscribe":
ToUserName = xmlData.find('ToUserName').text
FromUserName = xmlData.find('FromUserName').text
reply = '''
%s
'''
response = make_response(reply % (FromUserName, ToUserName, str(int(time.time())), "欢迎来到XXX微信公众号!"))
response.content_type = 'application/xml'
return response
else:
ToUserName = xmlData.find('ToUserName').text
FromUserName = xmlData.find('FromUserName').text
reply = '''
%s
'''
response = make_response(reply % (FromUserName, ToUserName, str(int(time.time())), "我看不太懂!"))
response.content_type = 'application/xml'
return response
if __name__=="__main__":
#app.run()
server = pywsgi.WSGIServer(('0.0.0.0',80),app)
server.serve_forever()
这段代码是一个使用Python和Flask框架编写的微信公众号后台服务。它的主要目的是处理来自微信用户的消息,然后使用ErnieBot模型生成聊天回复。以下是代码的详细描述:
导入模块:
代码开始时导入了必要的模块和库,包括Flask、ErnieBot(假定是一个聊天机器人API)、Gevent、用于XML解析的xml.etree.cElementTree,hashlib用于哈希操作,以及time模块。
Flask应用程序设置:
代码初始化了一个Flask应用程序。
路由’/wx’:
这个路由处理来自微信的GET和POST请求。
对于GET请求,它用于验证微信服务器的真实性,比较接收到的signature(签名)与计算出的哈希值是否匹配。如果匹配,将返回echostr值以完成验证。如果不匹配,将返回错误消息。
对于POST请求,它处理来自微信的XML数据。它提取消息类型(MsgType)并检查是否为文本消息或事件。
处理文本消息:
如果是文本消息,它提取发送者和接收者的用户名以及文本内容。
然后,它为响应设置ErnieBot API,并将用户的消息传递给它。
最后,它构建一个XML响应,包含聊天机器人的回复,然后将响应发送回用户。
处理事件消息:
如果是订阅事件,它会回复欢迎消息。
对于其他事件类型或未处理的情况,它会回复一个通用的"我无法理解"消息。
主要执行部分:
代码通过Gevent服务器运行Flask应用程序,监听在0.0.0.0地址的80端口上。
需要注意的几点:
代码似乎缺少文本消息处理部分的错误处理。
需要将’access_token’替换为实际的访问令牌,这是与ErnieBot API交互所需的。
请根据微信公众号的设置将token替换为与微信服务器配置的token一致,以确保验证的安全性。
python环境 ≥ 3.8
pip install erniebot flask gevent
看起来你需要在Python 3.8及以上环境中安装一些库,这些库包括: erniebot flask gevent 对于erniebot和flask这两个库,它们是Python Web开发常用的库,主要用于构建Web应用。你可以使用pip来安装它们。pip是Python的包管理器,可以用于安装Python包。 在Python环境 ≥ 3.8的情况下,你可以使用以下命令来安装这些库: pip install erniebot flask gevent 如果你在安装过程中遇到任何问题,或者需要更具体的帮助,欢迎随时向我询问。
————————————————