diff --git a/officialaccount/officialaccount.go b/officialaccount/officialaccount.go index 3aecce8..d1b1a1a 100644 --- a/officialaccount/officialaccount.go +++ b/officialaccount/officialaccount.go @@ -26,7 +26,22 @@ import ( // OfficialAccount 微信公众号相关API type OfficialAccount struct { - ctx *context.Context + ctx *context.Context + basic *basic.Basic + menu *menu.Menu + oauth *oauth.Oauth + material *material.Material + draft *draft.Draft + freepublish *freepublish.FreePublish + js *js.Js + user *user.User + templateMsg *message.Template + managerMsg *message.Manager + device *device.Device + broadcast *broadcast.Broadcast + datacube *datacube.DataCube + ocr *ocr.OCR + subscribeMsg *message.Subscribe } // NewOfficialAccount 实例化公众号API @@ -51,12 +66,18 @@ func (officialAccount *OfficialAccount) GetContext() *context.Context { // GetBasic qr/url 相关配置 func (officialAccount *OfficialAccount) GetBasic() *basic.Basic { - return basic.NewBasic(officialAccount.ctx) + if officialAccount.basic == nil { + officialAccount.basic = basic.NewBasic(officialAccount.ctx) + } + return officialAccount.basic } // GetMenu 菜单管理接口 func (officialAccount *OfficialAccount) GetMenu() *menu.Menu { - return menu.NewMenu(officialAccount.ctx) + if officialAccount.menu == nil { + officialAccount.menu = menu.NewMenu(officialAccount.ctx) + } + return officialAccount.menu } // GetServer 消息管理:接收事件,被动回复消息管理 @@ -74,66 +95,105 @@ func (officialAccount *OfficialAccount) GetAccessToken() (string, error) { // GetOauth oauth2网页授权 func (officialAccount *OfficialAccount) GetOauth() *oauth.Oauth { - return oauth.NewOauth(officialAccount.ctx) + if officialAccount.oauth == nil { + officialAccount.oauth = oauth.NewOauth(officialAccount.ctx) + } + return officialAccount.oauth } // GetMaterial 素材管理 func (officialAccount *OfficialAccount) GetMaterial() *material.Material { - return material.NewMaterial(officialAccount.ctx) + if officialAccount.material == nil { + officialAccount.material = material.NewMaterial(officialAccount.ctx) + } + return officialAccount.material } // GetDraft 草稿箱 func (officialAccount *OfficialAccount) GetDraft() *draft.Draft { - return draft.NewDraft(officialAccount.ctx) + if officialAccount.draft == nil { + officialAccount.draft = draft.NewDraft(officialAccount.ctx) + } + return officialAccount.draft } // GetFreePublish 发布能力 func (officialAccount *OfficialAccount) GetFreePublish() *freepublish.FreePublish { - return freepublish.NewFreePublish(officialAccount.ctx) + if officialAccount.freepublish == nil { + officialAccount.freepublish = freepublish.NewFreePublish(officialAccount.ctx) + } + return officialAccount.freepublish } // GetJs js-sdk配置 func (officialAccount *OfficialAccount) GetJs() *js.Js { - return js.NewJs(officialAccount.ctx) + if officialAccount.js == nil { + officialAccount.js = js.NewJs(officialAccount.ctx) + } + return officialAccount.js } // GetUser 用户管理接口 func (officialAccount *OfficialAccount) GetUser() *user.User { - return user.NewUser(officialAccount.ctx) + if officialAccount.user == nil { + officialAccount.user = user.NewUser(officialAccount.ctx) + } + return officialAccount.user } // GetTemplate 模板消息接口 func (officialAccount *OfficialAccount) GetTemplate() *message.Template { - return message.NewTemplate(officialAccount.ctx) + if officialAccount.templateMsg == nil { + officialAccount.templateMsg = message.NewTemplate(officialAccount.ctx) + } + return officialAccount.templateMsg } // GetCustomerMessageManager 客服消息接口 func (officialAccount *OfficialAccount) GetCustomerMessageManager() *message.Manager { - return message.NewMessageManager(officialAccount.ctx) + if officialAccount.managerMsg == nil { + officialAccount.managerMsg = message.NewMessageManager(officialAccount.ctx) + } + return officialAccount.managerMsg } // GetDevice 获取智能设备的实例 func (officialAccount *OfficialAccount) GetDevice() *device.Device { - return device.NewDevice(officialAccount.ctx) + if officialAccount.device == nil { + officialAccount.device = device.NewDevice(officialAccount.ctx) + } + return officialAccount.device } // GetBroadcast 群发消息 // TODO 待完善 func (officialAccount *OfficialAccount) GetBroadcast() *broadcast.Broadcast { - return broadcast.NewBroadcast(officialAccount.ctx) + if officialAccount.broadcast == nil { + officialAccount.broadcast = broadcast.NewBroadcast(officialAccount.ctx) + } + return officialAccount.broadcast } // GetDataCube 数据统计 func (officialAccount *OfficialAccount) GetDataCube() *datacube.DataCube { - return datacube.NewCube(officialAccount.ctx) + if officialAccount.datacube == nil { + officialAccount.datacube = datacube.NewCube(officialAccount.ctx) + } + return officialAccount.datacube } // GetOCR OCR接口 func (officialAccount *OfficialAccount) GetOCR() *ocr.OCR { - return ocr.NewOCR(officialAccount.ctx) + if officialAccount.ocr == nil { + officialAccount.ocr = ocr.NewOCR(officialAccount.ctx) + } + return officialAccount.ocr } // GetSubscribe 公众号订阅消息 func (officialAccount *OfficialAccount) GetSubscribe() *message.Subscribe { - return message.NewSubscribe(officialAccount.ctx) + if officialAccount.subscribeMsg == nil { + officialAccount.subscribeMsg = message.NewSubscribe(officialAccount.ctx) + } + return officialAccount.subscribeMsg }