114 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			114 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| 
								 | 
							
								<?php
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace app\jobs\notice;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								use app\services\message\TemplateMessageServices;
							 | 
						||
| 
								 | 
							
								use crmeb\basic\BaseJobs;
							 | 
						||
| 
								 | 
							
								use crmeb\exceptions\AdminException;
							 | 
						||
| 
								 | 
							
								use crmeb\services\app\MiniProgramService;
							 | 
						||
| 
								 | 
							
								use crmeb\services\app\WechatService;
							 | 
						||
| 
								 | 
							
								use crmeb\traits\QueueTrait;
							 | 
						||
| 
								 | 
							
								use think\facade\Log;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class SyncMessageJob extends BaseJobs
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    use QueueTrait;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * 同步小程序订阅消息
							 | 
						||
| 
								 | 
							
								     * @param $template
							 | 
						||
| 
								 | 
							
								     * @return bool
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public function syncSubscribe($template)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $errCode = [-1, 40001, 40002, 40013, 40125, 41002, 41004, 43104, 45009, 200011, 200012, 200014];
							 | 
						||
| 
								 | 
							
								        /** @var TemplateMessageServices $templateMessageServices */
							 | 
						||
| 
								 | 
							
								        $templateMessageServices = app()->make(TemplateMessageServices::class);
							 | 
						||
| 
								 | 
							
								        if ($template['tempkey']) {
							 | 
						||
| 
								 | 
							
								            if ($template['tempid']) {
							 | 
						||
| 
								 | 
							
								                try {
							 | 
						||
| 
								 | 
							
								                    MiniProgramService::delSubscribeTemplate($template['tempid']);
							 | 
						||
| 
								 | 
							
								                } catch (\Throwable $e) {
							 | 
						||
| 
								 | 
							
								                    $wechatErr = $e->getMessage();
							 | 
						||
| 
								 | 
							
								                    if (is_string($wechatErr)) {
							 | 
						||
| 
								 | 
							
								                        Log::error('删除旧订阅消息模版失败:' . $wechatErr);
							 | 
						||
| 
								 | 
							
								                        return true;
							 | 
						||
| 
								 | 
							
								                    }
							 | 
						||
| 
								 | 
							
								                    if (in_array($wechatErr->getCode(), $errCode)) {
							 | 
						||
| 
								 | 
							
								                        Log::error('删除旧订阅消息模版失败:' . $wechatErr->getCode());
							 | 
						||
| 
								 | 
							
								                        return true;
							 | 
						||
| 
								 | 
							
								                    }
							 | 
						||
| 
								 | 
							
								                    Log::error('删除旧订阅消息模版失败:' . $wechatErr->getMessage());
							 | 
						||
| 
								 | 
							
								                    return true;
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            try {
							 | 
						||
| 
								 | 
							
								                $works = MiniProgramService::getSubscribeTemplateKeyWords($template['tempkey']);
							 | 
						||
| 
								 | 
							
								            } catch (\Throwable $e) {
							 | 
						||
| 
								 | 
							
								                $wechatErr = $e->getMessage();
							 | 
						||
| 
								 | 
							
								                if (is_string($wechatErr)) {
							 | 
						||
| 
								 | 
							
								                    Log::error('获取关键词列表失败:' . $wechatErr);
							 | 
						||
| 
								 | 
							
								                    return true;
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								                if (in_array($wechatErr->getCode(), $errCode)) {
							 | 
						||
| 
								 | 
							
								                    Log::error('获取关键词列表失败:' . $wechatErr->getCode());
							 | 
						||
| 
								 | 
							
								                    return true;
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								                Log::error('获取关键词列表失败:' . $wechatErr->getMessage());
							 | 
						||
| 
								 | 
							
								                return true;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            $kid = [];
							 | 
						||
| 
								 | 
							
								            if ($works) {
							 | 
						||
| 
								 | 
							
								                $works = array_combine(array_column($works, 'name'), $works);
							 | 
						||
| 
								 | 
							
								                $content = is_array($template['content']) ? $template['content'] : explode("\n", $template['content']);
							 | 
						||
| 
								 | 
							
								                foreach ($content as $c) {
							 | 
						||
| 
								 | 
							
								                    $name = explode('{{', $c)[0] ?? '';
							 | 
						||
| 
								 | 
							
								                    if ($name && isset($works[$name])) {
							 | 
						||
| 
								 | 
							
								                        $kid[] = $works[$name]['kid'];
							 | 
						||
| 
								 | 
							
								                    }
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            if ($kid) {
							 | 
						||
| 
								 | 
							
								                try {
							 | 
						||
| 
								 | 
							
								                    $tempid = MiniProgramService::addSubscribeTemplate($template['tempkey'], $kid, $template['name']);
							 | 
						||
| 
								 | 
							
								                } catch (\Throwable $e) {
							 | 
						||
| 
								 | 
							
								                    $wechatErr = $e->getMessage();
							 | 
						||
| 
								 | 
							
								                    if (is_string($wechatErr)) {
							 | 
						||
| 
								 | 
							
								                        Log::error('添加订阅消息模版失败:' . $wechatErr);
							 | 
						||
| 
								 | 
							
								                        return true;
							 | 
						||
| 
								 | 
							
								                    }
							 | 
						||
| 
								 | 
							
								                    if (in_array($wechatErr->getCode(), $errCode)) {
							 | 
						||
| 
								 | 
							
								                        Log::error('添加订阅消息模版失败:' . $wechatErr->getCode());
							 | 
						||
| 
								 | 
							
								                        return true;
							 | 
						||
| 
								 | 
							
								                    }
							 | 
						||
| 
								 | 
							
								                    Log::error('添加订阅消息模版失败:' . $wechatErr->getMessage());
							 | 
						||
| 
								 | 
							
								                    return true;
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								                $templateMessageServices->update($template['id'], ['tempid' => $tempid, 'kid' => json_encode($kid), 'add_time' => time()], 'id');
							 | 
						||
| 
								 | 
							
								                return true;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        return true;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * 同步公众号模版消息
							 | 
						||
| 
								 | 
							
								     * @param $template
							 | 
						||
| 
								 | 
							
								     * @return bool
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public function syncWechat($template)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        /** @var TemplateMessageServices $templateMessageServices */
							 | 
						||
| 
								 | 
							
								        $templateMessageServices = app()->make(TemplateMessageServices::class);
							 | 
						||
| 
								 | 
							
								        try {
							 | 
						||
| 
								 | 
							
								            $res = WechatService::addTemplateId($template['tempkey']);
							 | 
						||
| 
								 | 
							
								        } catch (\Throwable $e) {
							 | 
						||
| 
								 | 
							
								            Log::error('同步模版消息失败:' . $e->getMessage());
							 | 
						||
| 
								 | 
							
								            return true;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        if(!$res->errcode && $res->template_id){
							 | 
						||
| 
								 | 
							
								            $templateMessageServices->update($template['id'],['tempid'=>$res->template_id]);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        return true;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |