微信公众号开发(一)开发者接入微信公众号 1.前言 该文章基于JDK1.8
springboot2.1.7.RELEASE
环境
实现开发者第一次接入微信公众号后台的需求
2.准备工作 2.1 进入微信公众平台注册账号
https://mp.weixin.qq.com/
个人用户建议注册订阅号
2.2 内网穿透 因为要直接用内网本机开发调试,微信网页授权在回调时要访问本机,所以直接做个内网穿透,可以直接在外网访问到本机,做法如下:
登录 https://natapp.cn/ (我用的natapp.cn,你可以用其他类似的,个人感觉这个不错)
购买隧道:购买后使用方式:
参考官方教程:https://natapp.cn/article/natapp_newbie
使用后会得到natapp分配的网址,如 xxx.natapp.cn,这个地址就可以访问到开发本机。
下载并配置config.ini, 运行natapp
3.接入认证成为开发者
可参考微信官方开发文档 https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Access_Overview.html
3.1 填写服务器配置 登录微信公众号开发平台:https://mp.weixin.qq.com/ 开发
—开发者工具
—公众平台测试账号
微信公众号接口必须以http://或https://开头,分别支持80端口和443端口!
这里的url可以选择自己买的服务器地址,记得必须开放80端口去使用! 或者使用内网映射外网工具生成一个域名地址供给你开发使用,此方法自行百度,如下就是其中一种使用~
目前提交是无法配置成功的, 不要着急
3.2 提交验证URL有效性 3.2.1 搭建SpingBoot工程 项目结构
pom.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 <parent > <groupId > org.springframework.boot</groupId > <artifactId > spring-boot-starter-parent</artifactId > <version > 2.1.7.RELEASE</version > </parent > <dependencies > <dependency > <groupId > org.springframework.boot</groupId > <artifactId > spring-boot-starter-web</artifactId > </dependency > <dependency > <groupId > org.projectlombok</groupId > <artifactId > lombok</artifactId > <optional > true</optional > </dependency > <dependency > <groupId > com.github.binarywang</groupId > <artifactId > weixin-java-mp</artifactId > <version > 2.9.0</version > </dependency > </dependencies >
application.yaml
1 2 3 4 5 6 wechat: mpAppId: xxxxxxxx mpAppSecret: xxxxxx mpToken: xxxxx server: port: 80
sha1加密工具类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 public class SecurityUtil { public static String sha1 (String str) { try { StringBuilder sb = new StringBuilder (); MessageDigest digest = MessageDigest.getInstance("sha1" ); digest.update(str.getBytes()); byte [] digestMsg = digest.digest(); for (byte b : digestMsg) { sb.append(String.format("%02x" , b)); } return sb.toString(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return str; } }
1 2 3 4 5 6 7 8 @Data @Component @ConfigurationProperties(prefix = "wechat") public class WechatAccountConfig { private String mpAppId; private String mpAppSecret; private String mpToken; }
Controller
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 @Slf4j @RestController @RequestMapping("/wechat/index") public class IndexController { @Autowired private WechatAccountConfig wechatAccountConfig; @GetMapping public void checkSignature (HttpServletRequest request, HttpServletResponse response) throws IOException, IOException { System.out.println("============= 处理微信认证 ===============" ); String signature = request.getParameter("signature" ); String timestamp = request.getParameter("timestamp" ); String nonce = request.getParameter("nonce" ); String echostr = request.getParameter("echostr" ); String token = wechatAccountConfig.getMpToken(); String[] strArr = {token, timestamp, nonce}; Arrays.sort(strArr); StringBuffer sb = new StringBuffer (); for (String str : strArr) { sb.append(str); } String sha1Str = SecurityUtil.sha1(sb.toString()); if (sha1Str.equals(signature)) { response.getWriter().println(echostr); } } }
启动类
1 2 3 4 5 6 @SpringBootApplication public class WeChatService { public static void main (String[] args) { SpringApplication.run(WeChatService.class); } }
3.2.2 测试
启动该SpringBoot项目
回到公众平台测试账号—接口配置信息, 点击提交即可