mirror of
https://github.com/silenceper/wechat.git
synced 2026-02-09 23:22:27 +08:00
* 公众号菜单管理,增加new相关函数,老的set相关函数,返回btn本身,以便用字面量的方式创建多级菜单,更直观,方便管理 (#365)
* * 公众号菜单管理,set相关函数,返回btn本身,方便以字面量的方式创建多个菜单,更直观,方便管理 * * golangci-lint fix * * 获取二维码ticket接口没有往上抛接口错误
This commit is contained in:
@@ -62,6 +62,11 @@ func (basic *Basic) GetQRTicket(tq *Request) (t *Ticket, err error) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if t.ErrMsg != "" {
|
||||||
|
err = fmt.Errorf("get qr_ticket error : errcode=%v , errormsg=%v", t.ErrCode, t.ErrMsg)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -13,47 +13,51 @@ type Button struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//SetSubButton 设置二级菜单
|
//SetSubButton 设置二级菜单
|
||||||
func (btn *Button) SetSubButton(name string, subButtons []*Button) {
|
func (btn *Button) SetSubButton(name string, subButtons []*Button) *Button {
|
||||||
btn.Name = name
|
btn.Name = name
|
||||||
btn.SubButtons = subButtons
|
btn.SubButtons = subButtons
|
||||||
btn.Type = ""
|
btn.Type = ""
|
||||||
btn.Key = ""
|
btn.Key = ""
|
||||||
btn.URL = ""
|
btn.URL = ""
|
||||||
btn.MediaID = ""
|
btn.MediaID = ""
|
||||||
|
return btn
|
||||||
}
|
}
|
||||||
|
|
||||||
//SetClickButton btn 为click类型
|
//SetClickButton btn 为click类型
|
||||||
func (btn *Button) SetClickButton(name, key string) {
|
func (btn *Button) SetClickButton(name, key string) *Button {
|
||||||
btn.Type = "click"
|
btn.Type = "click"
|
||||||
btn.Name = name
|
btn.Name = name
|
||||||
btn.Key = key
|
btn.Key = key
|
||||||
btn.URL = ""
|
btn.URL = ""
|
||||||
btn.MediaID = ""
|
btn.MediaID = ""
|
||||||
btn.SubButtons = nil
|
btn.SubButtons = nil
|
||||||
|
return btn
|
||||||
}
|
}
|
||||||
|
|
||||||
//SetViewButton view类型
|
//SetViewButton view类型
|
||||||
func (btn *Button) SetViewButton(name, url string) {
|
func (btn *Button) SetViewButton(name, url string) *Button {
|
||||||
btn.Type = "view"
|
btn.Type = "view"
|
||||||
btn.Name = name
|
btn.Name = name
|
||||||
btn.URL = url
|
btn.URL = url
|
||||||
btn.Key = ""
|
btn.Key = ""
|
||||||
btn.MediaID = ""
|
btn.MediaID = ""
|
||||||
btn.SubButtons = nil
|
btn.SubButtons = nil
|
||||||
|
return btn
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetScanCodePushButton 扫码推事件
|
//SetScanCodePushButton 扫码推事件
|
||||||
func (btn *Button) SetScanCodePushButton(name, key string) {
|
func (btn *Button) SetScanCodePushButton(name, key string) *Button {
|
||||||
btn.Type = "scancode_push"
|
btn.Type = "scancode_push"
|
||||||
btn.Name = name
|
btn.Name = name
|
||||||
btn.Key = key
|
btn.Key = key
|
||||||
btn.URL = ""
|
btn.URL = ""
|
||||||
btn.MediaID = ""
|
btn.MediaID = ""
|
||||||
btn.SubButtons = nil
|
btn.SubButtons = nil
|
||||||
|
return btn
|
||||||
}
|
}
|
||||||
|
|
||||||
//SetScanCodeWaitMsgButton 设置 扫码推事件且弹出"消息接收中"提示框
|
//SetScanCodeWaitMsgButton 设置 扫码推事件且弹出"消息接收中"提示框
|
||||||
func (btn *Button) SetScanCodeWaitMsgButton(name, key string) {
|
func (btn *Button) SetScanCodeWaitMsgButton(name, key string) *Button {
|
||||||
btn.Type = "scancode_waitmsg"
|
btn.Type = "scancode_waitmsg"
|
||||||
btn.Name = name
|
btn.Name = name
|
||||||
btn.Key = key
|
btn.Key = key
|
||||||
@@ -61,10 +65,11 @@ func (btn *Button) SetScanCodeWaitMsgButton(name, key string) {
|
|||||||
btn.URL = ""
|
btn.URL = ""
|
||||||
btn.MediaID = ""
|
btn.MediaID = ""
|
||||||
btn.SubButtons = nil
|
btn.SubButtons = nil
|
||||||
|
return btn
|
||||||
}
|
}
|
||||||
|
|
||||||
//SetPicSysPhotoButton 设置弹出系统拍照发图按钮
|
//SetPicSysPhotoButton 设置弹出系统拍照发图按钮
|
||||||
func (btn *Button) SetPicSysPhotoButton(name, key string) {
|
func (btn *Button) SetPicSysPhotoButton(name, key string) *Button {
|
||||||
btn.Type = "pic_sysphoto"
|
btn.Type = "pic_sysphoto"
|
||||||
btn.Name = name
|
btn.Name = name
|
||||||
btn.Key = key
|
btn.Key = key
|
||||||
@@ -72,10 +77,11 @@ func (btn *Button) SetPicSysPhotoButton(name, key string) {
|
|||||||
btn.URL = ""
|
btn.URL = ""
|
||||||
btn.MediaID = ""
|
btn.MediaID = ""
|
||||||
btn.SubButtons = nil
|
btn.SubButtons = nil
|
||||||
|
return btn
|
||||||
}
|
}
|
||||||
|
|
||||||
//SetPicPhotoOrAlbumButton 设置弹出拍照或者相册发图类型按钮
|
//SetPicPhotoOrAlbumButton 设置弹出拍照或者相册发图类型按钮
|
||||||
func (btn *Button) SetPicPhotoOrAlbumButton(name, key string) {
|
func (btn *Button) SetPicPhotoOrAlbumButton(name, key string) *Button {
|
||||||
btn.Type = "pic_photo_or_album"
|
btn.Type = "pic_photo_or_album"
|
||||||
btn.Name = name
|
btn.Name = name
|
||||||
btn.Key = key
|
btn.Key = key
|
||||||
@@ -83,10 +89,11 @@ func (btn *Button) SetPicPhotoOrAlbumButton(name, key string) {
|
|||||||
btn.URL = ""
|
btn.URL = ""
|
||||||
btn.MediaID = ""
|
btn.MediaID = ""
|
||||||
btn.SubButtons = nil
|
btn.SubButtons = nil
|
||||||
|
return btn
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetPicWeixinButton 设置弹出微信相册发图器类型按钮
|
//SetPicWeixinButton 设置弹出微信相册发图器类型按钮
|
||||||
func (btn *Button) SetPicWeixinButton(name, key string) {
|
func (btn *Button) SetPicWeixinButton(name, key string) *Button {
|
||||||
btn.Type = "pic_weixin"
|
btn.Type = "pic_weixin"
|
||||||
btn.Name = name
|
btn.Name = name
|
||||||
btn.Key = key
|
btn.Key = key
|
||||||
@@ -94,10 +101,11 @@ func (btn *Button) SetPicWeixinButton(name, key string) {
|
|||||||
btn.URL = ""
|
btn.URL = ""
|
||||||
btn.MediaID = ""
|
btn.MediaID = ""
|
||||||
btn.SubButtons = nil
|
btn.SubButtons = nil
|
||||||
|
return btn
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetLocationSelectButton 设置 弹出地理位置选择器 类型按钮
|
//SetLocationSelectButton 设置 弹出地理位置选择器 类型按钮
|
||||||
func (btn *Button) SetLocationSelectButton(name, key string) {
|
func (btn *Button) SetLocationSelectButton(name, key string) *Button {
|
||||||
btn.Type = "location_select"
|
btn.Type = "location_select"
|
||||||
btn.Name = name
|
btn.Name = name
|
||||||
btn.Key = key
|
btn.Key = key
|
||||||
@@ -105,10 +113,11 @@ func (btn *Button) SetLocationSelectButton(name, key string) {
|
|||||||
btn.URL = ""
|
btn.URL = ""
|
||||||
btn.MediaID = ""
|
btn.MediaID = ""
|
||||||
btn.SubButtons = nil
|
btn.SubButtons = nil
|
||||||
|
return btn
|
||||||
}
|
}
|
||||||
|
|
||||||
//SetMediaIDButton 设置 下发消息(除文本消息) 类型按钮
|
//SetMediaIDButton 设置 下发消息(除文本消息) 类型按钮
|
||||||
func (btn *Button) SetMediaIDButton(name, mediaID string) {
|
func (btn *Button) SetMediaIDButton(name, mediaID string) *Button {
|
||||||
btn.Type = "media_id"
|
btn.Type = "media_id"
|
||||||
btn.Name = name
|
btn.Name = name
|
||||||
btn.MediaID = mediaID
|
btn.MediaID = mediaID
|
||||||
@@ -116,10 +125,11 @@ func (btn *Button) SetMediaIDButton(name, mediaID string) {
|
|||||||
btn.Key = ""
|
btn.Key = ""
|
||||||
btn.URL = ""
|
btn.URL = ""
|
||||||
btn.SubButtons = nil
|
btn.SubButtons = nil
|
||||||
|
return btn
|
||||||
}
|
}
|
||||||
|
|
||||||
//SetViewLimitedButton 设置 跳转图文消息URL 类型按钮
|
//SetViewLimitedButton 设置 跳转图文消息URL 类型按钮
|
||||||
func (btn *Button) SetViewLimitedButton(name, mediaID string) {
|
func (btn *Button) SetViewLimitedButton(name, mediaID string) *Button {
|
||||||
btn.Type = "view_limited"
|
btn.Type = "view_limited"
|
||||||
btn.Name = name
|
btn.Name = name
|
||||||
btn.MediaID = mediaID
|
btn.MediaID = mediaID
|
||||||
@@ -127,10 +137,11 @@ func (btn *Button) SetViewLimitedButton(name, mediaID string) {
|
|||||||
btn.Key = ""
|
btn.Key = ""
|
||||||
btn.URL = ""
|
btn.URL = ""
|
||||||
btn.SubButtons = nil
|
btn.SubButtons = nil
|
||||||
|
return btn
|
||||||
}
|
}
|
||||||
|
|
||||||
//SetMiniprogramButton 设置 跳转小程序 类型按钮 (公众号后台必须已经关联小程序)
|
//SetMiniprogramButton 设置 跳转小程序 类型按钮 (公众号后台必须已经关联小程序)
|
||||||
func (btn *Button) SetMiniprogramButton(name, url, appID, pagePath string) {
|
func (btn *Button) SetMiniprogramButton(name, url, appID, pagePath string) *Button {
|
||||||
btn.Type = "miniprogram"
|
btn.Type = "miniprogram"
|
||||||
btn.Name = name
|
btn.Name = name
|
||||||
btn.URL = url
|
btn.URL = url
|
||||||
@@ -140,4 +151,65 @@ func (btn *Button) SetMiniprogramButton(name, url, appID, pagePath string) {
|
|||||||
btn.Key = ""
|
btn.Key = ""
|
||||||
btn.MediaID = ""
|
btn.MediaID = ""
|
||||||
btn.SubButtons = nil
|
btn.SubButtons = nil
|
||||||
|
return btn
|
||||||
|
}
|
||||||
|
|
||||||
|
//NewSubButton 二级菜单
|
||||||
|
func NewSubButton(name string, subButtons []*Button) *Button {
|
||||||
|
return (&Button{}).SetSubButton(name, subButtons)
|
||||||
|
}
|
||||||
|
|
||||||
|
//NewClickButton btn 为click类型
|
||||||
|
func NewClickButton(name, key string) *Button {
|
||||||
|
return (&Button{}).SetClickButton(name, key)
|
||||||
|
}
|
||||||
|
|
||||||
|
//NewViewButton view类型
|
||||||
|
func NewViewButton(name, url string) *Button {
|
||||||
|
return (&Button{}).SetViewButton(name, url)
|
||||||
|
}
|
||||||
|
|
||||||
|
//NewScanCodePushButton 扫码推事件
|
||||||
|
func NewScanCodePushButton(name, key string) *Button {
|
||||||
|
return (&Button{}).SetScanCodePushButton(name, key)
|
||||||
|
}
|
||||||
|
|
||||||
|
//NewScanCodeWaitMsgButton 扫码推事件且弹出"消息接收中"提示框
|
||||||
|
func NewScanCodeWaitMsgButton(name, key string) *Button {
|
||||||
|
return (&Button{}).SetScanCodeWaitMsgButton(name, key)
|
||||||
|
}
|
||||||
|
|
||||||
|
//NewPicSysPhotoButton 弹出系统拍照发图按钮
|
||||||
|
func NewPicSysPhotoButton(name, key string) *Button {
|
||||||
|
return (&Button{}).SetPicSysPhotoButton(name, key)
|
||||||
|
}
|
||||||
|
|
||||||
|
//NewPicPhotoOrAlbumButton 弹出拍照或者相册发图类型按钮
|
||||||
|
func NewPicPhotoOrAlbumButton(name, key string) *Button {
|
||||||
|
return (&Button{}).SetPicPhotoOrAlbumButton(name, key)
|
||||||
|
}
|
||||||
|
|
||||||
|
//NewPicWeixinButton 弹出微信相册发图器类型按钮
|
||||||
|
func NewPicWeixinButton(name, key string) *Button {
|
||||||
|
return (&Button{}).SetPicWeixinButton(name, key)
|
||||||
|
}
|
||||||
|
|
||||||
|
//NewLocationSelectButton 弹出地理位置选择器 类型按钮
|
||||||
|
func NewLocationSelectButton(name, key string) *Button {
|
||||||
|
return (&Button{}).SetLocationSelectButton(name, key)
|
||||||
|
}
|
||||||
|
|
||||||
|
//NewMediaIDButton 下发消息(除文本消息) 类型按钮
|
||||||
|
func NewMediaIDButton(name, mediaID string) *Button {
|
||||||
|
return (&Button{}).SetMediaIDButton(name, mediaID)
|
||||||
|
}
|
||||||
|
|
||||||
|
//NewViewLimitedButton 跳转图文消息URL 类型按钮
|
||||||
|
func NewViewLimitedButton(name, mediaID string) *Button {
|
||||||
|
return (&Button{}).SetViewLimitedButton(name, mediaID)
|
||||||
|
}
|
||||||
|
|
||||||
|
//NewMiniprogramButton 跳转小程序 类型按钮 (公众号后台必须已经关联小程序)
|
||||||
|
func NewMiniprogramButton(name, url, appID, pagePath string) *Button {
|
||||||
|
return (&Button{}).SetMiniprogramButton(name, url, appID, pagePath)
|
||||||
}
|
}
|
||||||
|
|||||||
28
officialaccount/menu/button_test.go
Normal file
28
officialaccount/menu/button_test.go
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
package menu
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestNewButtonFun(t *testing.T) {
|
||||||
|
buttons := []*Button{
|
||||||
|
NewSubButton("1", []*Button{
|
||||||
|
NewViewButton("1.1", "https://baidu.com"),
|
||||||
|
NewViewButton("1.2", "https://baidu.com"),
|
||||||
|
NewViewButton("1.3", "https://baidu.com"),
|
||||||
|
}),
|
||||||
|
NewSubButton("2", []*Button{
|
||||||
|
NewViewButton("2.1", "https://baidu.com"),
|
||||||
|
NewViewButton("2.2", "https://baidu.com"),
|
||||||
|
NewViewButton("2.3", "https://baidu.com"),
|
||||||
|
}),
|
||||||
|
NewViewButton("3", "https://baidu.com"),
|
||||||
|
}
|
||||||
|
|
||||||
|
data, err := json.Marshal(buttons)
|
||||||
|
assert.Nil(t, err)
|
||||||
|
assert.Equal(t, `[{"name":"1","sub_button":[{"type":"view","name":"1.1","url":"https://baidu.com"},{"type":"view","name":"1.2","url":"https://baidu.com"},{"type":"view","name":"1.3","url":"https://baidu.com"}]},{"name":"2","sub_button":[{"type":"view","name":"2.1","url":"https://baidu.com"},{"type":"view","name":"2.2","url":"https://baidu.com"},{"type":"view","name":"2.3","url":"https://baidu.com"}]},{"type":"view","name":"3","url":"https://baidu.com"}]`, string(data))
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user