| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- 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")
- }
|