Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add mini drama #9

Merged
merged 7 commits into from
Dec 9, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion mini/access_token.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
8 changes: 4 additions & 4 deletions mini/customer_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
Expand Down Expand Up @@ -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 {
Expand All @@ -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 {
Expand All @@ -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 {
Expand Down
2 changes: 1 addition & 1 deletion mini/login.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
21 changes: 0 additions & 21 deletions mini/mini.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package mini
import (
"context"
"fmt"
"net/http"
"time"

"github.com/go-pay/bm"
Expand Down Expand Up @@ -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()))
Expand Down
72 changes: 72 additions & 0 deletions mini/mini_drama_manage.go
Original file line number Diff line number Diff line change
@@ -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
}
58 changes: 58 additions & 0 deletions mini/mini_drama_manage_test.go
Original file line number Diff line number Diff line change
@@ -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)
}
107 changes: 107 additions & 0 deletions mini/mini_drama_upload.go
Original file line number Diff line number Diff line change
@@ -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
}
Loading
Loading