ChannelEnum.php 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278
  1. <?php
  2. namespace app\common\Enum;
  3. /**
  4. * 渠道枚举类
  5. */
  6. class ChannelEnum
  7. {
  8. // ============ 渠道类型 ============
  9. const CHANNEL_WECHAT_OFFICIAL_ACCOUNT = 'wechat_official_account'; // 微信公众号
  10. const CHANNEL_WECHAT_MINI_PROGRAM = 'wechat_mini_program'; // 微信小程序
  11. const CHANNEL_IOS_APP = 'ios_app'; // iOS APP
  12. const CHANNEL_ANDROID_APP = 'android_app'; // Android APP
  13. const CHANNEL_H5 = 'h5'; // H5
  14. const CHANNEL_DOUYIN_MINI_PROGRAM = 'douyin_mini_program'; // 抖音小程序
  15. const CHANNEL_PC = 'pc'; // PC
  16. const CHANNEL_QQ_MINI_PROGRAM = 'qq_mini_program'; // QQ小程序
  17. const CHANNEL_ALIPAY_MINI_PROGRAM = 'alipay_mini_program'; // 支付宝小程序
  18. // ============ 渠道分组 ============
  19. const GROUP_WECHAT = 'wechat'; // 微信生态
  20. const GROUP_MOBILE_APP = 'mobile_app'; // 移动应用
  21. const GROUP_WEB = 'web'; // 网页端
  22. const GROUP_MINI_PROGRAM = 'mini_program'; // 小程序
  23. /**
  24. * 获取渠道映射
  25. */
  26. public static function getChannelMap()
  27. {
  28. return [
  29. self::CHANNEL_WECHAT_OFFICIAL_ACCOUNT => '微信公众号',
  30. self::CHANNEL_WECHAT_MINI_PROGRAM => '微信小程序',
  31. self::CHANNEL_IOS_APP => 'iOS APP',
  32. self::CHANNEL_ANDROID_APP => 'Android APP',
  33. self::CHANNEL_H5 => 'H5',
  34. self::CHANNEL_DOUYIN_MINI_PROGRAM => '抖音小程序',
  35. self::CHANNEL_PC => 'PC',
  36. self::CHANNEL_QQ_MINI_PROGRAM => 'QQ小程序',
  37. self::CHANNEL_ALIPAY_MINI_PROGRAM => '支付宝小程序',
  38. ];
  39. }
  40. /**
  41. * 获取渠道分组映射
  42. */
  43. public static function getChannelGroupMap()
  44. {
  45. return [
  46. self::GROUP_WECHAT => '微信生态',
  47. self::GROUP_MOBILE_APP => '移动应用',
  48. self::GROUP_WEB => '网页端',
  49. self::GROUP_MINI_PROGRAM => '小程序',
  50. ];
  51. }
  52. /**
  53. * 获取按分组组织的渠道
  54. */
  55. public static function getChannelsByGroup()
  56. {
  57. return [
  58. self::GROUP_WECHAT => [
  59. self::CHANNEL_WECHAT_OFFICIAL_ACCOUNT => '微信公众号',
  60. self::CHANNEL_WECHAT_MINI_PROGRAM => '微信小程序',
  61. ],
  62. self::GROUP_MOBILE_APP => [
  63. self::CHANNEL_IOS_APP => 'iOS APP',
  64. self::CHANNEL_ANDROID_APP => 'Android APP',
  65. ],
  66. self::GROUP_WEB => [
  67. self::CHANNEL_H5 => 'H5',
  68. self::CHANNEL_PC => 'PC',
  69. ],
  70. self::GROUP_MINI_PROGRAM => [
  71. self::CHANNEL_WECHAT_MINI_PROGRAM => '微信小程序',
  72. self::CHANNEL_DOUYIN_MINI_PROGRAM => '抖音小程序',
  73. self::CHANNEL_QQ_MINI_PROGRAM => 'QQ小程序',
  74. self::CHANNEL_ALIPAY_MINI_PROGRAM => '支付宝小程序',
  75. ],
  76. ];
  77. }
  78. /**
  79. * 获取渠道标识映射(用于API接口)
  80. */
  81. public static function getChannelCodeMap()
  82. {
  83. return [
  84. self::CHANNEL_WECHAT_OFFICIAL_ACCOUNT => 'wechat_official_account',
  85. self::CHANNEL_WECHAT_MINI_PROGRAM => 'wechat_mini_program',
  86. self::CHANNEL_IOS_APP => 'ios_app',
  87. self::CHANNEL_ANDROID_APP => 'android_app',
  88. self::CHANNEL_H5 => 'h5',
  89. self::CHANNEL_DOUYIN_MINI_PROGRAM => 'douyin_mini_program',
  90. self::CHANNEL_PC => 'pc',
  91. self::CHANNEL_QQ_MINI_PROGRAM => 'qq_mini_program',
  92. self::CHANNEL_ALIPAY_MINI_PROGRAM => 'alipay_mini_program',
  93. ];
  94. }
  95. /**
  96. * 获取渠道文本
  97. */
  98. public static function getChannelText($channel)
  99. {
  100. $map = self::getChannelMap();
  101. return $map[$channel] ?? '未知渠道';
  102. }
  103. /**
  104. * 获取渠道标识
  105. */
  106. public static function getChannelCode($channel)
  107. {
  108. $map = self::getChannelCodeMap();
  109. return $map[$channel] ?? 'unknown';
  110. }
  111. /**
  112. * 根据渠道标识获取渠道ID
  113. */
  114. public static function getChannelByCode($code)
  115. {
  116. $map = array_flip(self::getChannelCodeMap());
  117. return $map[$code] ?? null;
  118. }
  119. /**
  120. * 验证渠道是否有效
  121. */
  122. public static function isValidChannel($channel)
  123. {
  124. return array_key_exists($channel, self::getChannelMap());
  125. }
  126. /**
  127. * 判断是否为微信生态渠道
  128. */
  129. public static function isWechatChannel($channel)
  130. {
  131. return in_array($channel, [
  132. self::CHANNEL_WECHAT_OFFICIAL_ACCOUNT,
  133. self::CHANNEL_WECHAT_MINI_PROGRAM,
  134. ]);
  135. }
  136. /**
  137. * 判断是否为小程序渠道
  138. */
  139. public static function isMiniProgramChannel($channel)
  140. {
  141. return in_array($channel, [
  142. self::CHANNEL_WECHAT_MINI_PROGRAM,
  143. self::CHANNEL_DOUYIN_MINI_PROGRAM,
  144. self::CHANNEL_QQ_MINI_PROGRAM,
  145. self::CHANNEL_ALIPAY_MINI_PROGRAM,
  146. ]);
  147. }
  148. /**
  149. * 判断是否为移动端渠道
  150. */
  151. public static function isMobileChannel($channel)
  152. {
  153. return in_array($channel, [
  154. self::CHANNEL_APP,
  155. self::CHANNEL_IOS,
  156. self::CHANNEL_ANDROID,
  157. self::CHANNEL_H5,
  158. self::CHANNEL_WECHAT_MINI_PROGRAM,
  159. self::CHANNEL_DOUYIN_MINI_PROGRAM,
  160. self::CHANNEL_QQ_MINI_PROGRAM,
  161. self::CHANNEL_ALIPAY_MINI_PROGRAM,
  162. ]);
  163. }
  164. /**
  165. * 判断是否为桌面端渠道
  166. */
  167. public static function isDesktopChannel($channel)
  168. {
  169. return in_array($channel, [
  170. self::CHANNEL_PC,
  171. ]);
  172. }
  173. /**
  174. * 获取渠道支持的功能
  175. */
  176. public static function getChannelFeatures($channel)
  177. {
  178. $features = [
  179. self::CHANNEL_WECHAT_OFFICIAL_ACCOUNT => [
  180. 'payment' => true,
  181. 'share' => true,
  182. 'location' => true,
  183. 'camera' => false,
  184. 'push' => true,
  185. ],
  186. self::CHANNEL_WECHAT_MINI_PROGRAM => [
  187. 'payment' => true,
  188. 'share' => true,
  189. 'location' => true,
  190. 'camera' => true,
  191. 'push' => true,
  192. ],
  193. self::CHANNEL_APP => [
  194. 'payment' => true,
  195. 'share' => true,
  196. 'location' => true,
  197. 'camera' => true,
  198. 'push' => true,
  199. ],
  200. self::CHANNEL_IOS => [
  201. 'payment' => true,
  202. 'share' => true,
  203. 'location' => true,
  204. 'camera' => true,
  205. 'push' => true,
  206. ],
  207. self::CHANNEL_ANDROID => [
  208. 'payment' => true,
  209. 'share' => true,
  210. 'location' => true,
  211. 'camera' => true,
  212. 'push' => true,
  213. ],
  214. self::CHANNEL_H5 => [
  215. 'payment' => true,
  216. 'share' => true,
  217. 'location' => true,
  218. 'camera' => true,
  219. 'push' => false,
  220. ],
  221. self::CHANNEL_DOUYIN_MINI_PROGRAM => [
  222. 'payment' => true,
  223. 'share' => true,
  224. 'location' => true,
  225. 'camera' => true,
  226. 'push' => true,
  227. ],
  228. self::CHANNEL_PC => [
  229. 'payment' => true,
  230. 'share' => false,
  231. 'location' => false,
  232. 'camera' => false,
  233. 'push' => false,
  234. ],
  235. self::CHANNEL_QQ_MINI_PROGRAM => [
  236. 'payment' => true,
  237. 'share' => true,
  238. 'location' => true,
  239. 'camera' => true,
  240. 'push' => true,
  241. ],
  242. self::CHANNEL_ALIPAY_MINI_PROGRAM => [
  243. 'payment' => true,
  244. 'share' => true,
  245. 'location' => true,
  246. 'camera' => true,
  247. 'push' => true,
  248. ],
  249. ];
  250. return $features[$channel] ?? [];
  251. }
  252. /**
  253. * 检查渠道是否支持某个功能
  254. */
  255. public static function channelSupportsFeature($channel, $feature)
  256. {
  257. $features = self::getChannelFeatures($channel);
  258. return $features[$feature] ?? false;
  259. }
  260. }