#!/bin/sh

# 微信消息发送脚本

#全局配置--
#微信公众号appID
appID=xxxxxxxxxxxxxx

#微信公众号appsecret
appsecret=xxxxxxxxxxxxxxxxx

#微信公众号发送消息模板
tpl_id=xxxxxxxxxxxxxxxxxxxxxxxxx
#消息模板:
#   {{first.DATA}} 
#   项目名称:{{name.DATA}} 
#   报警时间:{{date.DATA}}
#
#   {{remark.DATA}}

#获取微信公众号AccessToken,并缓存到本地 函数
getAccessToken(){
    if [ -f "$HOME/.wechat_accesstoken" ]; then
        access_token=`cat $HOME/.wechat_accesstoken | awk -F":" '{print $1}'`
        expires_in=`cat $HOME/.wechat_accesstoken | awk -F":" '{print $2}'`
        time=`cat $HOME/.wechat_accesstoken | awk -F":" '{print $3}'`
            if [ -z $access_token ] || [ -z $expires_in ] || [ -z $time ]; then
            rm -f $HOME/.wechat_accesstoken
            getAccessToken 
        fi
    else
        content=$(curl "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appID&secret=$appsecret")
        echo "get content: $content"
        access_token=`echo $content | awk -F "\"" '{print $4}'`
        expires_in=`echo $content | awk -F "\"" '{print $7}' | cut -d"}" -f1|cut -c2-`
        echo "access_token = $access_token"
        echo "expires_in = $expires_in"
        time=$(date +%s)
        echo "$access_token:$expires_in:$time" > $HOME/.wechat_accesstoken

if [ -z $access_token ] || [ -z $expires_in ] || [ -z $time ]; then
                    echo "not get access_token"
                    exit 0
        fi
        fi

remain=$[$(date +%s) - $time]
    limit=$[$expires_in - 60]
    if [ $remain -gt $limit ]; then
        rm -f $HOME/.wechat_accesstoken
        getAccessToken
    fi
}
#发送消息函数
sendMessage(){
    #消息json体
    message=`cat << EOF
    {
    "touser":"$openid",
    "template_id":"$tpl_id",
    "url":"$url",
    "data":{
            "first": {
                    "value":"$first",
                    "color":"#FF0000"
            },
            "name":{
                    "value":"$name",
                    "color":"#173177"
            },      
            "date": {
                    "value":"$date",
                    "color":"#173177"
            },
            "remark":{
                    "value":"$remark",
                    "color":"#FF0000"
            }
    }
     }
EOF
`
   echo "send message : $message"
   curl -X POST -H "Content-Type: application/json"  https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=$access_token -d "$message" 
}

#帮助信息函数
usage(){
    cat <<EOF
usage: $0 [-u openids -s summary -n name -t time -d detail -l link] [-h]
    u   wechat user openid , multiple comma separated
    s   message summary
    n   project name
    t   alarm time
    d   message detail
    l   link address
    h   output this help and exit
EOF
}

#获取脚本执行参数
while getopts ":u:s:n:t:d:h:l:" op; do
    case $op in
        u)
        openids="$OPTARG"
        ;;
        s)
        first="$OPTARG"
        ;;
            n)
               name="$OPTARG"
        ;;
            t)
        date="$OPTARG"
        ;;
            d)
        remark="$OPTARG"
        ;;
        l)
        url="$OPTARG"
        ;;
        *)
        usage
        exit 0
        ;;
    esac
done

#判断条件满足发送消息
if [[ -n $openids && -n $first && -n $name && -n $date ]]; then
    getAccessToken
    OLD_IFS="$IFS"
    IFS=","
    arr=($openids)
    IFS="$OLD_IFS"
    for openid in ${arr[@]}
    do
        sendMessage
    done
    exit $?
else
    echo "params error."
    usage
    exit 1
fi

发送报警信息到微信公众号相关推荐

  1. 发布文章的php模板,PHP实现发送模板消息(微信公众号版)

    以下为开发步骤: 1.微信公众号为服务号且开通微信认证(其他类型账号不能发送) 2.ip白名单设置你的服务器ip(用于获取access_token) 3.网页授权你的域名(用于获取用户的openid) ...

  2. php获取微信公众号用户信息头像,微信公众号的web页面如何获取微信用户名和头像?...

    首先,你的网站入口必须是微信服务号(开通认证.拥有获取用户openid权限:订阅号是不行的). 方法:网页通过微信的Oauth2认证链接.(必须是微信的内置浏览器,通过微信服务号进入) 操作:通过服务 ...

  3. 小程序发送订阅消息,微信公众号发送消息模板

    首先讲两个注意事项 1.小程序和微信公众号的用户openid是不同的. 2.小程序需要用户手动授权订阅消息通知(一次性订阅是订阅一次发一次,长期订阅可以多发). 关于小程序和公众号AppID和AppS ...

  4. java如何监听微信关注事件,Java后端接收用户关注以及发送消息或者取消微信公众号的操作...

    请求的Controller import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import ...

  5. 公众号PHP模板修改,PHP 实现发送模板消息(微信公众号版)

    ``` $ACCESS_TOKEN = "";//ACCESS_TOKEN //openid数组 $touser = [ 'ovMzR1HD6LOcbcWLw-Xn9eKOyG1U ...

  6. java_微信公众号扫码绑定个人信息(微信公众号场景值二维码的使用)

    看了一下网上关于公众号场景值二维码这方面的教程,基本上是微信官方开发文档的复制,没有具体实例.这里给出实例,并附加二维码url转文件流的方法. 思路: 1.后台传入个人信息保存,以个人信息的" ...

  7. php订阅号发送消息,php实现微信公众号主动推送消息

    通过学习借鉴朋友的实现方法进行整理,实现了PHP版的微信公共平台消息主动推送,分享给大家供大家参考,具体内容如下 此方法是通过模拟登录微信公共平台的方法来实现的. 代码如下: 一.登录接口部分代码 / ...

  8. SAP系统和微信集成的系列教程之九:如何将微信用户发送给微信公众号的内容自动转存到SAP C4C系统

    本系列的英文版Jerry写作于2017年,这个教程总共包含十篇文章,发表在SAP社区上. 最近有不少朋友在微信上向我咨询SAP系统和微信公众号集成的问题,因此我把当时写的英文版翻译成中文,重新发布在我 ...

  9. sap 发送mesage_SAP系统和微信集成的系列教程之九:如何将微信用户发送给微信公众号的内容自动转存到SAP C4C系统...

    本系列的英文版Jerry写作于2017年,这个教程总共包含十篇文章,发表在SAP社区上. 最近有不少朋友在微信上向我咨询SAP系统和微信公众号集成的问题,因此我把当时写的英文版翻译成中文,重新发布在我 ...

最新文章

  1. Kubernetes — PV、PVC
  2. LOJ#162. 快速幂 2(分块)
  3. 为静态博客生成器WDTP移植了一款美美哒主题
  4. 第一章 | 使用python机器学习
  5. Posftix邮箱服务
  6. 从Maven远程存储库下载
  7. js中的关键子in的使用方法
  8. java实现rabbitmq路由模型(routing/topic queues), 生产者 消费者 交换机 消息队列
  9. webpack4.0版本中的js压缩问题
  10. aiml简介+源代码解析+中文分词(java)
  11. 基于k8s的CICD实现
  12. VBA字典对象操作技巧
  13. yum 下载并切换到本地源(银河麒麟V10,中标麒麟V5)
  14. saas商业模式和架构设计
  15. Thunderbolt3 方案介绍及应用案例介绍
  16. linux安装软件之./configure、make、make install 命令含义
  17. RK3399-商显广告机主板方案
  18. 文本内容相似度计算方法:simhash
  19. 【PaLM2】PaLM2 大语言模型与 Bard 使用体验
  20. npm run dev报错:getaddrinfo ENOTFOUND localhost

热门文章

  1. 每个架构师都应该了解的理论:康威定律
  2. IP地址的分类及子网掩码的计算
  3. 互联网地图栅格比例尺(3857,4326)
  4. JBOD(Just a Bunch Of Disks,磁盘簇)简介
  5. 《苏菲的世界》——读书笔记
  6. Android开发-蓝牙遥控器(字符串形式发送)-应用例程
  7. 虚拟机中linux连网,虚拟机Linux上网的方法
  8. MYSQL分区表学习
  9. Android知识架构 · Java的编程思想
  10. 新年最美表白烟花-祝大家新年快乐,表白成功