76 lines
2.3 KiB
PHP
76 lines
2.3 KiB
PHP
|
<?php
|
|||
|
|
|||
|
namespace addons\notice\library\server;
|
|||
|
|
|||
|
use addons\notice\library\Service;
|
|||
|
use addons\notice\library\ToData;
|
|||
|
use EasyWeChat\Factory;
|
|||
|
|
|||
|
/**
|
|||
|
* 小程序订阅消息
|
|||
|
* Class Miniapp
|
|||
|
*
|
|||
|
* @package addons\notice\library\server
|
|||
|
*/
|
|||
|
class Miniapp
|
|||
|
{
|
|||
|
|
|||
|
// 获取通知数据
|
|||
|
public function getNoticeData($event, $template, $params)
|
|||
|
{
|
|||
|
$toData = ToData::get($event, $template, $params);
|
|||
|
|
|||
|
$params = array_merge($params, $toData['default_field']);
|
|||
|
$content = self::formatParams($template['content'], $params);
|
|||
|
|
|||
|
$templateData = $template['mptemplate_json'];
|
|||
|
$templateData = json_decode($templateData, true) ?? [];
|
|||
|
foreach ($templateData as $k=>$v) {
|
|||
|
$v = self::formatParams($v, $params);
|
|||
|
$templateData[$k] = $v;
|
|||
|
}
|
|||
|
|
|||
|
$app = Service::getMini();
|
|||
|
|
|||
|
// url
|
|||
|
$url = Msg::formatParams($template['url'], $params);
|
|||
|
$urlTitle = Msg::formatParams($template['url_title'], $params);
|
|||
|
$urlExt = [
|
|||
|
'url' => $url,
|
|||
|
'url_type' => $template['url_type'],
|
|||
|
'url_title' => $urlTitle
|
|||
|
];
|
|||
|
$ext = json_encode($urlExt, true);
|
|||
|
|
|||
|
foreach ($toData['mptemplate_openid'] as $v) {
|
|||
|
$_data = [
|
|||
|
'template_id' => $template['mptemplate_id'], // 所需下发的订阅模板id
|
|||
|
'touser' => $v, // 接收者(用户)的 openid
|
|||
|
'page' => $url, // 点击模板卡片后的跳转页面,仅限本小程序内的页面。支持带参数,(示例index?foo=bar)。该字段不填则模板无跳转。
|
|||
|
'data' => $templateData
|
|||
|
];
|
|||
|
$app->subscribe_message->send($_data);
|
|||
|
}
|
|||
|
|
|||
|
return [
|
|||
|
'to_id' => $toData['to_id'],
|
|||
|
'content' => $content,
|
|||
|
'ext' => $ext
|
|||
|
];
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
// 格式化模板数据
|
|||
|
public static function formatParams($content, $params) {
|
|||
|
if (preg_match_all("/(?<=({{)).+?(?=}})/", $content, $matches)) {
|
|||
|
foreach ($matches[0] as $k => $field) {
|
|||
|
$fieldVal = $params[$field] ?? null;
|
|||
|
if ($fieldVal !== null) {
|
|||
|
$content = str_replace("{{" . $field . "}}", $fieldVal, $content);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
return $content;
|
|||
|
}
|
|||
|
}
|