WxConsts.java 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590
  1. package me.chanjar.weixin.common.api;
  2. import lombok.experimental.UtilityClass;
  3. import java.util.Arrays;
  4. import java.util.HashMap;
  5. import java.util.List;
  6. import java.util.Map;
  7. import static me.chanjar.weixin.common.error.WxMpErrorMsgEnum.*;
  8. /**
  9. * 微信开发所使用到的常量类.
  10. *
  11. * @author Daniel Qian & binarywang & Wang_Wong
  12. */
  13. @UtilityClass
  14. public class WxConsts {
  15. /**
  16. * access_token 相关错误代码
  17. * <pre>
  18. * 发生以下情况时尝试刷新access_token
  19. * 40001 获取access_token时AppSecret错误,或者access_token无效
  20. * 42001 access_token超时
  21. * 40014 不合法的access_token,请开发者认真比对access_token的有效性(如是否过期),或查看是否正在为恰当的公众号调用接口
  22. * </pre>
  23. */
  24. public static final List<Integer> ACCESS_TOKEN_ERROR_CODES = Arrays.asList(CODE_40001.getCode(),
  25. CODE_40014.getCode(), CODE_42001.getCode());
  26. /**
  27. * 微信接口返回的参数errcode.
  28. */
  29. public static final String ERR_CODE = "errcode";
  30. /**
  31. * 微信推送过来的消息的类型,和发送给微信xml格式消息的消息类型.
  32. */
  33. @UtilityClass
  34. public static class XmlMsgType {
  35. public static final String TEXT = "text";
  36. public static final String IMAGE = "image";
  37. public static final String VOICE = "voice";
  38. public static final String SHORTVIDEO = "shortvideo";
  39. public static final String VIDEO = "video";
  40. public static final String NEWS = "news";
  41. public static final String MUSIC = "music";
  42. public static final String LOCATION = "location";
  43. public static final String LINK = "link";
  44. public static final String EVENT = "event";
  45. public static final String DEVICE_TEXT = "device_text";
  46. public static final String DEVICE_EVENT = "device_event";
  47. public static final String DEVICE_STATUS = "device_status";
  48. public static final String HARDWARE = "hardware";
  49. public static final String TRANSFER_CUSTOMER_SERVICE = "transfer_customer_service";
  50. public static final String UPDATE_TASKCARD = "update_taskcard";
  51. public static final String UPDATE_BUTTON = "update_button";
  52. }
  53. /**
  54. * 主动发送消息(即客服消息)的消息类型.
  55. */
  56. @UtilityClass
  57. public static class KefuMsgType {
  58. /**
  59. * 文本消息.
  60. */
  61. public static final String TEXT = "text";
  62. /**
  63. * 图片消息.
  64. */
  65. public static final String IMAGE = "image";
  66. /**
  67. * 语音消息.
  68. */
  69. public static final String VOICE = "voice";
  70. /**
  71. * 视频消息.
  72. */
  73. public static final String VIDEO = "video";
  74. /**
  75. * 音乐消息.
  76. */
  77. public static final String MUSIC = "music";
  78. /**
  79. * 图文消息(点击跳转到外链).
  80. */
  81. public static final String NEWS = "news";
  82. /**
  83. * 图文消息(点击跳转到图文消息页面).
  84. */
  85. public static final String MPNEWS = "mpnews";
  86. /**
  87. * markdown消息.
  88. * (目前仅支持markdown语法的子集,微工作台(原企业号)不支持展示markdown消息)
  89. */
  90. public static final String MARKDOWN = "markdown";
  91. /**
  92. * 发送文件(CP专用).
  93. */
  94. public static final String FILE = "file";
  95. /**
  96. * 文本卡片消息(CP专用).
  97. */
  98. public static final String TEXTCARD = "textcard";
  99. /**
  100. * 卡券消息.
  101. */
  102. public static final String WXCARD = "wxcard";
  103. /**
  104. * 转发到客服的消息.
  105. */
  106. public static final String TRANSFER_CUSTOMER_SERVICE = "transfer_customer_service";
  107. /**
  108. * 小程序卡片(要求小程序与公众号已关联).
  109. */
  110. public static final String MINIPROGRAMPAGE = "miniprogrampage";
  111. /**
  112. * 任务卡片消息.
  113. */
  114. public static final String TASKCARD = "taskcard";
  115. /**
  116. * 菜单消息.
  117. */
  118. public static final String MSGMENU = "msgmenu";
  119. /**
  120. * 小程序通知消息.
  121. */
  122. public static final String MINIPROGRAM_NOTICE = "miniprogram_notice";
  123. /**
  124. * 模板卡片消息.
  125. */
  126. public static final String TEMPLATE_CARD = "template_card";
  127. /**
  128. * 发送图文消息(点击跳转到图文消息页面)使用通过 “发布” 系列接口得到的 article_id(草稿箱功能上线后不再支持客服接口中带 media_id 的 mpnews 类型的图文消息)
  129. */
  130. public static final String MP_NEWS_ARTICLE = "mpnewsarticle";
  131. }
  132. /**
  133. * 发送「学校通知」类型
  134. * https://developer.work.weixin.qq.com/document/path/92321
  135. */
  136. @UtilityClass
  137. public static class SchoolContactMsgType {
  138. /**
  139. * 文本消息.
  140. */
  141. public static final String TEXT = "text";
  142. /**
  143. * 图片消息.
  144. */
  145. public static final String IMAGE = "image";
  146. /**
  147. * 语音消息.
  148. */
  149. public static final String VOICE = "voice";
  150. /**
  151. * 视频消息.
  152. */
  153. public static final String VIDEO = "video";
  154. /**
  155. * 文件消息
  156. */
  157. public static final String FILE = "file";
  158. /**
  159. * 图文消息
  160. */
  161. public static final String NEWS = "news";
  162. /**
  163. * 图文消息(mpnews)
  164. */
  165. public static final String MPNEWS = "mpnews";
  166. /**
  167. * 小程序消息
  168. */
  169. public static final String MINIPROGRAM = "miniprogram";
  170. }
  171. /**
  172. * 企业微信模板卡片消息的卡片类型
  173. */
  174. @UtilityClass
  175. public static class TemplateCardType {
  176. /**
  177. * 文本通知型卡片
  178. */
  179. public static final String TEXT_NOTICE = "text_notice";
  180. /**
  181. * 图文展示型卡片
  182. */
  183. public static final String NEWS_NOTICE = "news_notice";
  184. /**
  185. * 按钮交互型卡片
  186. */
  187. public static final String BUTTON_INTERACTION = "button_interaction";
  188. /**
  189. * 投票选择型卡片
  190. */
  191. public static final String VOTE_INTERACTION = "vote_interaction";
  192. /**
  193. * 多项选择型卡片
  194. */
  195. public static final String MULTIPLE_INTERACTION = "multiple_interaction";
  196. }
  197. /**
  198. * 表示是否是保密消息,0表示否,1表示是,默认0.
  199. */
  200. @UtilityClass
  201. public static class KefuMsgSafe {
  202. public static final String NO = "0";
  203. public static final String YES = "1";
  204. }
  205. /**
  206. * 群发消息的消息类型.
  207. */
  208. @UtilityClass
  209. public static class MassMsgType {
  210. public static final String MPNEWS = "mpnews";
  211. public static final String TEXT = "text";
  212. public static final String VOICE = "voice";
  213. public static final String IMAGE = "image";
  214. public static final String IMAGES = "images";
  215. public static final String MPVIDEO = "mpvideo";
  216. }
  217. /**
  218. * 群发消息后微信端推送给服务器的反馈消息.
  219. */
  220. @UtilityClass
  221. public static class MassMsgStatus {
  222. public static final String SEND_SUCCESS = "send success";
  223. public static final String SEND_FAIL = "send fail";
  224. public static final String ERR_10001 = "err(10001)";
  225. public static final String ERR_20001 = "err(20001)";
  226. public static final String ERR_20004 = "err(20004)";
  227. public static final String ERR_20002 = "err(20002)";
  228. public static final String ERR_20006 = "err(20006)";
  229. public static final String ERR_20008 = "err(20008)";
  230. public static final String ERR_20013 = "err(20013)";
  231. public static final String ERR_22000 = "err(22000)";
  232. public static final String ERR_21000 = "err(21000)";
  233. public static final String ERR_30001 = "err(30001)";
  234. public static final String ERR_30002 = "err(30002)";
  235. public static final String ERR_30003 = "err(30003)";
  236. public static final String ERR_40001 = "err(40001)";
  237. public static final String ERR_40002 = "err(40002)";
  238. /**
  239. * 群发反馈消息代码所对应的文字描述.
  240. */
  241. public static final Map<String, String> STATUS_DESC = new HashMap<>();
  242. static {
  243. STATUS_DESC.put(SEND_SUCCESS, "发送成功");
  244. STATUS_DESC.put(SEND_FAIL, "发送失败");
  245. STATUS_DESC.put(ERR_10001, "涉嫌广告");
  246. STATUS_DESC.put(ERR_20001, "涉嫌政治");
  247. STATUS_DESC.put(ERR_20004, "涉嫌社会");
  248. STATUS_DESC.put(ERR_20002, "涉嫌色情");
  249. STATUS_DESC.put(ERR_20006, "涉嫌违法犯罪");
  250. STATUS_DESC.put(ERR_20008, "涉嫌欺诈");
  251. STATUS_DESC.put(ERR_20013, "涉嫌版权");
  252. STATUS_DESC.put(ERR_22000, "涉嫌互推_互相宣传");
  253. STATUS_DESC.put(ERR_21000, "涉嫌其他");
  254. STATUS_DESC.put(ERR_30001, "原创校验出现系统错误且用户选择了被判为转载就不群发");
  255. STATUS_DESC.put(ERR_30002, "原创校验被判定为不能群发");
  256. STATUS_DESC.put(ERR_30003, "原创校验被判定为转载文且用户选择了被判为转载就不群发");
  257. STATUS_DESC.put(ERR_40001, "管理员拒绝");
  258. STATUS_DESC.put(ERR_40002, "管理员30分钟内无响应,超时");
  259. }
  260. }
  261. /**
  262. * 微信端推送过来的事件类型.
  263. */
  264. @UtilityClass
  265. public static class EventType {
  266. public static final String SUBSCRIBE = "subscribe";
  267. public static final String UNSUBSCRIBE = "unsubscribe";
  268. public static final String SCAN = "SCAN";
  269. public static final String LOCATION = "LOCATION";
  270. public static final String CLICK = "CLICK";
  271. public static final String VIEW = "VIEW";
  272. public static final String MASS_SEND_JOB_FINISH = "MASSSENDJOBFINISH";
  273. /**
  274. * 扫码推事件的事件推送
  275. */
  276. public static final String SCANCODE_PUSH = "scancode_push";
  277. /**
  278. * 扫码推事件且弹出“消息接收中”提示框的事件推送.
  279. */
  280. public static final String SCANCODE_WAITMSG = "scancode_waitmsg";
  281. /**
  282. * 弹出系统拍照发图的事件推送.
  283. */
  284. public static final String PIC_SYSPHOTO = "pic_sysphoto";
  285. /**
  286. * 弹出拍照或者相册发图的事件推送.
  287. */
  288. public static final String PIC_PHOTO_OR_ALBUM = "pic_photo_or_album";
  289. /**
  290. * 弹出微信相册发图器的事件推送.
  291. */
  292. public static final String PIC_WEIXIN = "pic_weixin";
  293. /**
  294. * 弹出地理位置选择器的事件推送.
  295. */
  296. public static final String LOCATION_SELECT = "location_select";
  297. /**
  298. * 授权用户资料变更事件
  299. * 1、 当部分用户的资料存在风险时,平台会对用户资料进行清理,并通过消息推送服务器通知最近30天授权过的公众号开发者,我们建议开发者留意响应该事件,及时主动更新或清理用户的头像及昵称,降低风险。
  300. * 2、 当用户撤回授权信息时,平台会通过消息推送服务器通知给公众号开发者,请开发者注意及时删除用户信息。
  301. */
  302. public static final String USER_INFO_MODIFIED = "user_info_modified";
  303. /**
  304. * 用户撤回授权事件
  305. */
  306. public static final String USER_AUTHORIZATION_REVOKE = "user_authorization_revoke";
  307. /**
  308. * 群发模板回调事件
  309. */
  310. public static final String TEMPLATE_SEND_JOB_FINISH = "TEMPLATESENDJOBFINISH";
  311. /**
  312. * 微信小店 订单付款通知.
  313. */
  314. public static final String MERCHANT_ORDER = "merchant_order";
  315. /**
  316. * 卡券事件:卡券通过审核
  317. */
  318. public static final String CARD_PASS_CHECK = "card_pass_check";
  319. /**
  320. * 卡券事件:卡券未通过审核
  321. */
  322. public static final String CARD_NOT_PASS_CHECK = "card_not_pass_check";
  323. /**
  324. * 卡券事件:用户领取卡券
  325. */
  326. public static final String CARD_USER_GET_CARD = "user_get_card";
  327. /**
  328. * 卡券事件:用户转赠卡券
  329. */
  330. public static final String CARD_USER_GIFTING_CARD = "user_gifting_card";
  331. /**
  332. * 异步安全校验事件
  333. */
  334. public static final String WXA_MEDIA_CHECK = "wxa_media_check";
  335. /**
  336. * 卡券事件:用户核销卡券
  337. */
  338. public static final String CARD_USER_CONSUME_CARD = "user_consume_card";
  339. /**
  340. * 卡券事件:用户通过卡券的微信买单完成时推送
  341. */
  342. public static final String CARD_USER_PAY_FROM_PAY_CELL = "user_pay_from_pay_cell";
  343. /**
  344. * 卡券事件:用户提交会员卡开卡信息
  345. */
  346. public static final String CARD_SUBMIT_MEMBERCARD_USER_INFO = "submit_membercard_user_info";
  347. /**
  348. * 卡券事件:用户打开查看卡券
  349. */
  350. public static final String CARD_USER_VIEW_CARD = "user_view_card";
  351. /**
  352. * 卡券事件:用户删除卡券
  353. */
  354. public static final String CARD_USER_DEL_CARD = "user_del_card";
  355. /**
  356. * 卡券事件:用户在卡券里点击查看公众号进入会话时(需要用户已经关注公众号)
  357. */
  358. public static final String CARD_USER_ENTER_SESSION_FROM_CARD = "user_enter_session_from_card";
  359. /**
  360. * 卡券事件:当用户的会员卡积分余额发生变动时
  361. */
  362. public static final String CARD_UPDATE_MEMBER_CARD = "update_member_card";
  363. /**
  364. * 卡券事件:当某个card_id的初始库存数大于200且当前库存小于等于100时,用户尝试领券会触发发送事件给商户,事件每隔12h发送一次
  365. */
  366. public static final String CARD_SKU_REMIND = "card_sku_remind";
  367. /**
  368. * 卡券事件:当商户朋友的券券点发生变动时
  369. */
  370. public static final String CARD_PAY_ORDER = "card_pay_order";
  371. /**
  372. * 小程序审核事件:审核通过
  373. */
  374. public static final String WEAPP_AUDIT_SUCCESS = "weapp_audit_success";
  375. /**
  376. * 小程序审核事件:审核不通过
  377. */
  378. public static final String WEAPP_AUDIT_FAIL = "weapp_audit_fail";
  379. /**
  380. * 小程序自定义交易组件支付通知
  381. */
  382. public static final String OPEN_PRODUCT_ORDER_PAY = "open_product_order_pay";
  383. /**
  384. * 点击菜单跳转小程序的事件推送
  385. */
  386. public static final String VIEW_MINIPROGRAM = "view_miniprogram";
  387. /**
  388. * 订阅通知事件:用户操作订阅通知弹窗
  389. */
  390. public static final String SUBSCRIBE_MSG_POPUP_EVENT = "subscribe_msg_popup_event";
  391. /**
  392. * 订阅通知事件:用户管理订阅通知
  393. */
  394. public static final String SUBSCRIBE_MSG_CHANGE_EVENT = "subscribe_msg_change_event";
  395. /**
  396. * 订阅通知事件:发送订阅通知回调
  397. */
  398. public static final String SUBSCRIBE_MSG_SENT_EVENT = "subscribe_msg_sent_event";
  399. }
  400. /**
  401. * 上传多媒体(临时素材)文件的类型.
  402. */
  403. public static class MediaFileType {
  404. public static final String IMAGE = "image";
  405. public static final String VOICE = "voice";
  406. public static final String VIDEO = "video";
  407. public static final String THUMB = "thumb";
  408. public static final String FILE = "file";
  409. }
  410. /**
  411. * 自定义菜单的按钮类型.
  412. */
  413. @UtilityClass
  414. public static class MenuButtonType {
  415. /**
  416. * 点击推事件.
  417. */
  418. public static final String CLICK = "click";
  419. /**
  420. * 跳转URL.
  421. */
  422. public static final String VIEW = "view";
  423. /**
  424. * 跳转到小程序.
  425. */
  426. public static final String MINIPROGRAM = "miniprogram";
  427. /**
  428. * 扫码推事件.
  429. */
  430. public static final String SCANCODE_PUSH = "scancode_push";
  431. /**
  432. * 扫码推事件且弹出“消息接收中”提示框.
  433. */
  434. public static final String SCANCODE_WAITMSG = "scancode_waitmsg";
  435. /**
  436. * 弹出系统拍照发图.
  437. */
  438. public static final String PIC_SYSPHOTO = "pic_sysphoto";
  439. /**
  440. * 弹出拍照或者相册发图.
  441. */
  442. public static final String PIC_PHOTO_OR_ALBUM = "pic_photo_or_album";
  443. /**
  444. * 弹出微信相册发图器.
  445. */
  446. public static final String PIC_WEIXIN = "pic_weixin";
  447. /**
  448. * 弹出地理位置选择器.
  449. */
  450. public static final String LOCATION_SELECT = "location_select";
  451. /**
  452. * 下发消息(除文本消息).
  453. */
  454. public static final String MEDIA_ID = "media_id";
  455. /**
  456. * 跳转图文消息URL.
  457. */
  458. public static final String VIEW_LIMITED = "view_limited";
  459. }
  460. /**
  461. * oauth2网页授权的scope.
  462. */
  463. @UtilityClass
  464. public static class OAuth2Scope {
  465. /**
  466. * 不弹出授权页面,直接跳转,只能获取用户openid.
  467. */
  468. public static final String SNSAPI_BASE = "snsapi_base";
  469. /**
  470. * 弹出授权页面,可通过openid拿到昵称、性别、所在地。并且,即使在未关注的情况下,只要用户授权,也能获取其信息.
  471. */
  472. public static final String SNSAPI_USERINFO = "snsapi_userinfo";
  473. /**
  474. * 手动授权,可获取成员的详细信息,包含手机、邮箱。只适用于企业微信或企业号.
  475. */
  476. public static final String SNSAPI_PRIVATEINFO = "snsapi_privateinfo";
  477. }
  478. /**
  479. * 网页应用登录授权作用域.
  480. */
  481. @UtilityClass
  482. public static class QrConnectScope {
  483. public static final String SNSAPI_LOGIN = "snsapi_login";
  484. }
  485. /**
  486. * 永久素材类型.
  487. */
  488. @UtilityClass
  489. public static class MaterialType {
  490. public static final String NEWS = "news";
  491. public static final String VOICE = "voice";
  492. public static final String IMAGE = "image";
  493. public static final String VIDEO = "video";
  494. }
  495. /**
  496. * 网络检测入参.
  497. */
  498. @UtilityClass
  499. public static class NetCheckArgs {
  500. public static final String ACTIONDNS = "dns";
  501. public static final String ACTIONPING = "ping";
  502. public static final String ACTIONALL = "all";
  503. public static final String OPERATORUNICOM = "UNICOM";
  504. public static final String OPERATORCHINANET = "CHINANET";
  505. public static final String OPERATORCAP = "CAP";
  506. public static final String OPERATORDEFAULT = "DEFAULT";
  507. }
  508. /**
  509. * appId 类型
  510. */
  511. @UtilityClass
  512. public static class AppIdType {
  513. /**
  514. * 公众号appId类型
  515. */
  516. public static final String MP_TYPE = "mp";
  517. /**
  518. * 小程序appId类型
  519. */
  520. public static final String MINI_TYPE = "mini";
  521. }
  522. }