如何使用Nodejs接入微信公共账号认证?

如何使用Nodejs接入微信公共账号认证?

网上有很多关于nodejs实现微信公共账号的案例,但是,这其中的运作逻辑我还是无法搞清楚,请各位大神能帮帮我这个小菜鸟。 我理解的流程是第一步,接入认证(现在的问题是,如果服务器node app.js,那么微信公共账号的url该填写什么信息呢?服务器上是否并不能只搭建nodejs?是否还需要搭建apache?) 现在第一步无法走通,求各位帮助解答。

7 回复

当然可以。接入微信公共账号认证主要涉及几个关键步骤:配置服务器地址、接收微信服务器的验证请求、以及处理后续的消息交互。下面是详细的步骤说明和示例代码。

配置服务器地址

首先,在微信公众平台中配置你的服务器地址(URL)和Token。这里的URL就是你部署的Node.js应用的访问地址。例如,如果你的应用部署在 example.com 上,并且监听的是 /wechat 路径,那么这个URL就是 https://example.com/wechat

接收微信服务器的验证请求

当配置好URL后,微信服务器会发送一个GET请求到这个URL进行验证。你需要验证这个请求并返回特定的字符串来完成认证过程。

示例代码

const express = require('express');
const crypto = require('crypto');

const app = express();

app.get('/wechat', (req, res) => {
    const { signature, timestamp, nonce, echostr } = req.query;
    const token = 'your_token'; // 在微信公众平台设置的Token

    const arr = [token, timestamp, nonce].sort().join('');
    const hash = crypto.createHash('sha1').update(arr).digest('hex');

    if (hash === signature) {
        res.send(echostr);
    } else {
        res.status(403).send('Forbidden');
    }
});

// 启动服务
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
    console.log(`Server is running on port ${PORT}`);
});

解释

  1. Express: 使用 Express 框架来简化HTTP请求处理。
  2. 签名验证: 微信服务器会发送 signature, timestamp, nonce, 和 echostr 参数。你需要根据这些参数生成一个SHA-1哈希值,并与微信服务器发送的 signature 进行比较。
  3. 返回echostr: 如果验证成功,返回 echostr,这样微信服务器就知道你的服务器已经准备好接收消息了。

是否需要Apache

通常情况下,Node.js应用可以直接运行在服务器上,不需要额外安装如Apache这样的Web服务器。你可以使用Node.js自带的HTTP模块或者第三方库如Express来启动服务。

希望这些信息对你有所帮助!如果有任何问题或需要进一步的详细解释,请随时提问。


不用,这么麻烦。你直接在phoneqq.com上,用QQ登录 ,然后绑定你的微信公众账号。就可以了

只用nodejs是可以的!其实和nodejs没关系,不论怎么实现,你用汇编都行。 你只要能得到 weixin发给你服务的请求 并按格式 响应就行了!

具体见 http://mp.weixin.qq.com/wiki/index.php?title=接入指南

谢谢。不过我需要的是源码。

谢谢,这个我知道,只是不知道nodejs怎么实现。不过在某大神的帮助下,我使用webot实现了这一功能。

这不是个技术问题,是个业务问题,得有点研究精神才行。

要接入微信公共账号认证,你需要配置微信公众号后台的相关URL,并且编写相应的后端逻辑来处理微信服务器发送的请求。以下是接入微信公共账号认证的基本步骤和一个简单的示例代码。

接入流程:

  1. 配置微信公众号后台:需要将你的服务器地址(URL)配置到微信公众平台后台。这个URL将会接收来自微信服务器的验证请求。
  2. 接收并验证签名:微信服务器会发送GET请求到你配置的URL进行身份验证。这个请求包含一些参数,包括signaturetimestampnonceechostr。你需要根据这些参数生成签名并与微信提供的签名进行对比,以确认请求的真实性。
  3. 返回echostr:如果验证通过,需要返回echostr给微信服务器,微信服务器收到正确的echostr后就会确认通过。
  4. 处理后续的消息和事件:一旦通过了初始认证,微信服务器会继续发送POST请求给你配置的URL来传递用户消息和事件。你需要处理这些请求并做出响应。

示例代码:

const express = require('express');
const crypto = require('crypto');

const app = express();

app.get('/wechat', (req, res) => {
    const token = 'your_token'; // 在微信公众平台后台设置的token
    const { signature, timestamp, nonce, echostr } = req.query;

    const params = [token, timestamp, nonce].sort().join('');
    const hash = crypto.createHash('sha1').update(params).digest('hex');

    if (hash === signature) {
        res.send(echostr);
    } else {
        res.status(403).send('Forbidden');
    }
});

app.post('/wechat', (req, res) => {
    // 处理微信服务器发送的POST请求
    // 这里可以读取xml格式的消息体并进行相应处理
    // ...
    res.send('<xml><ToUserName><![CDATA[FromUser]]></ToUserName><FromUserName><![CDATA[ToUser]]></FromUserName><CreateTime>12345678</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[Hello World]]></Content></xml>');
});

app.listen(3000, () => {
    console.log('Server is running on port 3000');
});

解释:

  • 使用Express框架搭建了一个简单的Web服务器。
  • /wechat路由处理GET请求用于首次验证,检查signature是否匹配。
  • 同样路由处理POST请求用于接收和处理微信消息和事件。

需要注意的事项:

  • 服务器可以直接运行Node.js应用,不需要额外安装Apache等其他Web服务器软件。
  • token值需与微信公众平台后台中设置的一致。
  • 此示例仅作为基本接入的演示,实际开发中还需考虑安全性和错误处理等问题。
回到顶部