mirror of https://github.com/allinssl/allinssl
88 lines
1.9 KiB
Go
88 lines
1.9 KiB
Go
package report
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"io"
|
|
"net/http"
|
|
"strings"
|
|
)
|
|
|
|
func PostHeader(url string, msg []byte, headers map[string]string) (string, error) {
|
|
client := &http.Client{}
|
|
|
|
req, err := http.NewRequest("POST", url, strings.NewReader(string(msg)))
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
for key, header := range headers {
|
|
req.Header.Set(key, header)
|
|
}
|
|
resp, err := client.Do(req)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
defer resp.Body.Close()
|
|
body, err := io.ReadAll(resp.Body)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
return string(body), nil
|
|
}
|
|
|
|
func PostJson(url string, msg []byte) (string, error) {
|
|
headers := make(map[string]string)
|
|
headers["Content-Type"] = "application/json;charset=utf-8"
|
|
res, err := PostHeader(url, msg, headers)
|
|
return res, err
|
|
}
|
|
|
|
func NotifyWorkWx(params map[string]any) error {
|
|
if params == nil {
|
|
return fmt.Errorf("缺少参数")
|
|
}
|
|
providerID := params["provider_id"].(string)
|
|
// fmt.Println(providerID)
|
|
providerData, err := GetReport(providerID)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
configStr := providerData["config"].(string)
|
|
fmt.Println(configStr)
|
|
var config map[string]string
|
|
err = json.Unmarshal([]byte(configStr), &config)
|
|
if err != nil {
|
|
return fmt.Errorf("解析配置失败: %v", err)
|
|
}
|
|
url := config["url"]
|
|
if url == "" {
|
|
return fmt.Errorf("缺少企业微信URL配置")
|
|
}
|
|
if config["data"] == "" {
|
|
config["data"] = `
|
|
{
|
|
"msgtype": "news",
|
|
"news": {
|
|
"articles" : [
|
|
{
|
|
"title" : "__subject__",
|
|
"description" : "__body__。",
|
|
"url" : "https://allinssl.com/",
|
|
"picurl" : "https://allinssl.com/logo.svg"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
`
|
|
}
|
|
msg, err := ReplaceJSONPlaceholders(config["data"], params)
|
|
if err != nil {
|
|
return fmt.Errorf("替换JSON占位符失败: %v", err)
|
|
}
|
|
_, err = PostJson(url, []byte(msg))
|
|
if err != nil {
|
|
return fmt.Errorf("发送企业微信消息失败: %v", err)
|
|
}
|
|
return nil
|
|
}
|