updatable_msg.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. package message
  2. import (
  3. "fmt"
  4. "github.com/silenceper/wechat/v2/miniprogram/context"
  5. "github.com/silenceper/wechat/v2/util"
  6. )
  7. const (
  8. // createActivityURL 创建activity_id
  9. createActivityURL = "https://api.weixin.qq.com/cgi-bin/message/wxopen/activityid/create?access_token=%s"
  10. // SendUpdatableMsgURL 修改动态消息
  11. setUpdatableMsgURL = "https://api.weixin.qq.com/cgi-bin/message/wxopen/updatablemsg/send?access_token=%s"
  12. )
  13. // UpdatableTargetState 动态消息状态
  14. type UpdatableTargetState int
  15. const (
  16. // TargetStateNotStarted 未开始
  17. TargetStateNotStarted UpdatableTargetState = 0
  18. // TargetStateStarted 已开始
  19. TargetStateStarted UpdatableTargetState = 1
  20. // TargetStateFinished 已结束
  21. TargetStateFinished UpdatableTargetState = 2
  22. )
  23. // UpdatableMessage 动态消息
  24. type UpdatableMessage struct {
  25. *context.Context
  26. }
  27. // NewUpdatableMessage 实例化
  28. func NewUpdatableMessage(ctx *context.Context) *UpdatableMessage {
  29. return &UpdatableMessage{
  30. Context: ctx,
  31. }
  32. }
  33. // CreateActivityID 创建activity_id
  34. func (updatableMessage *UpdatableMessage) CreateActivityID() (res CreateActivityIDResponse, err error) {
  35. accessToken, err := updatableMessage.GetAccessToken()
  36. if err != nil {
  37. return
  38. }
  39. uri := fmt.Sprintf(createActivityURL, accessToken)
  40. response, err := util.HTTPGet(uri)
  41. if err != nil {
  42. return
  43. }
  44. err = util.DecodeWithError(response, &res, "CreateActivityID")
  45. return
  46. }
  47. // SetUpdatableMsg 修改动态消息
  48. func (updatableMessage *UpdatableMessage) SetUpdatableMsg(activityID string, targetState UpdatableTargetState, template UpdatableMsgTemplate) (err error) {
  49. accessToken, err := updatableMessage.GetAccessToken()
  50. if err != nil {
  51. return
  52. }
  53. uri := fmt.Sprintf(setUpdatableMsgURL, accessToken)
  54. data := SendUpdatableMsgReq{
  55. ActivityID: activityID,
  56. TargetState: targetState,
  57. TemplateInfo: template,
  58. }
  59. response, err := util.PostJSON(uri, data)
  60. if err != nil {
  61. return
  62. }
  63. return util.DecodeWithCommonError(response, "SendUpdatableMsg")
  64. }
  65. // CreateActivityIDResponse 创建activity_id 返回
  66. type CreateActivityIDResponse struct {
  67. util.CommonError
  68. ActivityID string `json:"activity_id"`
  69. ExpirationTime int64 `json:"expiration_time"`
  70. }
  71. // UpdatableMsgTemplate 动态消息模板
  72. type UpdatableMsgTemplate struct {
  73. ParameterList []UpdatableMsgParameter `json:"parameter_list"`
  74. }
  75. // UpdatableMsgParameter 动态消息参数
  76. type UpdatableMsgParameter struct {
  77. Name string `json:"name"`
  78. Value string `json:"value"`
  79. }
  80. // SendUpdatableMsgReq 修改动态消息参数
  81. type SendUpdatableMsgReq struct {
  82. ActivityID string `json:"activity_id"`
  83. TemplateInfo UpdatableMsgTemplate `json:"template_info"`
  84. TargetState UpdatableTargetState `json:"target_state"`
  85. }