button.go 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. package menu
  2. // Button 菜单按钮
  3. type Button struct {
  4. Type string `json:"type,omitempty"`
  5. Name string `json:"name,omitempty"`
  6. Key string `json:"key,omitempty"`
  7. URL string `json:"url,omitempty"`
  8. MediaID string `json:"media_id,omitempty"`
  9. AppID string `json:"appid,omitempty"`
  10. PagePath string `json:"pagepath,omitempty"`
  11. SubButtons []*Button `json:"sub_button,omitempty"`
  12. }
  13. // SetSubButton 设置二级菜单
  14. func (btn *Button) SetSubButton(name string, subButtons []*Button) *Button {
  15. btn.Name = name
  16. btn.SubButtons = subButtons
  17. btn.Type = ""
  18. btn.Key = ""
  19. btn.URL = ""
  20. btn.MediaID = ""
  21. return btn
  22. }
  23. // SetClickButton btn 为 click 类型
  24. func (btn *Button) SetClickButton(name, key string) *Button {
  25. btn.Type = "click"
  26. btn.Name = name
  27. btn.Key = key
  28. btn.URL = ""
  29. btn.MediaID = ""
  30. btn.SubButtons = nil
  31. return btn
  32. }
  33. // SetViewButton view 类型
  34. func (btn *Button) SetViewButton(name, url string) *Button {
  35. btn.Type = "view"
  36. btn.Name = name
  37. btn.URL = url
  38. btn.Key = ""
  39. btn.MediaID = ""
  40. btn.SubButtons = nil
  41. return btn
  42. }
  43. // SetScanCodePushButton 扫码推事件
  44. func (btn *Button) SetScanCodePushButton(name, key string) *Button {
  45. btn.Type = "scancode_push"
  46. btn.Name = name
  47. btn.Key = key
  48. btn.URL = ""
  49. btn.MediaID = ""
  50. btn.SubButtons = nil
  51. return btn
  52. }
  53. // SetScanCodeWaitMsgButton 设置 扫码推事件且弹出"消息接收中"提示框
  54. func (btn *Button) SetScanCodeWaitMsgButton(name, key string) *Button {
  55. btn.Type = "scancode_waitmsg"
  56. btn.Name = name
  57. btn.Key = key
  58. btn.URL = ""
  59. btn.MediaID = ""
  60. btn.SubButtons = nil
  61. return btn
  62. }
  63. // SetPicSysPhotoButton 设置弹出系统拍照发图按钮
  64. func (btn *Button) SetPicSysPhotoButton(name, key string) *Button {
  65. btn.Type = "pic_sysphoto"
  66. btn.Name = name
  67. btn.Key = key
  68. btn.URL = ""
  69. btn.MediaID = ""
  70. btn.SubButtons = nil
  71. return btn
  72. }
  73. // SetPicPhotoOrAlbumButton 设置弹出拍照或者相册发图类型按钮
  74. func (btn *Button) SetPicPhotoOrAlbumButton(name, key string) *Button {
  75. btn.Type = "pic_photo_or_album"
  76. btn.Name = name
  77. btn.Key = key
  78. btn.URL = ""
  79. btn.MediaID = ""
  80. btn.SubButtons = nil
  81. return btn
  82. }
  83. // SetPicWeixinButton 设置弹出微信相册发图器类型按钮
  84. func (btn *Button) SetPicWeixinButton(name, key string) *Button {
  85. btn.Type = "pic_weixin"
  86. btn.Name = name
  87. btn.Key = key
  88. btn.URL = ""
  89. btn.MediaID = ""
  90. btn.SubButtons = nil
  91. return btn
  92. }
  93. // SetLocationSelectButton 设置 弹出地理位置选择器 类型按钮
  94. func (btn *Button) SetLocationSelectButton(name, key string) *Button {
  95. btn.Type = "location_select"
  96. btn.Name = name
  97. btn.Key = key
  98. btn.URL = ""
  99. btn.MediaID = ""
  100. btn.SubButtons = nil
  101. return btn
  102. }
  103. // SetMediaIDButton 设置 下发消息 (除文本消息) 类型按钮
  104. func (btn *Button) SetMediaIDButton(name, mediaID string) *Button {
  105. btn.Type = "media_id"
  106. btn.Name = name
  107. btn.MediaID = mediaID
  108. btn.Key = ""
  109. btn.URL = ""
  110. btn.SubButtons = nil
  111. return btn
  112. }
  113. // SetViewLimitedButton 设置 跳转图文消息 URL 类型按钮
  114. func (btn *Button) SetViewLimitedButton(name, mediaID string) *Button {
  115. btn.Type = "view_limited"
  116. btn.Name = name
  117. btn.MediaID = mediaID
  118. btn.Key = ""
  119. btn.URL = ""
  120. btn.SubButtons = nil
  121. return btn
  122. }
  123. // SetMiniprogramButton 设置 跳转小程序 类型按钮 (公众号后台必须已经关联小程序)
  124. func (btn *Button) SetMiniprogramButton(name, url, appID, pagePath string) *Button {
  125. btn.Type = "miniprogram"
  126. btn.Name = name
  127. btn.URL = url
  128. btn.AppID = appID
  129. btn.PagePath = pagePath
  130. btn.Key = ""
  131. btn.MediaID = ""
  132. btn.SubButtons = nil
  133. return btn
  134. }
  135. // NewSubButton 二级菜单
  136. func NewSubButton(name string, subButtons []*Button) *Button {
  137. return (&Button{}).SetSubButton(name, subButtons)
  138. }
  139. // NewClickButton btn 为 click 类型
  140. func NewClickButton(name, key string) *Button {
  141. return (&Button{}).SetClickButton(name, key)
  142. }
  143. // NewViewButton view 类型
  144. func NewViewButton(name, url string) *Button {
  145. return (&Button{}).SetViewButton(name, url)
  146. }
  147. // NewScanCodePushButton 扫码推事件
  148. func NewScanCodePushButton(name, key string) *Button {
  149. return (&Button{}).SetScanCodePushButton(name, key)
  150. }
  151. // NewScanCodeWaitMsgButton 扫码推事件且弹出"消息接收中"提示框
  152. func NewScanCodeWaitMsgButton(name, key string) *Button {
  153. return (&Button{}).SetScanCodeWaitMsgButton(name, key)
  154. }
  155. // NewPicSysPhotoButton 弹出系统拍照发图按钮
  156. func NewPicSysPhotoButton(name, key string) *Button {
  157. return (&Button{}).SetPicSysPhotoButton(name, key)
  158. }
  159. // NewPicPhotoOrAlbumButton 弹出拍照或者相册发图类型按钮
  160. func NewPicPhotoOrAlbumButton(name, key string) *Button {
  161. return (&Button{}).SetPicPhotoOrAlbumButton(name, key)
  162. }
  163. // NewPicWeixinButton 弹出微信相册发图器类型按钮
  164. func NewPicWeixinButton(name, key string) *Button {
  165. return (&Button{}).SetPicWeixinButton(name, key)
  166. }
  167. // NewLocationSelectButton 弹出地理位置选择器 类型按钮
  168. func NewLocationSelectButton(name, key string) *Button {
  169. return (&Button{}).SetLocationSelectButton(name, key)
  170. }
  171. // NewMediaIDButton 下发消息 (除文本消息) 类型按钮
  172. func NewMediaIDButton(name, mediaID string) *Button {
  173. return (&Button{}).SetMediaIDButton(name, mediaID)
  174. }
  175. // NewViewLimitedButton 跳转图文消息 URL 类型按钮
  176. func NewViewLimitedButton(name, mediaID string) *Button {
  177. return (&Button{}).SetViewLimitedButton(name, mediaID)
  178. }
  179. // NewMiniprogramButton 跳转小程序 类型按钮 (公众号后台必须已经关联小程序)
  180. func NewMiniprogramButton(name, url, appID, pagePath string) *Button {
  181. return (&Button{}).SetMiniprogramButton(name, url, appID, pagePath)
  182. }