调用企业微信API发送文本,图片,文件消息[通俗易懂]

调用企业微信API发送文本,图片,文件消息[通俗易懂]简单封装一个调用企业微信API程序发送文本,图片,及文件消息。

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

1.调用api向企业微信(通过CORPID标识)的自建应用程序(通过Secret, AgentID标识)发送文本、图片或者文件消息;
2.创建实例时传入以下参数:

(1) touser–>str,接收消息者的标识(已在企业微信的通讯录中添加,添加后微信后台会自动分配标识),多个用户使用 “|” 隔开(如”zhdb|zhj|wqq”),所有人(“@all”);
(2) corp_id–>str,企业ID,申请企业微信时获得;
(3) secret, agent_id–>str, 创建企业应用时获得.

3.本实例定义了三种消息格式的发送(text, image, file), 使用实例如下:
chat = CorpWechat(touser, corp_id, secret, agent_id)

# 发送text文本消息
chat.send_message(msg_type='text', contents="Format message str")
# 发送image图片消息(本地图片)
chat.send_message(msg_type='image', file_obj=open(image_path, 'rb'))
# 发送file文件消息(本地文件)
chat.send_message(msg_type='file', file_obj=open(file_path, 'rb'))

另外也经常有这种情况,调用其它图片生成库在线绘制的图形可先存入到二进制缓存文件中,再将该对象作为file_obj参数传入,

例如用发送用matplotlib所生成的图片

import matplotlib.pyplot as plt
import numpy as np

from io import BytesIO

x = np.arange(50)
plt.plot(x, x**2)
buffer = BytesIO()  # 创建缓存文件
plt.savefig(buffer)  # 将生成的图片存入缓存文件
data = buffer.getvalue()  # 读取成可以传入file_obj的数据格式
chat.send_message(msg_type='image', file_obj=data)

再有就是发送调用其它文件生成库生成的文件的话,可先创建临时文件夹,然后保存到该文件夹下,发送时再读取,

例如用reportlab生成PDF文件的发送如下

–>脚本目录下创建temp文件夹;

from reportlab.pdfgen import canvas

pdf_path = 'temp\\test.pdf'
c = canvas.Canvas(pdf_path)
c.drawString(50, 50, "This is a test pdf file!")
c.save()  # 生成文件到本地
chat.send_message(msg_type='file', file_obj=open(pdf_path, 'rb'))

CorpWechat类创建脚本如下:

# -*- coding: utf-8 -*-
import requests
import json

class CorpWechat:
    def __init__(self, touser, corp_id, secret, agent_id):
        self.base_url = "https://qyapi.weixin.qq.com/cgi-bin"
        self.touser = touser
        self.corp_id = corp_id
        self.secret = secret
        self.agent_id = agent_id
        self.token = self._get_token()

    def _get_token(self):
        arg_url = '/gettoken?corpid={}&corpsecret={}'.format(self.corp_id, self.secret)
        url = self.base_url + arg_url
        r = requests.get(url)
        js = json.loads(r.text)
        try:
            return js['access_token']
        except KeyError:  # 成功返回后就会获得'access_token'字段,否则报错KeyError
            raise KeyError("Get access-token failed.")

    def _get_media_id(self, msg_type, file_obj):
        arg_url = "/media/upload?access_token={}&type={}".format(self.token, msg_type)
        url = self.base_url + arg_url
        data = { 
   "media": file_obj}
        r = requests.post(url=url, files=data)
        js = r.json()
        try:
            return js['media_id']
        except KeyError:  # 成功返回后就会获得'media_id'字段,否则报错KeyError
            raise KeyError("Get media_id failed.")

    def _gen_msg(self, msg_type, contents, file_obj):
        base_string = '''{ "touser": self.touser, "msgtype": msg_type, "agentid": self.agent_id, msg_type: {'%s': '%s'}, "safe": 0}'''
        if msg_type == 'text':
            values = base_string % ('content', contents)
        else:
            media_id = self._get_media_id(msg_type, file_obj)
            values = base_string % ('media_id', media_id)
        data = eval(values)
        js = json.dumps(data)
        to_bytes = bytes(js, 'utf-8')
        return to_bytes

    def send_message(self, msg_type, contents='', file_obj=None):
        post_msg = self._gen_msg(msg_type, contents, file_obj)
        arg_url = '/message/send?access_token={}'.format(self.token)
        url = self.base_url + arg_url
        requests.post(url, data=post_msg)
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/186721.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java语言的特点_Java语言有什么特点?

    java语言的特点_Java语言有什么特点?Java语言共有十大特点,分别为:简单性、面向对象、分布性、编译和解释性、稳健性、安全性、可移植性、高性能、多线索性、动态性。1、简单性:Java语言继承了C++语言的优点,去掉了C++中学习起来比较难的多继承、指针等概念,所以Java语言学习起来更简单,使用起来也更方便。2、面向对象:Java是一种面向对象的编程语言。3、分布性:Java设计成支持在网络上应用,它是分布式语言。所以只要用Java…

    2022年7月7日
    17
  • 什么是Deeplink?以及Deeplink的原理

    什么是Deeplink?以及Deeplink的原理先说一个日常场景帮大家理解。最近双十一、双十二,不知道大家有没有被亲友们发的某宝、某东、或拼夕夕的各类信息轮番轰炸?小编的亲友群、闺蜜群里常年有这类链接挂着,小红薯的笔记分享,某宝的化妆品、衣服链接分享等等,这一个个的分享链接织成一张张网,真可谓是增加亲友亲密度,快速获取优质好物的利器。这背后有个特别容易忽视却又极其重要的知识点。比如你在社交媒体上分享给翠花一个某App上的精选好店,翠花想要查看有几种操作方式:l如果翠花已经安装了该App,那她只要点开链接就可以跳转到App;l如果…

    2022年6月16日
    105
  • 华为的OD,值得去吗?「建议收藏」

    华为的OD,值得去吗?「建议收藏」最近有不少小伙伴接到了华为OD的面试邀约,但搞不清楚OD到底怎么回事儿,要不要去。所以今天来说说华为的OD到底是怎么回事儿,怎么判断是否值得去。1、华为的OD是怎么回事儿OD,是OutsourcingDispacth的缩写,简单粗暴地讲,就是外包派遣,劳务派遣。基本模式是这样的: A公司是外包公司(或劳务派遣公司,或人力资源公司); A公司签了一堆人,程序…

    2022年7月17日
    117
  • jquery获取第几个子元素_js获取元素的指定子元素

    jquery获取第几个子元素_js获取元素的指定子元素jquery如何获取第一个或最后一个子元素?

    2022年4月20日
    62
  • 新的博客-随记地址webooxx.com[通俗易懂]

    新的博客-随记地址webooxx.com[通俗易懂]虽然博客还没有完工,但是开了一个新的随记地址。webooxx.comMarkdocsOnline。是在百度的BAE上实现的,但是想弄到SAE上去,不过搞不定SAE的REWRITE,话说,其实我连本机

    2022年7月3日
    21
  • Weblogic-SSRF漏洞复现

    Weblogic-SSRF漏洞复现这两天了解的ssrf复现这个漏洞差不多了,开始进行笔迹整理:上面一篇介绍的就是些入门的基础,让你可以更加好的去理解,更好的懂ssrf这个漏洞的原理。0x00到底什么是ssrf呢?SSRF(server-siderequestforgery):服务器端请求伪造。是一种由攻击者构造形成由服务器端发起请求的一个安全漏洞,一般情况下,ssrf攻击的目标是从外网无法访问的内部系统(正是因…

    2022年6月25日
    49

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号