小白保姆级教程:微信公众号开发,从0到1

小白保姆级教程:微信公众号开发,从0到1

什么是微信公众号

微信公众号是个人、企业或者开发者在微信公众平台上申请的应用账号,它包括订阅号、服务号和小程序。

名称

服务对象

业务类型

订阅号

个人或媒体

信息传播

服务号

企业

服务类交互,支持高级群发、模板消息推送、二维码生成、微信支付等高级功能。

小程序

企业

微信公众号申请

电脑浏览器打开,搜索微信公众平台并点击。

在公众号注册页面,选择订阅号或者服务号等相应公众号类型,并填写基本信息。

注册成功后,扫码登陆后界面如下

成为开发者

点击【设置与开发】->【基本配置】,进入后,点击【成为开发者】 完成后,页面如下:这些东西的作用我们先都不用管。

开发指南

微信公众号开发,需要一个服务器来支持其应用和网站的正常运行。其交互原理大致如下:因此,在正式开发之前,我们需要有一个服务器,而且这个服务器必须有效。

创建一个本地服务器

由于大部分人都木有现成的服务器,因此,我们使用node框架koa快速开发一个本地服务器。

我们创建一个文件夹,如wechat-platform,在该目录里然后打开命令行工具或编译器(vscode),依次执行以下命令(电脑需要提前安装node环境):

npm init -y // 初始化仓库

npm i koa // node 框架核心依赖

npm i nodemon -g // node 代码变化,自动重启项目小工具

文件根目录创建index.js,用来写服务代码

//index.js

//使用koa启动一个HTTP服务

const Koa = require("koa")

const app = new Koa()

//创建一个任何访问都会响应的请求

app.use( ctx => {

ctx.body = "微信公众号开发!"

})

app.listen(3000, () => {

console.log("服务运行在:http:localhost:3000");

})

控制台输入nodemon index.js启动服务器打开网页就可以看到效果了

服务器创建好了,接下来就需要验证服务器能不能通过微信官方验证。

服务器有效验证

什么是服务器有效验证?

现在,我们已经拥有一个端口为3000的服务器,但要实现微信公众号开发,这个服务器就必须具备和微信服务器交互的能力。 因此,微信需要验证我们的服务器是否"可用",这就需要我们的服务器做一些与微信服务器的关联。

使用公众平台测试账号验证服务器

我们可以借用微信官方提供的【公众平台测试账号】进行服务器验证在下面的界面中,填写url和token即可验证。这里的url需要填写我们服务器的IP,由于我们没有真实服务器,所以只能填写我们刚开发的本地服务器IP:http://localhost:3000。但微信官方有限制,这里的服务器IP必须是公网可以访问的IP才行!

因此,我们需要借助ngork或者cpolar将http://localhost:3000映射在一个公网ip上。现在我们就获得了一个可以公网访问的IP: https://252bf0e8.r18.cpolar.top现在,我们填入url试试(token是必填项,我们先随便写一个。)点击【提交】后,我们可以发现,微信提示【配置失败】,我们的cpolar面板也显示了本次请求信息。看来,微信的请求已经确实走到我们的服务器了,但是服务器验证失败。这很合理,因为我们的服务器没有做任何和与微信有关的配置,我们必须配置服务器,让微信服务器和我们的服务器进行关联!

本地服务器与微信服务器关联

微信发送的get请求

我们先看一下点击【提交】后,微信做了什么。官网描述如下:开发者提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上,GET请求携带参数如下表所示:

参数

描述

signature

微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。

timestamp

时间戳

nonce

随机数

echostr

随机字符串

我们在代码里打印下请求传递的参数看看

//创建一个任何访问都会响应的请求

app.use((ctx) => {

console.log('ctx: ', ctx.query);

ctx.body = "微信公众号开发!";

});

//

观察打印结果可知,点击提交时,微信向我们发送了一个请求,这个请求的包含了signature、timestamp、nonce、echostr信息 那我们到底如何将我们的服务器与微信服务器关联呢?微信官方给出了如下提示:

开发者通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功(服务器关联成功),否则接入失败。加密/校验流程如下:1)将token、timestamp、nonce三个参数进行字典序排序2)将三个参数字符串拼接成一个字符串进行sha1加密3)开发者获得加密后的字符串可与signature对比,标识该请求来源于微信

似乎有些复杂,但说直白一些,就是这样:

我们需要在服务器内部通过一些值计算出signature值,与微信发送过来的signature值对比:如值相同,证明消息来自微信服务器,我们返回微信发送过来的echostr即可;不相同,代表消息不是来自微信服务器,我们服务器什么都不做!

现在我们先计算出signature签名值

signature签名计算

我们在参考下官网的提示

1)将token、timestamp、nonce三个参数进行字典序排序2)将三个参数字符串拼接成一个字符串进行sha1加密

然后,我们在代码中实现:

//使用koa启动一个HTTP服务

const Koa = require("koa");

const app = new Koa();

const sha1 = require("sha1");

const config = {

token: 1234,

};

//创建一个任何访问都会响应的请求

app.use((ctx) => {

if (ctx.method === "GET") {

const {

signature, echostr, timestamp, nonce } = ctx.query;

// 1.将微信发送的三个参数token,timestamp ,nonce拼接成字符串,进行sha1加密

const sha1Str = sha1(String(config.token) + String(timestamp) + String(nonce));

// 2.将加密后的字段与signature对比,若相同,代表请求来自微信服务,返回echostr;否则不做处理

if (signature === sha1Str) {

return (ctx.body = echostr);

}

}

ctx.body = "微信公众号开发!";

});

//

// 自己服务器计算出signature进微信加密 签名和微信传递的signature进行对比

app.listen(3000, () => {

console.log("服务运行在:http://localhost:3000");

});

注意:

sha1加密需要安装sha1包,执行 npm i sha1 安装即可加密顺序不能错,依次是token、timestamp、noncetoken必须和页面填写的token保持一致

提交

服务器代码写完后,我们再次点击【提交】,就会提示配置成功

注:如果还提示配置失败,多点几次即可,或者检查代码计算出的签名和微信发送的签名是否一致

当我们服务器配置好后,就可以真正的进行微信公众号开发了。

实现公众号自动回复

使用官方【自动回复】功能

在微信公众平台【自动回复】列表内进行关键词设置关注微信公众号后,发送对应关键词即可

使用服务器回复

使用服务器回复,需要在我们的服务器内写相关的处理代码。详细的过程可以参考官方文档:回复文本消息 | 微信开放文档

相关内容

Oracle 执行计划查看方法汇总及优劣对比
365betapp

Oracle 执行计划查看方法汇总及优劣对比

🕒 06-30 👁️ 2405