|
@@ -3,13 +3,16 @@ package mpwechat
|
3
|
3
|
import (
|
4
|
4
|
base_ctl "SCRM/controllers"
|
5
|
5
|
"SCRM/enums"
|
|
6
|
+ "SCRM/models"
|
6
|
7
|
"SCRM/service/wechat_service"
|
7
|
|
- "SCRM/utils"
|
8
|
8
|
"bytes"
|
|
9
|
+ "encoding/json"
|
9
|
10
|
"mime/multipart"
|
10
|
11
|
"sync"
|
|
12
|
+ "time"
|
11
|
13
|
|
12
|
14
|
"io"
|
|
15
|
+ "io/ioutil"
|
13
|
16
|
|
14
|
17
|
"github.com/astaxie/beego"
|
15
|
18
|
"github.com/astaxie/beego/httplib"
|
|
@@ -17,6 +20,7 @@ import (
|
17
|
20
|
|
18
|
21
|
func MpMaterialCtlRegistRouters() {
|
19
|
22
|
beego.Router("/api/mpwechat/media/add_material", &MpMaterialAPIController{}, "Post:AddMaterial")
|
|
23
|
+ beego.Router("/api/mpwechat/media/material", &MpMaterialAPIController{}, "Get:GetMaterials")
|
20
|
24
|
}
|
21
|
25
|
|
22
|
26
|
type MpMaterialAPIController struct {
|
|
@@ -46,13 +50,13 @@ func (c MpMaterialAPIController) AddMaterial() {
|
46
|
50
|
return
|
47
|
51
|
}
|
48
|
52
|
if authorization == nil || authorization.AuthorizerStatus != 1 {
|
49
|
|
- c.ServeFailJsonSend(enums.ErrorCodeDBUpdate, "上传失败:(公众号未授权)")
|
|
53
|
+ c.ServeFailJsonSend(enums.ErrorCodeDBCreate, "上传失败:(公众号未授权)")
|
50
|
54
|
return
|
51
|
55
|
}
|
52
|
56
|
|
53
|
57
|
file, head, err := c.GetFile("file")
|
54
|
58
|
if err != nil {
|
55
|
|
- c.ServeFailJsonSend(enums.ErrorCodeDBUpdate, "上传失败:("+err.Error()+")")
|
|
59
|
+ c.ServeFailJsonSend(enums.ErrorCodeDBCreate, "上传失败:("+err.Error()+")")
|
56
|
60
|
return
|
57
|
61
|
}
|
58
|
62
|
defer file.Close()
|
|
@@ -75,28 +79,28 @@ func (c MpMaterialAPIController) AddMaterial() {
|
75
|
79
|
if field := &fields[i]; field.IsFile {
|
76
|
80
|
partWriter, err3 := multipartWriter.CreateFormFile(field.Name, field.FileName)
|
77
|
81
|
if err3 != nil {
|
78
|
|
- c.ServeFailJsonSend(enums.ErrorCodeDBUpdate, "上传失败:("+err3.Error()+")")
|
|
82
|
+ c.ServeFailJsonSend(enums.ErrorCodeDBCreate, "上传失败:("+err3.Error()+")")
|
79
|
83
|
return
|
80
|
84
|
}
|
81
|
85
|
if _, err3 = io.Copy(partWriter, field.Value); err3 != nil {
|
82
|
|
- c.ServeFailJsonSend(enums.ErrorCodeDBUpdate, "上传失败:("+err3.Error()+")")
|
|
86
|
+ c.ServeFailJsonSend(enums.ErrorCodeDBCreate, "上传失败:("+err3.Error()+")")
|
83
|
87
|
return
|
84
|
88
|
}
|
85
|
89
|
} else {
|
86
|
90
|
partWriter, err3 := multipartWriter.CreateFormField(field.Name)
|
87
|
91
|
if err3 != nil {
|
88
|
|
- c.ServeFailJsonSend(enums.ErrorCodeDBUpdate, "上传失败:("+err3.Error()+")")
|
|
92
|
+ c.ServeFailJsonSend(enums.ErrorCodeDBCreate, "上传失败:("+err3.Error()+")")
|
89
|
93
|
return
|
90
|
94
|
}
|
91
|
95
|
if _, err3 = io.Copy(partWriter, field.Value); err3 != nil {
|
92
|
|
- c.ServeFailJsonSend(enums.ErrorCodeDBUpdate, "上传失败:("+err3.Error()+")")
|
|
96
|
+ c.ServeFailJsonSend(enums.ErrorCodeDBCreate, "上传失败:("+err3.Error()+")")
|
93
|
97
|
return
|
94
|
98
|
}
|
95
|
99
|
}
|
96
|
100
|
}
|
97
|
101
|
|
98
|
102
|
if err = multipartWriter.Close(); err != nil {
|
99
|
|
- c.ServeFailJsonSend(enums.ErrorCodeDBUpdate, "上传失败:("+err.Error()+")")
|
|
103
|
+ c.ServeFailJsonSend(enums.ErrorCodeDBCreate, "上传失败:("+err.Error()+")")
|
100
|
104
|
return
|
101
|
105
|
}
|
102
|
106
|
requestBodyBytes := buffer.Bytes()
|
|
@@ -104,13 +108,72 @@ func (c MpMaterialAPIController) AddMaterial() {
|
104
|
108
|
url := "https://api.weixin.qq.com/cgi-bin/material/add_material?type=image&access_token=" + authorization.AuthorizerAccessToken
|
105
|
109
|
res := httplib.Post(url)
|
106
|
110
|
res.Header("Content-Type", requestBodyType)
|
107
|
|
- res.Body(requestBodyBytes)
|
108
|
|
- response := make(map[string]interface{}, 0)
|
109
|
|
- res.ToJSON(&response)
|
110
|
|
- utils.InfoLog("%v", response)
|
|
111
|
+ response, err := res.Body(requestBodyBytes).Response()
|
|
112
|
+ if err != nil {
|
|
113
|
+ c.ServeFailJsonSend(enums.ErrorCodeDBCreate, "上传失败:("+err.Error()+")")
|
|
114
|
+ return
|
|
115
|
+ }
|
|
116
|
+ respBody, err := ioutil.ReadAll(response.Body)
|
|
117
|
+ if err != nil {
|
|
118
|
+ c.ServeFailJsonSend(enums.ErrorCodeDBCreate, "上传失败:("+err.Error()+")")
|
|
119
|
+ return
|
|
120
|
+ }
|
|
121
|
+
|
|
122
|
+ var resMaterial wechat_service.ResAddMaterial
|
|
123
|
+ err = json.Unmarshal(respBody, &resMaterial)
|
|
124
|
+ if err != nil {
|
|
125
|
+ c.ServeFailJsonSend(enums.ErrorCodeDBCreate, "上传失败:("+err.Error()+")")
|
|
126
|
+ return
|
|
127
|
+ }
|
|
128
|
+ if resMaterial.ErrCode != 0 {
|
|
129
|
+ c.ServeFailJsonSend(enums.ErrorCodeDBCreate, "上传失败:("+resMaterial.ErrMsg+")")
|
|
130
|
+ return
|
|
131
|
+ }
|
|
132
|
+ mediaID := resMaterial.MediaID
|
|
133
|
+ mediaUrl := resMaterial.URL
|
|
134
|
+ var media models.WechatMedias
|
|
135
|
+ media.UserOrgId = adminUserInfo.CurrentOrgId
|
|
136
|
+ media.MediaId = mediaID
|
|
137
|
+ media.MediaUrl = mediaUrl
|
|
138
|
+ media.Msgtype = "image"
|
|
139
|
+ media.MediaTitle = head.Filename
|
|
140
|
+ media.CreatedTime = time.Now().Unix()
|
|
141
|
+ media.UpdatedTime = time.Now().Unix()
|
|
142
|
+ media.MediaStatus = 1
|
|
143
|
+
|
|
144
|
+ err = wechat_service.SaveMaterial(&media)
|
|
145
|
+ if err != nil {
|
|
146
|
+ c.ServeFailJsonSend(enums.ErrorCodeDBCreate, "上传失败:("+err.Error()+")")
|
|
147
|
+ return
|
|
148
|
+ }
|
|
149
|
+
|
|
150
|
+ returnData := make(map[string]interface{}, 0)
|
|
151
|
+ returnData["media"] = media
|
|
152
|
+ c.ServeSuccessJSON(returnData)
|
|
153
|
+ return
|
|
154
|
+}
|
|
155
|
+
|
|
156
|
+func (c *MpMaterialAPIController) GetMaterials() {
|
|
157
|
+ page, _ := c.GetInt64("page", 1)
|
|
158
|
+ limit, _ := c.GetInt64("limit", 10)
|
|
159
|
+ mediaType := c.GetString("media_type")
|
|
160
|
+ if page <= 0 {
|
|
161
|
+ page = 1
|
|
162
|
+ }
|
|
163
|
+ if limit <= 0 {
|
|
164
|
+ limit = 10
|
|
165
|
+ }
|
|
166
|
+
|
|
167
|
+ adminUserInfo := c.GetAdminUserInfo()
|
|
168
|
+ medias, total, err := wechat_service.GetPageMaterials(adminUserInfo.CurrentOrgId, page, limit, mediaType)
|
|
169
|
+ if err != nil {
|
|
170
|
+ c.ServeFailJsonSend(enums.ErrorCodeDBUpdate, "拉取失败:("+err.Error()+")")
|
|
171
|
+ return
|
|
172
|
+ }
|
111
|
173
|
|
112
|
174
|
returnData := make(map[string]interface{}, 0)
|
113
|
|
- returnData["ok"] = "msg"
|
|
175
|
+ returnData["medias"] = medias
|
|
176
|
+ returnData["total"] = total
|
114
|
177
|
c.ServeSuccessJSON(returnData)
|
115
|
178
|
return
|
116
|
179
|
}
|