Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >玩一玩微信公众号开发(一) 接入系统

玩一玩微信公众号开发(一) 接入系统

作者头像
乐百川
发布于 2022-05-05 12:09:48
发布于 2022-05-05 12:09:48
81600
代码可运行
举报
运行总次数:0
代码可运行

一开始我准备学一学微信开发。后来看了一下文档,需要自己搭服务器进行接口对调。有点麻烦所以就没继续学下去。现在学习过了KotlinSpring Boot很多东西,感觉可以比较方便的进行开发了。今天就来回过头学习一下。

准备工作

申请公众号

首先说明一下,有两个微信相关平台,微信公众平台和微信开放平台。公众平台是我们运营微信号的主要地方,我们要想申请订阅号、公众号等都需要到这个平台进行申请。微信开放平台则是针对开发者的,我们可以在这里申请第三方平台等,然后和公众号进行对接。如果需要测试号的话也可以在这里申请。

这里因为是我自己主要玩玩,所以工具全部挑自己最喜欢的。编程语言我选择Kotlin,开发框架使用Spring Boot,IDE使用Intellij IDEA。剩下的想到再说。

首先第一步就是申请微信公众号了。我们去微信公众平台申请一个公众号。由于我是个人性质的,只能申请个人订阅号。申请过程很简单,照着腾讯的说明来就行了。

申请完成之后会进入到公众号页面,我们可以可以在这里进行各种设置。公众号发布信息也可以直接在这里手动发布。这样即使没有任何编程经验的人也可以运营自己的公众号。当然既然我们是公众号开发,那么肯定要用程序来实现这些功能了。在页面左部最下面就是开发相关资源了。开发者工具包含了几个很有用的工具,以后会很有用。

花生壳建立内网映射

要接入微信系统的话需要提供一个公网地址,然后将该地址填入微信公众号,这样当用户通过公众号执行相应动作的时候,微信官方就会将请求发送到该地址上。我们就可以使用程序自动处理了。

当然,如果拥有一个自己的服务器,那是最好不过的了。原来腾讯云和阿里云也有提供学生优化,在校大学生可以用非常实惠的价格购买到云服务器。不过现在政策改了,不管是哪个都需要抢了。而且现在我也毕业了,弄不到这东西了。所以只能使用另外一种方式,那就是使用自己本机电脑当作服务器。

但是本机电脑并没有公网地址,无法从外部接受请求。所以我们还需要一种方式将外网请求映射到本机上。所以我们需要使用nat123或者花生壳这样的端口映射工具。这些端口映射工具的原理也很简单,我们注册申请之后它会给我们分配一个免费的二级域名。然后我们在电脑本机打开它的映射工具,这样当用户通过二级域名访问的时候,就会映射到我们本机端口上。

其实nat123感觉要比花生壳稳定一些,不过由于花生壳程序的界面更漂亮。所以我还是决定使用花生壳。花生壳的注册还是很早以前的了。我记得如果需要使用端口映射好像还需要支付1块钱激活这个功能。

然后我们设置一个内网穿透。内网地址随便写,不过由于一般开发web程序都是在8080上开发,所以这里也直接填写8080就行了。当然如果要保证服务一直可用,电脑必须打开并启动花生壳。所以我的个人公众号嘛,当电脑关了的时候肯定就不能用了。

建立Spring Boot项目

准备工作的最后一步就是建立一个项目了。使用Intellij IDEA也非常简单。如果想使用Java以及Maven的话也可以在这里方便的设置。

这样,所有准备工作就都做完了。

接入微信平台

输入验证信息

要开发公众号,第一件事情就是接入平台了。先来看看微信公众平台开发文档。找到左边的接入指南。这将是我们参考的文档。

首先先进入微信公众平台,点击左下的基本配置。然后设置URL、Token、EncodingAESKey等信息。URL就是我们用花生壳配置的公网地址。Token是一个我们设置的字符串,将在后面web程序中使用。EncodingAESKey是消息加密的密钥,自动生成一个就行。设置完成之后,别忙着点提交。先来配置一下服务端。

服务器验证

服务端也就是我们的web项目了。由于服务器端需要使用刚才我们设置的token,所以我们需要保存该token。token可以硬编码在程序中,不过更好的方式就是使用配置文件了。所以我们打开application.properties。输入类似下面的配置。yitian.study.weixin.server.token用于保存token,当然你可以设置自己的属性名和token。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
spring.output.ansi.enabled=always
yitian.study.weixin.server.token=weixintoken
logging.level.yitian.study=debug

我们需要在程序中按照微信的要求对请求进行校验,只有验证通过之后才能请求消息。在验证的时候,微信会向我们填写的URL发送一个GET请求,包含signature、timestamp、nonce和echostr四个参数。然后按照下面的规则校验。

1)将token、timestamp、nonce三个参数进行字典序排序 2)将三个参数字符串拼接成一个字符串进行sha1加密 3)将加密后的字符串与signature对比,相同时返回echostr

这个功能可以写成一个服务。如果不熟悉Kotlin的话也没事,这语法虽然看着和Java很不一样,但是其实也就是一个类,包含了verify方法,在verify方法中对几个参数进行验证。token参数由Spring的@Value注解从配置文件中读取,由于Kotlin的内插字符串语法和Spring的SpringEl语法冲突了,所以这里还需要对@Value注解中的美元符号进行转义。为了验证程序输出,这里还顺便打印了日志。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Service
class WeixinVerificationService(
        @Value("\${yitian.study.weixin.server.token}") val token: String
) {
    private val logger = LoggerFactory.getLogger(WeixinVerificationService::class.java)

    fun verify(signature: String
               , timestamp: String
               , nonce: String
               , echostr: String): String {

        logger.debug("signature=$signature,timestamp=$timestamp,token=$token,nonce=$nonce,echostr=$echostr")

        val list = listOf(timestamp, nonce, token)
                .sorted()
        val str = list.joinToString(separator = "")

        val result = Hashing.sha1().hashString(str, Charsets.UTF_8)

        if (result.toString() == signature) {
            return echostr
        } else {
            return ""
        }
    }
}

由于JDK好像没有自带Sha1加密类。所以我又引入了Guava库。如果使用Gradle的话添加下面的依赖即可。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
compile group: 'com.google.guava', name: 'guava', version: '21.0'

当然仅仅一个服务是不够的。我们还需要控制器来处理请求。所以下面来定义一个控制器。上面的服务使用了@Service注解,所以我们可以直接把它注入到控制器中。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@RestController
class MainController(
        private @Autowired val weixinVerificationService: WeixinVerificationService) {


    @RequestMapping("/")
    fun validateServer(@RequestParam signature: String
                       , @RequestParam timestamp: String
                       , @RequestParam nonce: String
                       , @RequestParam echostr: String): String {
        return weixinVerificationService.verify(signature, timestamp, nonce, echostr)
    }
}

写好控制器之后,启动Spring Boot程序。先在浏览器中输入在花生壳申请的域名,查看一下解析是否成功。如果出现了一个错误页面的话说明解析没有问题。然后回到刚刚的微信公众平台,确认信息之后点击提交。微信会向我们的服务器发送请求。验证通过之后,我们即成功接入了微信。

如果出现Token验证错误,那就是说明可能我们服务器端的token和在这里设置的token不同,导致最终生成的字符串不一致。如果提示URL超时,可能是花生壳解析的问题,检查花生壳解析或者稍等一会通常可以解决问题。

成功之后,我们就完成了微信开发的第一步!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-03-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
使用JAVA开发微信公众平台(一)——环境搭建与开发接入
一、 初始微信公众平台 微信公众平台,即我们平时所说的“公众号”,曾用名“官方平台”、“媒体平台”,但最终命名为“公众平台”。从微信的命名我可以发现,公众平台不只是官方、媒体使用的平台,而是对所有公众
庞小明
2018/04/10
2.1K0
使用JAVA开发微信公众平台(一)——环境搭建与开发接入
用Python开发微信公众号(一)
以前的想法终于提上日程,总觉得只有在比赛或者项目中才能提高开发效率。 想法由来:每天在学习生活中总要去关注一些消息,要登这个网站,要去哪个网站,一次次的输密码,有时候还会输好几次。能不能集成一个平台就能Get到所有的消息?及时!有效!轻便!不错过任何精彩!这将又是我的一个系列,我会花闲碎的时间来一步步完成这个微信公众号的开发。毕竟十月份实在是太忙了。争取一天抽取一小时的时间来学习开发。
一点儿也不潇洒
2018/08/02
1.2K0
用Python开发微信公众号(一)
Laravel学习记录--微信开发(准备)
进入到这个界面后我们已经完成一个公众号的注册了,并能正常使用,可以自行测试左边的功能区 只是这个账号权限较低,很多功能不能实现 点击左边功能区“设置”----“公众号设置”可生成关于该公众的二维码,关注该公众号
切图仔
2022/09/08
6380
Laravel学习记录--微信开发(准备)
微信公众号token验证
本节来说一下微信公众号token验证问题,关于微信公众号token验证是微信开发前期的必要过程。主要是为了验证服务器是否属于你,也可以理解为你是否拥有使用此服务器的权限。
申霖
2019/12/27
2K0
微信公众号token验证
从0开始一个微信公众号的自动回复
https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Access_Overview.html
花花522
2023/03/07
1.3K0
从0开始一个微信公众号的自动回复
微信公众号开发者模式介绍及接入
编辑模式和开发模式是互斥的关系,也就是说,当我们使用开发模式时,编辑模式下的操作就会失效。反之,使用编辑模式时,开发模式下的操作就会失效,所以只能使用其中一个模式进行公众号的开发。
端碗吹水
2020/09/23
1.4K0
微信公众号开发者模式介绍及接入
微信公众号服务器接口验证示例
今天用营业执照重新申请了一个微信公众号,然后在配置服务器的时候犯了难,因为打算使用EasyWeChat来开发,所以说得先配置服务器,这就让我犯了难,最后结合开发文档之后才研究出来了验证的套路,希望对你们有帮助。
用砖头敲代码
2022/08/30
2.3K0
nodejs微信公众号开发
网上关于node开发公众号的资料相当缺乏,本文旨在以node的视角对公众号开发做一个阐述。
一粒小麦
2019/08/06
6.4K4
手把手教你用图灵机器人做微信公众号自动回复助手 手把手教你用图灵机器人做微信公众号自动回复助手
创建成功后,会自动跳转到机器人设置界面,在这里你可以对机器人进行个性化定制。其实,图灵机器人提供简单的方法,快速接入微信公众号,这太没有挑战性了,对于喜欢搞事情的我们,肯定不能选择这种方法。
尾尾部落
2018/09/04
2.5K1
手把手教你用图灵机器人做微信公众号自动回复助手
		
			手把手教你用图灵机器人做微信公众号自动回复助手
使用node.js接入微信公众号开发
前阵子开始搞起了公众号,摸索期间也接触到了公众号开发,特将摸索过程中经历记录下来和大家分享,由于没有经历过系统的后端学习,所以以下步骤及思路均为个人在网上摸索以及思考整理而出,不保证权威性,仅供参考,如有错误或可以改进的地方,欢迎提出。
十里青山
2022/08/22
1.8K0
使用node.js接入微信公众号开发
Java微信公众号开发(附源码!!!)
笔者最近在为一个艺考服务团队开发手机端的服务,由于开发app需要的时间较长,所以选择开发微信公众号。本人比较擅长Java开发,所以本文是基于Java语言的公众号开发。话不多说,直接进入正题。
全栈程序员站长
2022/08/29
7750
Java微信公众号开发(附源码!!!)
java微信公众号开发入门(1)--开发准备
所以 ,我们需要书写一个解析跟生成 xml的工具类 有了这些以后开发就很Esay了。  
DencyCheng
2018/11/05
1.7K1
微信公众号服务器接口验证示例
今天用营业执照重新申请了一个微信公众号,然后在配置服务器的时候犯了难,因为打算使用EasyWeChat来开发,所以说得先配置服务器,这就让我犯了难,最后结合开发文档之后才研究出来了验证的套路,希望对你们有帮助。
用砖头敲代码
2022/06/17
2.7K0
Asp.net Core 微信公众号开发教程(4)——微信签名认证微信接入
要开发微信公众号,获取公众号中用户、发送模版消息、自定义菜单等操作首先要进行微信签名认证。
十分钟空间
2022/08/17
2.7K0
Java微信公众平台开发(一)--接入微信公众平台 一、验证服务器代码编写。二、服务器端验证。
今天正式开始微信公众平台的二次开发。网上有很多的及射入微信公众平台的教程。总的来说都差不多,当了解了接入流程解析,什么都显得理所当然。
用户2417870
2019/09/18
2.6K0
Java微信公众平台开发(一)--接入微信公众平台

        一、验证服务器代码编写。二、服务器端验证。
微信公众号基本配置url_配置url
启用开发模式需要先成为开发者,而且编辑模式和开发模式只能选择一个,进入微信公众平台-开发模式,如下:
全栈程序员站长
2022/09/20
3.4K0
微信公众号基本配置url_配置url
微信公众号开发基本流程
背景: 过年前后做了个微信公众号项目,已经过去一段时间了,抽空回忆总结下基本流程吧,不然很快估计自己就忘了。。
全栈程序员站长
2022/09/06
3.9K0
微信公众号开发基本流程
koa2实现微信公众号关注自动回复消息
在公众号管理后台填写接口配置信息。 开发者提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上,开发者通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败 加密/校验流程如下:
薛定喵君
2020/08/03
1.5K0
Spring Boot 开发微信公众号后台,看看松哥公众号后台是怎么实现的!
Hello 各位小伙伴,松哥今天要和大家聊一个有意思的话题,就是使用 Spring Boot 开发微信公众号后台。
江南一点雨
2019/11/01
1.2K0
Spring Boot 开发微信公众号后台,看看松哥公众号后台是怎么实现的!
基于Express的微信公众号开发
上述第二步需要将文件下载好后上传到public目录下。因为我是使用的Express构建的服务。如图:
@派大星
2024/01/24
2200
推荐阅读
相关推荐
使用JAVA开发微信公众平台(一)——环境搭建与开发接入
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验