微信公众号开发

  • 背景
  • 流程
    • 第一步 申请测试公众号
    • 第二步 创建SpringBoot 项目,实现响应接口
      • 1. WaChatController 层
      • 2. CheckUtil
      • 3. SHA1加密
    • 第四步 配置接口配置信息

背景

最近在做一个微信公众开发的项目,主要包括,自定义菜单,自动回复(关键词回复(可回复多条)、收到消息回复、被关注自动回复),模板消息等功能,现在自定义菜单,自动回复功能接口已经实现,模板消息正在开发中。刚开始搭建环境,与微信对接的时候,在配置接口信息的时候,总是接入失败,现在将问题记录下来。

流程

第一步 申请测试公众号

测试号可以体验并测试微信公众平台所有的高级接口,如果是自己的个人微信公众号有很多的接口都用不了,所以推荐大家使用测试号,测试号申请

测试号界面

我们可以看到,在接口信息配置里,填写的URL需要正确响应微信发送的Token验证,所以这个时候我们还不能直接添加URL,需要有一个能够响应微信发送的Token验证的接口才行。

第二步 创建SpringBoot 项目,实现响应接口

1. WaChatController 层

@RestController
@RequestMapping("/api")
@Api(tags = "对接微信模块")
public class WeChatController {/*** 功能描述: 签名校验** @param* @author jiaoqianjin* Date: 2020/8/19 9:57*/@GetMapping("/wx")@ApiOperation(value = "签名校验", notes = "签名校验;\n author:焦前进")public void login(HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException {request.setCharacterEncoding("UTF-8");String signature = request.getParameter("signature");String timestamp = request.getParameter("timestamp");String nonce = request.getParameter("nonce");String echostr = request.getParameter("echostr");PrintWriter out = null;try {out = response.getWriter();if (CheckUtil.checkSignature(signature, timestamp, nonce)) {out.write(echostr);}} catch (IOException e) {e.printStackTrace();} finally {out.close();}}}

2. CheckUtil

/*** Description:请求校验* 将token、timestamp、nonce三个参数进行字典序排序* @author jiaoqianjin* Date: 2020/8/19 9:44**/public class CheckUtil {// 接口配置信息中的Tokenprivate static final String token = "jiao";public static boolean checkSignature(String signature, String timestamp, String nonce) {String[] str = new String[]{token, timestamp, nonce};//排序Arrays.sort(str);//拼接字符串StringBuffer buffer = new StringBuffer();for (int i = 0; i < str.length; i++) {buffer.append(str[i]);}//进行sha1加密String temp = SHA1.encode(buffer.toString());//与微信提供的signature进行匹对return signature.equals(temp);}
}

3. SHA1加密

/*** Description:* 将三个参数字符串拼接成一个字符串进行sha1加密* @author jiaoqianjin* Date: 2020/8/19 9:44**/
public class SHA1 {private static final char[] HEX_DIGITS = {'0', '1', '2', '3', '4', '5','6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};private static String getFormattedText(byte[] bytes) {int len = bytes.length;StringBuilder buf = new StringBuilder(len * 2);for (int j = 0; j < len; j++) {buf.append(HEX_DIGITS[(bytes[j] >> 4) & 0x0f]);buf.append(HEX_DIGITS[bytes[j] & 0x0f]);}return buf.toString();}public static String encode(String str) {if (str == null) {return null;}try {MessageDigest messageDigest = MessageDigest.getInstance("SHA1");messageDigest.update(str.getBytes());return getFormattedText(messageDigest.digest());} catch (Exception e) {throw new RuntimeException(e);}}
}

这个时候我们的接口已经写好了,但是这个接口外网访问不了,所以没法响应微信的接口。我们可以将项目部署到个人服务器上,或者使用***,使校验接口(api/wx)可以被访问。开发者通过检验signature对请求进行校验。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。

第四步 配置接口配置信息

回到测试号页面

点击提交,是不是成功了呢
注意事项

  1. URL只支持80和433端口,不要配置其他的端口
  2. 配置信息的Token要和CheckUtil一致

    成功之后,我们就接入了微信公众号,下面就可以调用微信公众号的接口,进行开发了。

微信公众号开发(一)环境搭建、接口信息配置相关推荐

  1. 1、微信公众号开发之环境搭建

    一.微信开发环境搭建 1.申请一个测试的公众号. 2.用来调式代码的开发环境. 1.1注册测试公众号(为什么要注册测试公众号:因为接口多,适合学习和研究.) 测试公众号的注册地址为:http://mp ...

  2. 微信公众号开发本地环境搭建

    我又来了,这次毕业设计要做微信公众号开发. 了解了一下,一般用PHP语言进行开发.在Windows 平台上一般采取Windows+Apache+MySQL+PHP. 配置起来比较麻烦,采取傻瓜式一键安 ...

  3. 微信公众号开发(JAVA)-环境搭建与开发接入

    使用JAVA开发微信公众平台(一)--环境搭建与开发接入 一. 初始微信公众平台 微信公众平台,即我们平时所说的"公众号",曾用名"官方平台"."媒体 ...

  4. 微信公众号开发本地环境开发_如何在5分钟内使HTTPS在本地开发环境上工作

    微信公众号开发本地环境开发 Almost any website you visit today is protected by HTTPS. If yours isn't yet, it shoul ...

  5. 【微信公众号开发】一、运作及配置流程简介

    文章详情:[微信公众号开发]一.运作及配置流程简介 链接:https://www.microanswer.cn/blog/11

  6. 微信公众号开发-素材/消息管理接口

    开始 本文是 微信公众号开发者模式介绍及接入 的后续,如没看过前文的话,可能看本文会有些懵逼.本文主要介绍微信公众平台的素材.消息管理接口的开发.由于个人的订阅号是没有大多数接口的权限的,所以我们需要 ...

  7. 微信公众号开发之授权获取用户信息

    微信开发交流群:148540125 系列文章参考地址 极速开发微信公众号 欢迎留言.转发.打赏 项目源码参考地址 点我点我--欢迎Start 前几篇文章已讲完如何导入项目,如何启动配置项目,如何成为开 ...

  8. 微信公众号开发教程(一) 验证接入

    作者:陈惠,叩丁狼教育高级讲师.原创文章,转载请注明出处. 微信公众号开发教程(一)验证接入 本篇文章主要介绍了微信公众号开发接入详细流程,希望对刚接触公众号开发的同学有所帮助,有兴趣的同学可多多关注 ...

  9. 微信开发学习总结(一)——微信公众号开发入门指引

    本节要求: ①微信公众号申请 ②测试公众号的注册 ③准备微信公众号开发的环境 微信公众号开发入门指引 微信公众号的接入在微信公众平台-微信公众平台技术文档中有着详细的介绍.在进行微信开发前,建议先完整 ...

  10. WxJava微信公众号开发实战

    本文从本人博客搬运,原文格式更加美观,可以移步原文阅读:WxJava微信公众号开发实战 之前我们介绍了Java如何进行微信公众号开发,阅读本文前小伙伴们可以先去了解下Java微信公众号开发 之前我们开 ...

最新文章

  1. ARM Linux (S3C6410架构/2.6.35内核)的内存映射(三)
  2. Linux服务名重命名
  3. 一道题,最小操作次数使数组元素相等引发的思考
  4. 深度学习(四十)caffe使用点滴记录
  5. div文字溢出自动加省略号(…)
  6. 【原创】Extjs4 通用CURD方法
  7. Gnome2.30 GDM圖片風格設置方式
  8. [面试] C/C++ 语法(二)—— 二维数组
  9. 典型微型计算机的基本结构包括,第二章 微型计算机基础.doc
  10. 【cocos2d-x 3.7 飞机大战】 决战南海I (三) 敌机实现
  11. android文章 - 收藏集 - 掘金
  12. GRE阅读-GRE佛脚备考系列之阅读分册volume 2-机经练习(1)
  13. Android篮球计分器论文,单片机课程设计报告 篮球计时计分器
  14. android icon换不掉图标文件夹,如何替换android系统中的文件夹图标
  15. QT重写QLabel画框并透明化背景
  16. 等效距离计算公式_等效焦距换算(等效焦距的计算公式)
  17. 2021-02-06-身高与车架大小
  18. c语言打砖块游戏说明,c语言打砖块游戏.doc
  19. Exp6 信息搜集与漏洞扫描 20164323段钊阳
  20. 全网最细------爬取4k高清大图

热门文章

  1. 语音识别中的词错率(SER)以及字错率(WER)
  2. 王者荣耀服务器维护1月9号,王者荣耀体验服
  3. java 发送邮件 outlook_JavaMail发送带图片正文的邮件,outlook等邮箱不显示的问题 | 学步园...
  4. HZNUOJ 1588 最大值最小值
  5. TIOBE 3月编程排行榜出炉!Python杀疯了!
  6. 高分2(GF2)卫星数据系列处理
  7. 电脑开机时自动开启小键盘
  8. mysql字段的长度_MySQL字段的长度
  9. RPi.GPIO 官方使用文档翻译
  10. 科大讯飞麦克风阵列使用感受(六麦,XFM10621)