package wechat import ( "encoding/xml" ) // Client wechat type Client struct { AppID string `json:"appid"` AppSecret string `json:"appsecret"` Token string `json:"token"` EncodingAESKey string `json:"encodingaeskey"` //ReadLock *sync.Mutex AccessToken string LastTokenTime int64 TokenFromCache bool Ticket string LastTicketTime int64 } // ClientToken wechat client token type ClientToken struct { AppID string `json:"appid"` AccessToken string `json:"access_token"` LastTokenTime int64 `json:"last_token_time"` } // MiniClient wechat mini type MiniClient struct { AppID string `json:"appid"` AppSecret string `json:"appsecret"` AccessToken string LastTokenTime int64 } // ResponseMsg response type ResponseMsg struct { ErrCode int `json:"errcode"` ErrMsg string `json:"errmsg"` } // FormSignature signature type FormSignature struct { TimeStamp string `form:"timestamp" json:"timestamp"` Nonce string `form:"nonce" json:"nonce"` Signature string `form:"signature" json:"signature"` Echostr string `form:"echostr" json:"echostr"` } // FormAuthorize get code type FormAuthorize struct { Code string `form:"code"` State string `form:"state"` URL string `form:"url"` } // FormOpenID openid type FormOpenID struct { OpenID string `form:"openid"` } // FormCode code type FormCode struct { Code string `form:"code"` } // FormSignPackage js sign package type FormSignPackage struct { URL string `form:"url"` } // FormURLState redirect url and state type FormURLState struct { RedirectURL string `form:"url" json:"url" xml:"url"` State string `form:"state" json:"state" xml:"state"` } // Message message type Message struct { XMLName xml.Name `xml:"xml"` ToUserName string `xml:"ToUserName" json:"ToUserName"` FromUserName string `xml:"FromUserName" json:"FromUserName"` CreateTime int64 `xml:"CreateTime" json:"CreateTime"` MsgType string `xml:"MsgType" json:"MsgType"` // text/image/voice/video/shortvideo/location/link // 文本 Text Text message Text string `xml:"Content,omitempty" json:"Content,omitempty"` // 图片 PicURL / MediaID image messgae PicURL string `xml:"PicUrl,omitempty" json:"PicUrl,omitempty"` // MediaID 媒体 MediaID string `xml:"MediaId,omitempty" json:"MediaId,omitempty"` // 语音 MediaID / Format voice message Format string `xml:"Format,omitempty" json:"Format,omitempty"` // 视频/小视频 ThumbMediaID / MediaID video/shortvideo message ThumbMediaID string `xml:"ThumbMediaId,omitempty" json:"ThumbMediaId,omitempty"` // 地理位置 location message LocationX string `xml:"Location_X,omitempty" json:"Location_X,omitempty"` // 纬度 LocationY string `xml:"Location_Y,omitempty" json:"Location_Y,omitempty"` // 经度 Scale string `xml:"Scale,omitempty" json:"Scale,omitempty"` // 地图缩放大小 Label string `xml:"Label,omitempty" json:"Label,omitempty"` // 地理位置信息 // 链接消息 link Title string `xml:"Title,omitempty" json:"Title,omitempty"` // 消息标题 Description string `xml:"Description,omitempty" json:"Description,omitempty"` // 消息描述 URL string `xml:"Url,omitempty" json:"Url,omitempty"` // 消息链接 Event string `xml:"Event,omitempty" json:"Event,omitempty"` // 事件 subscribe(订阅)、unsubscribe(取消订阅)、CLICK(自定义菜单事件)、SCAN // 扫描带参数二维码事件 EventKey string `xml:"EventKey,omitempty" json:"EventKey,omitempty"` // 事件KEY 值,扫码未关注的 qrscene_ 为前缀(subscribe 事件, 已关注的推送 SCAN 事件),后面为二维码的参数值, 自定义菜单事件与自定义菜单接口中 KEY 值对应 Ticket string `xml:"Ticket,omitempty" json:"Ticket,omitempty"` // 二维码的ticket,可用来换取二维码图片 // 地理位置 location message Latitude string `xml:"Latitude,omitempty" json:"Latitude,omitempty"` // 纬度 Longitude string `xml:"Longitude,omitempty" json:"Longitude,omitempty"` // 经度 Precision string `xml:"Precision,omitempty" json:"Precision,omitempty"` // 地理位置精度 MsgID int64 `xml:"MsgID,omitempty" json:"MsgID,omitempty"` // 消息id Status string `xml:"Status,omitempty" json:"Status,omitempty"` // 消息发送状态 } type menuSubButtonList struct { Type string `json:"type"` Name string `json:"name"` Key string `json:"key"` URL string `json:"url"` } type menuSubButton struct { List []menuSubButtonList `json:"list"` } type menuButton struct { Type string `json:"type"` Name string `json:"name"` Key string `json:"key"` SubButton menuSubButton `json:"sub_button"` } type menuInfo struct { Button []menuButton `json:"button"` } // Menu menu type Menu struct { IsOpen int64 `json:"is_menu_open"` Info menuInfo `json:"selfmenu_info"` } // FormMenuButton menu button type FormMenuButton struct { Type string `json:"type,omitempty"` Name string `json:"name"` Key string `json:"key,omitempty"` URL string `json:"url,omitempty"` AppID string `json:"appid,omitempty"` Pagepath string `json:"pagepath,omitempty"` MediaID string `json:"media_id,omitempty"` SubButton []*FormMenuButton `json:"sub_button,omitempty"` } // FormMenu menu create type FormMenu struct { Button []*FormMenuButton `json:"button"` } // ArticleItem article item type ArticleItem struct { Title string `xml:"Title" json:"Title"` Description string `xml:"Description" json:"Description"` PicURL string `xml:"PicUrl" json:"PicUrl"` URL string `xml:"Url" json:"Url"` } type articleItems struct { Items []ArticleItem `xml:"item" json:"item"` } // ReplyMessage reply message type ReplyMessage struct { XMLName xml.Name `xml:"xml"` ToUserName string `xml:"ToUserName" json:"ToUserName"` FromUserName string `xml:"FromUserName" json:"FromUserName"` CreateTime int64 `xml:"CreateTime" json:"CreateTime"` MsgType string `xml:"MsgType" json:"MsgType"` // text/image/voice/video/music/news // 文本 Content Text message Content string `xml:"Content,omitempty" json:"Content,omitempty"` // image ArticleCount int `xml:"ArticleCount,omitempty" json:"ArticleCount,omitempty"` Articles *articleItems `xml:"Articles,omitempty" json:"Articles,omitempty"` } // EventTemplateReply event reply type EventTemplateReply struct { XMLName xml.Name `xml:"xml"` ToUserName string `xml:"ToUserName"` FromUserName string `xml:"FromUserName"` CreateTime string `xml:"CreateTime"` MsgType string `xml:"MsgType"` Event string `xml:"Event"` MsgID string `xml:"MsgID"` Status string `xml:"Status"` } // SignPackage sign package type SignPackage struct { AppID string `json:"appId"` NonceStr string `json:"nonceStr"` Timestamp int64 `json:"timestamp"` Signature string `json:"signature"` Ticket string `json:"ticket"` URL string `json:"url"` } // FormMaterial Material type FormMaterial struct { Type string `form:"type"` Offset int `form:"offset"` Count int `form:"count"` } // UserInfo userinfo type UserInfo struct { SubScribe int `json:"subscribe"` OpenID string `json:"openid"` NickName string `json:"nickname"` Sex int `json:"sex"` Language string `json:"language"` City string `json:"city"` Province string `json:"province"` Country string `json:"country"` HeadImgURL string `json:"headimgurl"` SubscribeTime int `json:"subscribe_time"` UnionID string `json:"unionid"` Remark string `json:"remark"` GroupID int `json:"groupid"` TagidList []int `json:"tagid_list"` SubscribeScene string `json:"subscribe_scene"` QrScene int `json:"qr_scene"` QrSceneStr string `json:"qr_scene_str"` } // FormNextOpenID next openid type FormNextOpenID struct { Next string `form:"next_openid"` } // List openid list type List struct { OpenID []string `json:"openid"` } // UserList user list type UserList struct { Total int `json:"total"` Count int `json:"count"` Data List `json:"data"` NextOpenID string `json:"next_openid"` } // MaterialNewsItem 图片素材 type MaterialNewsItem struct { Title string `json:"title"` Author string `json:"author"` Digest string `json:"digest"` Content string `json:"content"` ContentSourceURL string `json:"content_source_url"` ThumbMediaID string `json:"thumb_media_id"` ShowCoverPic int `json:"show_cover_pic"` URL string `json:"url"` ThumbURL string `json:"thumb_url"` NeedOpenComment int `json:"need_open_comment"` OnlyFansCanComment int `json:"only_fans_can_comment"` } // MaterialContent 素材内容 type MaterialContent struct { NewsItem []*MaterialNewsItem `json:"news_item,omitempty"` CreateTime int `json:"create_time,omitempty"` UpdateTime int `json:"update_time,omitempty"` } // MaterialItem 素材信息 type MaterialItem struct { MediaID string `json:"media_id"` Name string `json:"name,omitempty"` UpdateTime int `json:"update_time"` URL string `json:"url,omitempty"` Content *MaterialContent `json:"content,omitempty"` } // Material 素材 type Material struct { TotalCount int `json:"total_count"` ItemCount int `json:"item_count"` Item []MaterialItem `json:"item"` } // MiniProgramPage mini type MiniProgramPage struct { AppID string `json:"appid,omitempty"` PagePath string `json:"pagepath,omitempty"` } // ValueColor value color type ValueColor struct { Value string `json:"value"` Color string `json:"color,omitempty"` } // TemplateResponse 模版消息返回 type TemplateResponse struct { ResponseMsg MessageID int64 `json:"msgid"` } // TemplateData data type TemplateData struct { First *ValueColor `json:"first"` Keyword1 *ValueColor `json:"keyword1,omitempty"` Keyword2 *ValueColor `json:"keyword2,omitempty"` Keyword3 *ValueColor `json:"keyword3,omitempty"` Keyword4 *ValueColor `json:"keyword4,omitempty"` Keyword5 *ValueColor `json:"keyword5,omitempty"` Keyword6 *ValueColor `json:"keyword6,omitempty"` Keyword7 *ValueColor `json:"keyword7,omitempty"` Keyword8 *ValueColor `json:"keyword8,omitempty"` Keyword9 *ValueColor `json:"keyword9,omitempty"` Keyword10 *ValueColor `json:"keyword10,omitempty"` Name *ValueColor `json:"name,omitempty"` ExpDate *ValueColor `json:"expDate,omitempty"` Remark *ValueColor `json:"remark,omitempty"` } // TemplateMessage template message type TemplateMessage struct { ToUser string `json:"touser"` TemplateID string `json:"template_id"` URL string `json:"url"` MiniProgram *MiniProgramPage `json:"miniprogram,omitempty"` Data TemplateData `json:"data"` } // MiniTemplateMessage mini template message type MiniTemplateMessage struct { ToUser string `json:"touser"` TemplateID string `json:"template_id"` Page string `json:"page"` FormID string `json:"form_id"` Data TemplateData `json:"data"` } // WeappTemplateMessage mini message type WeappTemplateMessage struct { TemplateID string `json:"template_id"` Page string `json:"page"` FormID string `json:"form_id"` Data TemplateData `json:"data"` Emphasis string `json:"emphasis_keyword"` } // MpTemplateMessage wechat public message type MpTemplateMessage struct { AppID string `json:"appid"` TemplateID string `json:"template_id"` URL string `json:"url"` Mini MiniProgramPage `json:"miniprogram"` Data TemplateData `json:"data"` } // MiniUniformMessage mini uniform send type MiniUniformMessage struct { ToUser string `json:"touser"` WeApp *WeappTemplateMessage `json:"weapp_template_msg,omitempty"` MP *MpTemplateMessage `json:"mp_template_msg,omitempty"` } // FormPayNotify notify type FormPayNotify struct { XMLName xml.Name `xml:"xml" json:"_,omitempty"` AppID string `form:"appid" xml:"appid"` Attach string `form:"attach" xml:"attach"` BankType string `form:"bank_type" xml:"bank_type"` CashFee int `form:"cash_fee" xml:"cash_fee"` FeeType string `form:"fee_type" xml:"fee_type"` MchID string `form:"mch_id" xml:"mch_id"` IsSubscribe string `form:"is_subscribe" xml:"is_subscribe"` NonceStr string `form:"nonce_str" xml:"nonce_str"` OpenID string `form:"openid" xml:"openid"` OutTradeNo string `form:"out_trade_no" xml:"out_trade_no"` ResultCode string `form:"result_code" xml:"result_code"` ReturnMsg string `form:"return_msg" xml:"return_msg"` ReturnCode string `form:"return_code" xml:"return_code"` ErrCodeDes string `form:"err_code_des" xml:"err_code_des"` ErrCode string `form:"err_code" xml:"err_code"` Sign string `form:"sign" xml:"sign"` TimeEnd string `form:"time_end" xml:"time_end"` TotalFee int `form:"total_fee" xml:"total_fee"` TradeType string `form:"trade_type" xml:"trade_type"` TransactionID string `form:"transaction_id" xml:"transaction_id"` ContractID string `form:"contract_id" xml:"contract_id"` }