一、前言

最近通过python实现了发送消息给企业微信的功能,参考链接:

  • 【Jenkins学习 】如何编写Python脚本来调用企业微信的api通知企业微信成员关于Jenkins的编译结果? https://blog.csdn.net/qq446282412/article/details/86361318

但是并不是每台Linux服务器上都有合适的python版本,之前这个python脚本是运行在Python 2环境下的,但是可能新的Linux服务器上装的是Python 3 之类的,因此可能写一个Shell脚本更加通用,因此我准备来写个Shell脚本来实现发送消息给企业微信。

但是写好的脚本都是需要传入参数的,因此学习一下Shell命令行参数解析工具getopts是如何使用的?通过下面的链接可以学习到。

  • 【Linux学习】Shell命令行参数解析工具getopts是如何使用的? https://mp.csdn.net/postedit/86493502

下面我们来真正实现通过shell脚本调用企业微信api来发消息给企业微信成员的功能。

二、企业微信封装接口介绍

公司负责企业微信推广的同事对企业微信发送消息的api进行了再次封装,然后发送了一篇api文档给我,大致如下:

2.1 请求接口步骤

  • 1 获取apid与Secret
    请联系公司内部推广企业微信的同事,可得到调用所需的ClientId与Secret

  • 2 获取token的api
    请求api

 POST: http://ip地址:8000/connect/token{client_id:步骤1中获得,client_secret:步骤1中获得,grant_type:"client_credentials",scope:"ApiGateway"}

注:body使用x-www-form-urlencoded

返回的内容

 返回内容:{"access_token":"","expires_in": 3600,"token_type":"Bearer"}
  • 3 使用步骤2中得到的Bearer Token请求资源.

2.2 请求接口步骤发送微信消息接口说明

    1. 发送图文信息
POST: http://ip地址:8000/api/wechat/news
{"toUser" : "工号1|工号2....","agentId" : 0,"news" : {"articles" : [{"title" : "中秋节礼品领取","description" : "今年中秋节公司有豪礼相送","url" : "URL","picurl" : "http://res.mail.qq.com/node/ww/wwopenmng/images/independent/doc/test_pic_msg1.png","btntxt":"更多"}]}
}
    1. 发送文本消息
POST: http://ip地址:8000/api/wechat/text
{"toUser" : "工号1|工号2....","agentId" : 0,"content":"xxxxxx"
}
    1. 文本卡片消息
POST: http://ip地址:8000/api/wechat/textcard{"toUser" : "工号1|工号2....","agentId" : 0,"title" : "领奖通知","description" : "<div class=\"gray\">2016年9月26日</div> <div class=\"normal\">恭喜你抽中iPhone 7一台,领奖码:xxxx</div><div class=\"highlight\">请于2016年10月10日前联系行政同事领取</div>","url":"http://www.baidu.com","btntxt":"更多"}

三、编写shell脚本来调用企业微信api

#!/bin/bash#用法提示
usage() {echo "Usage:"echo "  qiyewechat.sh [-u USER] [-t TITLE] [-c CONTENT] [-d DETAIL] [-p PICTURE]"echo "Description:"echo "    USER, 用户."echo "    TITLE, 标题."echo "    CONTENT, 内容."echo "    DETAIL, 细节."echo "    PICTURE, 图片."exit -1
}# 获取脚本执行时的选项
while getopts u:t:c:d:p: option
docase "${option}"  inu) USER=${OPTARG};;t) TITLE=${OPTARG};;c) CONTENT=${OPTARG};;d) DETAIL=${OPTARG};;p) PICTURE=${OPTARG};;h) usage;;?) usage;;esacecho $optionecho $OPTARGdone#api的token相关参数
client_id='yourId'
client_secret='yourSecret'
grant_type='client_credentials'
scope='ApiGateway'agentId=0#RESTFUL API 接口相关参数
HOST=http://xxx.xxxxxx.com:8000wechat_api_token=$HOST/connect/token
#POST: http://ip地址/connect/token
#{#       client_id:步骤1中获得,
#       client_secret:步骤1中获得,
#       grant_type:"client_credentials",
#       scope:"ApiGateway"
#}
#注:body使用x-www-form-urlencoded#返回内容:
#{#       "access_token":"",
#       "expires_in": 3600,
#       "token_type":"Bearer"
#}wechat_api_textcard=$HOST/api/wechat/textcard
#POST: http://ip地址/api/wechat/textcard
#{#   "toUser" : "工号1|工号2....",
#   "agentId" : 0,
#   "title" : "领奖通知",
#   "description" : "<div class=\"gray\">2016年9月26日</div> <div class=\"normal\">恭喜你抽中iPhone 7一台,领奖码:xxxx</div><div class=\"highlight\">请于2016年10月10日
前联系行政同事领取</div>",
#   "url":"http://www.baidu.com",
#   "btntxt":"更多"
#}wechat_api_news=$HOST/api/wechat/news
#POST: http://ip地址/api/wechat/news
#{
#   "toUser" : "工号1|工号2....",
#   "agentId" : 0,
#   "news" : {
#          "articles" : [
#                  {
#                          "title" : "中秋节礼品领取",
#                          "description" : "今年中秋节公司有豪礼相送",
#                          "url" : "URL",
#                          "picurl" : "http://res.mail.qq.com/node/ww/wwopenmng/images/independent/doc/test_pic_msg1.png",
#                          "btntxt":"更多"
#                  }
#               ]
#  }
#}wechat_api_text=$HOST/api/wechat/text
#发送文本消息
#POST: http://ip地址/api/wechat/text
#{
#       "toUser" : "工号1|工号2",
#       "agentId" : 0,
#       "content":"xxxxxx"
#}# 获取token
function getAccessToken {curl -d "client_id=$client_id&client_secret=$client_secret&grant_type=$grant_type&scope=$scope" -X POST $wechat_api_token > token.jsontoken=$(cat token.json | python3 -c "import sys, json; print(json.load(sys.stdin)['access_token'])")echo $token
}#发送文本消息
echo -e "{\"toUser\":\""$USER"\", \"agentId\":"$agentId", \"content\":\""$CONTENT"\"}" > data_textcard.json
curl  --write-out %{http_code} -d '@data_textcard.json' -H "Content-Type: application/json" -H "Authorization: Bearer $(getAccessToken)" -X POST $wechat_api_text#发送图文信息
#echo -e "{\"toUser\":\""$USER"\", \"agentId\":"$agentId", \"title\":\""$TITLE"\", \"description\":\""$CONTENT"\", \"url\":\""$DETAIL"\"}" > data_textcard.json
#curl  --write-out %{http_code} -d '@data_textcard.json' -H "Content-Type: application/json" -H "Authorization: Bearer $(getAccessToken)" -X POST $wechat_api_textcard#发送图文信息
# echo -e "{\"toUser\":\""$USER"\",\"agentId\":"$agentId", \"articles\":[{\"title\":\""$TITLE"\", \"description\":\""$CONTENT"\", \"url\":\""$DETAIL"\", \"picUrl\":\""$PICTURE"\"}]}" > data_news.json
# curl  --write-out %{http_code} -d '@data_news.json' -H "Content-Type: application/json" -H "Authorization: Bearer $(getAccessToken)" -X POST $wechat_api_news

其中

  token=$(cat token.json | python3 -c "import sys, json; print(json.load(sys.stdin)['access_token'])")

这句中的python3是Linux服务器配置好的,可以参考下面的链接,如果你的系统默认是python2的话,直接改成python即可。

  • https://blog.csdn.net/u010383937/article/details/73162281

四、运行shell脚本调用企业微信api来发消息给企业微信成员

我们来测试一下,20xxxxxx是我的工号,我发给自己测试下。

root@ubuntu116:/data/gitlabData/auto_back_shell# ./qiyewechat-notifier.sh  -c “测试下Linux环境下发生企业微信消息” -u 20xxxxxx
c
“测试下Linux环境下发生企业微信消息”
u
20xxxxxx% Total    % Received % Xferd  Average Speed   Time    Time     Time  CurrentDload  Upload   Total   Spent    Left  Speed
100   902    0   787  100   115  34220   5000 --:--:-- --:--:-- --:--:-- 35772
{"result":true}200root@ubuntu116:/data/gitlabData/auto_back_shell# 

OK了,成功了!现在我可以去修改之前的gitlab备份的全部shell脚本了,之前都是讲备份结果通过发邮件的方式,现在可以改为发送结果到企业微信了。


作者:欧阳鹏 欢迎转载,与人分享是进步的源泉!
转载请保留原文地址:https://blog.csdn.net/qq446282412/article/details/86495251
☞ 本人QQ: 3024665621
☞ QQ交流群: 123133153
☞ github.com/ouyangpeng
☞ oypcz@foxmail.com


【Linux学习】如何编写Shell脚本调用企业微信api来发消息给企业微信成员?相关推荐

  1. Linux学习入门: shell脚本常用命令汇总

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 前言 Linux学习最初就是要掌握shell脚本的基本命令语句,这个也是我们操作Linux操作系统的关键步骤,但是Linux的shel ...

  2. Linux学习--如何通过Shell脚本实现发送邮件通知功能?

    1.安装和配置sendmail 不需要注册公网域名和MX记录(不需要架设公网邮件服务器),通过Linux系统自带的mail命令即可对公网邮箱发送邮件.不过mail命令是依赖sendmail的,所以我们 ...

  3. 企业微信加密消息体_企业微信机器人怎么发消息?企业微信机器人可以定时发消息吗?...

    企业微信外部群自带群机器人功能,可以协助员工高效管理社群,帮助我们运营客户,那么企业微信机器人怎么用呢? 使用企业微信机器人,需要管理员先进入企业微信管理后台,在[客户联系]-[效率工具]-[自动回复 ...

  4. 使用shell脚本调用mysql数据库存储过程,并设置定时任务

    本来是要mysql数据库中创建事件任务来,定时执行存储过程,做数据传输的...后来由于种种原因,就使用crontab来定时执行,调用存储过程. 实现这个数据传输分为两步: 第一步:编写shell脚本调 ...

  5. Linux_《Linux命令行与shell脚本编程大全》第十八章学习总结

    时间:2017年12月04日星期一 说明:本文部分内容均摘取自书籍<Linux命令行与shell脚本编程大全>,版权归原作者所有.<Linux命令行与shell脚本编程大全>( ...

  6. Linux_《Linux命令行与shell脚本编程大全》第二章学习总结

    时间:2017年04月05日 说明:本文部分内容均摘取自书籍<Linux命令行与shell脚本编程大全>,版权归原作者所有.<Linux命令行与shell脚本编程大全>(第三版 ...

  7. linux 脚本监听,Linux—编写shell脚本监控主机

    编写SHELL脚本监控主机 1.用vi命令在/root目录是新建一个脚本文件sysmon.sh: 内容如下: #!/bin/bash dug=$(df -h | grep "/$" ...

  8. linux 编写shell脚本

    目录 简单shell 示例 接受用户参数 判断用户参数(判断语法) 流程控制语句 (if .for .while.case) 简单shell 示例 Shell脚本命令的工作方式有两种:交互式和批处理. ...

  9. linux运维脚本编写,Linux运维常用shell脚本实例 (转)

    1.用shell脚本批量建立Linux用户 实现要求:创建用户student1到student50,指定组为student组!而且每个用户需要设定一个不同的密码! #!/bin/bash for i ...

最新文章

  1. 我的世界java版背景图更换_《我的世界手机版》如何修改界面背景 界面背景修改攻略图文教程...
  2. SAP MM 外部采购退货的ARM功能实在是鸡肋?
  3. MySQL优化学习总结
  4. 数据的设计命名的十个要点
  5. Linux学习之系统编程篇:exec 函数族
  6. Lecture 2 Asymptotic Notation
  7. 直播预告 | 乘云而上:云原生数据仓库AnalyticDB
  8. 实践案例丨教你一键构建部署发布前端和Node.js服务
  9. SkinSharp用法
  10. Oracle查看被锁的表和解锁[转]
  11. 软件公司产品营销大数据分析(下)
  12. JavaScript设计模式详解:01、导学
  13. Linux下安装ORACLE(一周成果、全是干货!)
  14. 初步使用计算机的教学反思,静夜思教学反思(精选10篇)
  15. 如何下载知网上的论文?
  16. 用Python从零复现A星寻路算法 | 手撕代码#1
  17. c语言double ave,[编程入门]结构体之成绩统计2-题解(C语言代码)
  18. sublime text3 配置python、ruby、c/c++(c/c++不推荐这个方法)
  19. 宋体的显示 --12号字的真正大小
  20. DHTMLX Spreadsheet JavaScript Pro 5.0

热门文章

  1. 通过 Nginx 实现多机负载均衡
  2. 直播代码中关于敏感词替换的代码编辑
  3. ps磁性套索工具如何抠图
  4. Electron如何支持ESM模块
  5. 设计模式六大原则(SOLID)
  6. C++ Reference: Standard C++ Library reference: C Library: cstdio: stderr
  7. matlab-高数 plot 二维画图 绝对值函数 取整函数 分段函数
  8. android gps距离计算器,计算器刷成安卓系统 刷系统千万别找设计师
  9. html中a标签的属性
  10. Gitlab 12.9.4 的搭建部署及遇到的问题。