將 \app\controller\admin\v1\application\routine\RoutineTemplate.php 這個文件的syncSubscribe方法
第一個大括號內的所有代碼刪除
替換成
{
if (!sys_config('routine_appId') || !sys_config('routine_appsecret')) {
throw new AdminException('請先配置小程序appid、appSecret等參數');
}
$all = $this->services->getTemplateList(['status' => 1, 'type' => 0]);
$errData = [];
$errMessage = [
'-1' => '系統繁忙,此時請稍候再試',
'40001' => 'AppSecret錯誤或者AppSecret不屬于這個小程序,請確認AppSecret 的正確性',
'40002' => '請確保grant_type字段值為client_credential',
'40013' => '不合法的AppID,請檢查AppID的正確性,避免異常字符,注意大小寫',
'40125' => '小程序配置無效,請檢查配置',
'41002' => '缺少appid參數',
'41004' => '缺少secret參數',
'43104' => 'appid與openid不匹配',
'45009' => '達到微信api每日限額上限',
'200011' => '此賬號已被封禁,無法操作',
'200012' => '個人模版數已達上限,上限25個',
];
if ($all['list']) {
$time = time();
foreach ($all['list'] as $template) {
if ($template['tempkey']) {
if (!isset($template['kid'])) {
return $this->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(), array_keys($errMessage))) {
throw new AdminException($errMessage[$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(), array_keys($errMessage))) {
throw new AdminException($errMessage[$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');
}
}
}
}
/** @var SystemNotificationServices $systemNotificationServices */
$systemNotificationServices = app()->make(SystemNotificationServices::class);
$systemNotificationServices->clearTemplateCache();
}
$msg = $errData ? implode('\n', $errData) : '同步成功';
return $this->success($msg);
}
可以臨時同步消息提示,僅限參考,具體以官方修復方法為準!