+
-
+
-
+
-
-
+
+
-
-
+
+
-
-
+
+
+
+ 随机生成
+
+
+
+
+
+
+ 随机生成
+
+
+
+
+
+ 明文模式
+ 兼容模式
+ 安全模式
+
+
+
+
+ 认证后才可主动推送(模板消息/订阅通知)
+
+
+
+
+
+
+
+ 复制
+
+
+
+ ① 微信后台(公众平台 / 微信开发者平台)「设置与开发 → 基本配置」→ 复制 AppID / AppSecret 填入上方,保存并启用;
+ ② 将本地址连同上方 Token / EncodingAESKey 填入微信后台「服务器配置」(加解密方式保持一致)——提交时微信会立即请求本地址校验,需本页已保存并启用;
+ ③ 若「连接测试」提示 40164,请在微信后台「基本配置 → IP白名单」加入本服务器出口 IP(服务器执行 curl ifconfig.me 可查看)。
+
+
+
+ 保存配置
+ 连接测试
+
+
+
+
+
+
+
+
+
+
+
+ {{ wechatBinding.nickname || "-" }}
+
+
+ {{ Number(wechatBinding.subscribe) === 1 ? "已关注" : "已取关" }}
+
+
+
+ {{ wechatBinding.bind_time ? formatTime(wechatBinding.bind_time) : "-" }}
+
+ {{ wechatBinding.openid }}
+
+
+
+ 发送测试推送
+
+ 解除绑定
+
+
+
+
+
+
+
+
+
+
+
![公众号二维码]()
+
获取绑定二维码
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ row.nickname || "-" }}
+
+
+
+
+
+ {{ Number(row.subscribe) === 1 ? "已关注" : "已取关" }}
+
+
+
+
+
+ {{ row.bind_name }}
+ 未绑定
+
+
+
+ {{ row.subscribe_time ? formatTime(row.subscribe_time) : "-" }}
+
+
+
+ 备注
+
+ 解除绑定
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 单次最多 500 人
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 发送推送
+
@@ -386,8 +575,8 @@
@@ -846,4 +1388,88 @@ onMounted(() => {
gap: 12px;
padding: 10px 0;
}
+
+/* ===== 微信公众号(服务号) ===== */
+.bind-card {
+ margin-top: 16px;
+}
+
+.bind-actions {
+ margin-top: 12px;
+ display: flex;
+ gap: 12px;
+}
+
+.bind-steps {
+ margin-bottom: 16px;
+}
+
+.bind-area {
+ display: flex;
+ gap: 24px;
+ align-items: flex-start;
+ flex-wrap: wrap;
+}
+
+.bind-qr {
+ width: 180px;
+ height: 180px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ border: 1px dashed var(--el-border-color);
+ border-radius: 8px;
+ overflow: hidden;
+}
+
+.qr-img {
+ width: 100%;
+ height: 100%;
+ object-fit: contain;
+}
+
+.bind-form {
+ flex: 1;
+ min-width: 240px;
+ display: flex;
+ flex-direction: column;
+ gap: 12px;
+}
+
+.bind-input {
+ width: 220px;
+}
+
+.follower-tools {
+ display: flex;
+ gap: 8px;
+ align-items: center;
+ margin-left: auto;
+}
+
+.follower-select {
+ width: 140px;
+}
+
+.follower-pager {
+ margin-top: 12px;
+ justify-content: flex-end;
+}
+
+.push-alert {
+ margin-bottom: 16px;
+}
+
+.push-url {
+ margin-top: 8px;
+}
+
+.ml8 {
+ margin-left: 8px;
+}
+
+.muted {
+ color: var(--el-text-color-secondary);
+ font-size: 12px;
+}