公众号自定义URL配置及验证

接口配置信息

登录微信公众平台,点击左侧导航栏上的基本配置按钮,会出现如下图信息:

在这个界面,我们可以设置微信服务号的自定义服务器地址URL、Token、消息加解密秘钥,并且可以获取到该服务号的AppID、AppSecret信息。点击修改配置按钮(第一次开启时该按钮名称叫启用),可以修改和配置URL信息,如下图:

这样,当配置了服务器信息之后,通过微信服务号发送的消息就能够发送到我们自定义的服务器URL上进行处理。当然,开启了自定义服务配置之后,通过微信公众平台设置的菜单等信息就会失效,需要通过接口的方式进行设置,这块后面会讲到。

接口配置验证

验证需要用到的参数:

上面说的很清楚,当点击提交自定义的服务器配置之后,微信服务器会访问该服务器配置URL,并携带这四个参数,而我们配置的服务器端就需要进行验证,验证通过方可使用。

服务器端验证代码

CoreServlet:

/*** 核心请求处理类* @author TanJin* @date 2015-8-6*/
public class CoreServlet extends HttpServlet {private static final long serialVersionUID = 1L;protected Logger logger = LoggerFactory.getLogger(getClass());@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) {String signature = request.getParameter("signature");   // 微信加密签名  String timestamp = request.getParameter("timestamp");   // 时间戳  String nonce = request.getParameter("nonce");           // 随机数  String echostr = request.getParameter("echostr");       // 随机字符串  PrintWriter out = response.getWriter();  // 通过检验signature对请求进行校验,若校验成功则原样返回echostr,表示接入成功,否则接入失败  if (SignUtil.checkSignature(signature, timestamp, nonce)) {  out.print(echostr);  }  out.close();  out = null;}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response){//将请求、响应的编码均设置为UTF-8(防止中文乱码)  request.setCharacterEncoding("UTF-8");  response.setCharacterEncoding("UTF-8");  //调用核心业务类接收消息、处理消息  String respMessage = CoreService.getInstance().processRequest(request);//响应消息PrintWriter out = response.getWriter();  out.print(respMessage);  out.close();  }
}

请求校验工具SighUtil:

/*** 请求校验工具类 * @date 2015-7-21*/
public class SignUtil {protected static Logger logger = LoggerFactory.getLogger(SignUtil.class);/*** 验证签名*/public static boolean checkSignature(String signature, String timestamp, String nonce) {  String[] arr = new String[] {WechatConstant.token, timestamp, nonce};  // 将token、timestamp、nonce三个参数进行字典序排序  Arrays.sort(arr);  StringBuilder content = new StringBuilder();  for (int i = 0; i < arr.length; i++) {  content.append(arr[i]);  }  String tmpStr = sha1(content.toString());   //进行sha1数字签名logger.info("[SignUtil] [sha1 after tmpStr:{}]", tmpStr);// 将sha1加密后的字符串可与signature对比,标识该请求来源于微信  return tmpStr != null ? tmpStr.equals(signature.toLowerCase()) : false;  }  /*** 对给定字符串内容进行sha1数字签名* @date 2015-8-28*/public static String sha1(String content) {MessageDigest md = null;  String tmpStr = null;  try {  md = MessageDigest.getInstance("SHA-1");  // 将三个参数字符串拼接成一个字符串进行sha1加密  byte[] digest = md.digest(content.getBytes());  tmpStr = byteToStr(digest);  } catch (NoSuchAlgorithmException e) {  e.printStackTrace();  }return tmpStr.toLowerCase();} /** * 将字节数组转换为十六进制字符串 * @date 2015-7-21*/  private static String byteToStr(byte[] byteArray) {  String strDigest = "";  for (int i = 0; i < byteArray.length; i++) {  strDigest += byteToHexStr(byteArray[i]);  }  return strDigest;  }/** * 将字节转换为十六进制字符串 * @date 2015-7-21*/  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;  }
}
  • 这里唯一需要注意的就是SignUtil类中的成员变量token,这里赋予什么值,在接口配置信息中的Token就要填写什么值,两边保持一致即可,没有其他要求,建议用项目名称、公司名称缩写等。

web.xml配置:

<servlet><servlet-name>wechatServiceAccount</servlet-name><servlet-class>com.common.component.wechat.controller.CoreServlet</servlet-class>
</servlet>
<servlet-mapping><servlet-name>wechatServiceAccount</servlet-name><url-pattern>/wechat/service/core</url-pattern>
</servlet-mapping>

到这里为止,微信服务号的服务器配置及校验相关的操作就完成了,根据这个流程,就能够使用服务号做一些自定义的操作了。

微信服务号自定义服务器配置及验证相关推荐

  1. 微信服务号自定义菜单添加扫码功能

    本文主要介绍微信服务号自定义菜单添加扫码功能的详细步骤.本来百度了一个多小时,愣是没找个一个好用的方法,能够在自定义菜单里添加扫码功能. 这些文章要么就是写的太复杂,要把页面跳转到某https网页,然 ...

  2. 微信公众号修改服务器配置token验证失败

    @微信公众号修改服务器配置token验证失败 微信公众号修改服务器配置token验证失败 新建SignUtil类 public class SignUtil {// 与接口配置信息中的 Token 要 ...

  3. 2 微信公众号开发 服务器配置 Token验证

    服务器配置的主要难点就是Token验证. 官方文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1445241432 接入指南 ...

  4. 关于微信服务号自定义发送给朋友/分享到朋友圈, 发送/分享失败的一些问题及解决方式

    最近 在给客户开发微信公众号, 里面需要涉及到自定义发送给朋友/分享至朋友圈的需求,从 按照微信开发者文档里的教程一步步走下来到最后成功, 其中碰到了两个问题. 首先是设置wx.onMenuShare ...

  5. java开发微信服务号(四) 验证消息的确来自微信服务器

    为了在公众号里配置下图时使用的代码: Controller层代码: import com.weixin.wxDemo.service.CheckTokenService; import lombok. ...

  6. 用c#开发微信(1)服务号的服务器配置和企业号的回调模式 - url接入

    2019独角兽企业重金招聘Python工程师标准>>> 阅读目录 一.用法 二.实现方法 最近研究了下服务号的服务器配置和企业号的回调模式.真正实现完后,觉得很简单,但一开始还是走了 ...

  7. 微信服务号解决开启服务配置后自定义菜单失效的方法

    在部署微信服务号时碰到一个问题,由于需要监听用户订阅和取消订阅服务号的事件,所以开启了服务器配置(如何监听可查阅我上一篇文章),开启后发现服务号的菜单不见了.到微信公众平台的管理后台中查看自定义菜单, ...

  8. 自定义菜单url不能带_微服务架构【SpringBoot+SpringCloud+VUE】五 || 实战项目微信公众号自定义开发...

    本章主要讲解微信公众号自定义菜单.微信网页开发.模板消息推送等功能的实现: 发福利了,下方关注公众号,就能免费获取项目源码 1.自定义菜单 开发前需要了解以下几点: 1.微信公众号的自定义菜单最多包括 ...

  9. 【微信服务号开发】01.接入指南

    前言 当作为小白,来开发微信的时候,只依据官方文档来开发是很痛苦的,怎么配置,怎么编写代码文件,怎么让映射到外网访问,问题很多,比较痛苦. 下面内容来解决这些痛点,有不懂的问题,可以在下面留言评论哦. ...

最新文章

  1. Centos 6.5 Pxe+kickstart 无人值守安装操作系统
  2. js ajax上传文件到服务器,使用ajax上传并预览图片后传到服务器上
  3. 计算机系统化科学化和什么,自动化概论复习资料
  4. HLS_error implicit instantiation of undefined template ‘ssdm_int
  5. 升级到BigSur无法使用git和brew解决办法
  6. 二叉排序树与文件操作的设计与实现_堆排序就这么简单
  7. php 保护连接字符串,PHP OOP更新扩展类__construct上的受保护字符串
  8. 韩国FSC公布新方案允许分离银行加密业务 以帮助小型交易所继续运营
  9. C语言标准库函数大全(ctype、time 、stdio、stdlib、math、string)
  10. Cocos2d-x 3.17.2 集成X5WebView内核方法,完美运行
  11. 利用rancher轻松构建pass平台
  12. Android Intent 机制解析 - Intent 是什么?作用是什么?
  13. 发现在创建云服务器ecs实例的磁盘快照时_阿里云服务器怎么重装系统 阿里云VPS如何重装系统...
  14. minio error occured
  15. windows系统下Redis下载安装与配置(内附蓝奏云下载地址)
  16. 计算机科学和交互设计,交互设计(超越人机交互原书第5版)/计算机科学丛书
  17. 当我在ChatGPT上问重建大师,它居然这样回答我
  18. [Win32]画笔和规则区域填充
  19. macbook air扩展显示器全屏滑动怎样不一起滑动?
  20. 7种方法实现数组去重

热门文章

  1. 这两天,小感冒经历了鬼门关
  2. 小程序wx:if 隐藏显示时频幕闪烁问题
  3. 批量修改文本添加字符批处理
  4. IOS Blocks 详细介绍
  5. minix 文件系统学习
  6. 如何在VirtualJudge建比赛
  7. 连续型随机变量的概率分布
  8. 安卓实现文本以pdf格式保存,导出时中文出现的空白问题,以及打印pdf文档
  9. 禁止浏览器打开 F12 调试
  10. PRIME PATH