WechatMessageServices.php 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  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 app\services\wechat;
  12. use app\dao\wechat\WechatMessageDao;
  13. use app\services\BaseServices;
  14. use think\exception\ValidateException;
  15. use crmeb\services\CacheService;
  16. use think\facade\Log;
  17. /**
  18. *
  19. * Class WechatMenuServices
  20. * @package app\services\wechat
  21. * @mixin WechatMessageDao
  22. */
  23. class WechatMessageServices extends BaseServices
  24. {
  25. /**
  26. * 构造方法
  27. * WechatMessageServices constructor.
  28. * @param WechatMessageDao $dao
  29. */
  30. public function __construct(WechatMessageDao $dao)
  31. {
  32. $this->dao = $dao;
  33. }
  34. /**
  35. * @param $result
  36. * @param $openid
  37. * @param $type
  38. * @return \think\Model
  39. */
  40. public function setMessage($result, $openid, $type)
  41. {
  42. if (is_object($result) || is_array($result)) $result = json_encode($result);
  43. $add_time = time();
  44. $data = compact('result', 'openid', 'type', 'add_time');
  45. return $this->dao->save($data);
  46. }
  47. /**
  48. * @param $result
  49. * @param $openid
  50. * @param $type
  51. * @param $unique
  52. * @param int $cacheTime
  53. * @return bool|\think\Model
  54. * @throws \Psr\SimpleCache\InvalidArgumentException
  55. */
  56. public function setOnceMessage($result, $openid, $type, $unique, $cacheTime = 172800)
  57. {
  58. $cacheName = 'wechat_message_' . $type . '_' . $unique;
  59. if (CacheService::has($cacheName)) return true;
  60. $res = $this->setMessage($result, $openid, $type);
  61. if ($res) CacheService::set($cacheName, 1, $cacheTime);
  62. return $res;
  63. }
  64. /**
  65. * 微信消息前置操作
  66. * @param $message
  67. * @param $spread_uid
  68. */
  69. public function wechatMessageBefore($message, $spread_uid = 0)
  70. {
  71. if (!isset($message['FromUserName'])) {
  72. return true;
  73. }
  74. //是否开启
  75. if (sys_config('create_wechat_user', 1)) {
  76. try {
  77. /** @var WechatUserServices $wechatUser */
  78. $wechatUser = app()->make(WechatUserServices::class);
  79. $wechatUser->saveUser($message['FromUserName'], $spread_uid);
  80. } catch (\Throwable $e) {
  81. Log::error('关注公众号生成用户失败,原因:' . $e->getMessage() . $e->getFile() . $e->getLine());
  82. }
  83. }
  84. $msgType = $message['MsgType'] ?? '';
  85. $event = isset($message['Event']) ?
  86. $msgType . (
  87. $message['Event'] == 'subscribe' && isset($message['EventKey']) ? '_scan' : ''
  88. ) . '_' . $message['Event'] : $msgType;
  89. $result = json_encode($message);
  90. $openid = $message['FromUserName'];
  91. $type = strtolower($event);
  92. $add_time = time();
  93. if (!$this->dao->save(compact('result', 'openid', 'type', 'add_time'))) {
  94. throw new ValidateException('更新信息失败');
  95. }
  96. return true;
  97. }
  98. }