python发送企业微信消息_Python构建企业微信自动消息转发服务端

本文介绍如何使用Python构建一个企业微信消息转发服务端,通过Flask框架处理微信的GET和POST请求,解密接收到的消息,并将内容转发到指定的用户或部门。文章提供完整代码,并提到了后期可结合数据库管理access_token的优化方案。
摘要由CSDN通过智能技术生成

一、背景

目前有在项目分组,就小组成员中,微信群消息回复较多的情况下,想根据组来转发特定消息,包含文字、图片、语言等。在此只是自己实现仅供参考,可以根据自身需求修改更多功能。

二、代码2.1 企业微信相关信息企业ID:corpid

自建应用appid

自建应用secret

2.2 服务端部署

运行环境:

python 版本 2.7

git clone https://github.com/redhatxl/wechatmsg.git

nohup python2.7 wechatmsg/wx_msg_server.py &2.3 参考RUL:2.4 代码

# flask 框架后台

def server_run(self):

app = Flask(__name__)

@app.route('/index', methods=['GET', 'POST'])

def index():

wxcpt = WXBizMsgCrypt(self.sToken, self.sEncodingAESKey, self.sCorpID)

# 获取url验证时微信发送的相关参数

sVerifyMsgSig = request.args.get('msg_signature')

sVerifyTimeStamp = request.args.get('timestamp')

sVerifyNonce = request.args.get('nonce')

sVerifyEchoStr = request.args.get('echostr')

# 验证url

if request.method == 'GET':

ret, sEchoStr = wxcpt.VerifyURL(sVerifyMsgSig, sVerifyTimeStamp, sVerifyNonce, sVerifyEchoStr)

print type(ret)

print type(sEchoStr)

if (ret != 0):

print "ERR: VerifyURL ret:" + str(ret)

sys.exit(1)

return sEchoStr

# 接收客户端消息

if request.method == 'POST':

sReqMsgSig = sVerifyMsgSig

sReqTimeStamp = sVerifyTimeStamp

sReqNonce = sVerifyNonce

sReqData = request.data

print(sReqData)

ret, sMsg = wxcpt.DecryptMsg(sReqData, sReqMsgSig, sReqTimeStamp, sReqNonce)

print ret, sMsg

if (ret != 0):

print "ERR: DecryptMsg ret: " + str(ret)

sys.exit(1)

# 解析发送的内容并打印

xml_tree = ET.fromstring(sMsg)

print('xml_tree is ', xml_tree)消息内容发送

def _send_text_msg(self, content):

data = {

"touser": ('|').join(self.userid.split(',')),

"toparty": ('|').join(self.partid.split(',')),

# "toparty":int(self.partid),

"msgtype": "text",

"agentid": self.agent_id,

"text": {

"content": content

},

"safe": 0

}

try:

response = requests.post(self.send_msg_url.format(self.access_token), json.dumps(data))

self.logoper.info(response.text)

print(response.text)

result_msg = json.loads(response.content)['errmsg']

return result_msg

except Exception as e:

self.logoper.info(e)日志

def create_dir(self):

"""

创建目录

:return: 文件名称

"""

_LOGDIR = os.path.join(os.path.dirname(__file__), self.logdir_name)

_TIME = time.strftime('%Y-%m-%d', time.gmtime()) + '-'

_LOGNAME = _TIME + self.logfile_name

LOGFILENAME = os.path.join(_LOGDIR, _LOGNAME)

if not os.path.exists(_LOGDIR):

os.mkdir(_LOGDIR)

return LOGFILENAME

def create_logger(self, logfilename):

"""

创建logger对象

:param logfilename:

:return: logger对象

"""

logger = logging.getLogger()

logger.setLevel(logging.INFO)

handler = logging.FileHandler(logfilename)

handler.setLevel(logging.INFO)

formater = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

handler.setFormatter(formater)

logger.addHandler(handler)

return logger

配置文件

# 定义微信公众号信息

[common]

# 企业微信企业ID

corpid = wxe23xxxxxxxxxxx

# 接收消息服务器配置

[recmsg]

Token = mVNAAw3xxxxxxxxxxxxxxxxx

EncodingAESKey = vwbKImxc3WPeE073xxxxxxxxxxxxxxxxxx

# 自建应用信息

[appconfig]

# 自建应用agentid

agentid = 1000002

# 自建应用secret

secret = 6HAGX7Muw36pv5anxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

# 消息接收信息

# 消息接收用户id,如果多个用户用英文','隔开

userid = xuel|yaoy

# 消息接收部门id,如果多个用英文','隔开

partid = 11

[urlconfig]

# 获取应用token的api接口

get_access_token_url = https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={}&corpsecret={}

# 发送消息api接口

send_msg_url = https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token={}

# 上传媒体api接口,获取mediaid

upload_media_url = https://qyapi.weixin.qq.com/cgi-bin/media/upload?access_token={}&type=image

# 上传高清语音接口

upload_video_url = https://qyapi.weixin.qq.com/cgi-bin/media/get/jssdk?access_token={}&media_id={}

[loginfo]

#日志目录

logdir_name = logdir

#日志文件名称

logfile_name = wechat_server.log

三、测试

在企业微信发送消息,可以修改配置文件制定转发到特定的群组,从而避免消息分流。

启用应用API,设置回调地址

测试发送消息

查看接受消息

四、优化后期可以配合数据库将每次获取的access_token 保存至数据库,待2小时过期后,再重新获取新的。

更多内容转发

作者:KaliArch

链接:http://www.imooc.com/article/264880

来源:慕课网

本文原创发布于慕课网 ,转载请注明出处,谢谢合作

推荐阅读:

### 回答1: 下面是一个使用Python编写的企业微信API接收消息的示例代码: ```python import json import requests from flask import Flask, request app = Flask(__name__) @app.route('/webhook', methods=['POST']) def webhook(): data = request.get_data() # 解析接收到的消息 msg = json.loads(data) # 获取消息类型 msg_type = msg.get('MsgType') # 处理不同类型的消息 if msg_type == 'text': content = msg.get('Content') # 获取消息内容 # 处理消息内容 # ... elif msg_type == 'image': media_id = msg.get('MediaId') # 获取图片的MediaId # 处理图片消息 # ... # 其他消息类型的处理 return 'success' if __name__ == '__main__': app.run() ``` 上述代码使用了Flask框架搭建了一个用于接收企业微信消息的webhook接口。当接收到企业微信消息时,会触发`/webhook`路由的POST请求。 代码中的`webhook`函数会获取POST请求中的消息数据,并将其转换为JSON格式。然后根据消息的类型进行处理,比如如果是文本消息,可以通过`msg.get('Content')`获取消息内容进行相应处理;如果是图片消息,可以通过`msg.get('MediaId')`获取图片的MediaId。 最后,处理完消息后,返回"success"表示消息接收成功。 ### 回答2: 企业微信是一种企业级通信工具,它提供了API接口,可以通过编程语言进行消息的接收和处理。以下是一个使用Python编写的企业微信API接收消息的示例代码: ```python import json import requests def receive_message(): url = "https://qyapi.weixin.qq.com/cgi-bin/webhook/receive?key=your_webhook_key" response = requests.get(url) data = json.loads(response.text) message_type = data.get("type") if message_type == "text": message_content = data.get("text").get("content") # 对文本消息进行处理 # ... elif message_type == "image": message_url = data.get("image").get("url") # 对图片消息进行处理 # ... # 其他类型的消息同理 return "success" if __name__ == "__main__": receive_message() ``` 在上面的代码中,我们首先需要创建一个Webhook,获取到Webhook的key,并替换代码中的`your_webhook_key`。然后通过`requests`库发送GET请求,从企业微信服务器中获取到最新的消息数据。 接收到消息后,我们可以通过判断消息的类型,来进行不同类型消息的处理。例如,如果消息类型是文本类型,可以通过`data.get("text").get("content")`获取到消息的文本内容,并进行相应的处理。如果消息类型是图片类型,可以通过`data.get("image").get("url")`获取到图片的URL,并处理图片。 最后,返回一个`"success"`字符串表示消息接收成功。 ### 回答3: 企业微信提供了丰富的API接口,可以使用Python编程语言来接收企业微信消息。以下是一个简单的Python代码示例: ```python import requests from flask import Flask, request app = Flask(__name__) @app.route('/wechat', methods=['POST']) def receive_message(): data = request.json msg_type = data['msg_type'] sender = data['sender'] content = data['content'] # 处理接收到的消息 # 可以根据消息类型进行不同的处理,如文本消息、图片消息、视频消息等 # 返回响应给企业微信 return 'success' if __name__ == '__main__': app.run() ``` 这段代码使用了Flask框架来构建一个简单的HTTP服务端,监听 '/wechat' 路径的POST请求。当企业微信向该路径发送消息时,代码会从请求中获取到消息内容,并进行处理。处理完毕后,返回一个成功的响应给企业微信。 你可以根据实际需要对接收到的消息进行进一步处理,如解析消息内容、调用其他API接口等。另外,根据企业微信API的文档,也可以根据需要使用其他的Python库来实现接收消息的功能。 注意:为了让以上代码正常工作,你需要安装Flask库和requests库,并将其中的一些参数(如路由、消息处理逻辑、API调用等)根据实际情况进行修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值