diff --git a/app/Http/Controllers/Admin/VisitAuditController.php b/app/Http/Controllers/Admin/VisitAuditController.php index 3bfc21a..b8841ba 100755 --- a/app/Http/Controllers/Admin/VisitAuditController.php +++ b/app/Http/Controllers/Admin/VisitAuditController.php @@ -170,28 +170,44 @@ class VisitAuditController extends CommonController } } if ($auditResult) { - // 发通知订阅消息 + // 发通知订阅消息:通过与驳回共用「审核结果」模板(Caa0…)。 + // 驳回若单独使用另一模板,易出现后台字段不一致或用户未授权该模板导致发送失败。 + $subMsgTemplateId = 'Caa0O6pPtQDHQMPsqE6PHyzueeI11JvlpenbgwkYC0s'; $templateData = [ 'date1' => [ 'value' => $visit->date ], 'name3' => [ - 'value' => $acceptAdmin->name, + 'value' => $acceptAdmin->name ?? '', ], 'thing4' => [ - 'value' => $visit->name + 'value' => $this->clipSubscribeThing($visit->name) ], 'thing13' => [ - 'value' => $auditResult, + 'value' => $this->clipSubscribeThing($auditResult, 20), ], 'thing9' => [ - 'value' => $visit->company_name + 'value' => $this->clipSubscribeThing($visit->company_name ?? '-') ], ]; - $subMsgTemplateId = $auditResult === '驳回' - ? 'JDIyQ6yY0y-xdgd2z1gTSo6nBMG84VT1Bu3kcpeStSw' - : 'Caa0O6pPtQDHQMPsqE6PHyzueeI11JvlpenbgwkYC0s'; - Visit::subMsg($subMsgTemplateId, $user->openid, $templateData, $all['visit_id']); + if ($user && !empty($user->openid)) { + try { + $sendResult = Visit::subMsg($subMsgTemplateId, $user->openid, $templateData, $all['visit_id']); + if (is_array($sendResult) && isset($sendResult['errcode']) && (int) $sendResult['errcode'] !== 0) { + Log::warning('visit audit subscribe message send failed', [ + 'visit_id' => $all['visit_id'], + 'audit_result' => $auditResult, + 'errcode' => $sendResult['errcode'] ?? null, + 'errmsg' => $sendResult['errmsg'] ?? null, + ]); + } + } catch (\Throwable $e) { + Log::warning('visit audit subscribe message exception', [ + 'visit_id' => $all['visit_id'], + 'message' => $e->getMessage(), + ]); + } + } // 发通知短信消息 $vars = ['result' => $auditResult]; $template_id = 'G5W6Y3'; @@ -238,4 +254,24 @@ class VisitAuditController extends CommonController VisitAudit::where('id', $all['id'])->delete(); return $this->success('删除成功'); } + + /** + * 订阅消息 thing 类字段长度限制较严,避免微信接口因超长拒绝发送。 + */ + private function clipSubscribeThing(?string $text, int $maxLen = 20): string + { + $text = trim((string) $text); + if ($text === '') { + return '-'; + } + if (function_exists('mb_strlen') && function_exists('mb_substr')) { + if (mb_strlen($text) > $maxLen) { + return mb_substr($text, 0, $maxLen - 1) . '…'; + } + } elseif (strlen($text) > $maxLen) { + return substr($text, 0, $maxLen - 1) . '…'; + } + + return $text; + } }