Documentation
¶
Overview ¶
封装微信服务器推送过来的消息(事件)处理 Handler.
Index ¶
- Constants
- func ServeHTTP(w http.ResponseWriter, r *http.Request, urlValues url.Values, agent Agent, ...)
- func WriteAESImage(w io.Writer, msg *response.Image, timestamp int64, nonce string, ...) error
- func WriteAESMusic(w io.Writer, msg *response.Music, timestamp int64, nonce string, ...) error
- func WriteAESNews(w io.Writer, msg *response.News, timestamp int64, nonce string, ...) (err error)
- func WriteAESText(w io.Writer, msg *response.Text, timestamp int64, nonce string, ...) error
- func WriteAESTransferToCustomerService(w io.Writer, msg *response.TransferToCustomerService, timestamp int64, ...) error
- func WriteAESTransferToSpecialCustomerService(w io.Writer, msg *response.TransferToSpecialCustomerService, timestamp int64, ...) error
- func WriteAESVideo(w io.Writer, msg *response.Video, timestamp int64, nonce string, ...) error
- func WriteAESVoice(w io.Writer, msg *response.Voice, timestamp int64, nonce string, ...) error
- func WriteImage(w io.Writer, msg *response.Image) error
- func WriteMusic(w io.Writer, msg *response.Music) error
- func WriteNews(w io.Writer, msg *response.News) (err error)
- func WriteText(w io.Writer, msg *response.Text) error
- func WriteTransferToCustomerService(w io.Writer, msg *response.TransferToCustomerService) error
- func WriteTransferToSpecialCustomerService(w io.Writer, msg *response.TransferToSpecialCustomerService) error
- func WriteVideo(w io.Writer, msg *response.Video) error
- func WriteVoice(w io.Writer, msg *response.Voice) error
- type Agent
- type AgentFrontend
- type DefaultAgent
- func (this *DefaultAgent) GetAppId() string
- func (this *DefaultAgent) GetCurrentAESKey() (key [32]byte)
- func (this *DefaultAgent) GetId() string
- func (this *DefaultAgent) GetLastAESKey() (key [32]byte)
- func (this *DefaultAgent) GetToken() string
- func (this *DefaultAgent) Init(Id, Token, AppId string, AESKey []byte)
- func (this *DefaultAgent) ServeAESImageMsg(w http.ResponseWriter, r *http.Request, msg *request.Image, rawXMLMsg []byte, ...)
- func (this *DefaultAgent) ServeAESLinkMsg(w http.ResponseWriter, r *http.Request, msg *request.Link, rawXMLMsg []byte, ...)
- func (this *DefaultAgent) ServeAESLocationEvent(w http.ResponseWriter, r *http.Request, msg *request.LocationEvent, ...)
- func (this *DefaultAgent) ServeAESLocationMsg(w http.ResponseWriter, r *http.Request, msg *request.Location, ...)
- func (this *DefaultAgent) ServeAESMassSendJobFinishEvent(w http.ResponseWriter, r *http.Request, msg *request.MassSendJobFinishEvent, ...)
- func (this *DefaultAgent) ServeAESMenuClickEvent(w http.ResponseWriter, r *http.Request, msg *request.MenuClickEvent, ...)
- func (this *DefaultAgent) ServeAESMenuLocationSelectEvent(w http.ResponseWriter, r *http.Request, msg *request.MenuLocationSelectEvent, ...)
- func (this *DefaultAgent) ServeAESMenuPicPhotoOrAlbumEvent(w http.ResponseWriter, r *http.Request, msg *request.MenuPicPhotoOrAlbumEvent, ...)
- func (this *DefaultAgent) ServeAESMenuPicSysPhotoEvent(w http.ResponseWriter, r *http.Request, msg *request.MenuPicSysPhotoEvent, ...)
- func (this *DefaultAgent) ServeAESMenuPicWeixinEvent(w http.ResponseWriter, r *http.Request, msg *request.MenuPicWeixinEvent, ...)
- func (this *DefaultAgent) ServeAESMenuScanCodePushEvent(w http.ResponseWriter, r *http.Request, msg *request.MenuScanCodePushEvent, ...)
- func (this *DefaultAgent) ServeAESMenuScanCodeWaitMsgEvent(w http.ResponseWriter, r *http.Request, msg *request.MenuScanCodeWaitMsgEvent, ...)
- func (this *DefaultAgent) ServeAESMenuViewEvent(w http.ResponseWriter, r *http.Request, msg *request.MenuViewEvent, ...)
- func (this *DefaultAgent) ServeAESMerchantOrderEvent(w http.ResponseWriter, r *http.Request, msg *request.MerchantOrderEvent, ...)
- func (this *DefaultAgent) ServeAESScanEvent(w http.ResponseWriter, r *http.Request, msg *request.ScanEvent, ...)
- func (this *DefaultAgent) ServeAESSubscribeByScanEvent(w http.ResponseWriter, r *http.Request, msg *request.SubscribeByScanEvent, ...)
- func (this *DefaultAgent) ServeAESSubscribeEvent(w http.ResponseWriter, r *http.Request, msg *request.SubscribeEvent, ...)
- func (this *DefaultAgent) ServeAESTemplateSendJobFinishEvent(w http.ResponseWriter, r *http.Request, ...)
- func (this *DefaultAgent) ServeAESTextMsg(w http.ResponseWriter, r *http.Request, msg *request.Text, rawXMLMsg []byte, ...)
- func (this *DefaultAgent) ServeAESUnknownMsg(w http.ResponseWriter, r *http.Request, rawXMLMsg []byte, timestamp int64, ...)
- func (this *DefaultAgent) ServeAESUnsubscribeEvent(w http.ResponseWriter, r *http.Request, msg *request.UnsubscribeEvent, ...)
- func (this *DefaultAgent) ServeAESVideoMsg(w http.ResponseWriter, r *http.Request, msg *request.Video, rawXMLMsg []byte, ...)
- func (this *DefaultAgent) ServeAESVoiceMsg(w http.ResponseWriter, r *http.Request, msg *request.Voice, rawXMLMsg []byte, ...)
- func (this *DefaultAgent) ServeImageMsg(w http.ResponseWriter, r *http.Request, msg *request.Image, rawXMLMsg []byte, ...)
- func (this *DefaultAgent) ServeLinkMsg(w http.ResponseWriter, r *http.Request, msg *request.Link, rawXMLMsg []byte, ...)
- func (this *DefaultAgent) ServeLocationEvent(w http.ResponseWriter, r *http.Request, msg *request.LocationEvent, ...)
- func (this *DefaultAgent) ServeLocationMsg(w http.ResponseWriter, r *http.Request, msg *request.Location, ...)
- func (this *DefaultAgent) ServeMassSendJobFinishEvent(w http.ResponseWriter, r *http.Request, msg *request.MassSendJobFinishEvent, ...)
- func (this *DefaultAgent) ServeMenuClickEvent(w http.ResponseWriter, r *http.Request, msg *request.MenuClickEvent, ...)
- func (this *DefaultAgent) ServeMenuLocationSelectEvent(w http.ResponseWriter, r *http.Request, msg *request.MenuLocationSelectEvent, ...)
- func (this *DefaultAgent) ServeMenuPicPhotoOrAlbumEvent(w http.ResponseWriter, r *http.Request, msg *request.MenuPicPhotoOrAlbumEvent, ...)
- func (this *DefaultAgent) ServeMenuPicSysPhotoEvent(w http.ResponseWriter, r *http.Request, msg *request.MenuPicSysPhotoEvent, ...)
- func (this *DefaultAgent) ServeMenuPicWeixinEvent(w http.ResponseWriter, r *http.Request, msg *request.MenuPicWeixinEvent, ...)
- func (this *DefaultAgent) ServeMenuScanCodePushEvent(w http.ResponseWriter, r *http.Request, msg *request.MenuScanCodePushEvent, ...)
- func (this *DefaultAgent) ServeMenuScanCodeWaitMsgEvent(w http.ResponseWriter, r *http.Request, msg *request.MenuScanCodeWaitMsgEvent, ...)
- func (this *DefaultAgent) ServeMenuViewEvent(w http.ResponseWriter, r *http.Request, msg *request.MenuViewEvent, ...)
- func (this *DefaultAgent) ServeMerchantOrderEvent(w http.ResponseWriter, r *http.Request, msg *request.MerchantOrderEvent, ...)
- func (this *DefaultAgent) ServeScanEvent(w http.ResponseWriter, r *http.Request, msg *request.ScanEvent, ...)
- func (this *DefaultAgent) ServeSubscribeByScanEvent(w http.ResponseWriter, r *http.Request, msg *request.SubscribeByScanEvent, ...)
- func (this *DefaultAgent) ServeSubscribeEvent(w http.ResponseWriter, r *http.Request, msg *request.SubscribeEvent, ...)
- func (this *DefaultAgent) ServeTemplateSendJobFinishEvent(w http.ResponseWriter, r *http.Request, ...)
- func (this *DefaultAgent) ServeTextMsg(w http.ResponseWriter, r *http.Request, msg *request.Text, rawXMLMsg []byte, ...)
- func (this *DefaultAgent) ServeUnknownMsg(w http.ResponseWriter, r *http.Request, rawXMLMsg []byte, timestamp int64)
- func (this *DefaultAgent) ServeUnsubscribeEvent(w http.ResponseWriter, r *http.Request, msg *request.UnsubscribeEvent, ...)
- func (this *DefaultAgent) ServeVideoMsg(w http.ResponseWriter, r *http.Request, msg *request.Video, rawXMLMsg []byte, ...)
- func (this *DefaultAgent) ServeVoiceMsg(w http.ResponseWriter, r *http.Request, msg *request.Voice, rawXMLMsg []byte, ...)
- func (this *DefaultAgent) UpdateAESKey(AESKey [32]byte)
- type InvalidRequestHandler
- type InvalidRequestHandlerFunc
- type MultiAgentFrontend
- func (this *MultiAgentFrontend) DeleteAgent(agentkey string)
- func (this *MultiAgentFrontend) DeleteAllAgent()
- func (this *MultiAgentFrontend) ServeHTTP(w http.ResponseWriter, r *http.Request)
- func (this *MultiAgentFrontend) SetAgent(agentkey string, agent Agent)
- func (this *MultiAgentFrontend) SetInvalidRequestHandler(handler InvalidRequestHandler)
Constants ¶
const URLQueryAgentKeyName = "agentkey"
定义回调 URL 上指定 Agent 的查询参数名
Variables ¶
This section is empty.
Functions ¶
func ServeHTTP ¶
func ServeHTTP(w http.ResponseWriter, r *http.Request, urlValues url.Values, agent Agent, invalidRequestHandler InvalidRequestHandler)
ServeHTTP 处理 http 消息请求
NOTE: 确保所有参数合法, r.Body 能正确读取数据
func WriteAESImage ¶
func WriteAESImage(w io.Writer, msg *response.Image, timestamp int64, nonce string, AESKey [32]byte, random []byte, AppId, Token string) error
把 image 回复消息 msg 写入 writer w
func WriteAESMusic ¶
func WriteAESMusic(w io.Writer, msg *response.Music, timestamp int64, nonce string, AESKey [32]byte, random []byte, AppId, Token string) error
把 music 回复消息 msg 写入 writer w
func WriteAESNews ¶
func WriteAESNews(w io.Writer, msg *response.News, timestamp int64, nonce string, AESKey [32]byte, random []byte, AppId, Token string) (err error)
把 news 回复消息 msg 写入 writer w
func WriteAESText ¶
func WriteAESText(w io.Writer, msg *response.Text, timestamp int64, nonce string, AESKey [32]byte, random []byte, AppId, Token string) error
把 text 回复消息 msg 写入 writer w
func WriteAESTransferToCustomerService ¶
func WriteAESTransferToCustomerService(w io.Writer, msg *response.TransferToCustomerService, timestamp int64, nonce string, AESKey [32]byte, random []byte, AppId, Token string) error
把 TransferToCustomerService 回复消息 msg 写入 writer w
func WriteAESTransferToSpecialCustomerService ¶
func WriteAESTransferToSpecialCustomerService(w io.Writer, msg *response.TransferToSpecialCustomerService, timestamp int64, nonce string, AESKey [32]byte, random []byte, AppId, Token string) error
把 TransferToSpecialCustomerService 回复消息 msg 写入 writer w
func WriteAESVideo ¶
func WriteAESVideo(w io.Writer, msg *response.Video, timestamp int64, nonce string, AESKey [32]byte, random []byte, AppId, Token string) error
把 video 回复消息 msg 写入 writer w
func WriteAESVoice ¶
func WriteAESVoice(w io.Writer, msg *response.Voice, timestamp int64, nonce string, AESKey [32]byte, random []byte, AppId, Token string) error
把 voice 回复消息 msg 写入 writer w
func WriteImage ¶
把 image 回复消息 msg 写入 writer w
func WriteMusic ¶
把 music 回复消息 msg 写入 writer w
func WriteTransferToCustomerService ¶
func WriteTransferToCustomerService(w io.Writer, msg *response.TransferToCustomerService) error
把 TransferToCustomerService 回复消息 msg 写入 writer w
func WriteTransferToSpecialCustomerService ¶
func WriteTransferToSpecialCustomerService(w io.Writer, msg *response.TransferToSpecialCustomerService) error
把 TransferToSpecialCustomerService 回复消息 msg 写入 writer w
func WriteVideo ¶
把 video 回复消息 msg 写入 writer w
Types ¶
type Agent ¶
type Agent interface {
GetId() string // 获取公众号的原始ID, 等于后台中的 公众号设置-->帐号详情-->原始ID
GetToken() string // 获取公众号的Token, 和后台中的设置相等
// fuck, AppId 貌似需要认证才会有的???
// 如果不知道自己的 AppId 是多少, 可以先随便填入一个字符串,
// 这样正常情况下会出现 AppId mismatch 错误, 错误中 have 后面的就是正确的 AppId
GetAppId() string
GetLastAESKey() [32]byte // 获取最后一个有效的 AES 加密 Key
GetCurrentAESKey() [32]byte // 获取当前有效的 AES 加密 Key
// 明文模式 需要实现的方法
// 未知类型的消息处理方法
// rawXMLMsg 是 xml 消息体
// timestamp 是请求 URL 中的时间戳
// r *http.Request 的 Body 已经读取过了, 不要再读取了, 但是可以获取其他信息, 比如 r.URL.RawQuery
ServeUnknownMsg(w http.ResponseWriter, r *http.Request, rawXMLMsg []byte, timestamp int64)
// 明文模式 需要实现的方法
// 消息处理函数
// msg 是成功解析的消息结构体
// rawXMLMsg 是 msg 的 xml 消息体
// timestamp 是请求 URL 中的时间戳
// r *http.Request 的 Body 已经读取过了, 不要再读取了, 但是可以获取其他信息, 比如 r.URL.RawQuery
ServeTextMsg(w http.ResponseWriter, r *http.Request, msg *request.Text, rawXMLMsg []byte, timestamp int64)
ServeImageMsg(w http.ResponseWriter, r *http.Request, msg *request.Image, rawXMLMsg []byte, timestamp int64)
ServeVoiceMsg(w http.ResponseWriter, r *http.Request, msg *request.Voice, rawXMLMsg []byte, timestamp int64)
ServeVideoMsg(w http.ResponseWriter, r *http.Request, msg *request.Video, rawXMLMsg []byte, timestamp int64)
ServeLocationMsg(w http.ResponseWriter, r *http.Request, msg *request.Location, rawXMLMsg []byte, timestamp int64)
ServeLinkMsg(w http.ResponseWriter, r *http.Request, msg *request.Link, rawXMLMsg []byte, timestamp int64)
// 明文模式 需要实现的方法
// 事件处理函数
// event 是成功解析的消息结构体
// rawXMLMsg 是 event 的 xml 消息体
// timestamp 是请求 URL 中的时间戳
// r *http.Request 的 Body 已经读取过了, 不要再读取了, 但是可以获取其他信息, 比如 r.URL.RawQuery
ServeSubscribeEvent(w http.ResponseWriter, r *http.Request, event *request.SubscribeEvent, rawXMLMsg []byte, timestamp int64)
ServeUnsubscribeEvent(w http.ResponseWriter, r *http.Request, event *request.UnsubscribeEvent, rawXMLMsg []byte, timestamp int64)
ServeSubscribeByScanEvent(w http.ResponseWriter, r *http.Request, event *request.SubscribeByScanEvent, rawXMLMsg []byte, timestamp int64)
ServeScanEvent(w http.ResponseWriter, r *http.Request, event *request.ScanEvent, rawXMLMsg []byte, timestamp int64)
ServeLocationEvent(w http.ResponseWriter, r *http.Request, event *request.LocationEvent, rawXMLMsg []byte, timestamp int64)
ServeMenuClickEvent(w http.ResponseWriter, r *http.Request, event *request.MenuClickEvent, rawXMLMsg []byte, timestamp int64)
ServeMenuViewEvent(w http.ResponseWriter, r *http.Request, event *request.MenuViewEvent, rawXMLMsg []byte, timestamp int64)
ServeMenuScanCodePushEvent(w http.ResponseWriter, r *http.Request, event *request.MenuScanCodePushEvent, rawXMLMsg []byte, timestamp int64)
ServeMenuScanCodeWaitMsgEvent(w http.ResponseWriter, r *http.Request, event *request.MenuScanCodeWaitMsgEvent, rawXMLMsg []byte, timestamp int64)
ServeMenuPicSysPhotoEvent(w http.ResponseWriter, r *http.Request, event *request.MenuPicSysPhotoEvent, rawXMLMsg []byte, timestamp int64)
ServeMenuPicPhotoOrAlbumEvent(w http.ResponseWriter, r *http.Request, event *request.MenuPicPhotoOrAlbumEvent, rawXMLMsg []byte, timestamp int64)
ServeMenuPicWeixinEvent(w http.ResponseWriter, r *http.Request, event *request.MenuPicWeixinEvent, rawXMLMsg []byte, timestamp int64)
ServeMenuLocationSelectEvent(w http.ResponseWriter, r *http.Request, event *request.MenuLocationSelectEvent, rawXMLMsg []byte, timestamp int64)
ServeMassSendJobFinishEvent(w http.ResponseWriter, r *http.Request, event *request.MassSendJobFinishEvent, rawXMLMsg []byte, timestamp int64)
ServeTemplateSendJobFinishEvent(w http.ResponseWriter, r *http.Request, event *request.TemplateSendJobFinishEvent, rawXMLMsg []byte, timestamp int64)
ServeMerchantOrderEvent(w http.ResponseWriter, r *http.Request, event *request.MerchantOrderEvent, rawXMLMsg []byte, timestamp int64)
// 兼容模式, 安全模式 需要实现的方法
// 未知类型的消息处理方法
// rawXMLMsg 是解密后的"明文" xml 消息体
// timestamp 是请求 URL 中的时间戳
// nonce 是请求 URL 中的随机数
// AESKey 是微信"当前"消息加密所用的 AES key
// random 是请求 http body 中的密文消息加密时所用的 random, 16 bytes
// r *http.Request 的 Body 已经读取过了, 不要再读取了, 但是可以获取其他信息, 比如 r.URL.RawQuery
ServeAESUnknownMsg(w http.ResponseWriter, r *http.Request, rawXMLMsg []byte, timestamp int64, nonce string, AESKey [32]byte, random []byte)
// 兼容模式, 安全模式 需要实现的方法
// 消息处理函数
// msg 是成功解析的消息结构体
// rawXMLMsg 是解密后的"明文" xml 消息体
// timestamp 是请求 URL 中的时间戳
// nonce 是请求 URL 中的随机数
// AESKey 是微信"当前"消息加密所用的 AES key
// random 是请求 http body 中的密文消息加密时所用的 random, 16 bytes
// r *http.Request 的 Body 已经读取过了, 不要再读取了, 但是可以获取其他信息, 比如 r.URL.RawQuery
ServeAESTextMsg(w http.ResponseWriter, r *http.Request, msg *request.Text, rawXMLMsg []byte, timestamp int64, nonce string, AESKey [32]byte, random []byte)
ServeAESImageMsg(w http.ResponseWriter, r *http.Request, msg *request.Image, rawXMLMsg []byte, timestamp int64, nonce string, AESKey [32]byte, random []byte)
ServeAESVoiceMsg(w http.ResponseWriter, r *http.Request, msg *request.Voice, rawXMLMsg []byte, timestamp int64, nonce string, AESKey [32]byte, random []byte)
ServeAESVideoMsg(w http.ResponseWriter, r *http.Request, msg *request.Video, rawXMLMsg []byte, timestamp int64, nonce string, AESKey [32]byte, random []byte)
ServeAESLocationMsg(w http.ResponseWriter, r *http.Request, msg *request.Location, rawXMLMsg []byte, timestamp int64, nonce string, AESKey [32]byte, random []byte)
ServeAESLinkMsg(w http.ResponseWriter, r *http.Request, msg *request.Link, rawXMLMsg []byte, timestamp int64, nonce string, AESKey [32]byte, random []byte)
// 兼容模式, 安全模式 需要实现的方法
// 事件处理函数
// event 是成功解析的消息结构体
// rawXMLMsg 是解密后的"明文" xml 消息体
// timestamp 是请求 URL 中的时间戳
// nonce 是请求 URL 中的随机数
// AESKey 是微信"当前"消息加密所用的 AES key
// random 是请求 http body 中的密文消息加密时所用的 random, 16 bytes
// r *http.Request 的 Body 已经读取过了, 不要再读取了, 但是可以获取其他信息, 比如 r.URL.RawQuery
ServeAESSubscribeEvent(w http.ResponseWriter, r *http.Request, event *request.SubscribeEvent, rawXMLMsg []byte, timestamp int64, nonce string, AESKey [32]byte, random []byte)
ServeAESUnsubscribeEvent(w http.ResponseWriter, r *http.Request, event *request.UnsubscribeEvent, rawXMLMsg []byte, timestamp int64, nonce string, AESKey [32]byte, random []byte)
ServeAESSubscribeByScanEvent(w http.ResponseWriter, r *http.Request, event *request.SubscribeByScanEvent, rawXMLMsg []byte, timestamp int64, nonce string, AESKey [32]byte, random []byte)
ServeAESScanEvent(w http.ResponseWriter, r *http.Request, event *request.ScanEvent, rawXMLMsg []byte, timestamp int64, nonce string, AESKey [32]byte, random []byte)
ServeAESLocationEvent(w http.ResponseWriter, r *http.Request, event *request.LocationEvent, rawXMLMsg []byte, timestamp int64, nonce string, AESKey [32]byte, random []byte)
ServeAESMenuClickEvent(w http.ResponseWriter, r *http.Request, event *request.MenuClickEvent, rawXMLMsg []byte, timestamp int64, nonce string, AESKey [32]byte, random []byte)
ServeAESMenuViewEvent(w http.ResponseWriter, r *http.Request, event *request.MenuViewEvent, rawXMLMsg []byte, timestamp int64, nonce string, AESKey [32]byte, random []byte)
ServeAESMenuScanCodePushEvent(w http.ResponseWriter, r *http.Request, event *request.MenuScanCodePushEvent, rawXMLMsg []byte, timestamp int64, nonce string, AESKey [32]byte, random []byte)
ServeAESMenuScanCodeWaitMsgEvent(w http.ResponseWriter, r *http.Request, event *request.MenuScanCodeWaitMsgEvent, rawXMLMsg []byte, timestamp int64, nonce string, AESKey [32]byte, random []byte)
ServeAESMenuPicSysPhotoEvent(w http.ResponseWriter, r *http.Request, event *request.MenuPicSysPhotoEvent, rawXMLMsg []byte, timestamp int64, nonce string, AESKey [32]byte, random []byte)
ServeAESMenuPicPhotoOrAlbumEvent(w http.ResponseWriter, r *http.Request, event *request.MenuPicPhotoOrAlbumEvent, rawXMLMsg []byte, timestamp int64, nonce string, AESKey [32]byte, random []byte)
ServeAESMenuPicWeixinEvent(w http.ResponseWriter, r *http.Request, event *request.MenuPicWeixinEvent, rawXMLMsg []byte, timestamp int64, nonce string, AESKey [32]byte, random []byte)
ServeAESMenuLocationSelectEvent(w http.ResponseWriter, r *http.Request, event *request.MenuLocationSelectEvent, rawXMLMsg []byte, timestamp int64, nonce string, AESKey [32]byte, random []byte)
ServeAESMassSendJobFinishEvent(w http.ResponseWriter, r *http.Request, event *request.MassSendJobFinishEvent, rawXMLMsg []byte, timestamp int64, nonce string, AESKey [32]byte, random []byte)
ServeAESTemplateSendJobFinishEvent(w http.ResponseWriter, r *http.Request, event *request.TemplateSendJobFinishEvent, rawXMLMsg []byte, timestamp int64, nonce string, AESKey [32]byte, random []byte)
ServeAESMerchantOrderEvent(w http.ResponseWriter, r *http.Request, event *request.MerchantOrderEvent, rawXMLMsg []byte, timestamp int64, nonce string, AESKey [32]byte, random []byte)
}
公众号对外暴露的接口
type AgentFrontend ¶
type AgentFrontend struct {
// contains filtered or unexported fields
}
Agent 的前端, 负责处理 http 请求, net/http.Handler 的实现
NOTE: 只能处理一个公众号的消息
func NewAgentFrontend ¶
func NewAgentFrontend(agent Agent, invalidRequestHandler InvalidRequestHandler) *AgentFrontend
创建一个新的 AgentFrontend.
agent 不能为 nil, 如果 invalidRequestHandler == nil 则使用 DefaultInvalidRequestHandler
func (*AgentFrontend) ServeHTTP ¶
func (this *AgentFrontend) ServeHTTP(w http.ResponseWriter, r *http.Request)
type DefaultAgent ¶
type DefaultAgent struct {
RWMutex sync.RWMutex
Id string // 公众号原始ID, 等于后台中的 公众号设置-->帐号详情-->原始ID
Token string // 公众号的 Token, 和后台中的设置相等
AppId string // 貌似需要认证才会有的???
LastAESKey [32]byte // 最后一个 AES Key
CurrentAESKey [32]byte // 当前的 AES Key
}
func (*DefaultAgent) GetAppId ¶
func (this *DefaultAgent) GetAppId() string
func (*DefaultAgent) GetCurrentAESKey ¶
func (this *DefaultAgent) GetCurrentAESKey() (key [32]byte)
func (*DefaultAgent) GetId ¶
func (this *DefaultAgent) GetId() string
func (*DefaultAgent) GetLastAESKey ¶
func (this *DefaultAgent) GetLastAESKey() (key [32]byte)
func (*DefaultAgent) GetToken ¶
func (this *DefaultAgent) GetToken() string
func (*DefaultAgent) Init ¶
func (this *DefaultAgent) Init(Id, Token, AppId string, AESKey []byte)
初始化 DefaultAgent
如果不知道自己的 AppId 是多少, 可以先随便填入一个字符串, 这样正常情况下会出现 AppId mismatch 错误, 错误中 have 后面的就是正确的 AppId
func (*DefaultAgent) ServeAESImageMsg ¶
func (*DefaultAgent) ServeAESLinkMsg ¶
func (*DefaultAgent) ServeAESLocationEvent ¶
func (this *DefaultAgent) ServeAESLocationEvent(w http.ResponseWriter, r *http.Request, msg *request.LocationEvent, rawXMLMsg []byte, timestamp int64, nonce string, AESKey [32]byte, random []byte)
func (*DefaultAgent) ServeAESLocationMsg ¶
func (*DefaultAgent) ServeAESMassSendJobFinishEvent ¶
func (this *DefaultAgent) ServeAESMassSendJobFinishEvent(w http.ResponseWriter, r *http.Request, msg *request.MassSendJobFinishEvent, rawXMLMsg []byte, timestamp int64, nonce string, AESKey [32]byte, random []byte)
func (*DefaultAgent) ServeAESMenuClickEvent ¶
func (this *DefaultAgent) ServeAESMenuClickEvent(w http.ResponseWriter, r *http.Request, msg *request.MenuClickEvent, rawXMLMsg []byte, timestamp int64, nonce string, AESKey [32]byte, random []byte)
func (*DefaultAgent) ServeAESMenuLocationSelectEvent ¶
func (this *DefaultAgent) ServeAESMenuLocationSelectEvent(w http.ResponseWriter, r *http.Request, msg *request.MenuLocationSelectEvent, rawXMLMsg []byte, timestamp int64, nonce string, AESKey [32]byte, random []byte)
func (*DefaultAgent) ServeAESMenuPicPhotoOrAlbumEvent ¶
func (this *DefaultAgent) ServeAESMenuPicPhotoOrAlbumEvent(w http.ResponseWriter, r *http.Request, msg *request.MenuPicPhotoOrAlbumEvent, rawXMLMsg []byte, timestamp int64, nonce string, AESKey [32]byte, random []byte)
func (*DefaultAgent) ServeAESMenuPicSysPhotoEvent ¶
func (this *DefaultAgent) ServeAESMenuPicSysPhotoEvent(w http.ResponseWriter, r *http.Request, msg *request.MenuPicSysPhotoEvent, rawXMLMsg []byte, timestamp int64, nonce string, AESKey [32]byte, random []byte)
func (*DefaultAgent) ServeAESMenuPicWeixinEvent ¶
func (this *DefaultAgent) ServeAESMenuPicWeixinEvent(w http.ResponseWriter, r *http.Request, msg *request.MenuPicWeixinEvent, rawXMLMsg []byte, timestamp int64, nonce string, AESKey [32]byte, random []byte)
func (*DefaultAgent) ServeAESMenuScanCodePushEvent ¶
func (this *DefaultAgent) ServeAESMenuScanCodePushEvent(w http.ResponseWriter, r *http.Request, msg *request.MenuScanCodePushEvent, rawXMLMsg []byte, timestamp int64, nonce string, AESKey [32]byte, random []byte)
func (*DefaultAgent) ServeAESMenuScanCodeWaitMsgEvent ¶
func (this *DefaultAgent) ServeAESMenuScanCodeWaitMsgEvent(w http.ResponseWriter, r *http.Request, msg *request.MenuScanCodeWaitMsgEvent, rawXMLMsg []byte, timestamp int64, nonce string, AESKey [32]byte, random []byte)
func (*DefaultAgent) ServeAESMenuViewEvent ¶
func (this *DefaultAgent) ServeAESMenuViewEvent(w http.ResponseWriter, r *http.Request, msg *request.MenuViewEvent, rawXMLMsg []byte, timestamp int64, nonce string, AESKey [32]byte, random []byte)
func (*DefaultAgent) ServeAESMerchantOrderEvent ¶
func (this *DefaultAgent) ServeAESMerchantOrderEvent(w http.ResponseWriter, r *http.Request, msg *request.MerchantOrderEvent, rawXMLMsg []byte, timestamp int64, nonce string, AESKey [32]byte, random []byte)
func (*DefaultAgent) ServeAESScanEvent ¶
func (*DefaultAgent) ServeAESSubscribeByScanEvent ¶
func (this *DefaultAgent) ServeAESSubscribeByScanEvent(w http.ResponseWriter, r *http.Request, msg *request.SubscribeByScanEvent, rawXMLMsg []byte, timestamp int64, nonce string, AESKey [32]byte, random []byte)
func (*DefaultAgent) ServeAESSubscribeEvent ¶
func (this *DefaultAgent) ServeAESSubscribeEvent(w http.ResponseWriter, r *http.Request, msg *request.SubscribeEvent, rawXMLMsg []byte, timestamp int64, nonce string, AESKey [32]byte, random []byte)
func (*DefaultAgent) ServeAESTemplateSendJobFinishEvent ¶
func (this *DefaultAgent) ServeAESTemplateSendJobFinishEvent(w http.ResponseWriter, r *http.Request, msg *request.TemplateSendJobFinishEvent, rawXMLMsg []byte, timestamp int64, nonce string, AESKey [32]byte, random []byte)
func (*DefaultAgent) ServeAESTextMsg ¶
func (*DefaultAgent) ServeAESUnknownMsg ¶
func (this *DefaultAgent) ServeAESUnknownMsg(w http.ResponseWriter, r *http.Request, rawXMLMsg []byte, timestamp int64, nonce string, AESKey [32]byte, random []byte)
func (*DefaultAgent) ServeAESUnsubscribeEvent ¶
func (this *DefaultAgent) ServeAESUnsubscribeEvent(w http.ResponseWriter, r *http.Request, msg *request.UnsubscribeEvent, rawXMLMsg []byte, timestamp int64, nonce string, AESKey [32]byte, random []byte)
func (*DefaultAgent) ServeAESVideoMsg ¶
func (*DefaultAgent) ServeAESVoiceMsg ¶
func (*DefaultAgent) ServeImageMsg ¶
func (this *DefaultAgent) ServeImageMsg(w http.ResponseWriter, r *http.Request, msg *request.Image, rawXMLMsg []byte, timestamp int64)
func (*DefaultAgent) ServeLinkMsg ¶
func (this *DefaultAgent) ServeLinkMsg(w http.ResponseWriter, r *http.Request, msg *request.Link, rawXMLMsg []byte, timestamp int64)
func (*DefaultAgent) ServeLocationEvent ¶
func (this *DefaultAgent) ServeLocationEvent(w http.ResponseWriter, r *http.Request, msg *request.LocationEvent, rawXMLMsg []byte, timestamp int64)
func (*DefaultAgent) ServeLocationMsg ¶
func (this *DefaultAgent) ServeLocationMsg(w http.ResponseWriter, r *http.Request, msg *request.Location, rawXMLMsg []byte, timestamp int64)
func (*DefaultAgent) ServeMassSendJobFinishEvent ¶
func (this *DefaultAgent) ServeMassSendJobFinishEvent(w http.ResponseWriter, r *http.Request, msg *request.MassSendJobFinishEvent, rawXMLMsg []byte, timestamp int64)
func (*DefaultAgent) ServeMenuClickEvent ¶
func (this *DefaultAgent) ServeMenuClickEvent(w http.ResponseWriter, r *http.Request, msg *request.MenuClickEvent, rawXMLMsg []byte, timestamp int64)
func (*DefaultAgent) ServeMenuLocationSelectEvent ¶
func (this *DefaultAgent) ServeMenuLocationSelectEvent(w http.ResponseWriter, r *http.Request, msg *request.MenuLocationSelectEvent, rawXMLMsg []byte, timestamp int64)
func (*DefaultAgent) ServeMenuPicPhotoOrAlbumEvent ¶
func (this *DefaultAgent) ServeMenuPicPhotoOrAlbumEvent(w http.ResponseWriter, r *http.Request, msg *request.MenuPicPhotoOrAlbumEvent, rawXMLMsg []byte, timestamp int64)
func (*DefaultAgent) ServeMenuPicSysPhotoEvent ¶
func (this *DefaultAgent) ServeMenuPicSysPhotoEvent(w http.ResponseWriter, r *http.Request, msg *request.MenuPicSysPhotoEvent, rawXMLMsg []byte, timestamp int64)
func (*DefaultAgent) ServeMenuPicWeixinEvent ¶
func (this *DefaultAgent) ServeMenuPicWeixinEvent(w http.ResponseWriter, r *http.Request, msg *request.MenuPicWeixinEvent, rawXMLMsg []byte, timestamp int64)
func (*DefaultAgent) ServeMenuScanCodePushEvent ¶
func (this *DefaultAgent) ServeMenuScanCodePushEvent(w http.ResponseWriter, r *http.Request, msg *request.MenuScanCodePushEvent, rawXMLMsg []byte, timestamp int64)
func (*DefaultAgent) ServeMenuScanCodeWaitMsgEvent ¶
func (this *DefaultAgent) ServeMenuScanCodeWaitMsgEvent(w http.ResponseWriter, r *http.Request, msg *request.MenuScanCodeWaitMsgEvent, rawXMLMsg []byte, timestamp int64)
func (*DefaultAgent) ServeMenuViewEvent ¶
func (this *DefaultAgent) ServeMenuViewEvent(w http.ResponseWriter, r *http.Request, msg *request.MenuViewEvent, rawXMLMsg []byte, timestamp int64)
func (*DefaultAgent) ServeMerchantOrderEvent ¶
func (this *DefaultAgent) ServeMerchantOrderEvent(w http.ResponseWriter, r *http.Request, msg *request.MerchantOrderEvent, rawXMLMsg []byte, timestamp int64)
func (*DefaultAgent) ServeScanEvent ¶
func (this *DefaultAgent) ServeScanEvent(w http.ResponseWriter, r *http.Request, msg *request.ScanEvent, rawXMLMsg []byte, timestamp int64)
func (*DefaultAgent) ServeSubscribeByScanEvent ¶
func (this *DefaultAgent) ServeSubscribeByScanEvent(w http.ResponseWriter, r *http.Request, msg *request.SubscribeByScanEvent, rawXMLMsg []byte, timestamp int64)
func (*DefaultAgent) ServeSubscribeEvent ¶
func (this *DefaultAgent) ServeSubscribeEvent(w http.ResponseWriter, r *http.Request, msg *request.SubscribeEvent, rawXMLMsg []byte, timestamp int64)
func (*DefaultAgent) ServeTemplateSendJobFinishEvent ¶
func (this *DefaultAgent) ServeTemplateSendJobFinishEvent(w http.ResponseWriter, r *http.Request, msg *request.TemplateSendJobFinishEvent, rawXMLMsg []byte, timestamp int64)
func (*DefaultAgent) ServeTextMsg ¶
func (this *DefaultAgent) ServeTextMsg(w http.ResponseWriter, r *http.Request, msg *request.Text, rawXMLMsg []byte, timestamp int64)
func (*DefaultAgent) ServeUnknownMsg ¶
func (this *DefaultAgent) ServeUnknownMsg(w http.ResponseWriter, r *http.Request, rawXMLMsg []byte, timestamp int64)
func (*DefaultAgent) ServeUnsubscribeEvent ¶
func (this *DefaultAgent) ServeUnsubscribeEvent(w http.ResponseWriter, r *http.Request, msg *request.UnsubscribeEvent, rawXMLMsg []byte, timestamp int64)
func (*DefaultAgent) ServeVideoMsg ¶
func (this *DefaultAgent) ServeVideoMsg(w http.ResponseWriter, r *http.Request, msg *request.Video, rawXMLMsg []byte, timestamp int64)
func (*DefaultAgent) ServeVoiceMsg ¶
func (this *DefaultAgent) ServeVoiceMsg(w http.ResponseWriter, r *http.Request, msg *request.Voice, rawXMLMsg []byte, timestamp int64)
func (*DefaultAgent) UpdateAESKey ¶
func (this *DefaultAgent) UpdateAESKey(AESKey [32]byte)
type InvalidRequestHandler ¶
type InvalidRequestHandler interface {
// 非法请求的处理方法, err 是错误信息
ServeInvalidRequest(w http.ResponseWriter, r *http.Request, err error)
}
var DefaultInvalidRequestHandler InvalidRequestHandler = InvalidRequestHandlerFunc(func(w http.ResponseWriter, r *http.Request, err error) {})
type InvalidRequestHandlerFunc ¶
type InvalidRequestHandlerFunc func(w http.ResponseWriter, r *http.Request, err error)
func (InvalidRequestHandlerFunc) ServeInvalidRequest ¶
func (fn InvalidRequestHandlerFunc) ServeInvalidRequest(w http.ResponseWriter, r *http.Request, err error)
type MultiAgentFrontend ¶
type MultiAgentFrontend struct {
// contains filtered or unexported fields
}
多个 Agent 的前端, 负责处理 http 请求, net/http.Handler 的实现
NOTE:
MultiAgentFrontend 可以处理多个公众号的消息(事件),但是要求在回调 URL 上加上一个查询
参数,一般为 agentkey(参考常量 URLQueryAgentKeyName),这个参数的值就是 MultiAgentFrontend
索引 Agent 的 key。
例如回调 URL 为 http://www.xxx.com/weixin?agentkey=1234567890,那么就可以在后端调用
MultiAgentFrontend.SetAgent("1234567890", agent)
来增加一个 Agent 来处理 agentkey=1234567890 的消息(事件)。
MultiAgentFrontend 并发安全,可以在运行中动态增加和删除 Agent。
func (*MultiAgentFrontend) DeleteAgent ¶
func (this *MultiAgentFrontend) DeleteAgent(agentkey string)
删除 agentkey 对应的 Agent
func (*MultiAgentFrontend) DeleteAllAgent ¶
func (this *MultiAgentFrontend) DeleteAllAgent()
删除所有的 Agent
func (*MultiAgentFrontend) ServeHTTP ¶
func (this *MultiAgentFrontend) ServeHTTP(w http.ResponseWriter, r *http.Request)
func (*MultiAgentFrontend) SetAgent ¶
func (this *MultiAgentFrontend) SetAgent(agentkey string, agent Agent)
添加(设置) agentkey-agent pair, 如果 agent == nil 则不做任何操作
func (*MultiAgentFrontend) SetInvalidRequestHandler ¶
func (this *MultiAgentFrontend) SetInvalidRequestHandler(handler InvalidRequestHandler)
设置 InvalidRequestHandler, 如果 handler == nil 则使用默认的 DefaultInvalidRequestHandler