1 Star 0 Fork 0

蔡风华 / dingtalkutils

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
dingtalkutils.go 1.95 KB
一键复制 编辑 原始数据 按行查看 历史
package dingtalkutils
import (
"bytes"
"crypto/hmac"
"crypto/sha256"
"encoding/base64"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
"time"
"gitee.com/cfh008/runutils"
)
type DingtalkRobot struct {
Webhook string
Secret string
}
func hmacSha256(strToSign string, secret string) string {
h := hmac.New(sha256.New, []byte(secret))
h.Write([]byte(strToSign))
return base64.StdEncoding.EncodeToString(h.Sum(nil))
}
func (robot *DingtalkRobot) GetWebhookWithSignature() (result string) {
timestamp := time.Now().UnixNano() / 1e6
strToSign := fmt.Sprintf("%d\n%s", timestamp, robot.Secret)
sign := hmacSha256(strToSign, robot.Secret)
result = fmt.Sprintf("%s&timestamp=%d&sign=%s", robot.Webhook, timestamp, sign)
return
}
func (robot *DingtalkRobot) SendMapData(data map[string]interface{}) (err error) {
url := robot.GetWebhookWithSignature()
b, doErr := json.Marshal(data)
if doErr != nil {
errInfo := fmt.Sprintf("%v call json.Marshal(%v) failed with %v", runutils.RunFuncName(), data, doErr)
err = fmt.Errorf(errInfo)
return
}
resp, doErr := http.Post(url,
"application/json",
bytes.NewBuffer(b))
if doErr != nil {
errInfo := fmt.Sprintf("%v call http.Post failed with %v", runutils.RunFuncName(), doErr)
err = fmt.Errorf(errInfo)
return
}
defer resp.Body.Close()
body, doErr := ioutil.ReadAll(resp.Body)
if doErr != nil {
errInfo := fmt.Sprintf("%v call ioutil.ReadAll failed with %v", runutils.RunFuncName(), doErr)
err = fmt.Errorf(errInfo)
return
}
var result map[string]interface{}
json.Unmarshal(body, &result)
// fmt.Println(string(body))
errcode := result["errcode"].(float64)
if errcode != 0 {
errInfo := fmt.Sprintf("%v result(%v) is abnormal", runutils.RunFuncName(), string(body))
err = fmt.Errorf(errInfo)
return
}
return
}
func SendMapData(webhook string, secret string, data map[string]interface{}) (err error) {
robot := DingtalkRobot{Webhook: webhook, Secret: secret}
return robot.SendMapData(data)
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/cfh008/dingtalkutils.git
git@gitee.com:cfh008/dingtalkutils.git
cfh008
dingtalkutils
dingtalkutils
master

搜索帮助

344bd9b3 5694891 D2dac590 5694891