利用企业微信,可以很方便的给自己或者企业员工发送各种信息,用于通知、公告,自动化信息发送,生产信息发送等等。不象微信公众号受到发送限制,也不象网页版微信,非官方API不知道什么时候就不能用了。
我就用它发送很多信息:
-
服务器登陆信息:我有几个服务器,客户的,自己的,家里24小时的pi。谁有用户登陆,它会发个信息到企业微信。
-
家里是电信宽带,动态IP,让它自动发个到企业微信,于是就可以远程操作了。
-
自己做了一个门禁:家里大门,每次开门关门都会发信息的,有人回家我是知道的。 :)
-
家人电脑上给我发信息。在电脑上直接发送信息,这方便了吧。根本不用登陆,因为我将基本信息已经写入程序,直接发送就行。
-
邮件:你让它自动去轮询邮箱,发现某个标识的文件标题,就可以从企业微信上通知你,及时,而不被骚扰。
-
网站发送信息给我:我开发的网站,或者是自己的网站,通过接口随时可以给我发信息
-
进一步还可以拓展为网页与企业微信的交互,即可以让网页用户直接与企业微信号沟通,象客服一样。
-
你还可以想到很多….
代码很简单
package main
import (
"bytes"
"fmt"
"io/ioutil"
"net/http"
"os"
"strings"
"time"
"github.com/soease/tools"
jsoniter "github.com/json-iterator/go"
)
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 := "" //企业号中的用户帐号
content := ""
if len(os.Args) == 3 {
touser = os.Args[1]
content = time.Now().Format("2006-01-02 15:04:05") + ": " + os.Args[2]
} else if len(os.Args) == 2 {
touser = "ease"
if strings.ToUpper(os.Args[1])=="IP" {
content ="当前设备公网IP: " + tools.WanIP()
} else {
content = time.Now().Format("2006-01-02 15:04:05") + ": " + os.Args[1]
}
} else {
fmt.Printf("\n格式:%s [用户ID] 信息\n\n", os.Args[0])
return
}
toparty := "0" //企业号中的部门id。
agentid := 0 //企业号中的应用id。
corpid := "wxce27304be..." //企业号的标识
corpsecret := "ypLhR5NLU2E..." ///企业号中的应用的Secret
accessToken := Get_AccessToken(corpid, corpsecret)
// 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)
}