diff --git a/mini/access_token.go b/mini/access_token.go index 7211b24..0371f3f 100644 --- a/mini/access_token.go +++ b/mini/access_token.go @@ -29,7 +29,7 @@ func (s *SDK) getStableAccessToken() (err error) { Set("secret", s.Secret). Set("force_refresh", false) at := &AccessToken{} - if _, err = s.doRequestPost(s.ctx, path, body, at); err != nil { + if _, err = s.DoRequestPost(s.ctx, path, body, at); err != nil { return } if at.Errcode != Success { diff --git a/mini/customer_service.go b/mini/customer_service.go index 5b013e7..a605082 100644 --- a/mini/customer_service.go +++ b/mini/customer_service.go @@ -12,7 +12,7 @@ import ( // 文档:https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/kf-mgnt/kf-message/getTempMedia.html func (s *SDK) CSMessageGetTempMedia(c context.Context, mediaId string) (media []byte, err error) { path := "/cgi-bin/media/get?access_token=" + s.accessToken + "&media_id=" + mediaId - media, err = s.doRequestGetByte(c, path) + media, err = s.DoRequestGetByte(c, path) if err != nil { return nil, err } @@ -44,7 +44,7 @@ func (s *SDK) CSMessageSend(c context.Context, toUser string, msgType MsgType, m Set("text", msgValue) } ec := &ErrorCode{} - if _, err = s.doRequestPost(c, path, body, ec); err != nil { + if _, err = s.DoRequestPost(c, path, body, ec); err != nil { return err } if ec.Errcode != Success { @@ -69,7 +69,7 @@ func (s *SDK) CSMessageSetTyping(c context.Context, toUser string, typingStatus body.Set("command", "CancelTyping") } ec := &ErrorCode{} - if _, err = s.doRequestPost(c, path, body, ec); err != nil { + if _, err = s.DoRequestPost(c, path, body, ec); err != nil { return err } if ec.Errcode != Success { @@ -88,7 +88,7 @@ func (s *SDK) CSMessageUploadTempMedia(c context.Context, img *bm.File) (media * body.Set("type", "image"). SetFormFile("media", img) media = &UploadTempMedia{} - if _, err = s.doRequestPostFile(c, path, body, media); err != nil { + if _, err = s.DoRequestPostFile(c, path, body, media); err != nil { return nil, err } if media.Errcode != Success { diff --git a/mini/login.go b/mini/login.go index 4352e4a..56aa301 100644 --- a/mini/login.go +++ b/mini/login.go @@ -12,7 +12,7 @@ import ( func (s *SDK) Code2Session(c context.Context, wxCode string) (session *Code2Session, err error) { path := "/sns/jscode2session?appid=" + s.Appid + "&secret=" + s.Secret + "&js_code=" + wxCode + "&grant_type=authorization_code" session = &Code2Session{} - if _, err = s.doRequestGet(c, path, session); err != nil { + if _, err = s.DoRequestGet(c, path, session); err != nil { return nil, err } if session.Errcode != Success { diff --git a/mini/mini.go b/mini/mini.go index 5b9897f..48c6251 100644 --- a/mini/mini.go +++ b/mini/mini.go @@ -3,7 +3,6 @@ package mini import ( "context" "fmt" - "net/http" "time" "github.com/go-pay/bm" @@ -66,26 +65,6 @@ func (s *SDK) SetLogger(logger xlog.XLogger) { } } -func (s *SDK) DoRequestGet(c context.Context, path string, ptr any) (res *http.Response, err error) { - uri := s.Host + path - if s.DebugSwitch == wechat.DebugOn { - s.logger.Debugf("Wechat_SDK_URI: %s", uri) - } - req := s.hc.Req() - req.Header.Add(wechat.HeaderRequestID, fmt.Sprintf("%s-%d", util.RandomString(21), time.Now().Unix())) - res, bs, err := req.Get(uri).EndBytes(c) - if err != nil { - return nil, fmt.Errorf("http.request(GET, %s), err:%w", uri, err) - } - if s.DebugSwitch == wechat.DebugOn { - s.logger.Debugf("Wechat_SDK_Response: [%d] -> %s", res.StatusCode, string(bs)) - } - if err = js.UnmarshalBytes(bs, ptr); err != nil { - return res, fmt.Errorf("js.UnmarshalBytes(%s, %+v):%w", string(bs), ptr, err) - } - return -} - func doRequestGet(c context.Context, uri string, ptr any) (err error) { req := xhttp.NewClient().Req() req.Header.Add(wechat.HeaderRequestID, fmt.Sprintf("%s-%d", util.RandomString(21), time.Now().Unix())) diff --git a/mini/mini_drama_manage.go b/mini/mini_drama_manage.go new file mode 100644 index 0000000..6b259d4 --- /dev/null +++ b/mini/mini_drama_manage.go @@ -0,0 +1,72 @@ +package mini + +import ( + "context" + "fmt" + + "github.com/go-pay/bm" +) + +// MediaAssetListMedia 媒资管理-获取媒资列表 +// 注意:errcode = 0 为成功 +// 说明:该接口用于获取已上传到平台的媒资列表。 +// 文档:https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/industry/mini-drama/mini_drama.html#_2-1-%E8%8E%B7%E5%8F%96%E5%AA%92%E8%B5%84%E5%88%97%E8%A1%A8 +func (s *SDK) MediaAssetListMedia(c context.Context, body bm.BodyMap) (rsp *MediaAssetListMediaRsp, err error) { + path := "/wxa/sec/vod/listmedia?access_token=" + s.accessToken + rsp = &MediaAssetListMediaRsp{} + if _, err = s.DoRequestPost(c, path, body, rsp); err != nil { + return nil, err + } + if rsp.Errcode != Success { + return nil, fmt.Errorf("errcode(%d), errmsg(%s)", rsp.Errcode, rsp.Errmsg) + } + return rsp, nil +} + +// MediaAssetGetMedia 媒资管理-获取媒资详细信息 +// 注意:errcode = 0 为成功 +// 说明:该接口用于获取已上传到平台的指定媒资信息,用于开发者后台管理使用。用于给用户客户端播放的链接应该使用getmedialink接口获取。 +// 文档:https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/industry/mini-drama/mini_drama.html#_2-2-%E8%8E%B7%E5%8F%96%E5%AA%92%E8%B5%84%E8%AF%A6%E7%BB%86%E4%BF%A1%E6%81%AF +func (s *SDK) MediaAssetGetMedia(c context.Context, body bm.BodyMap) (rsp *MediaAssetGetMediaRsp, err error) { + path := "/wxa/sec/vod/getmedia?access_token=" + s.accessToken + rsp = &MediaAssetGetMediaRsp{} + if _, err = s.DoRequestPost(c, path, body, rsp); err != nil { + return nil, err + } + if rsp.Errcode != Success { + return nil, fmt.Errorf("errcode(%d), errmsg(%s)", rsp.Errcode, rsp.Errmsg) + } + return rsp, nil +} + +// MediaAssetGetMediaLink 媒资管理-获取媒资播放链接 +// 注意:errcode = 0 为成功 +// 说明:该接口用于获取视频临时播放链接,用于给用户的播放使用。只有审核通过的视频才能通过该接口获取播放链接。 +// 文档:https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/industry/mini-drama/mini_drama.html#_2-3-%E8%8E%B7%E5%8F%96%E5%AA%92%E8%B5%84%E6%92%AD%E6%94%BE%E9%93%BE%E6%8E%A5 +func (s *SDK) MediaAssetGetMediaLink(c context.Context, body bm.BodyMap) (rsp *MediaAssetGetMediaLinkRsp, err error) { + path := "/wxa/sec/vod/getmedialink?access_token=" + s.accessToken + rsp = &MediaAssetGetMediaLinkRsp{} + if _, err = s.DoRequestPost(c, path, body, rsp); err != nil { + return nil, err + } + if rsp.Errcode != Success { + return nil, fmt.Errorf("errcode(%d), errmsg(%s)", rsp.Errcode, rsp.Errmsg) + } + return rsp, nil +} + +// MediaAssetDeleteMedia 媒资管理-删除媒资 +// 注意:errcode = 0 为成功 +// 说明:该接口用于删除指定媒资。 +// 文档:https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/industry/mini-drama/mini_drama.html#_2-4-%E5%88%A0%E9%99%A4%E5%AA%92%E8%B5%84 +func (s *SDK) MediaAssetDeleteMedia(c context.Context, body bm.BodyMap) (rsp *MediaAssetDeleteMediaRsp, err error) { + path := "/wxa/sec/vod/deletemedia?access_token=" + s.accessToken + rsp = &MediaAssetDeleteMediaRsp{} + if _, err = s.DoRequestPost(c, path, body, rsp); err != nil { + return nil, err + } + if rsp.Errcode != Success { + return nil, fmt.Errorf("errcode(%d), errmsg(%s)", rsp.Errcode, rsp.Errmsg) + } + return rsp, nil +} diff --git a/mini/mini_drama_manage_test.go b/mini/mini_drama_manage_test.go new file mode 100644 index 0000000..c599754 --- /dev/null +++ b/mini/mini_drama_manage_test.go @@ -0,0 +1,58 @@ +package mini + +import ( + "testing" + + "github.com/go-pay/bm" + "github.com/go-pay/xlog" +) + +func TestMediaAssetListMedia(t *testing.T) { + body := make(bm.BodyMap) + body.Set("drama_id", 20001). + Set("limit", 20) + + rsp, err := miniSDK.MediaAssetListMedia(ctx, body) + if err != nil { + xlog.Error(err) + return + } + xlog.Debugf("rsp:%+v", rsp) +} + +func TestMediaAssetGetMedia(t *testing.T) { + body := make(bm.BodyMap) + body.Set("media_id", 20001) + + rsp, err := miniSDK.MediaAssetGetMedia(ctx, body) + if err != nil { + xlog.Error(err) + return + } + xlog.Debugf("rsp:%+v", rsp) +} + +func TestMediaAssetGetMediaLink(t *testing.T) { + body := make(bm.BodyMap) + body.Set("media_id", 28918028). + Set("t", 1689990878) + + rsp, err := miniSDK.MediaAssetGetMediaLink(ctx, body) + if err != nil { + xlog.Error(err) + return + } + xlog.Debugf("rsp:%+v", rsp) +} + +func TestMediaAssetDeleteMedia(t *testing.T) { + body := make(bm.BodyMap) + body.Set("media_id", 28918028) + + rsp, err := miniSDK.MediaAssetDeleteMedia(ctx, body) + if err != nil { + xlog.Error(err) + return + } + xlog.Debugf("rsp:%+v", rsp) +} diff --git a/mini/mini_drama_upload.go b/mini/mini_drama_upload.go new file mode 100644 index 0000000..00f45cf --- /dev/null +++ b/mini/mini_drama_upload.go @@ -0,0 +1,107 @@ +package mini + +import ( + "context" + "fmt" + + "github.com/go-pay/bm" +) + +// MediaAssetSingleFileUpload 媒资上传-单个文件上传 +// 注意:errcode = 0 为成功 +// 说明:上传媒体(和封面)文件,上传小文件(小于10MB)时使用。上传大文件请使用分片上传接口。 +// 文档:https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/industry/mini-drama/mini_drama.html#_1-1-%E5%8D%95%E4%B8%AA%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0 +func (s *SDK) MediaAssetSingleFileUpload(c context.Context, body bm.BodyMap) (rsp *MediaAssetSingleFileUploadRsp, err error) { + path := "/wxa/sec/vod/singlefileupload?access_token=" + s.accessToken + rsp = &MediaAssetSingleFileUploadRsp{} + if _, err = s.DoRequestPostFile(c, path, body, rsp); err != nil { + return nil, err + } + if rsp.Errcode != Success { + return nil, fmt.Errorf("errcode(%d), errmsg(%s)", rsp.Errcode, rsp.Errmsg) + } + return rsp, nil +} + +// MediaAssetPullUpload 媒资上传-拉取上传 +// 注意:errcode = 0 为成功 +// 说明:该接口用于将一个网络上的视频拉取上传到平台。 +// 文档:https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/industry/mini-drama/mini_drama.html#_1-2-%E6%8B%89%E5%8F%96%E4%B8%8A%E4%BC%A0 +func (s *SDK) MediaAssetPullUpload(c context.Context, body bm.BodyMap) (rsp *MediaAssetPullUploadRsp, err error) { + path := "/wxa/sec/vod/pullupload?access_token=" + s.accessToken + rsp = &MediaAssetPullUploadRsp{} + if _, err = s.DoRequestPost(c, path, body, rsp); err != nil { + return nil, err + } + if rsp.Errcode != Success { + return nil, fmt.Errorf("errcode(%d), errmsg(%s)", rsp.Errcode, rsp.Errmsg) + } + return rsp, nil +} + +// MediaAssetGetTask 媒资上传-查询任务 +// 注意:errcode = 0 为成功 +// 说明:该接口用于查询拉取上传的任务状态。 +// 文档:https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/industry/mini-drama/mini_drama.html#_1-3-%E6%9F%A5%E8%AF%A2%E4%BB%BB%E5%8A%A1 +func (s *SDK) MediaAssetGetTask(c context.Context, body bm.BodyMap) (rsp *MediaAssetGetTaskRsp, err error) { + path := "/wxa/sec/vod/gettask?access_token=" + s.accessToken + rsp = &MediaAssetGetTaskRsp{} + if _, err = s.DoRequestPost(c, path, body, rsp); err != nil { + return nil, err + } + if rsp.Errcode != Success { + return nil, fmt.Errorf("errcode(%d), errmsg(%s)", rsp.Errcode, rsp.Errmsg) + } + return rsp, nil +} + +// MediaAssetApplyUpload 媒资上传-申请分片上传 +// 注意:errcode = 0 为成功 +// 说明:上传大文件时需使用分片上传方式,分为 3 个步骤: +// 1、申请分片上传,确定文件名、格式类型,返回 upload_id,唯一标识本次分片上传。 +// 2、上传分片,多次调用上传文件分片,需要携带 part_number 和 upload_id,其中 part_number 为分片的编号,支持乱序上传。当传入 part_number 和 upload_id 都相同的时候,后发起上传请求的分片将覆盖之前的分片。 +// 3、确认分片上传,当上传完所有分片后,需要完成整个文件的合并。请求体中需要给出每一个分片的 part_number 和 etag,用来校验分片的准确性,最后返回文件的 media_id。 +// 文档:https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/industry/mini-drama/mini_drama.html#_1-4-%E7%94%B3%E8%AF%B7%E5%88%86%E7%89%87%E4%B8%8A%E4%BC%A0 +func (s *SDK) MediaAssetApplyUpload(c context.Context, body bm.BodyMap) (rsp *MediaAssetApplyUploadRsp, err error) { + path := "/wxa/sec/vod/applyupload?access_token=" + s.accessToken + rsp = &MediaAssetApplyUploadRsp{} + if _, err = s.DoRequestPost(c, path, body, rsp); err != nil { + return nil, err + } + if rsp.Errcode != Success { + return nil, fmt.Errorf("errcode(%d), errmsg(%s)", rsp.Errcode, rsp.Errmsg) + } + return rsp, nil +} + +// MediaAssetUploadPart 媒资上传-上传分片 +// 注意:errcode = 0 为成功 +// 说明:将文件的其中一个分片上传到平台,最多支持100个分片,每个分片大小为5MB,最后一个分片可以小于5MB。该接口适用于视频和封面图片。视频最大支持500MB,封面图片最大支持10MB。 +// 文档:https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/industry/mini-drama/mini_drama.html#_1-5-%E4%B8%8A%E4%BC%A0%E5%88%86%E7%89%87 +func (s *SDK) MediaAssetUploadPart(c context.Context, body bm.BodyMap) (rsp *MediaAssetUploadPartRsp, err error) { + path := "/wxa/sec/vod/uploadpart?access_token=" + s.accessToken + rsp = &MediaAssetUploadPartRsp{} + if _, err = s.DoRequestPostFile(c, path, body, rsp); err != nil { + return nil, err + } + if rsp.Errcode != Success { + return nil, fmt.Errorf("errcode(%d), errmsg(%s)", rsp.Errcode, rsp.Errmsg) + } + return rsp, nil +} + +// MediaAssetCommitUpload 媒资上传-确认上传 +// 注意:errcode = 0 为成功 +// 说明:该接口用于完成整个分片上传流程,合并所有文件分片,确认媒体文件(和封面图片文件)上传到平台的结果,返回文件的 ID。请求中需要给出每一个分片的 part_number 和 etag,用来校验分片的准确性。 +// 文档:https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/industry/mini-drama/mini_drama.html#_1-6-%E7%A1%AE%E8%AE%A4%E4%B8%8A%E4%BC%A0 +func (s *SDK) MediaAssetCommitUpload(c context.Context, body bm.BodyMap) (rsp *MediaAssetCommitUploadRsp, err error) { + path := "/wxa/sec/vod/commitupload?access_token=" + s.accessToken + rsp = &MediaAssetCommitUploadRsp{} + if _, err = s.DoRequestPost(c, path, body, rsp); err != nil { + return nil, err + } + if rsp.Errcode != Success { + return nil, fmt.Errorf("errcode(%d), errmsg(%s)", rsp.Errcode, rsp.Errmsg) + } + return rsp, nil +} diff --git a/mini/mini_drama_upload_test.go b/mini/mini_drama_upload_test.go new file mode 100644 index 0000000..7ab8539 --- /dev/null +++ b/mini/mini_drama_upload_test.go @@ -0,0 +1,136 @@ +package mini + +import ( + "os" + "testing" + + "github.com/go-pay/bm" + "github.com/go-pay/xlog" +) + +func TestMediaAssetSingleFileUpload(t *testing.T) { + filePath := "/Users/xxx/Downloads/test.mp4" + + file, err := os.ReadFile(filePath) + if err != nil { + xlog.Errorf("os.ReadFile err: %v", err) + return + } + + md := &bm.File{ + Name: "test.mp4", + Content: file, + } + + body := make(bm.BodyMap) + body.Set("media_name", "我的演艺 - 第1集"). + Set("media_type", "MP4"). + SetFormFile("media_data", md) + + rsp, err := miniSDK.MediaAssetSingleFileUpload(ctx, body) + if err != nil { + xlog.Error(err) + return + } + xlog.Debugf("rsp:%+v", rsp) +} + +func TestMediaAssetPullUpload(t *testing.T) { + body := make(bm.BodyMap) + body.Set("media_name", "我的演艺 - 第1集"). + Set("media_url", "https://developers.weixin.qq.com/test.mp4"). + Set("cover_url", "https://developers.weixin.qq.com/test.jpg") + + rsp, err := miniSDK.MediaAssetPullUpload(ctx, body) + if err != nil { + xlog.Error(err) + return + } + xlog.Debugf("rsp:%+v", rsp) +} + +func TestMediaAssetGetTask(t *testing.T) { + body := make(bm.BodyMap) + body.Set("task_id", 8412368) + rsp, err := miniSDK.MediaAssetGetTask(ctx, body) + if err != nil { + xlog.Error(err) + return + } + xlog.Debugf("rsp:%+v", rsp) +} + +func TestMediaAssetApplyUpload(t *testing.T) { + body := make(bm.BodyMap) + body.Set("media_name", "我的演艺 - 第1集"). + Set("media_type", "MP4"). + Set("cover_type", "JPG") + + rsp, err := miniSDK.MediaAssetApplyUpload(ctx, body) + if err != nil { + xlog.Error(err) + return + } + xlog.Debugf("rsp:%+v", rsp) +} + +func TestMediaAssetUploadPart(t *testing.T) { + filePath := "/Users/xxx/Downloads/test.mp4" + + file, err := os.ReadFile(filePath) + if err != nil { + xlog.Errorf("os.ReadFile err: %v", err) + return + } + + md := &bm.File{ + Name: "test.mp4", + Content: file, + } + + body := make(bm.BodyMap) + body.Set("upload_id", "9457878"). + Set("part_number", 1). + Set("resource_type", 1). + SetFormFile("data", md) + + rsp, err := miniSDK.MediaAssetUploadPart(ctx, body) + if err != nil { + xlog.Error(err) + return + } + xlog.Debugf("rsp:%+v", rsp) +} + +type PartInfo struct { + PartNumber int `json:"part_number"` + Etag string `json:"etag"` +} + +func TestMediaAssetCommitUpload(t *testing.T) { + pis := []*PartInfo{ + { + PartNumber: 1, + Etag: "d899fbd1e06109ea2e4550f5751c88d6", + }, + { + PartNumber: 2, + Etag: "jfb9892jfnhda2e4550f5bvhju9392af", + }, + { + PartNumber: 3, + Etag: "bifh9u92wjefvjhytvn9u2898ef9uhea", + }, + } + + body := make(bm.BodyMap) + body.Set("upload_id", "9457878"). + Set("media_part_infos", pis) + + rsp, err := miniSDK.MediaAssetCommitUpload(ctx, body) + if err != nil { + xlog.Error(err) + return + } + xlog.Debugf("rsp:%+v", rsp) +} diff --git a/mini/model.go b/mini/model.go index d330dce..4f0bae2 100644 --- a/mini/model.go +++ b/mini/model.go @@ -119,3 +119,107 @@ type KeyInfo struct { Iv string `json:"iv"` CreateTime int `json:"create_time"` } + +type MediaAssetSingleFileUploadRsp struct { + MediaId int `json:"media_id"` // 媒体文件id。 + Errcode int `json:"errcode"` + Errmsg string `json:"errmsg"` +} + +type MediaAssetPullUploadRsp struct { + TaskId int `json:"task_id"` + Errcode int `json:"errcode"` + Errmsg string `json:"errmsg"` +} + +type MediaAssetGetTaskRsp struct { + TaskInfo *PullUploadTaskInfo `json:"task_info"` + Errcode int `json:"errcode"` + Errmsg string `json:"errmsg"` +} + +type PullUploadTaskInfo struct { + Id int `json:"id"` + TaskType int `json:"task_type"` + Status int `json:"status"` + Errcode int `json:"errcode"` + Errmsg string `json:"errmsg"` + CreateTime int `json:"create_time"` + FinishTime int `json:"finish_time"` + MediaId int `json:"media_id"` +} + +type MediaAssetApplyUploadRsp struct { + UploadId string `json:"upload_id"` + Errcode int `json:"errcode"` + Errmsg string `json:"errmsg"` +} + +type MediaAssetUploadPartRsp struct { + Etag string `json:"etag"` + Errcode int `json:"errcode"` + Errmsg string `json:"errmsg"` +} + +type MediaAssetCommitUploadRsp struct { + MediaId int `json:"media_id"` // 媒体文件id。 + Errcode int `json:"errcode"` + Errmsg string `json:"errmsg"` +} + +type MediaAssetListMediaRsp struct { + Errcode int `json:"errcode"` + Errmsg string `json:"errmsg"` + MediaInfoList []*MediaInfo `json:"media_info_list"` +} + +type MediaInfo struct { + MediaId int `json:"media_id"` + CreateTime int `json:"create_time"` + ExpireTime int `json:"expire_time"` + DramaId int `json:"drama_id"` + FileSize string `json:"file_size"` + Duration int `json:"duration"` + Name string `json:"name"` + Description string `json:"description"` + CoverUrl string `json:"cover_url"` + OriginalUrl string `json:"original_url"` + Mp4Url string `json:"mp4_url"` + HlsUrl string `json:"hls_url"` + AuditDetail *AuditDetail `json:"audit_detail"` +} + +type AuditDetail struct { + Status int `json:"status"` + CreateTime int `json:"create_time"` + AuditTime int `json:"audit_time"` + Reason string `json:"reason"` + EvidenceMaterialIdList []string `json:"evidence_material_id_list"` +} + +type MediaAssetGetMediaRsp struct { + Errcode int `json:"errcode"` + Errmsg string `json:"errmsg"` + MediaInfo *MediaInfo `json:"media_info"` +} + +type MediaAssetGetMediaLinkRsp struct { + Errcode int `json:"errcode"` + Errmsg string `json:"errmsg"` + MediaInfo *MediaPlaybackInfo `json:"media_info"` +} + +type MediaPlaybackInfo struct { + MediaId int `json:"media_id"` + Duration int `json:"duration"` + Name string `json:"name"` + Description string `json:"description"` + CoverUrl string `json:"cover_url"` + Mp4Url string `json:"mp4_url"` + HlsUrl string `json:"hls_url"` +} + +type MediaAssetDeleteMediaRsp struct { + Errcode int `json:"errcode"` + Errmsg string `json:"errmsg"` +} diff --git a/mini/request.go b/mini/request.go index cac6840..9818305 100644 --- a/mini/request.go +++ b/mini/request.go @@ -14,7 +14,7 @@ import ( "github.com/go-pay/xhttp" ) -func (s *SDK) doRequestGet(c context.Context, path string, ptr any) (res *http.Response, err error) { +func (s *SDK) DoRequestGet(c context.Context, path string, ptr any) (res *http.Response, err error) { uri := s.Host + path if s.DebugSwitch == wechat.DebugOn { s.logger.Debugf("Wechat_Mini_SDK_URI: %s", uri) @@ -34,7 +34,7 @@ func (s *SDK) doRequestGet(c context.Context, path string, ptr any) (res *http.R return res, nil } -func (s *SDK) doRequestGetByte(c context.Context, path string) (bs []byte, err error) { +func (s *SDK) DoRequestGetByte(c context.Context, path string) (bs []byte, err error) { uri := s.Host + path if s.DebugSwitch == wechat.DebugOn { s.logger.Debugf("Wechat_Mini_SDK_URI: %s", uri) @@ -56,7 +56,7 @@ func (s *SDK) doRequestGetByte(c context.Context, path string) (bs []byte, err e return } -func (s *SDK) doRequestPost(c context.Context, path string, body bm.BodyMap, ptr any) (res *http.Response, err error) { +func (s *SDK) DoRequestPost(c context.Context, path string, body bm.BodyMap, ptr any) (res *http.Response, err error) { uri := s.Host + path if s.DebugSwitch == wechat.DebugOn { s.logger.Debugf("Wechat_Mini_SDK_URI: %s", uri) @@ -77,7 +77,7 @@ func (s *SDK) doRequestPost(c context.Context, path string, body bm.BodyMap, ptr return } -func (s *SDK) doRequestPostFile(ctx context.Context, path string, body bm.BodyMap, ptr any) (res *http.Response, err error) { +func (s *SDK) DoRequestPostFile(ctx context.Context, path string, body bm.BodyMap, ptr any) (res *http.Response, err error) { uri := s.Host + path if s.DebugSwitch == wechat.DebugOn { s.logger.Debugf("Wechat_Mini_SDK_URI: %s", uri) diff --git a/mini/uniform_message.go b/mini/uniform_message.go index b76e11b..27b2996 100644 --- a/mini/uniform_message.go +++ b/mini/uniform_message.go @@ -15,10 +15,10 @@ import ( func (s *SDK) UniformMessageSend(c context.Context, toUser string, mpMsg bm.BodyMap) (err error) { path := "/cgi-bin/message/wxopen/template/uniform_send?access_token=" + s.accessToken body := make(bm.BodyMap) - body.Set("touser", toUser) - body.Set("mp_template_msg", mpMsg) + body.Set("touser", toUser). + Set("mp_template_msg", mpMsg) ec := &ErrorCode{} - if _, err = s.doRequestPost(c, path, body, ec); err != nil { + if _, err = s.DoRequestPost(c, path, body, ec); err != nil { return err } if ec.Errcode != Success { diff --git a/mini/user_info.go b/mini/user_info.go index 79f21b2..1a22572 100644 --- a/mini/user_info.go +++ b/mini/user_info.go @@ -18,7 +18,7 @@ func (s *SDK) GetPluginOpenPid(c context.Context, code string) (openpid *PluginO openpid = &PluginOpenPid{} body := make(bm.BodyMap) body.Set("code", code) - if _, err = s.doRequestPost(c, path, body, openpid); err != nil { + if _, err = s.DoRequestPost(c, path, body, openpid); err != nil { return nil, err } if openpid.Errcode != Success { @@ -35,7 +35,7 @@ func (s *SDK) GetPluginOpenPid(c context.Context, code string) (openpid *PluginO func (s *SDK) GetPaidUnionid(c context.Context, openid, transactionId string) (unionid *PaidUnionId, err error) { path := "/wxa/getpaidunionid?access_token=" + s.accessToken + "&openid=" + openid + "&transaction_id=" + transactionId unionid = &PaidUnionId{} - if _, err = s.doRequestGet(c, path, unionid); err != nil { + if _, err = s.DoRequestGet(c, path, unionid); err != nil { return nil, err } if unionid.Errcode != Success { @@ -53,7 +53,7 @@ func (s *SDK) GetPaidUnionid(c context.Context, openid, transactionId string) (u func (s *SDK) GetPaidUnionidByTradeNo(c context.Context, openid, mchid, tradeNo string) (unionid *PaidUnionId, err error) { path := "/wxa/getpaidunionid?access_token=" + s.accessToken + "&openid=" + openid + "&mch_id=" + mchid + "&out_trade_no=" + tradeNo unionid = &PaidUnionId{} - if _, err = s.doRequestGet(c, path, unionid); err != nil { + if _, err = s.DoRequestGet(c, path, unionid); err != nil { return nil, err } if unionid.Errcode != Success { @@ -74,7 +74,7 @@ func (s *SDK) CheckEncryptedData(c context.Context, encryptedData string) (resul body := make(bm.BodyMap) body.Set("encrypted_msg_hash", hex.EncodeToString(h.Sum(nil))) result = &CheckEncryptedResult{} - if _, err = s.doRequestPost(c, path, body, result); err != nil { + if _, err = s.DoRequestPost(c, path, body, result); err != nil { return nil, err } if result.Errcode != Success { @@ -95,7 +95,7 @@ func (s *SDK) GetUserEncryptKey(c context.Context, openid, signature, sigMethod Set("signature", signature). Set("sig_method", sigMethod) uek = &UserEncryptKey{} - if _, err = s.doRequestPost(c, path, body, uek); err != nil { + if _, err = s.DoRequestPost(c, path, body, uek); err != nil { return nil, err } if uek.Errcode != Success { @@ -113,7 +113,7 @@ func (s *SDK) GetPhoneNumber(c context.Context, code string) (pn *PhoneNumberRsp pn = &PhoneNumberRsp{} body := make(bm.BodyMap) body.Set("code", code) - if _, err = s.doRequestPost(c, path, body, pn); err != nil { + if _, err = s.DoRequestPost(c, path, body, pn); err != nil { return nil, err } if pn.Errcode != Success {