SpringBoot对接微信公众平台(1)--- 配置微信公众平台测试号URL并校检

SpringBoot对接微信公众平台(1)--- 配置微信公众平台测试号URL并校检

  • 说明
  • 微信公众号接口测试号申请
  • 后端代码实现
  • 内网穿透接口测试

说明

这里记录下自己学习SpringBoot对接微信公众平台的成长过程,以防止后面继续踩坑且方便以后直接使用。这里使用微信公众号的接口测试号来开发微信公众平台。
微信公众号官网:https://developers.weixin.qq.com/doc/offiaccount/Getting_Started/Overview.html

微信公众号接口测试号申请

访问微信公众号平台,如下图:
在这里插入图片描述
点击进去后,只需要填接口配置信息即可。
在这里插入图片描述

后端代码实现

微信公众平台接入指南:https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Access_Overview.html

因为我的代码是在本地开发的,ip地址是127.0.0.1,SpringBoot项目端口是8080,因为微信测试号那个URL接口地址配置必须是域名加外网访问,所以我这里在本地使用了内网穿透,将127.0.0.1:8080映射成了一个域名,这里的域名是软件生成给我们的,内网穿透成功后就可在外网访问。这样我们相当于将本地开发服务作为了一台服务器。
如果有小伙伴不知道什么是内网穿透,或者怎么配置内网穿透,请自行百度解决哦。网上有相关教程。
我映射后如下:
在这里插入图片描述
创建一个SpringBoot项目,如下:
在这里插入图片描述
pom.xml代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.example</groupId><artifactId>wechat-service</artifactId><version>0.0.1-SNAPSHOT</version><name>wechat-service</name><description>wechat-service</description><properties><java.version>1.8</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><spring-boot.version>2.6.13</spring-boot.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><!--web依赖,内嵌入tomcat,RestTempLate使用该依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--用来将string的json格式字符串转换成json对象--><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.49</version></dependency><!--lombok依赖,用来对象省略写set、get方法--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.22</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring-boot.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>1.8</source><target>1.8</target><encoding>UTF-8</encoding></configuration></plugin><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>${spring-boot.version}</version><configuration><mainClass>com.example.wechatservice.WechatServiceApplication</mainClass><skip>true</skip></configuration><executions><execution><id>repackage</id><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins></build></project>

application.yml代码:

server:port: 8080wxChat:appID:你的测试公众号appIDappsecret:你的测试公众号appsecret

WeChatController代码如下:

package com.example.wechatservice.controller;import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;import java.security.MessageDigest;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;@RestController
@RequestMapping(value = "/weChat")
public class WeChatController {//测试内网穿透后在外网访问接口@GetMapping(value = "/hello")public String hello(){return "hello";}//测试微信公众平台里面的接口配置信息里面的URL能否调用成功,这种只是测试微信公众平台能否调用接口,但是不能识别它是否真的来自于微信公众平台来调用你的,所以才需要做验证@GetMapping(value = "/test")public String test(@RequestParam(value = "signature", required = false) String signature,@RequestParam(value = "timestamp", required = false) String timestamp,@RequestParam(value = "nonce", required = false) String nonce,@RequestParam(value = "echostr", required = false) String echostr){System.out.println("微信测试公众平台调用我了!!!!");System.out.println("signature="+signature);System.out.println("timestamp="+timestamp);System.out.println("nonce="+nonce);System.out.println("echostr="+echostr);//必须原封不动将echostr返回给微信公众号,微信公众测试号才能配置成功那个URL,返回其他值都会导致配置失败return echostr;}//测试微信公众平台里面的接口配置信息,并验证它是否真的来自微信公众平台@GetMapping(value = "/check")public String check(@RequestParam(value = "signature", required = false) String signature,@RequestParam(value = "timestamp", required = false) String timestamp,@RequestParam(value = "nonce", required = false) String nonce,@RequestParam(value = "echostr", required = false) String echostr){System.out.println("微信公众平台调用我了!!!!");//微信公众平台配置的token值String token="testToken";//1.将token、timestamp、nonce三个参数进行字典序排序List<String> list= Arrays.asList(token,timestamp,nonce);//排序Collections.sort(list);//2.将三个参数字符串拼接成一个字符串进行sha1加密StringBuilder stringBuilder=new StringBuilder();for(String s:list){stringBuilder.append(s);}//加密try{MessageDigest instance = MessageDigest.getInstance("SHA-1");//使用sha1进行加密获得byte数组byte[] digest=instance.digest(stringBuilder.toString().getBytes());StringBuilder sum=new StringBuilder();for(byte b:digest){sum.append(Integer.toHexString((b>>4)&15));sum.append(Integer.toHexString(b&15));}//3.开发者获得加密后的字符串可与signature对比,标识该请求来源于微信if(!StringUtils.isEmpty(signature)&&signature.equals(sum.toString())){System.out.println("一致");//必须原封不动将echostr返回给微信公众号,微信公众测试号才能配置成功那个URL,返回其他值都会导致配置失败return echostr;}}catch (Exception e){e.printStackTrace();}return null;}
}

内网穿透接口测试

这里我在另外一台连了网络的电脑进行接口请求,发现接口请求成功。如下:
在这里插入图片描述
既然外网已经能够成功访问到我们的接口了,那我们直接在微信公众平台配置对应的URL即可。
使用这个http://你的域名/weChat/test接口进行测试,看看能否配置成功。如下:
在这里插入图片描述
后端控制台调用test接口打印如下:
在这里插入图片描述
/weChat/test接口只是我们用来验证能否正常配置成功,但是无法校检是否真的来自于微信公众平台,所以真正实际开发需要调用/weChat/check接口,如下:
在这里插入图片描述
后端控制台打印如下:
在这里插入图片描述
好了,到这里笔记就结束了。填写几个注意点:

  • 必须是域名加外网可以访问,测试公众号域名可以不用备案。
  • 接口配置信息那里的URL配置的是你后端接口地址,点击提交按钮的时候会去请求你的那个接口,使用get请求并会向你传signature、timestamp、nonce、echostr这四个参数,接口返回必须是echostr值,如果返回的不是这个echostr值,都会显示配置失败。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/695742.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

突破传统:精酿啤酒的创新与变革

在啤酒的世界中&#xff0c;传统与创新始终是并存的。Fendi club啤酒作为精酿啤酒的代表&#xff0c;不仅继承了传统的酿造工艺&#xff0c;更在创新与变革方面做出了突破。 Fendi club啤酒在原料选择上进行了创新。除了使用大麦、酵母和啤酒花等传统原料外&#xff0c;Fendi c…

适用于无线通信设备的小尺寸温补晶振TG2016SLN

爱普生新推出一款2016小尺寸温补晶振TG2016SLN&#xff0c;TG2016SLN是EPSON推出的频率范围为10MHz~55.2MHz的温度补偿型晶体振荡器TCXO&#xff0c;工作温度可达105℃。产品采用无铅材料&#xff0c;符合ROHS标准&#xff0c;对环境友好&#xff0c;具有待机功能&#xff0c;待…

sCrypt受邀在中国人民大学举办《区块链与数字经济》课程讲座

4月17日&#xff0c;可一科技特邀美国sCrypt公司的开发工程师周全&#xff0c;在中国人民大学的《区块链与数字经济》课程上进行了讲座。周全讲解了区块链的分布式设计、不可篡改特性&#xff0c;以及智能合约的基本原理&#xff0c;利用“智能家居触发机制”等生动比喻&#x…

如何3分钟快速训练一个属于自己的(暴躁老哥、猫娘)AI大模型?(弱智吧经典问题为例)

首先我们进入谷歌Gemini&#xff1a;Gemini - Google DeepMind 然后我们进入官网看见左边的几个选项 选择Create new prompt创建新的提示 选择结构化提示 点击action可以增加列&#xff0c;也就是设置更多回答或者选项 那么那个温度&#xff08;Temperature&#xff09;是什么…

记一次特别的未授权访问

某个夜里&#xff0c;随手点进去的一个小程序&#xff0c;引发的连锁反应。 开局一个小程序&#xff1a; 登录方式令人发愁&#xff0c;尝试收集&#xff0c;无果。 数据交互的地方说不定有sql&#xff0c;再次尝试&#xff0c;还是无果。 复制连接去web端&#xff0c;看看…

宝塔环境安装+安装软件教程

游戏&#xff0c;大型网站程序等都安装在服务器上&#xff0c;服务器用的是Linux系统&#xff0c;进行服务器维护需要记住很多linux的命令&#xff0c;这就很麻烦。 宝塔的好处&#xff0c;就是通过一个交互界面就能完成服务器的维护工作&#xff0c;比如更新系统&#xff0c;添…

车企大佬争做IP,谁掌握了社媒流量密码?

“流量时代&#xff0c;酒好也怕巷子深。” 环顾过去的四周&#xff0c;可能是2024年以来汽车圈最热闹的时刻&#xff0c;车企掌门人轮番“卷入”直播间&#xff0c;现身车展积极互动。 我们看到了吉利董事长李书福、奇瑞汽车董事长尹同跃、长城汽车董事长魏建军、蔚来汽车创始…

泰迪智能科技携手新乡学院开展“泰迪智能双创工作室”共建交流会

为深化校企合作&#xff0c;实现应用型人才培养目标。5月8日&#xff0c;广东泰迪智能科技股份有限公司河南分公司市场总监张京瑞到访新乡学院数学与统计学院参观交流&#xff0c;数学与统计学院院长赵国喜、副院长皮磊、张秦&#xff0c;教研室主任许寿方、姚广出席本次交流会…

利用香港多IP服务器优化网站访问速度的关键策略?

利用香港多IP服务器优化网站访问速度的关键策略? 随着数字化时代的不断发展&#xff0c;网站的全球访问速度成为企业吸引用户、提升竞争力的重要因素。特别对于跨国企业而言&#xff0c;如何确保全球用户都能享受到稳定快速的访问体验显得尤为重要。在这一背景下&#xff0c;…

B/S模式的web通信(高并发服务器)

这里写目录标题 目标实现的目标 服务器代码&#xff08;采用epoll实现服务器&#xff09;整体框架main函数init_listen_fd函数&#xff08;负责对lfd初始化的那一系列操作&#xff09;epoll_run函数do_accept函数do_read函数内容补充&#xff1a;http中的getline函数 详解do_re…

麦肯锡高效沟通课:掌控高难度谈判的13种技巧的笔记

系列文章目录 当时这样说就好了的笔记 麦肯锡高效沟通课&#xff1a;掌控高难度谈判的13种技巧的笔记 文章目录 系列文章目录序章 什么是“有效协商”&#xff1f;第1章 有效协商的5个基础掌握对手最渴求的目标以逻辑方式思考准备好B计划自保期望要符合实际沉默不是金 第2章 实…

[猫头虎分享21天微信小程序基础入门教程]第7天:小程序的权限与API使用

第7天&#xff1a;小程序的权限与API使用 &#x1f510; 自我介绍 大家好&#xff0c;我是猫头虎&#xff0c;一名全栈软件工程师。今天我们将继续微信小程序的学习&#xff0c;重点了解如何使用微信小程序的API&#xff0c;以及如何管理和请求小程序的权限。通过这些知识&am…