【程序目录】同步小程序订阅消息和公众号模版消息优化

This commit is contained in:
吴昊天 2022-11-24 11:55:09 +08:00
parent 69cc03daa6
commit b172a13ec7
4 changed files with 166 additions and 68 deletions

View File

@ -10,6 +10,7 @@
// +----------------------------------------------------------------------
namespace app\adminapi\controller\v1\application\routine;
use app\jobs\notice\SyncMessageJob;
use app\services\other\QrcodeServices;
use app\services\message\TemplateMessageServices;
use app\services\system\attachment\SystemAttachmentServices;
@ -54,61 +55,16 @@ class RoutineTemplate extends AuthController
throw new AdminException(400236);
}
$all = $this->services->getTemplateList(['status' => 1, 'type' => 0]);
$errData = [];
$errCode = [-1, 40001, 40002, 40013, 40125, 41002, 41004, 43104, 45009, 200011, 200012, 200014];
$list = MiniProgramService::getSubscribeTemplateList();
foreach ($list->data as $v) {
MiniProgramService::delSubscribeTemplate($v['priTmplId']);
}
if ($all['list']) {
$time = time();
foreach ($all['list'] as $template) {
if ($template['tempkey']) {
if (!isset($template['kid'])) {
return app('json')->fail('数据库模版表(template_message)缺少字段:kid');
}
if (isset($template['kid']) && $template['kid']) {
continue;
}
$works = [];
try {
$works = MiniProgramService::getSubscribeTemplateKeyWords($template['tempkey']);
} catch (\Throwable $e) {
$wechatErr = $e->getMessage();
if (is_string($wechatErr)) throw new AdminException($wechatErr);
if (in_array($wechatErr->getCode(), $errCode)) {
throw new AdminException($wechatErr->getCode());
}
$errData[1] = '获取关键词列表失败:' . $wechatErr->getMessage();
}
$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 && isset($template['kid']) && !$template['kid']) {
$tempid = '';
try {
$tempid = MiniProgramService::addSubscribeTemplate($template['tempkey'], $kid, $template['name']);
} catch (\Throwable $e) {
$wechatErr = $e->getMessage();
if (is_string($wechatErr)) throw new AdminException($wechatErr);
if (in_array($wechatErr->getCode(), $errCode)) {
throw new AdminException($wechatErr->getCode());
}
$errData[2] = '添加订阅消息模版失败:' . $wechatErr->getMessage();
}
if ($tempid != $template['tempid']) {
$this->services->update($template['id'], ['tempid' => $tempid, 'kid' => json_encode($kid), 'add_time' => $time], 'id');
}
}
}
SyncMessageJob::dispatchDo('SyncSubscribe', [$template]);
}
}
$msg = $errData ? implode('\n', $errData) : '同步成功';
return app('json')->success($msg);
return app('json')->success(100038);
}
/**

View File

@ -11,6 +11,7 @@
namespace app\adminapi\controller\v1\application\wechat;
use app\adminapi\controller\AuthController;
use app\jobs\notice\SyncMessageJob;
use crmeb\exceptions\AdminException;
use app\services\message\TemplateMessageServices;
use crmeb\services\app\WechatService;
@ -47,23 +48,14 @@ class WechatTemplate extends AuthController
if (!sys_config('wechat_appid') || !sys_config('wechat_appsecret')) {
throw new AdminException(400248);
}
$tempall = $this->services->getTemplateList(['status' => 1, 'type' => 1]);
//获取微信平台已经添加的模版
$list = WechatService::getPrivateTemplates();//获取所有模版
foreach ($list->template_list as $v)
{
//删除已有模版
$all = $this->services->getTemplateList(['status' => 1, 'type' => 1]);
$list = WechatService::getPrivateTemplates();
foreach ($list->template_list as $v) {
WechatService::deleleTemplate($v['template_id']);
}
foreach ($tempall['list'] as $temp)
{
//添加模版消息
$res = WechatService::addTemplateId($temp['tempkey']);
if(!$res->errcode && $res->template_id){
$this->services->update($temp['id'],['tempid'=>$res->template_id]);
}
foreach ($all['list'] as $template) {
SyncMessageJob::dispatchDo('SyncWechat', [$template]);
}
return app('json')->success(400249);
return app('json')->success(100038);
}
}

View File

@ -0,0 +1,112 @@
<?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
*/
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]);
}
}
}

View File

@ -16,6 +16,7 @@ use crmeb\services\SystemConfigService;
use app\services\pay\PayNotifyServices;
use crmeb\services\easywechat\Application;
use EasyWeChat\Payment\Order;
use think\facade\Log;
use think\facade\Route as Url;
use crmeb\utils\Hook;
use think\facade\Cache;
@ -252,13 +253,37 @@ class MiniProgramService
if (isset($res['errcode']) && $res['errcode'] == 0 && isset($res['priTmplId'])) {
return $res['priTmplId'];
} else {
throw new AdminException($res['errmsg']);
Log::error('添加订阅消息模版失败:' . $res['errmsg']);
}
} catch (\Throwable $e) {
throw new AdminException($e);
Log::error('添加订阅消息模版失败:' . $e->getMessage());
}
return true;
}
/**
* 删除订阅消息模版
* @param string $tid
* @param array $kidList
* @param string $sceneDesc
* @return mixed
*/
public static function delSubscribeTemplate(string $priTmplId)
{
try {
$res = self::SubscribenoticeService()->delTemplate($priTmplId);
if (isset($res['errcode']) && $res['errcode'] == 0) {
return true;
} else {
Log::error('删除订阅消息模版失败:' . $res['errmsg']);
}
} catch (\Throwable $e) {
Log::error('删除订阅消息模版失败:' . $e->getMessage());
}
return true;
}
/**
* 获取模版标题的关键词列表
* @param string $tid
@ -278,6 +303,19 @@ class MiniProgramService
}
}
/**
* 获取订阅消息列表
* @return mixed
*/
public static function getSubscribeTemplateList()
{
try {
return self::SubscribenoticeService()->getTemplateList();
} catch (\Exception $e) {
throw new AdminException($e->getMessage());
}
}
/**
* 支付
* @return \EasyWeChat\Payment\Payment