Go调用企业微信API发送自定义信息

时间:2019-01-02 19:32:38   收藏:0   阅读:247
  • 使用方法
  • # 编译成可执行文件之后,直接用命令调用传递内容即可
    
    编译: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)
    
    }
    
    评论(0
    © 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
    迷上了代码!