mirror of
https://github.com/silenceper/wechat.git
synced 2026-02-04 21:02:25 +08:00
148 lines
4.6 KiB
Go
148 lines
4.6 KiB
Go
package message
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/silenceper/wechat/v2/miniprogram/context"
|
|
"github.com/silenceper/wechat/v2/util"
|
|
)
|
|
|
|
const (
|
|
// createActivityIDURL 创建activity_id
|
|
createActivityIDURL = "https://api.weixin.qq.com/cgi-bin/message/wxopen/activityid/create?access_token=%s&unionid=%s&openid=%s"
|
|
// SendUpdatableMsgURL 修改动态消息
|
|
setUpdatableMsgURL = "https://api.weixin.qq.com/cgi-bin/message/wxopen/updatablemsg/send?access_token=%s"
|
|
// setChatToolMsgURL 修改小程序聊天工具的动态卡片消息
|
|
setChatToolMsgURL = "https://api.weixin.qq.com/cgi-bin/message/wxopen/chattoolmsg/send?access_token=%s"
|
|
)
|
|
|
|
// UpdatableTargetState 动态消息状态
|
|
type UpdatableTargetState int
|
|
|
|
const (
|
|
// TargetStateNotStarted 未开始
|
|
TargetStateNotStarted UpdatableTargetState = 0
|
|
// TargetStateStarted 已开始
|
|
TargetStateStarted UpdatableTargetState = 1
|
|
// TargetStateFinished 已结束
|
|
TargetStateFinished UpdatableTargetState = 2
|
|
)
|
|
|
|
// UpdatableMessage 动态消息
|
|
type UpdatableMessage struct {
|
|
*context.Context
|
|
}
|
|
|
|
// NewUpdatableMessage 实例化
|
|
func NewUpdatableMessage(ctx *context.Context) *UpdatableMessage {
|
|
return &UpdatableMessage{
|
|
Context: ctx,
|
|
}
|
|
}
|
|
|
|
// CreateActivityIDRequest 创建activity_id请求
|
|
type CreateActivityIDRequest struct {
|
|
UnionID string
|
|
OpenID string
|
|
}
|
|
|
|
// CreateActivityID 创建activity_id
|
|
func (updatableMessage *UpdatableMessage) CreateActivityID() (CreateActivityIDResponse, error) {
|
|
return updatableMessage.CreateActivityIDWithReq(&CreateActivityIDRequest{})
|
|
}
|
|
|
|
// CreateActivityIDWithReq 创建activity_id
|
|
// see https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/mp-message-management/updatable-message/createActivityId.html
|
|
func (updatableMessage *UpdatableMessage) CreateActivityIDWithReq(req *CreateActivityIDRequest) (res CreateActivityIDResponse, err error) {
|
|
accessToken, err := updatableMessage.GetAccessToken()
|
|
if err != nil {
|
|
return
|
|
}
|
|
url := fmt.Sprintf(createActivityIDURL, accessToken, req.UnionID, req.OpenID)
|
|
response, err := util.HTTPGet(url)
|
|
if err != nil {
|
|
return
|
|
}
|
|
err = util.DecodeWithError(response, &res, "CreateActivityID")
|
|
return
|
|
}
|
|
|
|
// SetUpdatableMsg 修改动态消息
|
|
func (updatableMessage *UpdatableMessage) SetUpdatableMsg(activityID string, targetState UpdatableTargetState, template UpdatableMsgTemplate) (err error) {
|
|
accessToken, err := updatableMessage.GetAccessToken()
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
uri := fmt.Sprintf(setUpdatableMsgURL, accessToken)
|
|
data := SendUpdatableMsgReq{
|
|
ActivityID: activityID,
|
|
TargetState: targetState,
|
|
TemplateInfo: template,
|
|
}
|
|
|
|
response, err := util.PostJSON(uri, data)
|
|
if err != nil {
|
|
return
|
|
}
|
|
return util.DecodeWithCommonError(response, "SendUpdatableMsg")
|
|
}
|
|
|
|
// CreateActivityIDResponse 创建activity_id 返回
|
|
type CreateActivityIDResponse struct {
|
|
util.CommonError
|
|
|
|
ActivityID string `json:"activity_id"`
|
|
ExpirationTime int64 `json:"expiration_time"`
|
|
}
|
|
|
|
// UpdatableMsgTemplate 动态消息模板
|
|
type UpdatableMsgTemplate struct {
|
|
ParameterList []UpdatableMsgParameter `json:"parameter_list"`
|
|
}
|
|
|
|
// UpdatableMsgParameter 动态消息参数
|
|
type UpdatableMsgParameter struct {
|
|
Name string `json:"name"`
|
|
Value string `json:"value"`
|
|
}
|
|
|
|
// SendUpdatableMsgReq 修改动态消息参数
|
|
type SendUpdatableMsgReq struct {
|
|
ActivityID string `json:"activity_id"`
|
|
TemplateInfo UpdatableMsgTemplate `json:"template_info"`
|
|
TargetState UpdatableTargetState `json:"target_state"`
|
|
}
|
|
|
|
// SetChatToolMsgRequest 修改小程序聊天工具的动态卡片消息请求
|
|
type SetChatToolMsgRequest struct {
|
|
VersionType int64 `json:"version_type"`
|
|
TargetState UpdatableTargetState `json:"target_state"`
|
|
ActivityID string `json:"activity_id"`
|
|
TemplateID string `json:"template_id"`
|
|
ParticipatorInfoList []ParticipatorInfo `json:"participator_info_list,omitempty"`
|
|
}
|
|
|
|
// ParticipatorInfo 更新后的聊天室成员状态
|
|
type ParticipatorInfo struct {
|
|
State int `json:"state"`
|
|
GroupOpenID string `json:"group_openid"`
|
|
}
|
|
|
|
// SetChatToolMsg 修改小程序聊天工具的动态卡片消息
|
|
// see https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/mp-message-management/updatable-message/setChatToolMsg.html
|
|
func (updatableMessage *UpdatableMessage) SetChatToolMsg(req *SetChatToolMsgRequest) error {
|
|
var (
|
|
accessToken string
|
|
err error
|
|
)
|
|
if accessToken, err = updatableMessage.GetAccessToken(); err != nil {
|
|
return err
|
|
}
|
|
var response []byte
|
|
if response, err = util.PostJSON(fmt.Sprintf(setChatToolMsgURL, accessToken), req); err != nil {
|
|
return err
|
|
}
|
|
return util.DecodeWithCommonError(response, "SetChatToolMsg")
|
|
}
|