临清网站开发,厚街镇网站建设公司,英文企业网站开发,网页制造基础课程一开始我准备学一学微信开发。后来看了一下文档#xff0c;需要自己搭服务器进行接口对调。有点麻烦所以就没继续学下去。现在学习过了Kotlin、Spring Boot很多东西#xff0c;感觉可以比较方便的进行开发了。今天就来回过头学习一下。 准备工作 申请公众号 首先说明一下需要自己搭服务器进行接口对调。有点麻烦所以就没继续学下去。现在学习过了Kotlin、Spring Boot很多东西感觉可以比较方便的进行开发了。今天就来回过头学习一下。 准备工作 申请公众号 首先说明一下有两个微信相关平台微信公众平台和微信开放平台。公众平台是我们运营微信号的主要地方我们要想申请订阅号、公众号等都需要到这个平台进行申请。微信开放平台则是针对开发者的我们可以在这里申请第三方平台等然后和公众号进行对接。如果需要测试号的话也可以在这里申请。 这里因为是我自己主要玩玩所以工具全部挑自己最喜欢的。编程语言我选择Kotlin开发框架使用Spring BootIDE使用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。 spring.output.ansi.enabledalways
yitian.study.weixin.server.tokenweixintoken
logging.level.yitian.studydebug我们需要在程序中按照微信的要求对请求进行校验只有验证通过之后才能请求消息。在验证的时候微信会向我们填写的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注解中的美元符号进行转义。为了验证程序输出这里还顺便打印了日志。 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的话添加下面的依赖即可。 compile group: com.google.guava, name: guava, version: 21.0当然仅仅一个服务是不够的。我们还需要控制器来处理请求。所以下面来定义一个控制器。上面的服务使用了Service注解所以我们可以直接把它注入到控制器中。 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超时可能是花生壳解析的问题检查花生壳解析或者稍等一会通常可以解决问题。 成功之后我们就完成了微信开发的第一步