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;
 | 
						||
    }
 | 
						||
} |