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

微信公众号开发(三):自动回复“你好”

上一篇做了服务器校验,但没有处理用户发来的消息,为了完成自动回复的功能,需要增加一些功能:

1、调整服务器校验函数:

def verify_wechat(request):token='token'data=request.argssignature=data.get('signature')timestamp=data.get('timestamp')nonce=data.get('nonce')echostr=data.get('echostr')temp=[timestamp,nonce,token]temp.sort()temp=''.join(temp)if (hashlib.sha1(temp.encode('utf8')).hexdigest()==signature):return echostrelse:return 'error',403
2、解析用户发来的信息

微信公众号中,用户发给公众号的消息是以xml形式发给服务器的,所以要先对xml进行解析:

def getUserMessageContentFromXML(xml_content):root=ET.fromstring(xml_content)content=root.find('Content').textfrom_user_name=root.find('FromUserName').textto_user_name=root.find('ToUserName').textreturn content,from_user_name,to_user_name

这个函数获取了用户和公众号的id(名称)

3、回复信息(“你好”)

回复信息,和收到信息一样,都是xml形式,所以要先把回复的信息调整成xml形式:


def generate_response_xml(from_user_name,to_user_name,output_content):output_xml= '''<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[%s]]></Content></xml>'''response = make_response(output_xml % (from_user_name, to_user_name, str(int(time.time())), str(output_content)))response.content_type = 'application/xml'return response

然后,调整服务器函数:


@app.route('/wechatai', methods=['GET', 'POST'])
def wechatai():if request.method == 'GET':return verify_wechat(request)else:print("user request data: ",request.data)user_message_content,from_user_name,to_user_name=getUserMessageContentFromXML(request.data)print(from_user_name)print(to_user_name)return generate_response_xml(from_user_name, to_user_name, "你好")

最终效果:(为了避免一直你好,通过if条件判断,只设置了自己的信息才会回复“你好”)

http://www.lryc.cn/news/359391.html

相关文章:

  • docker基本操作命令(3)
  • 003 MySQL
  • 数据分析------统计学知识点(一)
  • Apache Doris 基础 -- 数据表设计(分区分桶)
  • 题目:求0—7所能组成的奇数个数。
  • 网络协议学习笔记
  • C语言文件操作:打开关闭,读写
  • 启智CV机器人,ROS,ubuntu 20.04 【最后一步有问题】
  • React-生成随机数和日期格式化
  • 11Linux学习笔记
  • 004 仿muduo实现高性能服务器组件_Buffer模块与Socket模块的实现
  • 研发效能DevOps: Ubuntu 部署 JFrog 制品库
  • hadoop学习笔记
  • 使用dockerfile快速构建一个带ssh的docker镜像
  • linux部署运维1——centos7.9离线安装部署涛思taos2.6时序数据库TDengine
  • Linux shell编程学习笔记51: cat /proc/cpuinfo:查看CPU详细信息
  • Ps:调整画笔工具
  • 香橙派 AIpro上手体验并验证车道线识别算法
  • 为啥装了erlang,还报错erl: command not found?
  • 容器技术基础理论与常用命令:必知必会,效率翻倍!
  • ChatGPT Edu版本来啦:支持GPT-4o、自定义GPT、数据分析等
  • Spark RDD案例
  • 【线性表 - 数组和矩阵】
  • Springboot 开发 -- 跨域问题技术详解
  • 【Qt】之【项目】整理可参考学习的git项目链接(持续更新)
  • 2024年5月个人工作生活总结
  • Kafka Java API
  • pushd: not found
  • 【第十三节】C++控制台版本坦克大战小游戏
  • 酷得单片机方案 2.4G儿童遥控漂移车