Files
huangjingfen/pro_v3.5.1/app/services/wechat/WechatMessageServices.php
panchengyong c1e74d8e68 chore(php): 统一 ScottPan 文件头与注释域名替换
- 按 docs/renew-code-comment.md 将 PHP 文件头改为带边框的 Author 注释\n- 注释中的 crmeb.com 替换为 uj345.cn(代码字符串中的外链未改)\n- 新增 docs/renew-code-comment.md 说明

Made-with: Cursor
2026-03-29 11:22:58 +08:00

96 lines
2.8 KiB
PHP

<?php
// +----------------------------------------------------------------------
// | Author: ScottPan Team
// +----------------------------------------------------------------------
namespace app\services\wechat;
use app\dao\wechat\WechatMessageDao;
use app\services\BaseServices;
use think\annotation\Inject;
use think\exception\ValidateException;
use crmeb\services\CacheService;
use think\facade\Log;
/**
*
* Class WechatMenuServices
* @package app\services\wechat
* @mixin WechatMessageDao
*/
class WechatMessageServices extends BaseServices
{
/**
* @var WechatMessageDao
*/
#[Inject]
protected WechatMessageDao $dao;
/**
* @param $result
* @param $openid
* @param $type
* @return \think\Model
*/
public function setMessage($result, $openid, $type)
{
if (is_object($result) || is_array($result)) $result = json_encode($result);
$add_time = time();
$data = compact('result', 'openid', 'type', 'add_time');
return $this->dao->save($data);
}
/**
* @param $result
* @param $openid
* @param $type
* @param $unique
* @param int $cacheTime
* @return bool|\think\Model
* @throws \Psr\SimpleCache\InvalidArgumentException
*/
public function setOnceMessage($result, $openid, $type, $unique, $cacheTime = 172800)
{
$cacheName = 'wechat_message_' . $type . '_' . $unique;
if (CacheService::has($cacheName)) return true;
$res = $this->setMessage($result, $openid, $type);
if ($res) CacheService::set($cacheName, 1, $cacheTime);
return $res;
}
/**
* 微信消息前置操作
* @param $message
* @param $spread_uid
*/
public function wechatMessageBefore($message, $spread_uid = 0)
{
//是否开启
if (sys_config('create_wechat_user', 1)) {
try {
/** @var WechatUserServices $wechatUser */
$wechatUser = app()->make(WechatUserServices::class);
$wechatUser->saveUser($message['FromUserName'], $spread_uid);
} catch (\Throwable $e) {
Log::error('关注公众号生成用户失败,原因:' . $e->getMessage() . $e->getFile() . $e->getLine());
}
}
$msgType = $message['MsgType'] ?? '';
$event = isset($message['Event']) ?
$msgType . (
$message['Event'] == 'subscribe' && isset($message['EventKey']) ? '_scan' : ''
) . '_' . $message['Event'] : $msgType;
$result = json_encode($message);
$openid = $message['FromUserName'];
$type = strtolower($event);
$add_time = time();
if (!$this->dao->save(compact('result', 'openid', 'type', 'add_time'))) {
throw new ValidateException('更新信息失败');
}
return true;
}
}