package material import ( "dashoo.cn/opms_libary/plugin/wechat/context" "encoding/json" "fmt" "github.com/gogf/gf/frame/g" ) //MediaType 媒体文件类型 type MediaType string const ( //MediaTypeImage 媒体文件:图片 MediaTypeImage MediaType = "image" //MediaTypeVoice 媒体文件:声音 MediaTypeVoice = "voice" //MediaTypeVideo 媒体文件:视频 MediaTypeVideo = "video" //MediaTypeThumb 媒体文件:缩略图 MediaTypeThumb = "thumb" ) const ( mediaUploadURL = "https://api.weixin.qq.com/cgi-bin/media/upload" mediaUploadImageURL = "https://api.weixin.qq.com/cgi-bin/media/uploadimg" mediaGetURL = "https://api.weixin.qq.com/cgi-bin/media/get" ) //Media 临时素材上传返回信息 type Media struct { context.WxError Type MediaType `json:"type"` MediaID string `json:"media_id"` ThumbMediaID string `json:"thumb_media_id"` CreatedAt int64 `json:"created_at"` } //MediaUpload 临时素材上传 func (material *Material) MediaUpload(mediaType MediaType, filepath string) (media Media, err error) { var accessToken string accessToken, err = material.GetAccessToken() if err != nil { return } uri := fmt.Sprintf("%s?access_token=%s&type=%s", mediaUploadURL, accessToken, mediaType) result, err := g.Client().Post(uri, "media=@file:"+filepath) if err != nil { return } defer result.Close() err = json.Unmarshal(result.ReadAll(), &media) if err != nil { return } if media.Code != 0 { err = fmt.Errorf("MediaUpload error : errcode=%v , errmsg=%v", media.Code, media.Msg) return } return } //GetMediaURL 返回临时素材的下载地址供用户自己处理 //NOTICE: URL 不可公开,因为含access_token 需要立即另存文件 func (material *Material) GetMediaURL(mediaID string) (mediaURL string, err error) { var accessToken string accessToken, err = material.GetAccessToken() if err != nil { return } mediaURL = fmt.Sprintf("%s?access_token=%s&media_id=%s", mediaGetURL, accessToken, mediaID) return } //resMediaImage 图片上传返回结果 type resMediaImage struct { context.WxError URL string `json:"url"` } //ImageUpload 图片上传 func (material *Material) ImageUpload(filepath string) (url string, err error) { var accessToken string accessToken, err = material.GetAccessToken() if err != nil { return } uri := fmt.Sprintf("%s?access_token=%s", mediaUploadImageURL, accessToken) result, err := g.Client().Post(uri, "media=@file:"+filepath) if err != nil { return } var image resMediaImage defer result.Close() err = json.Unmarshal(result.ReadAll(), &image) if err != nil { return } if image.Code != 0 { err = fmt.Errorf("UploadImage error : errcode=%v , errmsg=%v", image.Code, image.Msg) return } url = image.URL return }