MessageBehavior.php 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2016~2020 https://www.crmeb.com All rights reserved.
  6. // +----------------------------------------------------------------------
  7. // | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
  8. // +----------------------------------------------------------------------
  9. // | Author: CRMEB Team <admin@crmeb.com>
  10. // +----------------------------------------------------------------------
  11. namespace behavior\wechat;
  12. use app\admin\model\wechat\WechatMessage;
  13. use app\admin\model\wechat\WechatReply;
  14. use app\wap\model\user\User;
  15. use app\wap\model\user\WechatUser;
  16. use service\HookService;
  17. use service\QrcodeService;
  18. /**
  19. * 用户消息行为
  20. * Class MessageBehavior
  21. * @package behavior\wechat
  22. */
  23. class MessageBehavior
  24. {
  25. /**
  26. * 微信消息前置操作
  27. * @param $message
  28. */
  29. public static function wechatMessageBefore($message)
  30. {
  31. WechatUser::saveUser($message->FromUserName);
  32. $event = isset($message->Event) ?
  33. $message->MsgType.(
  34. $message->Event == 'subscribe' && isset($message->EventKey) ? '_scan' : ''
  35. ).'_'.$message->Event : $message->MsgType;
  36. WechatMessage::setMessage(json_encode($message),$message->FromUserName,strtolower($event));
  37. }
  38. /*
  39. * 微信自定义菜单点击
  40. * */
  41. public static function wechatEventView($message)
  42. {
  43. //User::ResetSpread($message->FromUserName);//重置用户上级
  44. }
  45. /**
  46. * 用户文字消息
  47. * @param $message
  48. * @return array|\EasyWeChat\Message\Image|\EasyWeChat\Message\News|\EasyWeChat\Message\Text|\EasyWeChat\Message\Voice
  49. */
  50. public static function wechatMessageText($message)
  51. {
  52. return WechatReply::reply($message->Content);
  53. }
  54. /**
  55. * 用户文字消息前置操作
  56. * @param $message
  57. */
  58. public static function wechatMessageTextBefore($message)
  59. {
  60. }
  61. /**
  62. * 用户关注行为
  63. * @return array|\EasyWeChat\Message\Image|\EasyWeChat\Message\News|\EasyWeChat\Message\Text|\EasyWeChat\Message\Voice
  64. */
  65. public static function wechatEventSubscribe($message)
  66. {
  67. return WechatReply::reply('subscribe');
  68. }
  69. /**
  70. * 用户关注前置操作
  71. * @param $message
  72. */
  73. public static function wechatEventSubscribeBefore($message)
  74. {
  75. // WechatUser::saveUser($message->FromUserName);
  76. }
  77. /**
  78. * 微信菜单点击事件
  79. * @param $message
  80. * @return array|\EasyWeChat\Message\Image|\EasyWeChat\Message\News|\EasyWeChat\Message\Text|\EasyWeChat\Message\Voice
  81. */
  82. public static function wechatEventClick($message)
  83. {
  84. return WechatReply::reply($message->EventKey);
  85. }
  86. /**
  87. * 微信菜单click点击前置操作
  88. * @param $message
  89. */
  90. public static function wechatEventClickBefore($message)
  91. {
  92. }
  93. /**
  94. * 用户扫码关注
  95. * TODO 处理二维码携带参数
  96. * @param $message
  97. */
  98. public static function wechatEventScanSubscribe($message, $eventKey = '')
  99. {
  100. if ($eventKey && ($qrInfo = QrcodeService::getQrcode($message->Ticket, 'ticket'))) {
  101. QrcodeService::scanQrcode($message->Ticket, 'ticket');
  102. return HookService::resultListen('wechat_qrcode_' . strtolower($qrInfo['third_type']), $qrInfo, $message, true, QrcodeEventBehavior::class);
  103. }
  104. return WechatReply::reply('');
  105. }
  106. /**
  107. * 用户扫码
  108. * TODO 处理二维码携带参数
  109. * @param $message
  110. */
  111. public static function wechatEventScan($message)
  112. {
  113. if ($message->EventKey && ($qrInfo = QrcodeService::getQrcode($message->Ticket, 'ticket'))) {
  114. QrcodeService::scanQrcode($message->Ticket, 'ticket');
  115. return HookService::resultListen('wechat_qrcode_' . strtolower($qrInfo['third_type']), $qrInfo, $message, true, QrcodeEventBehavior::class);
  116. }
  117. return WechatReply::reply('');
  118. }
  119. public static function wechatEventUnsubscribeBefore($message)
  120. {
  121. WechatUser::unSubscribe($message->FromUserName);
  122. }
  123. }