手把手做一个公众号GPT智能客服【二】实现微信公众号回复(订阅送源码!)

简介: 手把手做一个公众号GPT智能客服【二】实现微信公众号回复(订阅送源码!)

第二课:实现微信公众号回复

官网注册微信公众号

https://mp.weixin.qq.com/

公众号(订阅号)的基本使用

素材库

草稿箱

自动回复

自定义菜案

合集标签

投票

搭建个人服务器

Express环境搭建

https://www.expressjs.com.cn/

const express = require('express')
const app = express()
const port = 3000
app.get('/', (req, res) => {
  res.send('Hello World.')
})
app.listen(port, () => {
  console.log(`Example app listening on port ${port}`)
})

内网穿透

因为微信消息的转发,需要服务器在外网环境下进行访问,而我们正常编写代码需要在本地环境,所以我们需要通过Natapp进行内网穿透(成本为每月9元)

Natapp是一款内网穿透工具,它可以将本地的网络服务映射到公网上,从而实现外网访问内网服务的功能。下面是使用Natapp进行内网穿透的步骤:

  1. 注册并登录Natapp账号:在Natapp官网(https://natapp.cn/)中注册一个账号,并通过邮箱验证激活。
  2. 创建隧道:登录Natapp后台管理页面,在“我的隧道”中点击“创建隧道”,填写要映射的本地IP地址和端口号等信息,选择相应的协议类型(如HTTP、TCP等),并设置隧道名称。
  3. 下载并安装客户端:在“我的隧道”页面中,找到刚刚创建的隧道,点击“下载客户端”,根据不同操作系统版本下载并安装对应的客户端程序(Windows、Linux、MacOS等)。
  4. 启动客户端:运行客户端程序,输入账号密码登录,然后在命令行中输入指定格式的启动命令(如“natapp -authtoken=YOUR_TOKEN”),即可开始内网穿透服务。
  5. 测试连接:在外部网络环境下,通过浏览器或其他工具访问Natapp提供的域名(如“yourdomain.natappvip.com”),即可访问到本地网络中的服务。

第三方服务器验证

应用Express 应用程序生成器创建项目:

https://www.expressjs.com.cn/starter/generator.html

$ npx express-generator --ejs --view=ejs chatrobot
$ npm i
$ npm start

默认情况下微信的公众号是自动回复 我们需要将用户发送的消息 转到自己的服务器

微信第三方服务器配置


  1. 在公众平台填写第三方域名以及token
  2. 点击提交
  3. 在第三方域名做逻辑处理,验证token是否合法
  4. 按照tx的加密算法产生一个新的加密字符串 和sinatrue进行对比 对比ok token验证ok将echorstr 返回

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

Express 环境:

// /app.js
// ...
var chatrobotRouter = require('./routes/chatrobot');
// ...
app.use('/chatrobot', chatrobotRouter)
// ...
// /routes/chatrobot.js
const express = require('express');
const crypto = require('crypto')
const router = express.Router();
function checkSignature(req, res, next) {
  // 定义 token,此 token 一定要与微信公众号 token 一致
  const token = 'weixin'
  // 获取来自微信服务器的信息
  const { signature, echostr, timestamp, nonce } = req.query
  // 将token、timestamp、nonce三个参数进行字典序排序,再拼接成一个字符串
  const tmpStr = [token, timestamp, nonce].sort().join('')
  // 将三个参数字符串拼接成一个字符串进行sha1加密
  const mySignature = crypto.createHash('sha1').update(tmpStr).digest('hex')
  // 获得加密后的字符串可与signature对比,标识该请求来源于微信
  // 若确认此次GET请求来自微信服务器,请原样返回echostr参数内容
  res.send(mySignature === signature ? echostr : 'error')
}
router.get('/', checkSignature)
module.exports = router;

消息的接收与回复

消息接收,参见:https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Receiving_standard_messages.html

消息回复,参见:https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Passive_user_reply_message.html

完整代码:

1、安装中间件 express-xml-bodyparser

$ npm i express-xml-bodyparser

2、在app.js文件中添加中间

// /app.js
// ...
var xmlparser = require('express-xml-bodyparser')
// ...
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(xmlparser())
// ...

3、创建视图

// /views/reply.ejs
// 注意这里fromusername 和 tousername 是相反的。
<xml>
  <ToUserName>
    <![CDATA[<%= fromusername %>]]>
  </ToUserName>
  <FromUserName>
    <![CDATA[<%= tousername %>]]>
  </FromUserName>
  <CreateTime>
    <%= createtime %>
  </CreateTime>
  <MsgType>
    <![CDATA[text]]>
  </MsgType>
  <Content>
    <![CDATA[<%= content %>]]>
  </Content>
</xml>

4、添加核心代码

// /routes/chatrobot.js
// ...
function formatMsg(msg) {
  const msgXml = msg.xml
  const msgArray = Object.keys(msgXml)
  return msgArray.reduce((obj, key) => {
    obj[key] = msgXml[key][0]
    return obj
  }, {})
}
function messageController(req, res, next) {
  // 接收到微信方发来的消息并处理
  const msg = formatMsg(req.body)
  // 回复信息
  const {
    tousername,
    fromusername
  } = msg
  msg['createtime'] = Math.floor((new Date().getTime()) / 1000)
  msg['content'] = '你好呀 ☕️'
  res.set('Content-Type', 'text/xml')
  res.render('reply', msg)
}
// ...
// 消息接收与回复
router.post('/', messageController)
// ...


目录
相关文章
|
9月前
|
XML Java Android开发
微信虚拟视频插件安卓,微信虚拟相机替换拍照,java源码分享
完整的相机应用项目包含三个主要文件:主活动实现、布局文件和清单文件。代码实现了相机预览、
|
自然语言处理 搜索推荐 小程序
微信公众号接口:解锁公众号开发的无限可能
微信公众号接口是微信官方提供的API,支持开发者通过编程与公众号交互,实现自动回复、消息管理、用户管理和数据分析等功能。本文深入探讨接口的定义、类型、优势及应用场景,如智能客服、内容分发、电商闭环等,并介绍开发流程和工具,帮助运营者提升用户体验和效率。未来,随着微信生态的发展,公众号接口将带来更多机遇,如小程序融合、AI应用等。
|
7月前
|
缓存 小程序 前端开发
商城/点餐/家政类小程序源码合集_微信抖音小程序源码开发从入门到精通实战
本文系统讲解如何利用现有源码快速开发商城、点餐、家政类微信/抖音小程序,涵盖环境搭建、核心功能实现、多平台部署与优化,提供完整技术方案。实战导向,助力开发者高效入门与落地。
|
7月前
|
小程序 PHP 图形学
热门小游戏源码(Python+PHP)下载-微信小程序游戏源码Unity发实战指南​
本文详解如何结合Python、PHP与Unity开发并部署小游戏至微信小程序。涵盖技术选型、Pygame实战、PHP后端对接、Unity转换适配及性能优化,提供从原型到发布的完整指南,助力开发者快速上手并发布游戏。
|
7月前
|
存储 小程序 Java
热门小程序源码合集:微信抖音小程序源码支持PHP/Java/uni-app完整项目实践指南
小程序已成为企业获客与开发者创业的重要载体。本文详解PHP、Java、uni-app三大技术栈在电商、工具、服务类小程序中的源码应用,提供从开发到部署的全流程指南,并分享选型避坑与商业化落地策略,助力开发者高效构建稳定可扩展项目。
|
Android开发 开发者 Python
手撸了一个全自动微信清粉小工具(源码详解)
微信清理僵尸粉工具利用Python和`uiautomator2`库,通过模拟转账操作自动检测并标记微信好友列表中被删除、被拉黑或账号存在问题的“僵尸粉”。工具支持开启调试模式、自动打开微信、获取好友信息、判断好友状态、管理标签等功能,最终将检测结果记录到文件中,便于用户管理和清理好友列表。此工具适用于Android设备,已在OPPO Reno4 Pro上测试成功。
1065 5
|
9月前
|
API 数据安全/隐私保护 开发者
企业微信自动加好友软件,导入手机号批量添加微信好友,python版本源码分享
代码展示了企业微信官方API的合规使用方式,包括获取access_token、查询部门列表和创建用户等功能
|
11月前
|
人工智能 前端开发 开发工具
9.2K Star!微信排版从未如此简单,这款开源神器让Markdown飞入公众号!
一款9.2K Star的开源神器,让微信公众号排版变得简单高效!支持Markdown语法,实时预览、多图床混搭、AI智能排版、自定义主题样式等功能一应俱全。通过沉浸式双栏编辑、七图床混合编排、AI写作助手和主题定制工坊等核心功能,彻底解放技术创作者的生产力。无论是技术博客迁移、多平台发布还是企业定制,都能满足需求。三步上手:在线体验、本地部署、公众号对接。项目地址:https://github.com/doocs/md
1465 4
|
小程序 Java 关系型数据库
weixin116大学生就业平台微信小程序+ssm(文档+源码)_kaic
本文介绍了一款大学生就业平台微信小程序的开发过程,涵盖开发环境、系统设计、实现与测试等方面。该小程序基于微信平台特性,采用MYSQL数据库存储数据,确保系统稳定与安全,同时满足学生、企业和管理员不同权限用户的功能需求。通过简化操作流程,实现了招聘信息查看、简历投递等实用功能,旨在为用户提供便捷高效的求职体验,符合“操作简单,功能实用”的设计理念。
|
小程序 Java 关系型数据库
weixin163基于微信小程序的校园二手交易平台系统设计与开发ssm(文档+源码)_kaic
本文介绍了一款基于微信小程序的校园二手物品交易平台的开发与实现。该平台采用Java语言开发服务端,使用MySQL数据库进行数据存储,前端以微信小程序为载体,支持管理员和学生两种角色操作。管理员可管理用户、商品分类及信息、交易记录等,而学生则能注册登录、发布购买商品、参与交流论坛等。系统设计注重交互性和安全性,通过SSM框架优化开发流程,确保高效稳定运行,满足用户便捷交易的需求,推动校园资源共享与循环利用。

热门文章

最新文章