• 使用方法
# 编译成可执行文件之后,直接用命令调用传递内容即可

编译:go build send_message.go

使用:

./send_message "这是一条测试消息\n测试回车"
  • 代码

package main

import (
    "bytes"
    "github.com/json-iterator/go"
    "io/ioutil"
    "net/http"
    "os"
    "strings"
)

var json = jsoniter.ConfigCompatibleWithStandardLibrary

type JSON struct {
    Access_token string `json:"access_token"`
}

type MESSAGES struct {
    Touser string `json:"touser"`
    Toparty string `json:"toparty"`
    Msgtype string `json:"msgtype"`
    Agentid int `json:"agentid"`
    Text struct {
        //Subject string `json:"subject"`
        Content string `json:"content"`
    } `json:"text"`
    Safe int `json:"safe"`
}

func Get_AccessToken(corpid,corpsecret string) string {
    gettoken_url := "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=" + corpid + "&corpsecret=" + corpsecret
    //print(gettoken_url)
    client := &http.Client{}
    req, _ := client.Get(gettoken_url)
    defer req.Body.Close()
    body, _ := ioutil.ReadAll(req.Body)
    //fmt.Printf("\n%q",string(body))
    var json_str JSON
    json.Unmarshal([]byte(body), &json_str)
    //fmt.Printf("\n%q",json_str.Access_token)
    return json_str.Access_token
}

func Send_Message(access_token,msg string) {
    send_url := "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=" + access_token
    //print(send_url)
    client := &http.Client{}
    req, _ := http.NewRequest("POST", send_url, bytes.NewBuffer([]byte(msg)))
    req.Header.Set("Content-Type", "application/json")
    req.Header.Set("charset","UTF-8")
    resp, err := client.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()
    //fmt.Println("response Status:", resp.Status)
    //body, _ := ioutil.ReadAll(resp.Body)
    //fmt.Println("response Body:", string(body))
}

func messages(touser string,toparty string,agentid int,content string) string{
    msg := MESSAGES{
        Touser: touser,
        Toparty: toparty,
        Msgtype: "text",
        Agentid: agentid,
        Safe: 0,
        Text: struct {
            //Subject string `json:"subject"`
            Content string `json:"content"`
        }{Content: content},
    }
    sed_msg, _ := json.Marshal(msg)
    //fmt.Printf("%s",string(sed_msg))
    return string(sed_msg)
}

func main() {
    touser := "BigBoss"  //企业号中的用户帐号,在zabbix用户Media中配置,如果配置不正常,将按部门发送。
    toparty := "2"       //企业号中的部门id。
    agentid:= 1000002    //企业号中的应用id。
    corpid := "xxxxxxxxxxxxxxxxx"  //企业号的标识
    corpsecret := "exxxxxxxxxxxxxxxxxxxxxxxxxxxxx"  ///企业号中的应用的Secret
    accessToken := Get_AccessToken(corpid,corpsecret)
    content := os.Args[1]
    //  fmt.Println(content)
    // 序列化成json之后,\n会被转义,也就是变成了\\n,使用str替换,替换掉转义
    msg := strings.Replace(messages(touser,toparty,agentid,content),"\\\\","\\",-1)

    //  fmt.Println(strings.Replace(msg,"\\\\","\\",-1))
    Send_Message(accessToken,msg)

}