Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >微信公众号开放接口自定义收发消息

微信公众号开放接口自定义收发消息

作者头像
biaoblog.cn 个人博客
发布于 2025-05-21 01:22:29
发布于 2025-05-21 01:22:29
13700
代码可运行
举报
运行总次数:0
代码可运行

首先确认一点 被动回复消息是个人订阅号就可以实现的,不需要认证,详见下图

文档地址:https://developers.weixin.qq.com/doc/offiaccount/Getting_Started/Explanation_of_interface_privileges.html

第一步就是需要接入认证

https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Access_Overview.html

需要提前启动一个443或者80的服务

我这里以koa为例子 主要只贴API部分,其它基础代码就不贴了, 代码如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
router.get("/postPublicAccountMessage", async (ctx) => {
  // ctx.body = textBody;
  // Sha1签名计算
  const token = "xxxxxxxxxxxx"; // 这里填入你的token值
  function sha1(str) {
    return crypto.createHash("sha1").update(str).digest("hex");
  }
  const query = ctx.query;
  const { signature, timestamp, nonce, echostr, openid } = query;

  console.log("openid_", openid);
  // 步骤1: 对token, timestamp, nonce进行字典序排序
  const arr = [token, timestamp, nonce];
  arr.sort();
  // 步骤2: 拼接成一个字符串
  const concatenatedString = arr.join("");

  // 步骤3: 进行sha1签名计算
  const computedSignature = sha1(concatenatedString);

  // 步骤4: 验证signature
  if (computedSignature === signature) {
    ctx.body = echostr; // 如果签名匹配,返回echostr
  } else {
    ctx.body = { msg: "Signature verification failed" }; // 如果不匹配,返回错误
  }
});

记得需要下载一个 crypto的包

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
npm install crypto

然后可以在微信调试工具检验一下配置是否正确

https://developers.weixin.qq.com/apiExplorer?type=messagePush

AccessToken 的获取方式可以参考

https请求方式: GET https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

记得需要在服务端请求,不然会报错跨域,appid和secret 都可以在公众号后台找到 ,还要记得开启白名单请求,不然会获取失败

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
axios
  .get(
    "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=xxx&secret=xxxxx"
  )
  .then((res) => {
    console.log("res__", res);
  });

到这里差不多认证完成了,

然后就可以把用户发送给公众号的内容对接到我们的服务器上了,我们也可以做相当于的自定义回复

但是需要知道,微信官方有一个很煞笔的规定 必须要要在5秒内进行回复,不然就断开连接了

第二步 接受和发送消息

这里以明文方式进行接受和发送,这里以用户发送什么内容,就回复相同的内容,具体的可以自己定义,但是需要考虑上面的截图,需要在5秒内进行回复。。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
router.post("/postPublicAccountMessage", async (ctx) => {
  const txtMsg = function (toUser, fromUser, content) {
    var xmlContent = "<xml><ToUserName><![CDATA[" + toUser + "]]></ToUserName>";
    xmlContent += "<FromUserName><![CDATA[" + fromUser + "]]></FromUserName>";
    xmlContent += "<CreateTime>" + new Date().getTime() + "</CreateTime>";
    xmlContent += "<MsgType><![CDATA[text]]></MsgType>";
    xmlContent += "<Content><![CDATA[" + content + "]]></Content></xml>";
    return xmlContent;
  };
  const { req, res } = ctx;
  var buffer = [];
  req.on("data", function (data) {
    buffer.push(data);
  });
  //监听 end 事件 用于处理接收完成的数据
  let result = await new Promise((resolve, reject) => {
    req.on("end", function () {
      var msgXml = Buffer.concat(buffer).toString("utf-8");
      //解析xml
      parseString(
        msgXml,
        { explicitArray: false },
        async function (err, result) {
          if (!err) {
            result = result.xml;
            resolve(result);
          } else {
            //打印错误
            console.log(err);
          }
        }
      );
    });
  });


  const testBody = txtMsg(
    result.FromUserName,
    result.ToUserName,
    result.Content
  );


  ctx.status = 200;
  ctx.type = "application/xml";
  ctx.body = testBody;
});

回复消息的模板可以参考官方文档提供的

https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Passive_user_reply_message.html

提供几个可参考的接入项目(node.js):

https://github.com/SilenceHVK/wechatByNode

https://github.com/Bill-Pang/node-wechat

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
微信公众号推送消息笔记
根据业务需要,开发一个微信公众号的相关开发,根据相关开发和整理总结了一下相关的流程和需要,进行一些整理和总结分享给大家,最近都在加班和忙碌,博客已经很久未更新了,打气精神,再接再厉,申请、认证公众号的一系列流程就不在这里赘述了,主要进行的是技术的分享,要达到的效果如下图:
stark张宇
2024/07/23
3120
手把手做一个公众号GPT智能客服【二】实现微信公众号回复(订阅送源码!)
因为微信消息的转发,需要服务器在外网环境下进行访问,而我们正常编写代码需要在本地环境,所以我们需要通过Natapp进行内网穿透(成本为每月9元)
Maynor
2023/09/26
6720
手把手做一个公众号GPT智能客服【二】实现微信公众号回复(订阅送源码!)
微信公众号消息接入(普通消息+模板消息)
  1、“硅谷课堂”公众号实现根据关键字搜索相关课程,如:输入“java”,可返回java相关的一个课程;
别团等shy哥发育
2023/02/25
3.6K0
微信公众号消息接入(普通消息+模板消息)
koa2实现微信公众号关注自动回复消息
在公众号管理后台填写接口配置信息。 开发者提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上,开发者通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败 加密/校验流程如下:
薛定喵君
2020/08/03
1.4K0
Salesforce与微信公众号集成实现输入关键字搜索文章
本篇参考微信官方文档:https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Access_Overview.html
Zero-Zhang
2020/03/19
9900
手把手做一个公众号GPT智能客服(四)公众号自定义菜单
https://developers.weixin.qq.com/doc/offiaccount/Custom_Menus/Creating_Custom-Defined_Menu.html
Maynor
2023/10/01
3620
nodejs微信公众号开发
网上关于node开发公众号的资料相当缺乏,本文旨在以node的视角对公众号开发做一个阐述。
一粒小麦
2019/08/06
6.4K4
公众号开发:获取用户消息和回复消息
最近在看微信公众号的开发文档,觉得很有意思,可以自定义开发一些功能,比如有人关注了公众号之后,你可以做出稍微复杂点的回复(简单的回复在公众号后台配置就好啦);比如关注者发送了「学习」消息,你可以给他推送一些文章,发送「天气」的消息,你可以回复当前的天气状况;还可以进行素材的管理,用户的管理等等。
Java技术编程
2020/06/10
5.9K0
公众号开发:获取用户消息和回复消息
手把手教你用uniCloud云函数开发微信客服消息机器人
我们回到咱们的uniCloud项目,新建一个云函数,命名为xcxcontact(命名可以自己定)
大帅老猿
2022/03/03
2K1
手把手教你用uniCloud云函数开发微信客服消息机器人
微信公众平台-微信服务号开发
近期接到了涉及微信开放平台和微信公众平台相关的开发需求,开发过程中踩了许多坑,把相关问题整理记录下来以便巩固记忆,并把总结的经验分享出来,本篇分享微信服务号开发,希望可以给大家提供帮助
全栈程序员站长
2022/07/28
8.1K0
微信公众平台-微信服务号开发
微信公众号推送如何写代码
写微信公众号推送的代码需要用到微信公众平台提供的开发者文档和API接口。以下是一个示例代码,包含了获取用户信息和回复文本消息:
hide
2023/12/12
3300
微信公众号推送如何写代码
微信开发--微信公众号(一)
1.在新浪云服务器的仓库里新建PHP文件,右键url访问,复制url地址在 微信测试账号的 接口配置信息里,Token 随便起一个 (好记的)名字
生南星
2019/07/22
22.4K0
微信开发--微信公众号(一)
巧用 Serverless,轻松搭建微信公众号的智能后台服务
一般来说,想给微信公众号增加更多的功能,需要有一台服务器,来进行公众号后台服务的搭建。那么在 Serverless 架构下,是否有更简便的方法来实现这么一个公众号后台呢?我们试试? 初步搭建 一、Serverless 原生开发 首先要有一个微信公众号! 接下来,我们要为我们的函数计算服务申请固定 IP: 点击白名单之后,我们可以填写表单,完成固定公网出口 IP 的申请。 接下来进行代码开发。 将函数绑定到公众号后台,并按照文档在函数中完成一个基本的鉴定功能: def checkSignature(
腾讯云serverless团队
2020/05/22
3.7K0
WeLM简介及微信公众号开发
我的公众号后台设置了关键词自动回复,但是经常收到很多读者打错别字,导致无法触发,正巧,前段时间刚申请到WeLM的使用权限,于是就想着给公众号升级一下。
zstar
2022/11/14
2.8K0
WeLM简介及微信公众号开发
公众号关注/订阅事件-微信公众号开发
微信公众号开发之关注事件(订阅事件),当我们启用开发者设置后,微信本身的消息回复将无法使用,那么在用户关注我们公众号的时候就没有任何反馈了, 对用户体验是非常不友好的。下面教大家如果做关注事件,既用户关注公众号,系统给用户一个反馈。
申霖
2019/12/27
8.1K0
公众号关注/订阅事件-微信公众号开发
微信开发--微信公众号 代码示例
wechart.php <?php include_once "network.php"; function getSHA1($token, $timestamp, $nonce) { $
生南星
2019/07/22
12.7K0
独立开发微信公众号服务的一次复盘
上篇文章主要分享了异步编程的一些经验。主要包括回调函数,发布订阅,Promise,async await以及yield关键字。
terrence386
2022/07/14
4530
独立开发微信公众号服务的一次复盘
手把手教你开发微信公众号后台
松哥原创的 Spring Boot 视频教程已经杀青,感兴趣的小伙伴戳这里-->Spring Boot+Vue+微人事视频教程
江南一点雨
2020/08/21
3K0
手把手教你开发微信公众号后台
微信公众号-开发者-自定义菜单-CLICK事件处理
  想点击菜单,推送消息。功能很简单,坑了我一天时间。在此笔记。 菜单代码: { "button":[ { "type":"click", "name":"今日歌曲", "key":"V1001_TODAY_MUSIC" }, { "name":"菜单", "sub_button":[ { "t
deepcc
2018/05/16
1.6K0
微信公众平台开发 自定义菜单
自定义菜单能够帮助公众号丰富界面,让用户更好更快地理解公众号的功能。开启自定义菜单后,公众号界面如图所示:
庞小明
2018/09/19
2.1K0
微信公众平台开发 自定义菜单
推荐阅读
相关推荐
微信公众号推送消息笔记
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验