nodejs 公众号开发攻略(包括字典码排序sha1加密代码)

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: nodejs 公众号开发攻略(包括字典码排序sha1加密代码)

目录

前言



最近想玩一玩微信的开发,就想着从公众号与小程序入手,租了个服务器,本文主要介绍如何使用nodejs开发公众号,包括字典码排序sha1加密代码服务器配置代码,与自动回复的玩法。


公众号申请



申请页面(个人只能申请订阅号):微信公众平台。


申请后可以发现已经可以在这里设置菜单和一些自动回复内容了,但是我们想要更丰富的内容互动,就得自己开发处理才行。


配置服务器信息



要想要自己开发内容,可能需要自己的服务器,云服务器租一个。

申请成功后,基础信息自己填写好,找到左侧设置与开发下的基本配置

image.png

  1. url填入自己的服务器地址,只能使用80端口,当然你可以用nginx通过请求名转发到其他端口去,/gzh是我设置的请求名,你也可以自行设置。
  2. token也设置为自己想要的,这个在请求加密验证时需要用到。
  3. 下面的那个加密码随机生成就行。

image.png

编写服务端代码


导包

  1. 创建好nodejs项目,把我们需要的几个包先安装好。
npm i express sha1 xml2js -S

加密代码


/gzh是我设置的请求名,你也可以自行设置。

编写get请求作为验证加密请求。

token与在配置服务器信息时填写的保持一致。

将nonce, timestamp, token字典排序然后合成字符串再用sha1加密,与signature对比,一样则返回echostr即可。

写完启动该js服务。

import express from 'express'
const app = new express()
app.use(express.json())
import sha1 from 'sha1'
// /gzh是我设置的请求名,你也可以自行设置
app.get('/gzh', (req, res) => {
  res.set('Access-Control-Allow-Origin', '*')
  const { echostr = '', timestamp = '', nonce = '', signature } = req.query
  console.log(req.query, req.body)
  const token = '你设置的token'
  const sortStr = [nonce, timestamp, token].sort().join('')
  const sha1Str = sha1(sortStr)
  if (sha1Str === signature) {
    res.send(echostr)
  } else {
    console.log('error')
  }
})
app.listen(80, () => {
  console.log('服务器启动')
})

提交


  1. 启动服务完,去配置页面提交,成功则可以启用了。


image.png

设置自动回复信息


完成了上面的步骤之后,所有公众号的配置都要手动进行了。

比如给用户消息的自动回复,用户发送消息时会自动调用配置好的服务器post请求,发送规定的xml内容,详见微信官方文档-接收普通消息,我们在原来的编写的nodejs上加上接收该请求的内容。

xml2js用来格式化传来的xml数据,变成我们比较好使用的数据。

我创建一个sendMsg方法用来定义返回信息模板,因为这xml太冗长了。

通过MsgType判断用户发来的什么类型信息,这里text就是普通的字符串消息,然后我们可以利用判断Content来决定我们返回的内容,比如当用户发来hello时回复world。注意这些值其实返回的是包含一个字符串的数组,因此我用的是==号,如果你想使用===可能得需要用MsgType[0]和Content[0]来比较。

注意,第三方开发公众号回复理论只能被动回复一条,要想回复多条只能被动回复一条之后额外调用客服消息接口,虽然很蠢但是只能这样。

import xml2js from 'xml2js'
const xmlParse = xml2js.parseString
const sendMsg = (xml, msg) => {
  const { ToUserName, FromUserName } = xml
  return `
          <xml>
            <ToUserName><![CDATA[${FromUserName}]]></ToUserName>
            <FromUserName><![CDATA[${ToUserName}]]></FromUserName>
            <CreateTime>${new Date().getTime()}</CreateTime>
            <MsgType><![CDATA[text]]></MsgType>
            <Content><![CDATA[${msg}]]></Content>
          </xml>
         `
}
app.post('/gzh', (req, res) => {
  let data = ''
  req.on('data', (chunk) => {
    data += chunk
  })
  req.on('end', () => {
    xmlParse(data, (err, { xml }) => {
      const { ToUserName, FromUserName, CreateTime, MsgType, Content, MsgId } =
        xml
      if (MsgType == 'text') {
        if (Content == 'hello') {
          const responseMSg = 'world'
          res.send(sendMsg(xml, responseMSg))
        }
      } 
    })
  })
})

image.png

获取开发token



我们还需要很多可以定义小程序内容的接口,访问这些接口都需要access_token。

首先我们需要到公众号的基本配置界面,公众号开发信息,获取AppSecret,这里还有AppID信息。

然后访问以下接口。

https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=你的AppID&secret=你的AppSecret

你会发现访问出错,没关系,会返回一个json,里面会有你的ip信息。

把你的ip加进公众号开发信息的白名单再访问一次,就成功获得access_token。

结尾


本来想多写点内容,结果发现个人公众号无法认证,连自定义菜单都不能用,就到这叭,将来有机会补上。

=

相关文章
|
2月前
|
存储 JavaScript 前端开发
webSocket+Node+Js实现在线聊天(包含所有代码)
文章介绍了如何使用WebSocket、Node.js和JavaScript实现在线聊天功能,包括完整的前端和后端代码示例。
164 0
|
3月前
|
消息中间件 JavaScript 中间件
函数计算产品使用问题之WebIDE编写的Node.js代码是否会自动进行打包部署
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
12天前
|
JavaScript C++ 容器
【Azure Bot Service】部署NodeJS ChatBot代码到App Service中无法自动启动
2024-11-12T12:22:40.366223350Z Error: Cannot find module 'dotenv' 2024-11-12T12:40:12.538120729Z Error: Cannot find module 'restify' 2024-11-12T12:48:13.348529900Z Error: Cannot find module 'lodash'
36 11
|
1月前
|
安全 算法 Java
数据库信息/密码加盐加密 —— Java代码手写+集成两种方式,手把手教学!保证能用!
本文提供了在数据库中对密码等敏感信息进行加盐加密的详细教程,包括手写MD5加密算法和使用Spring Security的BCryptPasswordEncoder进行加密,并强调了使用BCryptPasswordEncoder时需要注意的Spring Security配置问题。
133 0
数据库信息/密码加盐加密 —— Java代码手写+集成两种方式,手把手教学!保证能用!
|
2月前
|
存储 安全 数据安全/隐私保护
安全升级!Python AES加密实战,为你的代码加上一层神秘保护罩
【9月更文挑战第12天】在软件开发中,数据安全至关重要。本文将深入探讨如何使用Python中的AES加密技术保护代码免受非法访问和篡改。AES(高级加密标准)因其高效性和灵活性,已成为全球最广泛使用的对称加密算法之一。通过实战演练,我们将展示如何利用pycryptodome库实现AES加密,包括生成密钥、初始化向量(IV)、加密和解密文本数据等步骤。此外,还将介绍密钥管理和IV随机性等安全注意事项。通过本文的学习,你将掌握使用AES加密保护敏感数据的方法,为代码增添坚实的安全屏障。
136 8
|
4月前
|
缓存 JavaScript API
NodeJS代理配置指南:详细步骤和代码示例
**Node.js 代理配置:解决HTTP请求转发与CORS挑战** 在现代开发环境中,Node.js以其高效和灵活性深受青睐,但正确配置代理以处理跨域请求和API调用仍是复杂任务。本文提供全面指南,从基础到高级设置,教授如何在Node.js中使用代理,覆盖httpOptions、npm代理及第三方库的运用,以增强API调用灵活性。
NodeJS代理配置指南:详细步骤和代码示例
|
3月前
|
安全 Java Shell
"SpringBoot防窥秘籍大公开!ProGuard混淆+xjar加密,让你的代码穿上隐形斗篷,黑客也无奈!"
【8月更文挑战第11天】开发SpringBoot应用时,保护代码免遭反编译至关重要。本文介绍如何运用ProGuard和xjar强化安全性。ProGuard能混淆代码,去除未使用的部分,压缩字节码,使反编译困难。需配置ProGuard规则文件并处理jar包。xjar则进一步加密jar包内容,即使被解压也无法直接读取。结合使用这两种工具可显著提高代码安全性,有效保护商业机密及知识产权。
327 3
|
3月前
|
存储 安全 数据安全/隐私保护
安全升级!Python AES加密实战,为你的代码加上一层神秘保护罩
【8月更文挑战第2天】数据安全至关重要,AES加密作为对称加密的标准之一,因其高效性与灵活性被广泛采用。本文通过实战演示Python中AES的应用,使用pycryptodome库进行安装及加密操作。示例代码展示了生成随机密钥与初始化向量(IV)、对数据进行加密及解密的过程。注意事项包括密钥管理和IV的随机性,以及加密模式的选择。掌握AES加密能有效保护敏感数据,确保信息安全无虞。
119 6
|
3月前
|
安全 开发者 数据安全/隐私保护
Xamarin 的安全性考虑与最佳实践:从数据加密到网络防护,全面解析构建安全移动应用的六大核心技术要点与实战代码示例
【8月更文挑战第31天】Xamarin 的安全性考虑与最佳实践对于构建安全可靠的跨平台移动应用至关重要。本文探讨了 Xamarin 开发中的关键安全因素,如数据加密、网络通信安全、权限管理等,并提供了 AES 加密算法的代码示例。
60 0