图解微信公众号后台服务开发(nodejs版)

微信公众号——服务器端 对于长度小于2^64位的消息,SHA1会产生一个160位的消息摘要。当接收到消息的时候,这个消息摘要可以用来验证数据的完整性。在传输的过程中,数据很可能会发生变化,那么这时候就会产生不不同的消息摘要。两个不同的消息不会产生同样的消息摘要,(但会有1x10 ^ 48分之一的机率出现相同的消息摘要,一般使用时忽略)。crypto模块的目的是为了提供通用的加密和哈希算法。Nodejs用C/C++实现这些算法后,通过cypto这个模块暴露为JavaScript接⼝口,这样用起来方便,运行速度也快。 阅读详情

图解微信公众号后台服务开发(nodejs版)

本文作者:imweb 张颖 原文出处:imweb社区 未经同意,禁止转载

关于微信公众号开发的文章到处都是,基于nodejs的代码也不少,但是微信公众号给出的开发者文档接口虽然全却不细致,难免需要花费一些时间去测试确认,这里总结下最近基于nodejs的微信公众号后台服务开发的过程,采取的是简洁流程图的表达形式,希望能帮助没有接触过此类业务的小伙伴节约时间,快速上手。

1、如何获得一个微信公众号

首先要说明的是,微信公众号分服务号和订阅号两种,具体差别:

这里写图片描述

可以获得的接口权限,即可以提供的功能差异如下:

这里写图片描述

显然,服务号看上去功能更多,但是也需要根据业务场景考虑,要做到频繁给用户推送消息,还非订阅号不可。申请到公众号后,即可前往微信公众平台管理你的公众号。

2、简单的交互

如果你的微信公众号大致只需要以下功能:

  • 手动给用户推送图文消息
  • 利用底部菜单引导用户进入运营站点
  • 根据用户发送的关键字自动回复用户
  • 对用户发送的消息进行客服回复等

那只需要登录微信公众平台,在平台管理里面配置一些参数即可:

这里写图片描述

如果要一些自动化的功能,比如自动定期推送文章,绑定站点进行消息提醒,或者需要接入支付、卡劵、门店等高级接口功能,则需要自己开发公众号的后台服务。

3、启用服务器配置

如果启用了服务器配置后,可以在自己的服务器端进行代码开发处理微信消息,上一节介绍的在平台配置的自动回复、菜单等全部会失效。先来画一下启动服务器配置后,微信客户端、微信服务器如何与自己配置的服务器交互的。

这里写图片描述

很显然,首先应该去微信公众平台上配置自己的服务器信息,告诉微信服务器这个微信公众号的后台地址,以方便微信服务器进行消息转发。 图 当然,我们不可能随便填一个网址,而自己的服务器也不能随意接收没有校验的消息,所以这两者间绑定然后交互需要约定一个暗号,也就是Token值。第一次配置时,微信会像配置服务器发送带Token加密消息的校验信息,彼此确认身份,其后每次微信服务器和配置服务器交互信息时,也都会带上Token相关的身份校验信息。同样附上校验的流程图:

这里写图片描述

既然标题是基于nodejs的,我们还是贴一下nodejs中完成这些步骤的代码,相信有了流程图,开发同学们并不需要对代码有过多的解释,直接看代码就ok了。

这里要介绍两个nodejs中开发微信公众号的模块,wechat和wechat-api,这两个都是微信公众平台的基础库,封装了几乎所有微信开发者文档提供的接口。

使用express和wechat-api模块,app.use('/wechat', wechat('token', function (req, res, next) {})语句是用来验证token,其后的参数是验证通过后的回调执行函数,下面几节所贴的后台消息处理代码都位于此函数中:

var express = require('express');
var wechat = require('wechat');
var wechatCenter = require('./server/controllers/wechatCenter');
var config = require('./server/config');

// wechat development
app.use('/wechat', wechat(config.wechat_validate.token, wechatCenter.all));

实际的校验算法如下:

 // 微信token认证底层实现
 function sha1(str) {
     var md5sum = crypto.createHash("sha1");
     md5sum.update(str);
     str = md5sum.digest("hex");
     return str;
 }

 function validateToken(req, res) {
     var query = url.parse(req.url, true).query;
     // console.log("*** URL:" + req.url);
     // console.log(query);
     var signature = query.signature;
     var echostr = query.echostr;
     var timestamp = query['timestamp'];
     var nonce = query.nonce;
     var oriArray = new Array();
     oriArray[0] = nonce;
     oriArray[1] = timestamp;
     oriArray[2] = config.wechat_validate.token; //微信开发者中心页面里填的token
     oriArray.sort();
     var original = oriArray.join('');
     console.log("Original str : " + original);
     console.log("Signature : " + signature);
     var scyptoString = sha1(original);
     if (signature == scyptoString) {
         res.end(echostr);
         console.log("Confirm and send echo back");
     } else {
         res.end("false");
         console.log("Failed!");
     }
 }

以后每次有消息通过微信服务器转发过来,都会先做身份校验,校验后再将具体的消息交给回调函数进行处理。

4、定制图文推送业务

如果业务中需要应用到这样一种场景,目前有一个比较稳定的博客站点在运营,站点上每日都会有新文章发表,想通过微信公众号定期推送优秀文章。那我们来画一下实现此功能的流程和调用的接口:

这里写图片描述

可以看到,在图文消息上传前,文章内的图片都要从本地上传至微信服务器,然后获得微信服务器上的存放地址,文章的封面图同样需要本地上传,然后获得返回的唯一图片media_id,在图片都处理完毕后,可以正式的上传图文消息至微信服务器,上传后微信服务器会返回一个代表图文消息的唯一media_id,在需要群发时,只需调用群发接口,传递media_id参数即可。

// 上传图文消息内图片接口
api.uploadImage(options.filepath, function(err, result) {
        callback(err, result);
    });

// 上传多媒体文件接口,这里用来上传图文消息的封面图
api.uploadMedia(options.filepath, options.type, callback);

// 上传图文消息
api.uploadNews(options, callback);

// 图文消息预览
api.previewNews(options.openId, options.media_id, callback);

// 图文消息群发
api.massSendNews(options.media_id, true, callback);

具体接口参数格式,发送规则请查看wechat和wechat-api,以及微信开发者文档。

5、定制消息提醒业务

进一步,运营站点的文章有评论功能,如果想通过绑定微信账号在公众号内给用户发提醒要怎样实现呢?在用户与公众号没有交互的时候,公众号是不能任意的给用户发送消息的,此时就要用到微信提供的一种特殊消息推送接口——模板消息接口。

微信公众平台开发者文档中解释:模板消息仅用于公众号向用户发送重要的服务通知,只能用于符合其要求的服务场景中。所以模板消息不是随意发的,发送内容也是受到限制的,微信平台上固定了很多模板消息类型供开发者选择,开发者可以利用公众号账号登陆开发者平台后,在账号内添加各类模板消息的模板,然后可以获得模板消息的唯一id标识template_id。然后在开发代码中,使用模板消息接口可以发送对应的提示消息。

function remindSend(options, callback) {
    // var templateId = 'UZG5ge7tdoZJrEi1kHiCkQ__ok27PX1HU_44Jji5iQ8';
    var templateId = options.templateId || 'UZG5ge7tdoZJrEi1kHiCkQ__ok27PX1HU_44Jji5iQ8';
    var topcolor = '#FF0000';
    var url = options.topicLink;
    var data = options.data || {
        "first": {
            "value": "您好,您的文章" + options.title + "有新的评论",
            "color": "#173177"
        },
        "keynote1": {
            "value": options.commentUser,
            "color": "#173177"
        },
        "keynote2": {
            "value": options.create_at,
            "color": "#173177"
        },
        "remark": {
            "value": "点击立刻查看评论。",
            "color": "#173177"
        }
    };

    api.sendTemplate(options.wechatId, templateId, url, topcolor, data, function(err, result) {
        if (!err) {
            callback && callback(result);
        } else {
            console.log(err);
        }
    });
}

微信用户收到的模板提醒消息如下:

6、网页授权获取用户信息业务

微信是允许某些站点页面唤起获取用户信息授权的流程,让用户确认是否同意当前页面获取用户的个人信息。那问题就来了,微信允许哪些页面呢?

当然是公众号中绑定的域名下的页面,首先到公众平台官网中的开发者中心页配置授权回调域名,然后可以在微信中引导用户唤起用户信息授权流程,用户同意授权后,就可以在你配置的回调域名下的页面中获取到用户的个人信息。

说到具体的微信用户个人信息,那我们首先解释一下openid这个词,每个微信用户有唯一的微信号,然后每个用户对每个公众号有一个openid,对不同的公众号有不同的openid,但是用户对一个公众号而言openid是唯一的,用户与一个公众号之间通过openid通信,并且无论用户有没有关注某个公众号,它与公众号之间都是有一个唯一openid的。 解释完openid,我们再来具体描绘下整个引导用户授权的流程,以及如何获取到用户的具体信息。

总结

微信公众平台提供的接口功能还有许多,这里就不一一列举了,只要熟悉了开发流程和交互规则,功能实现起来都是类似的。

Prompt工程本质:7种可复现的AI指令设计策略 大语言模型并非黑箱,而是依赖统计规律响应的思维引擎;Prompt的本质不是自然语言提问,而是融合角色定义、长度控制、结构约束与输出协议的工程化指令集。理解其背后对注意力机制、token分配策略和解码偏好的影响,是提升AI输出质量的核心。本文聚焦真实业务场景中验证有效的7类Prompt干预方法——从角色锚定激活语域权重,到禁止项清单实现logits层面抑制,再到上下文锚定构建领域知识坐标系,覆盖教育、法律、医疗、政务等多行业落地需求,为技术实践者提供即插即用、原理清晰、参数可控的AI人机协作工作流。 阅读详情

相关推荐

nodejs开发微信公众号第三天代码 可以实现推送消息

nodejs开发微信公众号

通过NodeJS对接微信客服实现第三方API管理消息

这一步是必须的,因为我们需要企业微信管理员是自己,只有管理员才能开通客服账号,以及后续我们进行第三方配置的时候都需要用到管理员账号个人可以注册企业微信,所以我是一个人的身份注册了一个企业微信刚开始企业微信的样子是这样的,你会发现并没有工作台之类的,这是因为我们暂时还不是企业管理员,没有设置应用,接下来我们要切换到企业管理员界面![image.png](https://img-blog.csdnimg.cn/img_convert/42abd4f32ce51f69517f0f1683f651b4.png#cl

xuefeng11111的博客 2018

nodejs实现带参微信公众号二维码进行事件推送

结合了express+request+config+wechat等模块,实现了获取微信二维码url地址和ticket,事件推送服务

nodejs关联微信公众号开发

需求:在web端用户实时操作的内容,在微信公众号获取到 实现:项目与微信公众号的连接,在微信公众号上回复,发送对应的文本,图片,视频内容

weixin_45840746的博客 1108

详解nodejs微信公众号开发——1.接入微信公众号

本篇文章主要介绍了详解nodejs微信公众号开发——1.接入微信公众号,非常具有实用价值,需要的朋友可以参考下

压电传感器信号放大难题?用运放设计电荷放大器的5个关键步骤

本文详细解析了压电传感器信号放大难题,并提供了用运放设计电荷放大器的5个关键步骤。从电压放大到电荷放大的范式转换,到运放选型、反馈网络设计、PCB布局及频响特性验证,帮助工程师解决工业自动化中的信号衰减问题,提升测量精度和稳定性。

weixin_27303545的博客 449

微信公众号开发后台基本搭建(基于NodeJs的express框架)

1 申请公众号测试账号https://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&t=sandbox/index - 申请成功之后页面会给出appID和appsecret(用于获取access_token) - 在填写接口配置信息的时候需要后台配合验证才能配置成功1.1 验证服务器 输入服务器ip地址和端口号(只支持8

kingov 9004

从轻量化到高精度:3DXML 转 STP 的工程数据升级技术指南

本文详细解析了3DXML转STP格式的工程数据升级技术,对比了两种格式在轻量化和高精度方面的特性差异,并提供了CATIA、FreeCAD及Python编程等多种专业级转换方案。通过实际案例展示了如何确保转换过程中的数据精度,适用于CAD设计、精密制造等场景,帮助工程师实现工程数据的高效升级。

weixin_29201859的博客 215

node.js+vue+mongodb实现通过微信公众号扫码登录(完整易懂)

但很简单理解,手把手教学,实现扫码登录功能。

m0_73459939的博客 2060

别再手动盘点了!教你给微信小程序仓库系统加个‘扫码枪’:完整扫码入库与查询功能实现

本文详细介绍了如何为微信小程序仓库系统添加扫码入库与查询功能,实现零硬件成本的智能仓储管理。通过优化摄像头参数、增强动态识别算法和深度整合业务逻辑,提升扫码精度和效率,同时提供混合查询方案应对复杂场景。这套方案显著提升入库效率,降低错误率,适用于各类仓储管理需求。

weixin_30844577的博客 299

Mamba与iTransformer融合:时间序列预测中的曼巴注意力机制创新实践

本文探讨了Mamba与iTransformer融合在时间序列预测中的创新实践,重点介绍了曼巴注意力机制的设计与优势。通过双路径信息流设计,该方案在保持O(n)复杂度的同时,显著提升了预测精度和训练效率。实验证明,混合架构在电力负荷、气象数据等多变量长序列场景中表现优异,预测误差降低至0.083,内存占用仅4.2GB。

weixin_29292535的博客 219

快速学习nodejs系列:微信公众号开发一之环境准备

环境准备微信公众号开发(或者是现在的小程序开发)都是目前比较火的项目开发,现在很多一些课程都是基于php进行讲解、学习的,我们现在使用nodejs来开发。 1.申请微信公众号微信公众号现在分为:服务号和订阅号。具体业务上有什么不同,大家可以看微信的介绍,在开发者的角度的话,服务号的功能比订阅号较为丰富(如微信授权等),还有就是个人只能申请...

weixin_33738555的博客 221

【数据集2】CPC Global Unified Temperature/Precipitation数据简介及处理

简介CPC 温度及降雨 数据

WW、forever的博客 3107

NodeJS微信公众平台开发

微信是手机用户必备的App,微信最开始只是作为社交通讯应用供用户使用,但随着用户量不断的增加,微信的公众号在微信上表现出来了它强大的一面,微信公众平台具有四大优势:1、平台更加稳固;2.用户关系更加平等;3.信息精选、定位准确; 微信的开放平台,微信公众平台凭借4大优点受到企业喜爱,企业通过微信公众平台把企业中的资讯信息和服务功能在这个平台完美呈现;作为前沿的开发者微信开发势在必行,虽然外面流行的

ITsource 4076

Vue2+OpenLayers动态绘制两个经纬度并计算距离(提供Gitee源码)

动态绘制两个经纬度并计算它们之间的距离。

黄团团的个人博客 366

WRFDA如何读取风云四号A 星的GIIRS数据?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值。

**My Coding Family** 1029

说一下网页扫码登录的原理

码字不易,有帮助的同学希望能关注一下我的微信公众号:Code程序人生,感谢!代码自用自取。 扫码登录原理 扫码登录,可以分为移动端与服务端的交互和pc端与服务端的交互两个过程。 1.1 pc端和服务端 当用户打开登录页面时,页面会发起一个向服务器发送获取登录二维码的请求。 服务器接收到请求后,随机生成一个uuid(唯一标识),将这个uuid存入服务器中,同时设置一个过期时间,如果过期,需要重新获取二维码。 把uuid和校验信息生成二维码,将二维码和uuid,返回给pc页面。 pc页面拿到二维码和uu.

CreatorRay的博客 1219

vue2/3 - [超详细] 实现企业微信扫码登录完整流程及代码,vue项目接入企业微信扫码登录功能教程,支持新跳页显示二维码或div容器里内嵌登录二维码(详细代码注释,一键复制开箱即用)

vue企业微信扫码登录,vue网页网站企业微信扫码登录教程,vue如何实现企业微信扫码登录功能,vue详细企业微信扫码登录功能实现,vue2实现企业微信扫码登录,前端vue企业微信扫码登录教程,vue pc电脑端企业微信扫码登录详细教程,vue项目中怎么做企业微信扫码注册登录,vue实现网站接入企业微信扫码登录,vue2做企业微信扫码登录的优质文章教程,vue网站对接企业微信扫码登录,vue企业微信扫码登录如何新开一页全屏显示登录二维码,vue企业微信登录二维码 内嵌在div容器里/跳页显示登录二维码,vu

✅ 精选推荐文章 5702

goland 远程调试go_Go语言爱好者周刊:第 54 期

这里记录每周值得分享的 Go 语言相关内容,周日发布。本周刊开源(GitHub:polaris1119/golangweekly),欢迎投稿,推荐或自荐文章/软件/资源等,请提交 issue 。鉴于大部分人可能没法坚持把英文文章看完,因此,周刊中会尽可能推荐优质的中文文章。优秀的英文文章,我们的 GCTT 组织会进行翻译。题图:一图了解 Go 语言历史资讯 1、流行的 Go IDE GoLand ...

weixin_39851887的博客 281

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

libnet发包java语言_Go语言爱好者周刊:第 54 期

这里记录每周值得分享的 Go 语言相关内容,周日发布。本周刊开源(GitHub:polaris1119/golangweekly),欢迎投稿,推荐或自荐文章/软件/资源等,请提交 issue 。鉴于大部分人可能没法坚持把英文文章看完,因此,周刊中会尽可能推荐优质的中文文章。优秀的英文文章,我们的 GCTT 组织会进行翻译。题图:一图了解 Go 语言历史资讯 1、流行的 Go IDE GoLand ...

weixin_34663443的博客 133

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

微信公众号接入指南

第一步:申请消息接口 登录https://mp.weixin.qq.com/ 后,在公众平台后台管理页面 – 开发者中心页,点击“修改配置”按钮,填写URL、Token和EncodingAESKey,其中URL是开发者用来接收微信服务器数据的接口URL。Token可由开发者可以任意填写,用作生成签名(该Token会和接口URL中包含的Token进行比对,从而验证安全性)。EncodingAE

SeaSky 1631

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Node开发微信公众号

node之微信公众号开发 本文章主要介绍本人开发微信公众号历程,主要包括微信token验证,授权登陆以及用户openid和公开信息获取,微信jssdk的调用,图片上传下载等功能(请你在阅读此文之前,务必浏览一遍微信官方文档,如果没有,请点这里): 微信服务器token验证 授权登陆 用户openid信息获取 基础Access_token的获取和缓存 微信JSSDK、签名认证 素材上传下载

xiaopeng_han123的博客 857

使用NodeJs开发微信公众号(一)

  准备工作 1.首先注册自己的微信公众号。 微信公众号现在分为订阅号,服务号,企业号,服务号和企业号不对个人开发者开放,所以我们只能选择订阅号。 但是订阅号也有认证和未认证之分,认证的订阅号支持的接口更多也更高级,下图是微信的接口权限图,只截取了一部分。 如果我们想测试这些接口怎么办?我们可以申请微信的测试账号,测试账号只能用于测试接口,不能用于真实的项目。下面就看看怎么...

Up7104的博客 365

node.js接入微信公众号开发

前言 前阵子开始搞起了公众号,摸索期间也接触到了公众号开发,特将摸索过程中经历记录下来和大家分享,由于没有经历过系统的后端学习,所以以下步骤及思路均为个人在网上摸索以及思考整理而出,不保证权威性,仅供参考,如有错误或可以改进的地方,欢迎提出。 接入流程-微信侧 首先我们登录公众号后台,找到左侧菜单中的基本设置 点击修改配置之后,我们会进入参数填写页 下面我们对每一个参数进行分析。 参数说明 URL 必须以http://或https://开头,分别支持80端口和443端口。这里就是要我们填入我们的后端地址

qq_28252421的博客 2783

Nodejs开发微信公众号--测试号配置篇,2024年最新GitHub已标星16k

一般我们会在本地进行开发,因此必须使用工具进行内网穿透,将一个公网域名穿透到本地内网。(img-buUK18em-1713340766333)]新建一个配置文件config/index.js。首先要做的就是接口配置信息这部分内容了。使用方法很简单,这里不再赘述。我这边使用express生成器搭建服务。写路由,进行微信公众号的token验证。token: ‘你的token’// 生成项目,并指定模板引擎。,可以看到需要填写的内容。在app.js中指定端口。// 安装node依赖。// 全局安装生成器。

2401_84266059的博客 628

Nodejs + express 开发微信公众号模板消息推送功能

第一步:申请测试号 1.打开微信测试号申请平台 http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login 2.点击“登录”按钮,用微信扫码确认登录 3.确认登录后,测试号申请成功! 第二步:测试号管理 1.测试号信息 这里的appID、appsecret在后面很多接口调用中都需要用到 2.接口配置信息(这里需要有自己的...

lihefei_coder的博客 1万+
上一篇: 浅谈 React、Flux 与 Redux
下一篇: 新一代包管理工具yarn
IMWebteam
博客等级 码龄10年 4粉丝 0原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值