structure.go 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370
  1. package wechat
  2. import (
  3. "encoding/xml"
  4. "sync"
  5. )
  6. // FormSignature signature
  7. type FormSignature struct {
  8. TimeStamp string `form:"timestamp" json:"timestamp"`
  9. Nonce string `form:"nonce" json:"nonce"`
  10. Signature string `form:"signature" json:"signature"`
  11. Echostr string `form:"echostr" json:"echostr"`
  12. }
  13. // FormAuthorize get code
  14. type FormAuthorize struct {
  15. Code string `form:"code"`
  16. State string `form:"state"`
  17. URL string `form:"url"`
  18. }
  19. // FormOpenID openid
  20. type FormOpenID struct {
  21. OpenID string `form:"openid"`
  22. }
  23. // FormCode code
  24. type FormCode struct {
  25. Code string `form:"code"`
  26. }
  27. // FormSignPackage js sign package
  28. type FormSignPackage struct {
  29. URL string `form:"url"`
  30. }
  31. // FormURLState redirect url and state
  32. type FormURLState struct {
  33. RedirectURL string `form:"url" json:"url" xml:"url"`
  34. State string `form:"state" json:"state" xml:"state"`
  35. }
  36. // ResponseMsg response
  37. type ResponseMsg struct {
  38. ErrCode int `json:"errcode"`
  39. ErrMsg string `json:"errmsg"`
  40. }
  41. /*
  42. // Response response
  43. type Response struct {
  44. ErrCode int `json:"errcode"`
  45. ErrMsg string `json:"errmsg"`
  46. // token
  47. AccessToken string `json:"access_token"`
  48. ExpiresIn int `json:"expires_in"`
  49. // openid
  50. RefreshToken string `json:"refresh_token"`
  51. OpenID string `json:"openid"`
  52. Scope string `json:"scope"`
  53. // user info
  54. NickName string `json:"nickname"`
  55. Sex string `json:"sex"`
  56. Province string `json:"province"`
  57. City string `json:"city"`
  58. Country string `json:"country"`
  59. HeadImgURL string `json:"headimgurl"`
  60. Privilege string `json:"privilege"`
  61. UnionID string `json:"unionid"`
  62. // template message
  63. MsgID int64 `json:"msgid"`
  64. // jsapi_ticket
  65. Ticket string `json:"ticket"`
  66. // mini get openid by code
  67. SessionKey string `json:"session_key"`
  68. }
  69. // */
  70. // Message message
  71. type Message struct {
  72. XMLName xml.Name `xml:"xml"`
  73. ToUserName string `xml:"ToUserName" json:"ToUserName"`
  74. FromUserName string `xml:"FromUserName" json:"FromUserName"`
  75. CreateTime int64 `xml:"CreateTime" json:"CreateTime"`
  76. MsgType string `xml:"MsgType" json:"MsgType"` // text/image/voice/video/shortvideo/location/link
  77. // 文本 Text Text message
  78. Text string `xml:"Content,omitempty" json:"Content,omitempty"`
  79. // 图片 PicURL / MediaID image messgae
  80. PicURL string `xml:"PicUrl,omitempty" json:"PicUrl,omitempty"`
  81. MediaID string `xml:"MediaId,omitempty" json:"MediaId,omitempty"`
  82. // 语音 MediaID / Format voice message
  83. Format string `xml:"Format,omitempty" json:"Format,omitempty"`
  84. // 视频/小视频 ThumbMediaID / MediaID video/shortvideo message
  85. ThumbMediaID string `xml:"ThumbMediaId,omitempty" json:"ThumbMediaId,omitempty"`
  86. // 地理位置 location message
  87. LocationX string `xml:"Location_X,omitempty" json:"Location_X,omitempty"` // 经度
  88. LocationY string `xml:"Location_Y,omitempty" json:"Location_Y,omitempty"` // 纬度
  89. Scale string `xml:"Scale,omitempty" json:"Scale,omitempty"` // 地图缩放大小
  90. Label string `xml:"Label,omitempty" json:"Label,omitempty"` // 地理位置信息
  91. // 链接消息 link
  92. Title string `xml:"Title,omitempty" json:"Title,omitempty"` // 消息标题
  93. Description string `xml:"Description,omitempty" json:"Description,omitempty"` // 消息描述
  94. URL string `xml:"Url,omitempty" json:"Url,omitempty"` // 消息链接
  95. Event string `xml:"Event,omitempty" json:"Event,omitempty"` // 事件 subscribe(订阅)、unsubscribe(取消订阅)、CLICK(自定义菜单事件)、SCAN
  96. // 扫描带参数二维码事件
  97. EventKey string `xml:"EventKey,omitempty" json:"EventKey,omitempty"` // 事件KEY 值,扫码未关注的 qrscene_ 为前缀(subscribe 事件, 已关注的推送 SCAN 事件),后面为二维码的参数值, 自定义菜单事件与自定义菜单接口中 KEY 值对应
  98. Ticket string `xml:"Ticket,omitempty" json:"Ticket,omitempty"` // 二维码的ticket,可用来换取二维码图片
  99. MsgID int64 `xml:"MsgId,omitempty" json:"MsgId,omitempty"` // 消息id
  100. }
  101. // ArticleItem article item
  102. type ArticleItem struct {
  103. Title string `xml:"Title" json:"Title"`
  104. Description string `xml:"Description" json:"Description"`
  105. PicURL string `xml:"PicUrl" json:"PicUrl"`
  106. URL string `xml:"Url" json:"Url"`
  107. }
  108. type articleItems struct {
  109. Items []ArticleItem `xml:"item" json:"item"`
  110. }
  111. // ReplyMessage reply message
  112. type ReplyMessage struct {
  113. XMLName xml.Name `xml:"xml"`
  114. ToUserName string `xml:"ToUserName" json:"ToUserName"`
  115. FromUserName string `xml:"FromUserName" json:"FromUserName"`
  116. CreateTime int64 `xml:"CreateTime" json:"CreateTime"`
  117. MsgType string `xml:"MsgType" json:"MsgType"` // text/image/voice/video/music/news
  118. // 文本 Content Text message
  119. Content string `xml:"Content,omitempty" json:"Content,omitempty"`
  120. // image
  121. ArticleCount int `xml:"ArticleCount,omitempty" json:"ArticleCount,omitempty"`
  122. Articles *articleItems `xml:"Articles,omitempty" json:"Articles,omitempty"`
  123. }
  124. /*
  125. <xml>
  126. <ToUserName><![CDATA[toUser]]></ToUserName>
  127. <FromUserName><![CDATA[fromUser]]></FromUserName>
  128. <CreateTime>12345678</CreateTime>
  129. <MsgType><![CDATA[news]]></MsgType>
  130. <ArticleCount>1</ArticleCount>
  131. <Articles>
  132. <item>
  133. <Title><![CDATA[title1]]></Title>
  134. <Description><![CDATA[description1]]></Description>
  135. <PicUrl><![CDATA[picurl]]></PicUrl>
  136. <Url><![CDATA[url]]></Url>
  137. </item>
  138. </Articles>
  139. </xml>
  140. // */
  141. // EventTemplateReply event reply
  142. type EventTemplateReply struct {
  143. XMLName xml.Name `xml:"xml"`
  144. ToUserName string `xml:"ToUserName"`
  145. FromUserName string `xml:"FromUserName"`
  146. CreateTime string `xml:"CreateTime"`
  147. MsgType string `xml:"MsgType"`
  148. Event string `xml:"Event"`
  149. MsgID string `xml:"MsgID"`
  150. Status string `xml:"Status"`
  151. }
  152. // SignPackage sign package
  153. type SignPackage struct {
  154. AppID string `json:"appId"`
  155. NonceStr string `json:"nonceStr"`
  156. Timestamp int64 `json:"timestamp"`
  157. Signature string `json:"signature"`
  158. Ticket string `json:"ticket"`
  159. URL string `json:"url"`
  160. }
  161. // Client wechat
  162. type Client struct {
  163. AppID string `json:"appid"`
  164. AppSecret string `json:"appsecret"`
  165. Token string `json:"token"`
  166. EncodingAESKey string `json:"encodingaeskey"`
  167. ReadLock *sync.Mutex
  168. AccessToken string
  169. LastTokenTime int64
  170. Ticket string
  171. LastTicketTime int64
  172. }
  173. // MiniClient wechat mini
  174. type MiniClient struct {
  175. AppID string `json:"appid"`
  176. AppSecret string `json:"appsecret"`
  177. AccessToken string
  178. LastTokenTime int64
  179. }
  180. // FormMaterial Material
  181. type FormMaterial struct {
  182. Type string `form:"type"`
  183. Offset int `form:"offset"`
  184. Count int `form:"count"`
  185. }
  186. // UserInfo userinfo
  187. type UserInfo struct {
  188. SubScribe int `json:"subscribe"`
  189. OpenID string `json:"openid"`
  190. NickName string `json:"nickname"`
  191. Sex int `json:"sex"`
  192. Language string `json:"language"`
  193. City string `json:"city"`
  194. Province string `json:"province"`
  195. Country string `json:"country"`
  196. HeadImgURL string `json:"headimgurl"`
  197. SubscribeTime int `json:"subscribe_time"`
  198. UnionID string `json:"unionid"`
  199. Remark string `json:"remark"`
  200. GroupID int `json:"groupid"`
  201. TagidList []int `json:"tagid_list"`
  202. SubscribeScene string `json:"subscribe_scene"`
  203. QrScene int `json:"qr_scene"`
  204. QrSceneStr string `json:"qr_scene_str"`
  205. }
  206. // List openid list
  207. type List struct {
  208. OpenID []string `json:"openid"`
  209. }
  210. // UserList user list
  211. type UserList struct {
  212. Total int `json:"total"`
  213. Count int `json:"count"`
  214. Data List `json:"data"`
  215. NextOpenID string `json:"next_openid"`
  216. }
  217. // MaterialNewsItem 图片素材
  218. type MaterialNewsItem struct {
  219. Title string `json:"title"`
  220. Author string `json:"author"`
  221. Digest string `json:"digest"`
  222. Content string `json:"content"`
  223. ContentSourceURL string `json:"content_source_url"`
  224. ThumbMediaID string `json:"thumb_media_id"`
  225. ShowCoverPic int `json:"show_cover_pic"`
  226. URL string `json:"url"`
  227. ThumbURL string `json:"thumb_url"`
  228. NeedOpenComment int `json:"need_open_comment"`
  229. OnlyFansCanComment int `json:"only_fans_can_comment"`
  230. }
  231. // MaterialContent 素材内容
  232. type MaterialContent struct {
  233. NewsItem []*MaterialNewsItem `json:"news_item,omitempty"`
  234. CreateTime int `json:"create_time,omitempty"`
  235. UpdateTime int `json:"update_time,omitempty"`
  236. }
  237. // MaterialItem 素材信息
  238. type MaterialItem struct {
  239. MediaID string `json:"media_id"`
  240. Name string `json:"name,omitempty"`
  241. UpdateTime int `json:"update_time"`
  242. URL string `json:"url,omitempty"`
  243. Content *MaterialContent `json:"content,omitempty"`
  244. }
  245. // Material 素材
  246. type Material struct {
  247. TotalCount int `json:"total_count"`
  248. ItemCount int `json:"item_count"`
  249. Item []MaterialItem `json:"item"`
  250. }
  251. // MiniProgramPage mini
  252. type MiniProgramPage struct {
  253. AppID string `json:"appid,omitempty"`
  254. PagePath string `json:"pagepath,omitempty"`
  255. }
  256. // ValueColor value color
  257. type ValueColor struct {
  258. Value string `json:"value"`
  259. Color string `json:"color,omitempty"`
  260. }
  261. // TemplateData data
  262. type TemplateData struct {
  263. First *ValueColor `json:"first"`
  264. Keyword1 *ValueColor `json:"keyword1,omitempty"`
  265. Keyword2 *ValueColor `json:"keyword2,omitempty"`
  266. Keyword3 *ValueColor `json:"keyword3,omitempty"`
  267. Keyword4 *ValueColor `json:"keyword4,omitempty"`
  268. Keyword5 *ValueColor `json:"keyword5,omitempty"`
  269. Keyword6 *ValueColor `json:"keyword6,omitempty"`
  270. Keyword7 *ValueColor `json:"keyword7,omitempty"`
  271. Keyword8 *ValueColor `json:"keyword8,omitempty"`
  272. Keyword9 *ValueColor `json:"keyword9,omitempty"`
  273. Keyword10 *ValueColor `json:"keyword10,omitempty"`
  274. Name *ValueColor `json:"name,omitempty"`
  275. ExpDate *ValueColor `json:"expDate,omitempty"`
  276. Remark *ValueColor `json:"remark,omitempty"`
  277. }
  278. // TemplateMessage template message
  279. type TemplateMessage struct {
  280. ToUser string `json:"touser"`
  281. TemplateID string `json:"template_id"`
  282. URL string `json:"url"`
  283. MiniProgram *MiniProgramPage `json:"miniprogram,omitempty"`
  284. Data TemplateData `json:"data"`
  285. }
  286. // MiniTemplateMessage mini template message
  287. type MiniTemplateMessage struct {
  288. ToUser string `json:"touser"`
  289. TemplateID string `json:"template_id"`
  290. Page string `json:"page"`
  291. FormID string `json:"form_id"`
  292. Data TemplateData `json:"data"`
  293. }
  294. // WeappTemplateMessage mini message
  295. type WeappTemplateMessage struct {
  296. TemplateID string `json:"template_id"`
  297. Page string `json:"page"`
  298. FormID string `json:"form_id"`
  299. Data TemplateData `json:"data"`
  300. Emphasis string `json:"emphasis_keyword"`
  301. }
  302. // MpTemplateMessage wechat public message
  303. type MpTemplateMessage struct {
  304. AppID string `json:"appid"`
  305. TemplateID string `json:"template_id"`
  306. URL string `json:"url"`
  307. Mini MiniProgramPage `json:"miniprogram"`
  308. Data TemplateData `json:"data"`
  309. }
  310. // MiniUniformMessage mini uniform send
  311. type MiniUniformMessage struct {
  312. ToUser string `json:"touser"`
  313. WeApp *WeappTemplateMessage `json:"weapp_template_msg,omitempty"`
  314. MP *MpTemplateMessage `json:"mp_template_msg,omitempty"`
  315. }