diff --git a/officialaccount/basic/qr.go b/officialaccount/basic/qr.go index 161c8d4..fb993b6 100644 --- a/officialaccount/basic/qr.go +++ b/officialaccount/basic/qr.go @@ -62,6 +62,11 @@ func (basic *Basic) GetQRTicket(tq *Request) (t *Ticket, err error) { return } + if t.ErrMsg != "" { + err = fmt.Errorf("get qr_ticket error : errcode=%v , errormsg=%v", t.ErrCode, t.ErrMsg) + return + } + return } diff --git a/officialaccount/menu/button.go b/officialaccount/menu/button.go index ec67b35..9956308 100644 --- a/officialaccount/menu/button.go +++ b/officialaccount/menu/button.go @@ -13,47 +13,51 @@ type Button struct { } //SetSubButton 设置二级菜单 -func (btn *Button) SetSubButton(name string, subButtons []*Button) { +func (btn *Button) SetSubButton(name string, subButtons []*Button) *Button { btn.Name = name btn.SubButtons = subButtons btn.Type = "" btn.Key = "" btn.URL = "" btn.MediaID = "" + return btn } //SetClickButton btn 为click类型 -func (btn *Button) SetClickButton(name, key string) { +func (btn *Button) SetClickButton(name, key string) *Button { btn.Type = "click" btn.Name = name btn.Key = key btn.URL = "" btn.MediaID = "" btn.SubButtons = nil + return btn } //SetViewButton view类型 -func (btn *Button) SetViewButton(name, url string) { +func (btn *Button) SetViewButton(name, url string) *Button { btn.Type = "view" btn.Name = name btn.URL = url btn.Key = "" btn.MediaID = "" btn.SubButtons = nil + return btn } -// SetScanCodePushButton 扫码推事件 -func (btn *Button) SetScanCodePushButton(name, key string) { +//SetScanCodePushButton 扫码推事件 +func (btn *Button) SetScanCodePushButton(name, key string) *Button { btn.Type = "scancode_push" btn.Name = name btn.Key = key btn.URL = "" btn.MediaID = "" btn.SubButtons = nil + return btn } //SetScanCodeWaitMsgButton 设置 扫码推事件且弹出"消息接收中"提示框 -func (btn *Button) SetScanCodeWaitMsgButton(name, key string) { +func (btn *Button) SetScanCodeWaitMsgButton(name, key string) *Button { btn.Type = "scancode_waitmsg" btn.Name = name btn.Key = key @@ -61,10 +65,11 @@ func (btn *Button) SetScanCodeWaitMsgButton(name, key string) { btn.URL = "" btn.MediaID = "" btn.SubButtons = nil + return btn } //SetPicSysPhotoButton 设置弹出系统拍照发图按钮 -func (btn *Button) SetPicSysPhotoButton(name, key string) { +func (btn *Button) SetPicSysPhotoButton(name, key string) *Button { btn.Type = "pic_sysphoto" btn.Name = name btn.Key = key @@ -72,10 +77,11 @@ func (btn *Button) SetPicSysPhotoButton(name, key string) { btn.URL = "" btn.MediaID = "" btn.SubButtons = nil + return btn } //SetPicPhotoOrAlbumButton 设置弹出拍照或者相册发图类型按钮 -func (btn *Button) SetPicPhotoOrAlbumButton(name, key string) { +func (btn *Button) SetPicPhotoOrAlbumButton(name, key string) *Button { btn.Type = "pic_photo_or_album" btn.Name = name btn.Key = key @@ -83,10 +89,11 @@ func (btn *Button) SetPicPhotoOrAlbumButton(name, key string) { btn.URL = "" btn.MediaID = "" btn.SubButtons = nil + return btn } -// SetPicWeixinButton 设置弹出微信相册发图器类型按钮 -func (btn *Button) SetPicWeixinButton(name, key string) { +//SetPicWeixinButton 设置弹出微信相册发图器类型按钮 +func (btn *Button) SetPicWeixinButton(name, key string) *Button { btn.Type = "pic_weixin" btn.Name = name btn.Key = key @@ -94,10 +101,11 @@ func (btn *Button) SetPicWeixinButton(name, key string) { btn.URL = "" btn.MediaID = "" btn.SubButtons = nil + return btn } -// SetLocationSelectButton 设置 弹出地理位置选择器 类型按钮 -func (btn *Button) SetLocationSelectButton(name, key string) { +//SetLocationSelectButton 设置 弹出地理位置选择器 类型按钮 +func (btn *Button) SetLocationSelectButton(name, key string) *Button { btn.Type = "location_select" btn.Name = name btn.Key = key @@ -105,10 +113,11 @@ func (btn *Button) SetLocationSelectButton(name, key string) { btn.URL = "" btn.MediaID = "" btn.SubButtons = nil + return btn } //SetMediaIDButton 设置 下发消息(除文本消息) 类型按钮 -func (btn *Button) SetMediaIDButton(name, mediaID string) { +func (btn *Button) SetMediaIDButton(name, mediaID string) *Button { btn.Type = "media_id" btn.Name = name btn.MediaID = mediaID @@ -116,10 +125,11 @@ func (btn *Button) SetMediaIDButton(name, mediaID string) { btn.Key = "" btn.URL = "" btn.SubButtons = nil + return btn } //SetViewLimitedButton 设置 跳转图文消息URL 类型按钮 -func (btn *Button) SetViewLimitedButton(name, mediaID string) { +func (btn *Button) SetViewLimitedButton(name, mediaID string) *Button { btn.Type = "view_limited" btn.Name = name btn.MediaID = mediaID @@ -127,10 +137,11 @@ func (btn *Button) SetViewLimitedButton(name, mediaID string) { btn.Key = "" btn.URL = "" btn.SubButtons = nil + return btn } //SetMiniprogramButton 设置 跳转小程序 类型按钮 (公众号后台必须已经关联小程序) -func (btn *Button) SetMiniprogramButton(name, url, appID, pagePath string) { +func (btn *Button) SetMiniprogramButton(name, url, appID, pagePath string) *Button { btn.Type = "miniprogram" btn.Name = name btn.URL = url @@ -140,4 +151,65 @@ func (btn *Button) SetMiniprogramButton(name, url, appID, pagePath string) { btn.Key = "" btn.MediaID = "" 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) } diff --git a/officialaccount/menu/button_test.go b/officialaccount/menu/button_test.go new file mode 100644 index 0000000..1c5d584 --- /dev/null +++ b/officialaccount/menu/button_test.go @@ -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)) +}