go

go加签发送消息到钉钉

背景

阿里云有个产品3个月后到期,想做个提醒发送到钉钉群里。

步骤

cat send_ding_msg.go

package main

import (
    //用于生成HMAC-SHA256签名。
    "crypto/hmac"
    "crypto/sha256"
    "encoding/base64"
    "fmt"
    "io"
    "net/http"
    "strings"
    "time"
)

const (
    // 替换为你的钉钉机器人 Webhook 地址
    webhook = "https://oapi.dingtalk.com/robot/send?access_token=d8e72ab。。。&timestamp=&sign="
    // 替换为你的加签密钥
    secret = "SECc3。。。"
)

// 生成加签
func getSign() (string, int64) {
    timestamp := time.Now().UnixMilli()                      // 获取当前毫秒级时间戳
    stringToSign := fmt.Sprintf("%d\n%s", timestamp, secret) // 拼接签名字符串
    h := hmac.New(sha256.New, []byte(secret))                // 创建HMAC实例
    h.Write([]byte(stringToSign))                            // 写入待签名字符串
    sign := base64.StdEncoding.EncodeToString(h.Sum(nil))    // 计算签名并Base64编码
    return sign, timestamp                                   // 返回签名和时间戳。
}

// 发送消息到钉钉
func sendDingTalkMessage(message string) error {
    sign, timestamp := getSign()                                            // 获取签名和时间戳
    url := fmt.Sprintf("%s&timestamp=%d&sign=%s", webhook, timestamp, sign) // 拼接完整的URL

    payload := fmt.Sprintf(`{
        "msgtype": "text",
        "text": {
            "content": "%s"
        }
    }`, message) // 构建JSON消息体

    resp, err := http.Post(url, "application/json", strings.NewReader(payload)) // 发送POST请求
    if err != nil {
        return fmt.Errorf("发送请求失败: %v", err)
    }
    // 关闭响应体.防止因Body重用时产生的闭包问题,defer resp.Body.Close()
    defer func(Body io.ReadCloser) {
        err := Body.Close()
        if err != nil {

        }
    }(resp.Body)

    body, err := io.ReadAll(resp.Body)
    if err != nil {
        return fmt.Errorf("读取响应失败: %v", err)
    }

    if resp.StatusCode != http.StatusOK {
        return fmt.Errorf("发送失败,状态码: %d, 响应: %s", resp.StatusCode, string(body))
    }

    return nil
}

func main() {
    message := "MQ即将到期,请及时续费!"
    err := sendDingTalkMessage(message)
    if err != nil {
        fmt.Printf("发送消息失败: %v\n", err)
        return
    }
    fmt.Println("消息发送成功!")
}

构建

go build send_ding_msg.go

创建crontab,在9月11-25日每天9点发送消息。

0 9 11-25 9 * /root/go_script/send_ding_msg

file

分类: go
0 0 投票数
文章评分
订阅评论
提醒
guest

0 评论
最旧
最新 最多投票
内联反馈
查看所有评论

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部
0
希望看到您的想法,请您发表评论x