实现功能 | 成员函数 |
---|---|
发送普通文本 | sendText |
发送Markdown文本 | sendMarkdown |
发送图片 | sendImage |
发送图文 | sendArticles |
发送文件 | sendFile |
源代码
XQRobotWeCom 完整实现 里面还依赖一些其他类,在里面都可以找到,推荐整个克隆下来看方便
XQRobotWeCom头文件
#ifndef XQROBOTWECOM_H
#define XQROBOTWECOM_H
#include"XQRobot.h"
#include<QImage>
//企业微信机器人
class XQRobotWeCom :public XQRobot
{
Q_OBJECT
public:
//图文信息
struct Articles
{
QString title;//标题,不超过128个字节,超过会自动截断(必填)
QString description;//描述,不超过512个字节,超过会自动截断(选填)
QString url;//点击后跳转的链接。(必填)
QString picurl;//图文消息的图片链接,支持JPG、PNG格式,较好的效果为大图 1068*455,小图150*150。(选填)
};
enum PutFileType
{
image,//图片
voice,//语音
video,//视频
file//普通文件
};
//上传文件返回信息
struct PutReturnInfo
{
int errcode;//错误代码
QString errmsg;//错误信息
PutFileType type;//文件类型
QString media_id;//媒体文件上传后获取的唯一标识,3天内有效
qint64 created_at;//媒体文件上传时间戳
};
public:
XQRobotWeCom(QObject* parent = nullptr);
~XQRobotWeCom();
/*
* @brief 获取当前的钥匙.
* @retval 钥匙
* @note
*/
inline QString key()const;
/*
* @brief 获取当前的url.
* @retval url
* @note
*/
QString url();
public:
/*
* @brief 设置钥匙.
* @param key:钥匙
* @retval None
* @note
*/
void setKey(const QString& key);
/*
* @brief 发送文本.
* @param content:发送的文本内容,最长不超过2048个字节,必须是utf8编码
* @param mentioned_list:userid的列表,提醒群中的指定成员(at某个成员),all表示提醒所有人,如果开发者获取不到userid,可以使用mentioned_mobile_list
* @param mentioned_mobile_list:手机号列表,提醒手机号对应的群成员(at某个成员),all表示提醒所有人
* @retval 发送成功返回true
* @note
*/
bool sendText(const QString& content, const QStringList& mentioned_list = {}, const QStringList& mentioned_mobile_list = {});
/*
* @brief 发送markdown.
* @param content:发送的markdown内容,最长不超过4096个字节,必须是utf8编码
* @retval 发送成功返回true
* @note
*/
bool sendMarkdown(const QString& content);
/*
* @brief 发送图片.
* @param image:图片-最大不能超过2M(超过大小会自动压缩),内部采用发送JPG格式图片
* @retval 发送成功返回true
* @note
*/
bool sendImage(const QImage& image);
/*
* @brief 发送图文链接.
* @param articles:图文消息,一个图文消息支持1到8条图文
* @retval 发送成功返回true
* @note
*/
bool sendArticles(const QList<Articles>&articles);
/*
* @brief 发送文件.
* @param media_id:文件id,通过下文的文件上传接口获取
* @retval 发送成功返回true
* @note
*/
bool sendFile(const QString& media_id);
/*
* @brief 上传文件.要求文件大小在5B~20M之间
* @param filename:文件名称 -带后缀的名字
* @param filedata:文件数据,要求文件大小在5B~20M之间
* @param info:上传文件后返回的信息
* @retval 发送成功返回true
* @note
*/
bool put(const QString& filename, const QByteArray& filedata, PutReturnInfo& info);
/*
* @brief 上传文件.要求文件大小在5B~20M之间
* @param filename:文件名称-绝对地址或相对地址
* @param info:上传文件后返回的信息
* @retval 发送成功返回true
* @note
*/
bool put(const QString& filename, PutReturnInfo& info);
protected:
void init();
protected:
QString m_key;//钥匙
};
#endif // !XQRobotWeCom_H
测试代码
XQRobotWeCom Robot;
//这条是显示调试信息发送的json文本,默认不开启,不看的话这行可以不要
Robot.setDebugModel(XQRobot::ShowJson,true);
//这边填写自己机器人的key
Robot.setKey("???");
//发送普通文本
Robot.sendText("这是一条Qt测试信息");
//测试图片
Robot.sendImage(QImage("C:\\Users\\jxy\\Pictures\\新海天.jpg"));
//测试图文
Robot.sendArticles({ {"中秋节礼品领取","今年中秋节公司有豪礼相送","http://www.qq.com","http://res.mail.qq.com/node/ww/wwopenmng/images/independent/doc/test_pic_msg1.png"} });
//测试上传文件
XQRobotWeCom::PutReturnInfo info;
if (Robot.put("C:\\Users\\jxy\\Desktop\\群晖桥接网卡.txt", info))
{
QString media_id = info.media_id;
Robot.sendFile(info.media_id);
}