This repository has been archived on 2024-07-11. You can view files and clone it, but cannot push or open issues or pull requests.
yoshop/source/application/store/service/wxapp/Message.php

115 lines
3.0 KiB
PHP
Raw Normal View History

2020-04-25 22:20:29 +08:00
<?php
namespace app\store\service\wxapp;
use app\store\model\User as UserModel;
use app\store\model\Wxapp as WxappModel;
use app\common\library\wechat\WxTplMsg;
use app\common\service\wxapp\FormId as FormIdService;
/**
2020-04-25 22:53:20 +08:00
* 推送模板消息服务类 (已废弃)
2020-04-25 22:20:29 +08:00
* Class Message
* @package app\store\service\wxapp
*/
class Message
{
// 分割符号
const SEPARATOR = ',';
/** @var array $stateSet 状态集 */
private $stateSet = [];
/** @var WxTplMsg $WxTplMsg 微信模板消息类 */
private $WxTplMsg;
/**
* 构造方法
* Message constructor.
* @throws \app\common\exception\BaseException
2020-04-25 22:53:20 +08:00
* @throws \think\Exception
2020-04-25 22:20:29 +08:00
* @throws \think\exception\DbException
*/
public function __construct()
{
// 实例化:微信模板消息类
$config = WxappModel::getWxappCache();
$this->WxTplMsg = new WxTplMsg($config['app_id'], $config['app_secret']);
}
/**
2020-04-25 22:34:57 +08:00
* 执行发送
2020-04-25 22:20:29 +08:00
* @param $data
* @return bool
* @throws \app\common\exception\BaseException
* @throws \think\exception\DbException
*/
public function send($data)
{
// 用户id集
$userIdsArr = !strstr($data['user_id'], self::SEPARATOR) ? [$data['user_id']]
: explode(self::SEPARATOR, $data['user_id']);
// 批量发送
foreach ($userIdsArr as $userId) {
$this->sendTemplateMessage($userId, $data);
}
return true;
}
/**
* 发送模板消息
* @param $userId
* @param $data
* @return bool
* @throws \app\common\exception\BaseException
* @throws \think\exception\DbException
*/
private function sendTemplateMessage($userId, $data)
{
// 获取formid
if (!$formId = FormIdService::getAvailableFormId($userId)) {
$this->recordState("用户[ID:$userId] 无可用formid无法发送模板消息");
return false;
}
// 获取用户信息
$user = UserModel::detail($data['user_id']);
// 构建模板消息参数
$params = [
'touser' => $user['open_id'],
'template_id' => $data['template_id'],
'page' => $data['page'],
'form_id' => $formId['form_id'],
'data' => []
];
// 格式化模板内容
foreach (array_filter($data['content']) as $key => $item) {
$params['data']['keyword' . ($key + 1)] = $item;
}
// 请求微信api发送模板消息
if ($status = $this->WxTplMsg->sendTemplateMessage($params)) {
$this->recordState("用户[ID:$userId] 发送成功!");
}
// 标记formid已使用
FormIdService::setIsUsed($formId['id']);
return $status;
}
/**
* 获取状态集
* @return array
*/
public function getStateSet()
{
return $this->stateSet;
}
/**
* 记录状态集
* @param $content
*/
private function recordState($content)
{
$this->stateSet[] = $content;
}
}