Skip to content

Commit 8691c07

Browse files
authored
Add mini drama (#9)
* add mini drama
1 parent d764c17 commit 8691c07

12 files changed

+496
-40
lines changed

mini/access_token.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ func (s *SDK) getStableAccessToken() (err error) {
2929
Set("secret", s.Secret).
3030
Set("force_refresh", false)
3131
at := &AccessToken{}
32-
if _, err = s.doRequestPost(s.ctx, path, body, at); err != nil {
32+
if _, err = s.DoRequestPost(s.ctx, path, body, at); err != nil {
3333
return
3434
}
3535
if at.Errcode != Success {

mini/customer_service.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import (
1212
// 文档:https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/kf-mgnt/kf-message/getTempMedia.html
1313
func (s *SDK) CSMessageGetTempMedia(c context.Context, mediaId string) (media []byte, err error) {
1414
path := "/cgi-bin/media/get?access_token=" + s.accessToken + "&media_id=" + mediaId
15-
media, err = s.doRequestGetByte(c, path)
15+
media, err = s.DoRequestGetByte(c, path)
1616
if err != nil {
1717
return nil, err
1818
}
@@ -44,7 +44,7 @@ func (s *SDK) CSMessageSend(c context.Context, toUser string, msgType MsgType, m
4444
Set("text", msgValue)
4545
}
4646
ec := &ErrorCode{}
47-
if _, err = s.doRequestPost(c, path, body, ec); err != nil {
47+
if _, err = s.DoRequestPost(c, path, body, ec); err != nil {
4848
return err
4949
}
5050
if ec.Errcode != Success {
@@ -69,7 +69,7 @@ func (s *SDK) CSMessageSetTyping(c context.Context, toUser string, typingStatus
6969
body.Set("command", "CancelTyping")
7070
}
7171
ec := &ErrorCode{}
72-
if _, err = s.doRequestPost(c, path, body, ec); err != nil {
72+
if _, err = s.DoRequestPost(c, path, body, ec); err != nil {
7373
return err
7474
}
7575
if ec.Errcode != Success {
@@ -88,7 +88,7 @@ func (s *SDK) CSMessageUploadTempMedia(c context.Context, img *bm.File) (media *
8888
body.Set("type", "image").
8989
SetFormFile("media", img)
9090
media = &UploadTempMedia{}
91-
if _, err = s.doRequestPostFile(c, path, body, media); err != nil {
91+
if _, err = s.DoRequestPostFile(c, path, body, media); err != nil {
9292
return nil, err
9393
}
9494
if media.Errcode != Success {

mini/login.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import (
1212
func (s *SDK) Code2Session(c context.Context, wxCode string) (session *Code2Session, err error) {
1313
path := "/sns/jscode2session?appid=" + s.Appid + "&secret=" + s.Secret + "&js_code=" + wxCode + "&grant_type=authorization_code"
1414
session = &Code2Session{}
15-
if _, err = s.doRequestGet(c, path, session); err != nil {
15+
if _, err = s.DoRequestGet(c, path, session); err != nil {
1616
return nil, err
1717
}
1818
if session.Errcode != Success {

mini/mini.go

-21
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package mini
33
import (
44
"context"
55
"fmt"
6-
"net/http"
76
"time"
87

98
"github.com/go-pay/bm"
@@ -66,26 +65,6 @@ func (s *SDK) SetLogger(logger xlog.XLogger) {
6665
}
6766
}
6867

69-
func (s *SDK) DoRequestGet(c context.Context, path string, ptr any) (res *http.Response, err error) {
70-
uri := s.Host + path
71-
if s.DebugSwitch == wechat.DebugOn {
72-
s.logger.Debugf("Wechat_SDK_URI: %s", uri)
73-
}
74-
req := s.hc.Req()
75-
req.Header.Add(wechat.HeaderRequestID, fmt.Sprintf("%s-%d", util.RandomString(21), time.Now().Unix()))
76-
res, bs, err := req.Get(uri).EndBytes(c)
77-
if err != nil {
78-
return nil, fmt.Errorf("http.request(GET, %s), err:%w", uri, err)
79-
}
80-
if s.DebugSwitch == wechat.DebugOn {
81-
s.logger.Debugf("Wechat_SDK_Response: [%d] -> %s", res.StatusCode, string(bs))
82-
}
83-
if err = js.UnmarshalBytes(bs, ptr); err != nil {
84-
return res, fmt.Errorf("js.UnmarshalBytes(%s, %+v):%w", string(bs), ptr, err)
85-
}
86-
return
87-
}
88-
8968
func doRequestGet(c context.Context, uri string, ptr any) (err error) {
9069
req := xhttp.NewClient().Req()
9170
req.Header.Add(wechat.HeaderRequestID, fmt.Sprintf("%s-%d", util.RandomString(21), time.Now().Unix()))

mini/mini_drama_manage.go

+72
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
package mini
2+
3+
import (
4+
"context"
5+
"fmt"
6+
7+
"github.com/go-pay/bm"
8+
)
9+
10+
// MediaAssetListMedia 媒资管理-获取媒资列表
11+
// 注意:errcode = 0 为成功
12+
// 说明:该接口用于获取已上传到平台的媒资列表。
13+
// 文档: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
14+
func (s *SDK) MediaAssetListMedia(c context.Context, body bm.BodyMap) (rsp *MediaAssetListMediaRsp, err error) {
15+
path := "/wxa/sec/vod/listmedia?access_token=" + s.accessToken
16+
rsp = &MediaAssetListMediaRsp{}
17+
if _, err = s.DoRequestPost(c, path, body, rsp); err != nil {
18+
return nil, err
19+
}
20+
if rsp.Errcode != Success {
21+
return nil, fmt.Errorf("errcode(%d), errmsg(%s)", rsp.Errcode, rsp.Errmsg)
22+
}
23+
return rsp, nil
24+
}
25+
26+
// MediaAssetGetMedia 媒资管理-获取媒资详细信息
27+
// 注意:errcode = 0 为成功
28+
// 说明:该接口用于获取已上传到平台的指定媒资信息,用于开发者后台管理使用。用于给用户客户端播放的链接应该使用getmedialink接口获取。
29+
// 文档: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
30+
func (s *SDK) MediaAssetGetMedia(c context.Context, body bm.BodyMap) (rsp *MediaAssetGetMediaRsp, err error) {
31+
path := "/wxa/sec/vod/getmedia?access_token=" + s.accessToken
32+
rsp = &MediaAssetGetMediaRsp{}
33+
if _, err = s.DoRequestPost(c, path, body, rsp); err != nil {
34+
return nil, err
35+
}
36+
if rsp.Errcode != Success {
37+
return nil, fmt.Errorf("errcode(%d), errmsg(%s)", rsp.Errcode, rsp.Errmsg)
38+
}
39+
return rsp, nil
40+
}
41+
42+
// MediaAssetGetMediaLink 媒资管理-获取媒资播放链接
43+
// 注意:errcode = 0 为成功
44+
// 说明:该接口用于获取视频临时播放链接,用于给用户的播放使用。只有审核通过的视频才能通过该接口获取播放链接。
45+
// 文档: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
46+
func (s *SDK) MediaAssetGetMediaLink(c context.Context, body bm.BodyMap) (rsp *MediaAssetGetMediaLinkRsp, err error) {
47+
path := "/wxa/sec/vod/getmedialink?access_token=" + s.accessToken
48+
rsp = &MediaAssetGetMediaLinkRsp{}
49+
if _, err = s.DoRequestPost(c, path, body, rsp); err != nil {
50+
return nil, err
51+
}
52+
if rsp.Errcode != Success {
53+
return nil, fmt.Errorf("errcode(%d), errmsg(%s)", rsp.Errcode, rsp.Errmsg)
54+
}
55+
return rsp, nil
56+
}
57+
58+
// MediaAssetDeleteMedia 媒资管理-删除媒资
59+
// 注意:errcode = 0 为成功
60+
// 说明:该接口用于删除指定媒资。
61+
// 文档: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
62+
func (s *SDK) MediaAssetDeleteMedia(c context.Context, body bm.BodyMap) (rsp *MediaAssetDeleteMediaRsp, err error) {
63+
path := "/wxa/sec/vod/deletemedia?access_token=" + s.accessToken
64+
rsp = &MediaAssetDeleteMediaRsp{}
65+
if _, err = s.DoRequestPost(c, path, body, rsp); err != nil {
66+
return nil, err
67+
}
68+
if rsp.Errcode != Success {
69+
return nil, fmt.Errorf("errcode(%d), errmsg(%s)", rsp.Errcode, rsp.Errmsg)
70+
}
71+
return rsp, nil
72+
}

mini/mini_drama_manage_test.go

+58
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package mini
2+
3+
import (
4+
"testing"
5+
6+
"github.com/go-pay/bm"
7+
"github.com/go-pay/xlog"
8+
)
9+
10+
func TestMediaAssetListMedia(t *testing.T) {
11+
body := make(bm.BodyMap)
12+
body.Set("drama_id", 20001).
13+
Set("limit", 20)
14+
15+
rsp, err := miniSDK.MediaAssetListMedia(ctx, body)
16+
if err != nil {
17+
xlog.Error(err)
18+
return
19+
}
20+
xlog.Debugf("rsp:%+v", rsp)
21+
}
22+
23+
func TestMediaAssetGetMedia(t *testing.T) {
24+
body := make(bm.BodyMap)
25+
body.Set("media_id", 20001)
26+
27+
rsp, err := miniSDK.MediaAssetGetMedia(ctx, body)
28+
if err != nil {
29+
xlog.Error(err)
30+
return
31+
}
32+
xlog.Debugf("rsp:%+v", rsp)
33+
}
34+
35+
func TestMediaAssetGetMediaLink(t *testing.T) {
36+
body := make(bm.BodyMap)
37+
body.Set("media_id", 28918028).
38+
Set("t", 1689990878)
39+
40+
rsp, err := miniSDK.MediaAssetGetMediaLink(ctx, body)
41+
if err != nil {
42+
xlog.Error(err)
43+
return
44+
}
45+
xlog.Debugf("rsp:%+v", rsp)
46+
}
47+
48+
func TestMediaAssetDeleteMedia(t *testing.T) {
49+
body := make(bm.BodyMap)
50+
body.Set("media_id", 28918028)
51+
52+
rsp, err := miniSDK.MediaAssetDeleteMedia(ctx, body)
53+
if err != nil {
54+
xlog.Error(err)
55+
return
56+
}
57+
xlog.Debugf("rsp:%+v", rsp)
58+
}

mini/mini_drama_upload.go

+107
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
package mini
2+
3+
import (
4+
"context"
5+
"fmt"
6+
7+
"github.com/go-pay/bm"
8+
)
9+
10+
// MediaAssetSingleFileUpload 媒资上传-单个文件上传
11+
// 注意:errcode = 0 为成功
12+
// 说明:上传媒体(和封面)文件,上传小文件(小于10MB)时使用。上传大文件请使用分片上传接口。
13+
// 文档: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
14+
func (s *SDK) MediaAssetSingleFileUpload(c context.Context, body bm.BodyMap) (rsp *MediaAssetSingleFileUploadRsp, err error) {
15+
path := "/wxa/sec/vod/singlefileupload?access_token=" + s.accessToken
16+
rsp = &MediaAssetSingleFileUploadRsp{}
17+
if _, err = s.DoRequestPostFile(c, path, body, rsp); err != nil {
18+
return nil, err
19+
}
20+
if rsp.Errcode != Success {
21+
return nil, fmt.Errorf("errcode(%d), errmsg(%s)", rsp.Errcode, rsp.Errmsg)
22+
}
23+
return rsp, nil
24+
}
25+
26+
// MediaAssetPullUpload 媒资上传-拉取上传
27+
// 注意:errcode = 0 为成功
28+
// 说明:该接口用于将一个网络上的视频拉取上传到平台。
29+
// 文档: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
30+
func (s *SDK) MediaAssetPullUpload(c context.Context, body bm.BodyMap) (rsp *MediaAssetPullUploadRsp, err error) {
31+
path := "/wxa/sec/vod/pullupload?access_token=" + s.accessToken
32+
rsp = &MediaAssetPullUploadRsp{}
33+
if _, err = s.DoRequestPost(c, path, body, rsp); err != nil {
34+
return nil, err
35+
}
36+
if rsp.Errcode != Success {
37+
return nil, fmt.Errorf("errcode(%d), errmsg(%s)", rsp.Errcode, rsp.Errmsg)
38+
}
39+
return rsp, nil
40+
}
41+
42+
// MediaAssetGetTask 媒资上传-查询任务
43+
// 注意:errcode = 0 为成功
44+
// 说明:该接口用于查询拉取上传的任务状态。
45+
// 文档: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
46+
func (s *SDK) MediaAssetGetTask(c context.Context, body bm.BodyMap) (rsp *MediaAssetGetTaskRsp, err error) {
47+
path := "/wxa/sec/vod/gettask?access_token=" + s.accessToken
48+
rsp = &MediaAssetGetTaskRsp{}
49+
if _, err = s.DoRequestPost(c, path, body, rsp); err != nil {
50+
return nil, err
51+
}
52+
if rsp.Errcode != Success {
53+
return nil, fmt.Errorf("errcode(%d), errmsg(%s)", rsp.Errcode, rsp.Errmsg)
54+
}
55+
return rsp, nil
56+
}
57+
58+
// MediaAssetApplyUpload 媒资上传-申请分片上传
59+
// 注意:errcode = 0 为成功
60+
// 说明:上传大文件时需使用分片上传方式,分为 3 个步骤:
61+
// 1、申请分片上传,确定文件名、格式类型,返回 upload_id,唯一标识本次分片上传。
62+
// 2、上传分片,多次调用上传文件分片,需要携带 part_number 和 upload_id,其中 part_number 为分片的编号,支持乱序上传。当传入 part_number 和 upload_id 都相同的时候,后发起上传请求的分片将覆盖之前的分片。
63+
// 3、确认分片上传,当上传完所有分片后,需要完成整个文件的合并。请求体中需要给出每一个分片的 part_number 和 etag,用来校验分片的准确性,最后返回文件的 media_id。
64+
// 文档: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
65+
func (s *SDK) MediaAssetApplyUpload(c context.Context, body bm.BodyMap) (rsp *MediaAssetApplyUploadRsp, err error) {
66+
path := "/wxa/sec/vod/applyupload?access_token=" + s.accessToken
67+
rsp = &MediaAssetApplyUploadRsp{}
68+
if _, err = s.DoRequestPost(c, path, body, rsp); err != nil {
69+
return nil, err
70+
}
71+
if rsp.Errcode != Success {
72+
return nil, fmt.Errorf("errcode(%d), errmsg(%s)", rsp.Errcode, rsp.Errmsg)
73+
}
74+
return rsp, nil
75+
}
76+
77+
// MediaAssetUploadPart 媒资上传-上传分片
78+
// 注意:errcode = 0 为成功
79+
// 说明:将文件的其中一个分片上传到平台,最多支持100个分片,每个分片大小为5MB,最后一个分片可以小于5MB。该接口适用于视频和封面图片。视频最大支持500MB,封面图片最大支持10MB。
80+
// 文档: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
81+
func (s *SDK) MediaAssetUploadPart(c context.Context, body bm.BodyMap) (rsp *MediaAssetUploadPartRsp, err error) {
82+
path := "/wxa/sec/vod/uploadpart?access_token=" + s.accessToken
83+
rsp = &MediaAssetUploadPartRsp{}
84+
if _, err = s.DoRequestPostFile(c, path, body, rsp); err != nil {
85+
return nil, err
86+
}
87+
if rsp.Errcode != Success {
88+
return nil, fmt.Errorf("errcode(%d), errmsg(%s)", rsp.Errcode, rsp.Errmsg)
89+
}
90+
return rsp, nil
91+
}
92+
93+
// MediaAssetCommitUpload 媒资上传-确认上传
94+
// 注意:errcode = 0 为成功
95+
// 说明:该接口用于完成整个分片上传流程,合并所有文件分片,确认媒体文件(和封面图片文件)上传到平台的结果,返回文件的 ID。请求中需要给出每一个分片的 part_number 和 etag,用来校验分片的准确性。
96+
// 文档: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
97+
func (s *SDK) MediaAssetCommitUpload(c context.Context, body bm.BodyMap) (rsp *MediaAssetCommitUploadRsp, err error) {
98+
path := "/wxa/sec/vod/commitupload?access_token=" + s.accessToken
99+
rsp = &MediaAssetCommitUploadRsp{}
100+
if _, err = s.DoRequestPost(c, path, body, rsp); err != nil {
101+
return nil, err
102+
}
103+
if rsp.Errcode != Success {
104+
return nil, fmt.Errorf("errcode(%d), errmsg(%s)", rsp.Errcode, rsp.Errmsg)
105+
}
106+
return rsp, nil
107+
}

0 commit comments

Comments
 (0)