|
@@ -26,7 +26,7 @@ func (h *Hook) ConfigureMsgRecive(isEnable string, url string) (err error) {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
-// 发送微信文本消息
|
|
|
+// SendTextMsg 发送微信文本消息
|
|
|
func (h *Hook) SendTextMsg(wxid, msg, wxWxid string) error {
|
|
|
if h.ServerIp == "" {
|
|
|
conn, err := h.connWorkPhone()
|
|
@@ -128,59 +128,112 @@ func (h *Hook) SendTextMsg(wxid, msg, wxWxid string) error {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-// 发送微信图片
|
|
|
+// SendPicMsg 发送微信图片
|
|
|
func (h *Hook) SendPicMsg(wxid, picpath, diyfilename, wxWxid string) (err error) {
|
|
|
if h.ServerIp == "" {
|
|
|
- conn, err := h.connWorkPhone()
|
|
|
- if err != nil {
|
|
|
- err = fmt.Errorf("SendTextMsg failed")
|
|
|
- return err
|
|
|
- }
|
|
|
- defer func(conn *websocket.Conn) {
|
|
|
- err = conn.Close()
|
|
|
+ if h.Ctype == uint64(3) {
|
|
|
+ conn, err := h.connWorkPhone()
|
|
|
+ if err != nil {
|
|
|
+ err = fmt.Errorf("SendPicMsg failed")
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ defer func(conn *websocket.Conn) {
|
|
|
+ err = conn.Close()
|
|
|
+ if err != nil {
|
|
|
+ err = fmt.Errorf("SendPicMsg failed")
|
|
|
+ }
|
|
|
+ }(conn)
|
|
|
+ encodedString := base64.StdEncoding.EncodeToString([]byte(picpath))
|
|
|
+ contentType := "File"
|
|
|
+ if isImageFile(diyfilename) {
|
|
|
+ contentType = "Picture"
|
|
|
+ }
|
|
|
+
|
|
|
+ message := map[string]interface{}{
|
|
|
+ "MsgType": "TalkToFriendTask",
|
|
|
+ "Content": map[string]interface{}{
|
|
|
+ "WxId": wxWxid,
|
|
|
+ "ConvId": wxid,
|
|
|
+ "ContentType": contentType,
|
|
|
+ "Content": encodedString,
|
|
|
+ },
|
|
|
+ }
|
|
|
+ transportMessageJSON, err := json.Marshal(message)
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ // 发送 JSON 消息
|
|
|
+ err = conn.WriteMessage(websocket.TextMessage, transportMessageJSON)
|
|
|
+ if err != nil {
|
|
|
+ return fmt.Errorf("failed to send message: %v", err)
|
|
|
+ }
|
|
|
+ // 读取回复消息
|
|
|
+ _, replyMessage, err := conn.ReadMessage()
|
|
|
+ if err != nil {
|
|
|
+ return fmt.Errorf("failed to read message: %v", err)
|
|
|
+ }
|
|
|
+ var replyMessageData map[string]interface{}
|
|
|
+ err = json.Unmarshal([]byte(replyMessage), &replyMessageData)
|
|
|
+ if err != nil {
|
|
|
+ return fmt.Errorf("failed to send message: %v", err)
|
|
|
+ }
|
|
|
+ if replyMessageData["msgType"] == nil || replyMessageData["msgType"] != workphone.EnumMsgType_name[int32(workphone.EnumMsgType_MsgReceivedAck)] {
|
|
|
+ return fmt.Errorf("failed to send message: %v")
|
|
|
+ }
|
|
|
+
|
|
|
+ return nil
|
|
|
+ } else {
|
|
|
+ conn, err := h.connWorkPhone()
|
|
|
if err != nil {
|
|
|
err = fmt.Errorf("SendTextMsg failed")
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ defer func(conn *websocket.Conn) {
|
|
|
+ err = conn.Close()
|
|
|
+ if err != nil {
|
|
|
+ err = fmt.Errorf("SendTextMsg failed")
|
|
|
+ }
|
|
|
+ }(conn)
|
|
|
+ encodedString := base64.StdEncoding.EncodeToString([]byte(picpath))
|
|
|
+ contentType := "File"
|
|
|
+ if isImageFile(diyfilename) {
|
|
|
+ contentType = "Picture"
|
|
|
}
|
|
|
- }(conn)
|
|
|
- encodedString := base64.StdEncoding.EncodeToString([]byte(picpath))
|
|
|
- contentType := "File"
|
|
|
- if isImageFile(diyfilename) {
|
|
|
- contentType = "Picture"
|
|
|
- }
|
|
|
|
|
|
- message := map[string]interface{}{
|
|
|
- "MsgType": "TalkToFriendTask",
|
|
|
- "Content": map[string]interface{}{
|
|
|
- "WeChatId": wxWxid,
|
|
|
- "FriendId": wxid,
|
|
|
- "ContentType": contentType,
|
|
|
- "Content": encodedString,
|
|
|
- },
|
|
|
- }
|
|
|
- transportMessageJSON, err := json.Marshal(message)
|
|
|
- if err != nil {
|
|
|
- return err
|
|
|
- }
|
|
|
- // 发送 JSON 消息
|
|
|
- err = conn.WriteMessage(websocket.TextMessage, transportMessageJSON)
|
|
|
- if err != nil {
|
|
|
- return fmt.Errorf("failed to send message: %v", err)
|
|
|
- }
|
|
|
- // 读取回复消息
|
|
|
- _, replyMessage, err := conn.ReadMessage()
|
|
|
- if err != nil {
|
|
|
- return fmt.Errorf("failed to read message: %v", err)
|
|
|
- }
|
|
|
- var replyMessageData map[string]interface{}
|
|
|
- err = json.Unmarshal([]byte(replyMessage), &replyMessageData)
|
|
|
- if err != nil {
|
|
|
- return fmt.Errorf("failed to send message: %v", err)
|
|
|
- }
|
|
|
- if replyMessageData["msgType"] == nil || replyMessageData["msgType"] != workphone.EnumMsgType_name[int32(workphone.EnumMsgType_MsgReceivedAck)] {
|
|
|
- return fmt.Errorf("failed to send message: %v")
|
|
|
- }
|
|
|
+ message := map[string]interface{}{
|
|
|
+ "MsgType": "TalkToFriendTask",
|
|
|
+ "Content": map[string]interface{}{
|
|
|
+ "WeChatId": wxWxid,
|
|
|
+ "FriendId": wxid,
|
|
|
+ "ContentType": contentType,
|
|
|
+ "Content": encodedString,
|
|
|
+ },
|
|
|
+ }
|
|
|
+ transportMessageJSON, err := json.Marshal(message)
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ // 发送 JSON 消息
|
|
|
+ err = conn.WriteMessage(websocket.TextMessage, transportMessageJSON)
|
|
|
+ if err != nil {
|
|
|
+ return fmt.Errorf("failed to send message: %v", err)
|
|
|
+ }
|
|
|
+ // 读取回复消息
|
|
|
+ _, replyMessage, err := conn.ReadMessage()
|
|
|
+ if err != nil {
|
|
|
+ return fmt.Errorf("failed to read message: %v", err)
|
|
|
+ }
|
|
|
+ var replyMessageData map[string]interface{}
|
|
|
+ err = json.Unmarshal([]byte(replyMessage), &replyMessageData)
|
|
|
+ if err != nil {
|
|
|
+ return fmt.Errorf("failed to send message: %v", err)
|
|
|
+ }
|
|
|
+ if replyMessageData["msgType"] == nil || replyMessageData["msgType"] != workphone.EnumMsgType_name[int32(workphone.EnumMsgType_MsgReceivedAck)] {
|
|
|
+ return fmt.Errorf("failed to send message: %v")
|
|
|
+ }
|
|
|
|
|
|
- return nil
|
|
|
+ return nil
|
|
|
+ }
|
|
|
} else {
|
|
|
resp, err := h.Client.R().SetBody(&SendPicMsgReq{
|
|
|
Wxid: wxid,
|