• 先决条件:

    • 一个本地可运行的javaweb:我的是一个网上git的springboot项目
    • 注册一个微信公众号申请链接
  • 配置前的准备-内网穿透

    由于项目搭建在本地电脑上,外网无法访问,所以需要使用工具将本地地址映射到公网。免费工具使用:natapp
    natapp下载网址
    natapp配置教程
    注意:这里只能使用80端口,因为微信公众号只开放80端口使用

免费隧道配置
先注册,注册成功后登录。


隧道购买成功后,在我的隧道中就可以看到已拥有的隧道:

客户端下载
我们访问到natapp的客户端下载,下载natapp客户端:

下载后,解压,会有一个natapp.exe的文件。

运行natapp
在运行natapp之前需要先配置,详细教程参考:使用本地配置文件config.ini。
config.ini内容:

注意:config.ini配置文件需要与natapp.exe在同一个目录下。

连接
本地启动javaweb项目后:访问localhost:80

直接双击natapp.exe运行,访问自己的连接http://wge5gq.natappfree.cc/:80

注意:由于我这里使用的是springboot,默认端口为8080,所以需要修改配置文件application中的端口配置

  • 关闭iis服务器:Internet Information Services
    由于win10系统的iis占用80端口,所以导致配置失败,需要关闭
    步骤:控制面板 -> 程序 -> 启动或关闭 Windows 功能 -> 取消 ‘Internet Information Services’ 选项 -> 确定

  • 请求验证

    微信公众平台需要发送给服务器一个请求来确认服务器连接
    这个需要在项目中添加单独的请求连接

    1. 几个参数

    2. 请求校验代码编写

    • controller类:HelloWorldController.class
    • 检查接口一致性工具类:CheckoutUtil.class
package cn.ictgu.tools;import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;/*** @author: ZouTai* @date: 2018/5/3* @description:*/
public class CheckoutUtil {// 与接口配置信息中的Token要一致private static String token = "TOKEN";/*** 验证签名** @param signature* @param timestamp* @param nonce* @return*/public static boolean checkSignature(String signature, String timestamp, String nonce) {String[] arr = new String[] { token, timestamp, nonce };// 将token、timestamp、nonce三个参数进行字典序排序// Arrays.sort(arr);sort(arr);StringBuilder content = new StringBuilder();for (int i = 0; i < arr.length; i++) {content.append(arr[i]);}MessageDigest md = null;String tmpStr = null;try {md = MessageDigest.getInstance("SHA-1");// 将三个参数字符串拼接成一个字符串进行sha1加密byte[] digest = md.digest(content.toString().getBytes());tmpStr = byteToStr(digest);} catch (NoSuchAlgorithmException e) {e.printStackTrace();}content = null;// 将sha1加密后的字符串可与signature对比,标识该请求来源于微信return tmpStr != null ? tmpStr.equals(signature.toUpperCase()) : false;}/*** 将字节数组转换为十六进制字符串** @param byteArray* @return*/private static String byteToStr(byte[] byteArray) {String strDigest = "";for (int i = 0; i < byteArray.length; i++) {strDigest += byteToHexStr(byteArray[i]);}return strDigest;}/*** 将字节转换为十六进制字符串** @param mByte* @return*/private static String byteToHexStr(byte mByte) {char[] Digit = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };char[] tempArr = new char[2];tempArr[0] = Digit[(mByte >>> 4) & 0X0F];tempArr[1] = Digit[mByte & 0X0F];String s = new String(tempArr);return s;}public static void sort(String a[]) {for (int i = 0; i < a.length - 1; i++) {for (int j = i + 1; j < a.length; j++) {if (a[j].compareTo(a[i]) < 0) {String temp = a[i];a[i] = a[j];a[j] = temp;}}}}
}package cn.ictgu.tools;import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;/*** @author: ZouTai* @date: 2018/5/3* @description:*/
public class CheckoutUtil {// 与接口配置信息中的Token要一致private static String token = "TOKEN";/*** 验证签名** @param signature* @param timestamp* @param nonce* @return*/public static boolean checkSignature(String signature, String timestamp, String nonce) {String[] arr = new String[] { token, timestamp, nonce };// 将token、timestamp、nonce三个参数进行字典序排序// Arrays.sort(arr);sort(arr);StringBuilder content = new StringBuilder();for (int i = 0; i < arr.length; i++) {content.append(arr[i]);}MessageDigest md = null;String tmpStr = null;try {md = MessageDigest.getInstance("SHA-1");// 将三个参数字符串拼接成一个字符串进行sha1加密byte[] digest = md.digest(content.toString().getBytes());tmpStr = byteToStr(digest);} catch (NoSuchAlgorithmException e) {e.printStackTrace();}content = null;// 将sha1加密后的字符串可与signature对比,标识该请求来源于微信return tmpStr != null ? tmpStr.equals(signature.toUpperCase()) : false;}/*** 将字节数组转换为十六进制字符串** @param byteArray* @return*/private static String byteToStr(byte[] byteArray) {String strDigest = "";for (int i = 0; i < byteArray.length; i++) {strDigest += byteToHexStr(byteArray[i]);}return strDigest;}/*** 将字节转换为十六进制字符串** @param mByte* @return*/private static String byteToHexStr(byte mByte) {char[] Digit = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };char[] tempArr = new char[2];tempArr[0] = Digit[(mByte >>> 4) & 0X0F];tempArr[1] = Digit[mByte & 0X0F];String s = new String(tempArr);return s;}public static void sort(String a[]) {for (int i = 0; i < a.length - 1; i++) {for (int j = i + 1; j < a.length; j++) {if (a[j].compareTo(a[i]) < 0) {String temp = a[i];a[i] = a[j];a[j] = temp;}}}}
}
  • 公众号服务器配置
    填入URL和代码证对应的token,点击启用

    可能的错误:访问超时,token验证错误
    验证错误可能是token不一致或者不能访问,需要查看内网穿透是否正确
    访问超时,可能是natapp免费使用在某些时候无效,所以可以删除,重新申请免费的,重试

参考链接:
内网穿透
请求验证本文代码来自这里
关闭iis服务器

微信公众号平台搭建连接javaweb相关推荐

  1. 微信公众号对接PHP电影网站,wxapi 微信公众号平台与电影类网站对接源码 wxapi 联合开发网 - pudn.com...

    wxapi 所属分类:微信小程序 开发工具:Java 文件大小:3KB 下载次数:0 上传日期:2019-02-16 23:41:01 上 传 者:lziccard 说明:  微信公众号平台与电影类网 ...

  2. 公众号管理系统 html,微信公众号平台管理后台.html

     微信公众号平台管理后台 $axure.utils.getTransparentGifPath = function() { return 'resources/images/transparent ...

  3. 微信公众号平台登陆-你已授权登陆过XXXX

    上周开始开发微信 从微信公众号点击按钮去我们的服务器 结果除了第一次点击按钮确认授权以外,以后每次都会出现这个页面 加班研究了好几天 终于解决了 原来参考微信公众号平台文档 文档告诉我,state这个 ...

  4. 第三方网站不能调用微信公众平台里的图片了 显示此图片来自微信公众号平台未经允许不可引用...

    下午ytkah在自己小博客搜索时看到有几篇文章图片显示不了,再访问一些网站时发现有些图片无法显示出来,显示"此图片来自微信公众号平台未经允许不可引用",如下图所示,这个应该是最近微 ...

  5. 微信公众号平台如何批量给粉丝自动打标签分组

    关于微信公众号平台批量给粉丝自动打标签分组功能,第三方工具微号帮提供了功能粉丝分组批量转移实现,可以在线给公众号所有粉丝自动分组打标签,公众号粉丝批量打标签分组,与公众号平台后台用户管理功能数据同步, ...

  6. 微信公众平人数多服务器会崩溃吗,微信公众号平台推新功能 再也不怕文章崩溃...

    昨日微信公众平台进行了相关更新,现在平台上的所有帐号都可以在图文编辑查看图文历史版本.这一改动为公众号运营者带来了极大的便利,在多人同时操作.多个电脑同时浏览时,再也不用担心素材内容一刷新就没了.不过 ...

  7. 微信公众号平台的现状及发展前景的分析(十八)

    一.基本信息 标题:微信公众号平台的现状及发展前景的分析 时间:2018 出版源:传媒论坛 文件分类:文献笔记 二.研究背景  随着移动互联网科技的飞速发展和日趋成熟,新媒体越来越受到人们的关注.新媒 ...

  8. js逆向常用加密 + 微信公众号平台试练

    文章目录 js常见的加密方式 Md5加密 DES/AES 加密 RSA加密 微信公众号平台js算法改写 js常见的加密方式 常见的加密算法基本分为这几类: 线性散列算法(签名算法) MD5 md2 m ...

  9. 公众号第三方平台和微信公众号平台的区别与开发步骤

    我们知道通过微信公众号平台的开放API可以实现用户个性制定制的功能,我们又知道使用开放API时必须知道AppID(应用ID)和AppSecret(应用密钥),而且还要配置URL(服务器地址).Toke ...

最新文章

  1. 一份数学小白也能读懂的「马尔可夫链蒙特卡洛方法」入门指南
  2. springboot 日志问题记录
  3. 汉诺塔问题hdu 2065——找规律
  4. .Net如何统计在线人数
  5. Docker的简单使用
  6. java url 缩略图_java根据url生成网页截图,缩略图 | 学步园
  7. u盘安装centos 7.2
  8. linux+模块与设备关系,linux内核设计与实现读书笔记——设备和模块
  9. html设置css浮点,基于宽度的HTML/CSS块浮点数变化
  10. 《Android 应用案例开发大全(第3版)》——第2章,第2.8节壁纸中的着色器开发...
  11. [试错题库]中国政企网络安全服务上岗证
  12. Node.js安装(window10需要管理员权限)
  13. SQL UCASE() 函数
  14. 解决HTML5页面在手机浏览器测试中发现 横向滚动条,尽管页面没有内容也是照常出现。
  15. 读书笔记----10日摘抄整理(12)
  16. 支付宝等第三方支付原理与概述
  17. outlook电子邮件解析_在Outlook中按会话对电子邮件进行排序
  18. 图与排列、图的存在性
  19. 最新DirectX SDK及Runtime官方下载地址
  20. Qt扫盲-Qt Designer 设计师使用总结

热门文章

  1. 马克飞象 Markdown 语法,对应上一篇
  2. 81-《大厂高薪必备技能实战1期》13-微服务架构治理-剪辑_ev 没用
  3. Excel文本转数字需要双击才能生效解决
  4. python传入参数的几种方法_python传递参数方式小结
  5. 【数据结构与算法综合实验】欢乐连连看(C++ MFC)案例
  6. 无忧精英网春季职场:节后招聘供需两旺 科技引领全行业变革
  7. 【Python】pipenv lock Read timed out
  8. 阿里巴巴 Java 编码规范最佳实践
  9. 三国志战略版:官渡之战_新阵容解读_袁绍
  10. 如何优雅的在 Mac 上安装fiddler [无需mono - 完美解决]