MessageHistoryService.php 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. <?php
  2. namespace addons\Wechat\services;
  3. use Yii;
  4. use yii\helpers\Json;
  5. use common\enums\StatusEnum;
  6. use common\helpers\Html;
  7. use addons\Wechat\common\models\MessageHistory;
  8. use addons\Wechat\merchant\forms\HistoryForm;
  9. use addons\Wechat\common\enums\WechatEnum;
  10. /**
  11. * Class MessageHistoryService
  12. * @package addons\Wechat\services
  13. */
  14. class MessageHistoryService
  15. {
  16. protected $model;
  17. /**
  18. * 写入历史记录
  19. *
  20. * @param array $data 历史消息记录
  21. * @param array $message 微信消息
  22. */
  23. public function save($data, $message)
  24. {
  25. $setting = new HistoryForm();
  26. $setting->attributes = Yii::$app->services->addonsConfig->getConfig();
  27. // 记录历史
  28. if ($setting->history_status == StatusEnum::ENABLED) {
  29. $msgHistory = new MessageHistory();
  30. $data['message'] = $data['type'] == WechatEnum::TYPE_TEXT ? $message['Content'] : Json::encode($message);
  31. $msgHistory->attributes = $data;
  32. $msgHistory->save();
  33. }
  34. // 统计记录
  35. if ($setting->history_utilization_status == StatusEnum::ENABLED) {
  36. // 插入规则统计
  37. !empty($data['rule_id']) && Yii::$app->wechatService->ruleStat->set($data['rule_id']);
  38. // 插入关键字统计
  39. if (!empty($data['keyword_id']) && !empty($data['rule_id'])) {
  40. Yii::$app->wechatService->ruleKeywordStat->set($data['rule_id'], $data['keyword_id']);
  41. }
  42. }
  43. return;
  44. }
  45. /**
  46. * 解析微信发过来的消息内容
  47. *
  48. * @param $type
  49. * @param $messgae
  50. * @return mixed|string
  51. */
  52. public function readMessage($type, $messgae)
  53. {
  54. switch ($type) {
  55. case WechatEnum::TYPE_TEXT :
  56. return Html::encode($messgae);
  57. break;
  58. case WechatEnum::TYPE_IMAGE :
  59. $messgae = Json::decode($messgae);
  60. return $messgae['PicUrl'];
  61. break;
  62. case WechatEnum::TYPE_VIDEO :
  63. $messgae = Json::decode($messgae);
  64. return "MediaId【" . $messgae['MediaId'] . "】";
  65. break;
  66. case WechatEnum::TYPE_LOCATION :
  67. $messgae = Json::decode($messgae);
  68. return '主动发送位置 : 经纬度【' . $messgae['Location_X'] . ',' . $messgae['Location_Y'] . "】<br>地址 : " . $messgae['Label'];
  69. break;
  70. case WechatEnum::EVENT_CILCK :
  71. $messgae = Json::decode($messgae);
  72. return '单击菜单触发 : ' . $messgae['EventKey'];
  73. break;
  74. case WechatEnum::EVENT_SUBSCRIBE :
  75. return '关注公众号';
  76. break;
  77. case WechatEnum::TYPE_VOICE :
  78. $messgae = Json::decode($messgae);
  79. return isset($messgae['Recognition']) ? $messgae['Recognition'] : '语音消息';
  80. break;
  81. // 触发事件
  82. case WechatEnum::TYPE_EVENT :
  83. $messgae = Json::decode($messgae);
  84. switch ($messgae['Event']) {
  85. case WechatEnum::EVENT_UN_SUBSCRIBE :
  86. return '取消关注公众号';
  87. break;
  88. case WechatEnum::EVENT_SUBSCRIBE :
  89. return '关注公众号 : ' . str_replace('qrscene_', '', $messgae['EventKey'] ?? '');
  90. break;
  91. case WechatEnum::EVENT_LOCATION :
  92. return '被动发送位置: 经纬度【' . $messgae['Latitude'] . ',' . $messgae['Longitude'] . "】精度:" . $messgae['Precision'];
  93. break;
  94. case WechatEnum::EVENT_VIEW :
  95. return "单击菜单访问 : " . $messgae['EventKey'];
  96. break;
  97. case WechatEnum::EVENT_CILCK :
  98. return "单击菜单触发关键字 : " . $messgae['EventKey'];
  99. break;
  100. case WechatEnum::EVENT_SCAN :
  101. return "二维码扫描 : " . $messgae['EventKey'];
  102. break;
  103. case 'location_select' :
  104. $sendLocationInfo = $messgae['SendLocationInfo'];
  105. return "主动发送位置: " . '经纬度【' . $sendLocationInfo['Location_X'] . ',' . $sendLocationInfo['Location_Y'] . "】地址:" . $sendLocationInfo['Label'];
  106. break;
  107. case 'scancode_waitmsg' :
  108. $scanCodeInfo = $messgae['ScanCodeInfo'];
  109. return "调用二维码扫描等待返回地址: " . $scanCodeInfo['ScanResult'];
  110. break;
  111. case 'pic_sysphoto' :
  112. return "调用拍照发图";
  113. break;
  114. case 'pic_photo_or_album' :
  115. return "调用拍照相册";
  116. break;
  117. case 'scancode_push' :
  118. $scanCodeInfo = $messgae['ScanCodeInfo'];
  119. return "调用二维码直接扫描返回地址: " . $scanCodeInfo['ScanResult'];
  120. break;
  121. case 'MASSSENDJOBFINISH' :
  122. return "点击图文MsgID为: " . $messgae['MsgID'];
  123. break;
  124. case 'view_miniprogram' :
  125. return "浏览小程序";
  126. break;
  127. case 'annual_renew' :
  128. return "微信认证事件推送";
  129. break;
  130. case 'wx_verify_dispatch' :
  131. return "微信认证公司: " . $messgae['Provider'] . '<br>' . $messgae['Contact'];
  132. break;
  133. case 'wx_verify_pay_succ' :
  134. return "微信认证支付订单: " . $messgae['OrderId'];
  135. break;
  136. default :
  137. return Json::encode($messgae);
  138. break;
  139. }
  140. break;
  141. default :
  142. return $messgae;
  143. break;
  144. }
  145. }
  146. }
粤ICP备19079148号