文章目录

  • 一、先启用服务器配置
  • 二、服务器端几个关键代码
  • 参考文献

一、先启用服务器配置

二、服务器端几个关键代码

main.py

# -*- coding: utf-8 -*-
# filename: main.py
import web
from handle import Handle
urls = ('/wx', 'Handle',
)
if __name__ == '__main__':app = web.application(urls, globals())app.run()

handle.py

# -*- coding: utf-8 -*-
# filename: handle.pyimport hashlib
import reply
import receive
import webclass Handle(object):def GET(self):try:data = web.input()if len(data) == 0:return "hello, this is handle view"signature = data.signaturetimestamp = data.timestampnonce = data.nonceechostr = data.echostrprint(echostr)token = "XXXX" #请按照公众平台官网\基本配置中信息填写list = [token, timestamp, nonce]list.sort()sha1 = hashlib.sha1()sha1.update("".join(list).encode('utf-8'))  #python2.x与python3.x唯一区别的一句#map(sha1.update, list)hashcode = sha1.hexdigest()print("handle/GET func: hashcode, signature: ", hashcode, signature)print(hashcode)print(signature)if hashcode == signature:return echostrelse:return ""except Exception as Argument:return Argumentdef POST(self):try:webData = web.data()print("Handle Post webdata is ")print(webData)#后台打日志recMsg = receive.parse_xml(webData)if isinstance(recMsg, receive.Msg) and recMsg.MsgType == 'text':toUser = recMsg.FromUserNamefromUser = recMsg.ToUserNamecontent = "test"replyMsg = reply.TextMsg(toUser, fromUser, content)return replyMsg.send()else:print("暂且不处理")return "success"except Exception as Argument:return Argument

receive.py

# -*- coding: utf-8 -*-#
# filename: receive.py
import xml.etree.ElementTree as ETdef parse_xml(web_data):if len(web_data) == 0:return NonexmlData = ET.fromstring(web_data)msg_type = xmlData.find('MsgType').textif msg_type == 'text':return TextMsg(xmlData)elif msg_type == 'image':return ImageMsg(xmlData)class Msg(object):def __init__(self, xmlData):self.ToUserName = xmlData.find('ToUserName').textself.FromUserName = xmlData.find('FromUserName').textself.CreateTime = xmlData.find('CreateTime').textself.MsgType = xmlData.find('MsgType').textself.MsgId = xmlData.find('MsgId').textclass TextMsg(Msg):def __init__(self, xmlData):Msg.__init__(self, xmlData)self.Content = xmlData.find('Content').text.encode("utf-8")class ImageMsg(Msg):def __init__(self, xmlData):Msg.__init__(self, xmlData)self.PicUrl = xmlData.find('PicUrl').textself.MediaId = xmlData.find('MediaId').text

reply.py

# -*- coding: utf-8 -*-#
# filename: reply.py
import timeclass Msg(object):def __init__(self):passdef send(self):return "success"class TextMsg(Msg):def __init__(self, toUserName, fromUserName, content):self.__dict = dict()self.__dict['ToUserName'] = toUserNameself.__dict['FromUserName'] = fromUserNameself.__dict['CreateTime'] = int(time.time())self.__dict['Content'] = contentdef send(self):XmlForm = """<xml><ToUserName><![CDATA[{ToUserName}]]></ToUserName><FromUserName><![CDATA[{FromUserName}]]></FromUserName><CreateTime>{CreateTime}</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[{Content}]]></Content></xml>"""return XmlForm.format(**self.__dict)class ImageMsg(Msg):def __init__(self, toUserName, fromUserName, mediaId):self.__dict = dict()self.__dict['ToUserName'] = toUserNameself.__dict['FromUserName'] = fromUserNameself.__dict['CreateTime'] = int(time.time())self.__dict['MediaId'] = mediaIddef send(self):XmlForm = """<xml><ToUserName><![CDATA[{ToUserName}]]></ToUserName><FromUserName><![CDATA[{FromUserName}]]></FromUserName><CreateTime>{CreateTime}</CreateTime><MsgType><![CDATA[image]]></MsgType><Image><MediaId><![CDATA[{MediaId}]]></MediaId></Image></xml>"""return XmlForm.format(**self.__dict)

在浏览器中输入:http://103.10.178.50/wx,是下面这个效果

参考文献

  • 微信公众平台/ Python2与Python3中hashlib的sha1结果不一致

如何搭建自己的微信公众号服务相关推荐

  1. 【2022-9-21最新】青龙面板搭建+sillyGirl+对接微信公众号+onebot

    目录 前言 一.准备工作 二.安装docker+安装青龙+青龙端口更改(可选)+CK提交版Ninja(可选) 1.连接ssh 2.一键命令代码如下 3.依赖安装一键命令代码如下 三.sillyGirl ...

  2. ngrok内网穿透工具搭建,方便微信公众号,小程序、钉钉等开发【已投入使用】

    前言:微信公众号,小程序.钉钉等开发需要内网穿透工具. 1.经过不断的摸索和调试,完成ngrok内网穿透的工具的搭建,对于微信公众号,小程序.钉钉等开发提供便利性. 2.搭建环境Linux cento ...

  3. 不花一分钱快速搭建自己的微信公众号机器人

    ▌前言 前些天闲来无事想弄个微信公众号机器人,因为可以用机器人做好多事情,比如可以让它变成一个智能聊天机器人,也可以让它爬取并推送arxiv上自己想要的论文,还可以让它绘制并推送有关肺炎疫情的曲线图等 ...

  4. 微信公众号(一) --- 开启微信公众号服务

    开启微信公众号服务 注:1.以测试号(权限开发比较多)完成大部分微信功能,正式环境上类似配置开发即可.测试号不能开发支付交易,必须公众号验证和支付验证的公众号. 2.主要开发 公众号设置服务.获取用户 ...

  5. java开发的微信公众号服务端生产环境中的两个大坑

    摘要: 我们开发的公众号,由于将功能开发完毕后,未对服务进行压力测试,因此用到的组件中的参数值全是默认的,服务上线后一段时间运行得倒没什么问题,随着服务得访问量增加,一些多线程并发的问题就逐步暴露出来 ...

  6. 微信公众号服务号申请-模板消息发送-自定义菜单-测试账号指南

    微信公众号 一.微信公众号创建(服务号) 二.公众号的关键配置 三.微信模板消息申请 四.自定义菜单跳转第三方网页 五.微信公众号后台设计思路 六.微信测试号的使用 一.微信公众号创建(服务号) 怎么 ...

  7. 微信公众号(服务号/订阅号/小程序)注册详细流程

    今天想注册一个微信公众号,个人订阅号,按照流程走下来发现好恶心,提示公众号主体已经达到上线,我一脸懵逼!!! 我什么时候注册过呢,然后一顿搜索解决,终于知道了,问题所在,一句话微信公众平台真的恶心到我 ...

  8. 微信公众号服务号如何开通微信支付功能

    开通微信商户支付平台 当我们的公众号认证完成之后,就可以正常使用了,担忧有很多地方我们就需要用到微信支付了,例如微信商城,拼团的在线支付等等场景.而且现在微信的使用场景非常广泛,基本上每个人都会携带手 ...

  9. 搜题公众号怎么搭建制作(微信公众号查题搭建制作教程)

    公众号查题搭建对接教程 下面教你怎么快速搭建一个可以搜题的公众号,让你的公众号实现搜题功能!而且实现这个功能根本不用花钱,是完全免费的!这篇文章是非常详细教学,手把手教会你们怎样做一个搜题公众号! 题 ...

最新文章

  1. 埃森哲:技术改变看病的五大趋势!每个人都将受益【附下载】| 智东西内参...
  2. 2022-02-09
  3. mfc搜索新建access字段_MFC ODBC类 Access数据库的操作
  4. mysql最大连接数512_MySQL服务器最大连接数怎么设置才合理
  5. cve-2020-0796_微软SMBv3 Client/Server远程代码执行漏洞简单分析(CVE20200796)
  6. 微软小冰学会画画了,堪称复活近代画家,还能命题作画
  7. AS打开卡住、一直加载的问题
  8. linux 修改文件夹权限_Linux文件权限 - Understanding Linux File Permissions
  9. 知名视频编辑工具:达芬奇剪辑调色软件 DaVinci Resolve Studio Mac v17.3.1
  10. ADO.NET数据库编程
  11. linux mongo 添加用户名和密码,mongodb3.4 安装及用户名密码设置
  12. WIN10添加纯英文输入法
  13. 达梦数据库远程网页访问
  14. 英语魔法师之语法俱乐部阅读笔记
  15. Excel排位函数RANK的使用方法
  16. echarts,x轴y轴,配置参数详情
  17. 验证tomcat安装成功
  18. 详细说说Mac下搭建Appium环境
  19. 【论文阅读5】BoT-SORT:Robust Associations Multi-Pedestrian Tracking
  20. Android之模仿QQ保存账号密码

热门文章

  1. Docker——compose简述部署
  2. Ubuntu 版 Livesuit 下载安装
  3. [Java版]selenium关键字驱动框架设计实战(二)
  4. 在哪里可以下载免费的office使用?
  5. php第三方函数类库,thinkphp3.2引入第三方类库
  6. Qt使用QSocket做tcp简单客户端
  7. 运筹学那些事,专科学生学习运筹学之模拟,No.10
  8. Java实现在线打开编辑保存PPT
  9. 【python中级】裁剪1、2寸电子照片
  10. 自媒体淘客选好爆文标题轻松月入过万