Go语言 调用企业微信webhook报警,很实用

Go语言 调用企业微信webhook报警,很实用

学习与分享 Go语言圈 2023-03-20 08:30 发表于广东
Go语言圈
Go语言开发者的学习好助手,分享Go语言知识,技术技巧,学习与交流Go语言开发经验,互动才有助于技术的提升,每天5分钟,助你GO语言技术快乐成长
72篇原创内容
图片

用编码工具,建议用最新版Goland,因为这里有正式版激活账号

https://web.52shizhan.cn/activity/xqt8ly

 

现在就开始你的Go语言学习之旅吧!人生苦短,let’s Go.


图片

图片

通过企业微信创建应用,然后设定当前的应用对某些用户可见,同时微信提供了各种接口,供开发人员调用,实现发送各种文本信息,图片,音频,视频等等。

1, 注册企业微信
首先,你得有一个企业微信,没有的自行百度注册一个。

在有企业微信的前提之下,进入企业微信管理平台(当然需要管理员权限)。微信的API文档有详细的介绍,可详细的阅读。
点击企业应用选项,在下方选择自建应用的创建应用按钮。

 

图片

 

设置头像,应用名称,应用描述之后,点击创建应用即可。

图片

创建完应用之后,需要为这个应用设定课件范围,也就是向哪些好友提供这个应用。选择刚刚创建的应用,点击可见范围,选择人即可。

这时候,这个应用就创建好了,简单测试一下,选择发送消息,输入要发送的消息,选择特定的人群,点击发送,这时候在我们的企业微信上特定的选中人群就会收到刚刚发送的消息。

2.调用API接口,发送消息
微信的API文档中的发送消息里,详细的讲解了开发人员需要做的事。
https://work.weixin.qq.com/api/doc#10167
2.1 根据企业微信的CorpID 和应用的 Secret获取token,CorpID 在我的企业里,Secret在刚刚创建的应用里。

2.2 根据获取的token,发送要发送的内容,在发送之前需要指定发送的部门和人员,具体的设置方法见文档。

代码如下

package main

import (
    "bytes"
    "encoding/json"
    "errors"
    "flag"
    "fmt"
    "io/ioutil"
    "net/http"
)

const (
    //发送消息使用导的url
    sendurl = `https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=`
    //获取token使用导的url
    get_token = `https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=`
)

var requestError = errors.New("request error,check url or network")

type access_token struct {
    Access_token string `json:"access_token"`
    Expires_in   int    `json:"expires_in"`
}

//定义一个简单的文本消息格式
type send_msg struct {
    Touser  string            `json:"touser"`
    Toparty string            `json:"toparty"`
    Totag   string            `json:"totag"`
    Msgtype string            `json:"msgtype"`
    Agentid int               `json:"agentid"`
    Text    map[string]string `json:"text"`
    Safe    int               `json:"safe"`
}

type send_msg_error struct {
    Errcode int    `json:"errcode`
    Errmsg  string `json:"errmsg"`
}

func main() {
    touser := flag.String("t", "GaoXing", "-t user 直接接收消息的用户昵称")
    agentid := flag.Int("i", (填写自己的), "-i 0 指定agentid")
    content := flag.String("c", "微信报警", "-c 'Hello world' 指定要发送的内容")
    corpid := flag.String("p", "------(填写自己的)------", "-p corpid 必须指定")
    corpsecret := flag.String("s", "------(填写自己的)-------", "-s corpsecret 必须指定")
    flag.Parse()

    if *corpid == "" || *corpsecret == "" {
        flag.Usage()
        return
    }

    var m send_msg = send_msg{Touser: *touser, Toparty: "C_G_X", Msgtype: "text", Agentid: *agentid, Text: map[string]string{"content": *content}}

    token, err := Get_token(*corpid, *corpsecret)
    if err != nil {
        println(err.Error())
        return
    }
    fmt.Println("获取token成功:", token)
    buf, err := json.Marshal(m)
    if err != nil {
        return
    }
    err = Send_msg(token.Access_token, buf)
    if err != nil {
        println(err.Error())
    } else {
        fmt.Println("发送消息成功", string(buf))
    }

}

//发送消息.msgbody 必须是 API支持的类型
func Send_msg(Access_token string, msgbody []byte) error {
    body := bytes.NewBuffer(msgbody)
    resp, err := http.Post(sendurl+Access_token, "application/json", body)
    if resp.StatusCode != 200 {
        return requestError
    }
    buf, _ := ioutil.ReadAll(resp.Body)
    resp.Body.Close()
    var e send_msg_error
    err = json.Unmarshal(buf, &e)
    if err != nil {
        return err
    }
    if e.Errcode != 0 && e.Errmsg != "ok" {
        return errors.New(string(buf))
    }
    return nil
}

//通过corpid 和 corpsecret 获取token
func Get_token(corpid, corpsecret string) (at access_token, err error) {
    resp, err := http.Get(get_token + corpid + "&corpsecret=" + corpsecret)
    if err != nil {
        return
    }
    defer resp.Body.Close()
    if resp.StatusCode != 200 {
        err = requestError
        return
    }
    buf, _ := ioutil.ReadAll(resp.Body)
    err = json.Unmarshal(buf, &at)
    if at.Access_token == "" {
        err = errors.New("corpid or corpsecret error.")
    }
    return
}

 

 

 

文章首发:https://blog.csdn.net/suiban7403/article/details/78198536

 

 

 

 

 

 

更多相关Go语言的技术文章或视频教程,请关注本公众号获取并查看,感谢你的支持与信任!

 

收录于合集 #学Go语言哪些事儿
 160
上一篇实现 库存扣减 ,用Go语言如何做 ?
阅读 15
 
 
 
posted @ 2023-03-20 08:36  技术颜良  阅读(393)  评论(0编辑  收藏  举报