微信群消息推送

55 阅读3分钟

前端无法直接向微信群推送消息,因为微信的消息发送能力受限于官方接口的权限管控,前端没有直接访问微信服务器、触发群消息推送的权限。 实现微信群消息推送,需要 「前端 + 后端 + 微信官方接口」 的协作模式,核心逻辑是:前端负责用户交互与授权信息收集,后端负责调用微信接口完成消息发送。 以下是两种主流的合规实现方案,附带详细流程和代码示例: ## 一、 场景1:公众号/服务号 推送消息到用户(可间接触达群聊场景) 适用于面向微信公众号粉丝的场景,通过「订阅消息」功能推送消息到用户微信,用户可在群内转发。 > 注:微信官方没有开放个人微信群的直接消息推送接口,仅能通过触达用户个人的方式间接实现群内传播。 ### 核心流程 1. 前置准备(开发者必备) - 注册并认证微信公众号/服务号,获取 AppIDAppSecret。 - 在公众号后台配置消息模板(订阅消息需用户主动授权,模板消息需审核)。 - 后端获取微信接口的 access_token(有效期2小时,需定时刷新)。 2. 前端:引导用户授权,获取 openid 前端需要引导用户点击授权按钮,跳转到微信的授权页面,获取用户的唯一标识 openid(用户与公众号的唯一关联ID)。 示例(Vue 前端代码): vue <template> <button @click="getWechatAuth">点击授权接收消息</button> </template> <script setup> import axios from 'axios'; // 公众号 AppID const APPID = '你的公众号AppID'; // 后端接收授权回调的接口地址(需在公众号后台配置可信域名) const REDIRECT_URI = encodeURIComponent('https://你的后端域名/api/wechat/auth/callback'); const getWechatAuth = () => { // 拼接微信授权链接,scope=snsapi_base 静默授权获取openid const authUrl = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${APPID}&redirect_uri=${REDIRECT_URI}&response_type=code&scope=snsapi_base&state=123#wechat_redirect`; // 跳转到微信授权页面 window.location.href = authUrl; }; </script> 3. 后端:接收授权码,调用微信接口发送消息 后端接收微信授权回调的 code,换取 openid,再调用微信订阅消息接口发送消息。 示例(Node.js 后端代码,基于 Express): javascript const express = require('express'); const axios = require('axios'); const app = express(); const APPID = '你的公众号AppID'; const APPSECRET = '你的公众号AppSecret'; const TEMPLATE_ID = '你的订阅消息模板ID'; // 1. 接收微信授权回调,获取openid app.get('/api/wechat/auth/callback', async (req, res) => { const { code } = req.query; // 用code换取access_token和openid const tokenRes = await axios.get(`https://api.weixin.qq.com/sns/oauth2/access_token?appid=${APPID}&secret=${APPSECRET}&code=${code}&grant_type=authorization_code`); const { openid, access_token } = tokenRes.data; // 2. 调用微信订阅消息接口发送消息 await sendWechatSubscribeMsg(openid); res.send('授权成功,消息已推送'); }); // 封装发送订阅消息的方法 async function sendWechatSubscribeMsg(openid) { // 先获取全局access_token(公众号接口通用) const globalTokenRes = await axios.get(`https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${APPID}&secret=${APPSECRET}`); const globalAccessToken = globalTokenRes.data.access_token; // 组装消息参数 const msgData = { touser: openid, template_id: TEMPLATE_ID, page: 'pages/index/index', // 点击消息跳转的小程序页面 data: { thing1: { value: '新书上架通知' }, time2: { value: new Date().toLocaleString() }, phrase3: { value: '立即查看' } } }; // 调用订阅消息接口 await axios.post(`https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=${globalAccessToken}`, msgData); } app.listen(3000, () => console.log('后端服务启动在3000端口')); ## 二、 场景2:企业微信 推送消息到企业微信群 适用于企业内部办公场景,企业微信开放了群消息推送接口,可直接向指定企业微信群发送消息。 ### 核心优势 - 支持直接推送文本、图片、文件到企业微信群。 - 权限可控,需在企业微信管理后台配置应用和权限。 ### 核心流程 1. 前置准备 - 注册企业微信,创建企业应用,获取 CorpIDAgentIDSecret。 - 在企业微信后台,将应用的可见范围设置为目标群聊或成员。 2. 后端调用企业微信接口发送群消息(Node.js 示例) javascript const axios = require('axios'); const CORPID = '你的企业微信CorpID'; const SECRET = '你的企业应用Secret'; const AGENTID = '你的企业应用AgentID'; const CHAT_ID = '目标企业微信群的chat_id'; // 可通过企业微信接口获取群列表 // 获取企业微信access_token async function getQywxAccessToken() { const res = await axios.get(`https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=${CORPID}&corpsecret=${SECRET}`); return res.data.access_token; } // 发送群消息 async function sendQywxGroupMsg() { const accessToken = await getQywxAccessToken(); const msgData = { chatid: CHAT_ID, msgtype: 'text', text: { content: '【前端技术分享】本周分享主题:Vue3 性能优化技巧' }, agentid: AGENTID }; await axios.post(`https://qyapi.weixin.qq.com/cgi-bin/appchat/send?access_token=${accessToken}`, msgData); console.log('群消息发送成功'); } // 执行发送 sendQywxGroupMsg(); 3. 前端配合:触发消息推送 前端可通过按钮点击等事件,调用后端的消息发送接口,例如: javascript // 前端触发发送群消息 const sendGroupMsg = async () => { await axios.post('https://你的后端域名/api/qywx/send-group-msg'); alert('消息已推送至企业微信群'); }; ## 三、 关键注意事项 1. 权限与合规 - 个人微信无官方群消息推送接口,第三方工具(如微信机器人)存在封号风险,严禁商用。 - 公众号订阅消息必须用户主动授权,否则无法推送;模板消息仅支持服务号,且有使用限制。 - 企业微信接口仅限企业内部使用,不可用于外部营销。 2. access_token 管理 - 微信接口的 access_token 有效期为 2小时,后端需定时刷新并缓存,避免频繁调用获取接口导致限流。 3. 域名配置 - 公众号授权回调、接口调用的域名,需在微信后台配置可信域名,否则会被拦截。 ## 四、 替代方案(非官方,谨慎使用) 如果是个人小范围测试,可使用基于微信PC端协议的第三方库(如 wechaty),通过Node.js搭建本地机器人,监听指令并发送群消息。 > 风险提示:此类方案违反微信用户协议,容易被封号,仅用于学习测试。 示例(Wechaty 基础代码): javascript const { WechatyBuilder } = require('wechaty'); const bot = WechatyBuilder.build(); bot.on('scan', (qrcode) => { console.log(`扫码登录:https://weixin.qq.com/qrcode/${qrcode}`); }); bot.on('login', async (user) => { console.log(`${user.name()} 登录成功`); // 获取目标群聊 const room = await bot.Room.find({ topic: '前端技术交流群' }); if (room) { await room.say('Hello,这是前端触发的群消息测试'); } }); bot.start(); --- 我可以帮你整理企业微信群消息推送的完整接口调试清单,包含 chat_id 获取、权限配置、常见错误排查,需要吗?