微信服务号自定义服务器配置及验证
公众号自定义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>
到这里为止,微信服务号的服务器配置及校验相关的操作就完成了,根据这个流程,就能够使用服务号做一些自定义的操作了。
微信服务号自定义服务器配置及验证相关推荐
- 微信服务号自定义菜单添加扫码功能
本文主要介绍微信服务号自定义菜单添加扫码功能的详细步骤.本来百度了一个多小时,愣是没找个一个好用的方法,能够在自定义菜单里添加扫码功能. 这些文章要么就是写的太复杂,要把页面跳转到某https网页,然 ...
- 微信公众号修改服务器配置token验证失败
@微信公众号修改服务器配置token验证失败 微信公众号修改服务器配置token验证失败 新建SignUtil类 public class SignUtil {// 与接口配置信息中的 Token 要 ...
- 2 微信公众号开发 服务器配置 Token验证
服务器配置的主要难点就是Token验证. 官方文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1445241432 接入指南 ...
- 关于微信服务号自定义发送给朋友/分享到朋友圈, 发送/分享失败的一些问题及解决方式
最近 在给客户开发微信公众号, 里面需要涉及到自定义发送给朋友/分享至朋友圈的需求,从 按照微信开发者文档里的教程一步步走下来到最后成功, 其中碰到了两个问题. 首先是设置wx.onMenuShare ...
- java开发微信服务号(四) 验证消息的确来自微信服务器
为了在公众号里配置下图时使用的代码: Controller层代码: import com.weixin.wxDemo.service.CheckTokenService; import lombok. ...
- 用c#开发微信(1)服务号的服务器配置和企业号的回调模式 - url接入
2019独角兽企业重金招聘Python工程师标准>>> 阅读目录 一.用法 二.实现方法 最近研究了下服务号的服务器配置和企业号的回调模式.真正实现完后,觉得很简单,但一开始还是走了 ...
- 微信服务号解决开启服务配置后自定义菜单失效的方法
在部署微信服务号时碰到一个问题,由于需要监听用户订阅和取消订阅服务号的事件,所以开启了服务器配置(如何监听可查阅我上一篇文章),开启后发现服务号的菜单不见了.到微信公众平台的管理后台中查看自定义菜单, ...
- 自定义菜单url不能带_微服务架构【SpringBoot+SpringCloud+VUE】五 || 实战项目微信公众号自定义开发...
本章主要讲解微信公众号自定义菜单.微信网页开发.模板消息推送等功能的实现: 发福利了,下方关注公众号,就能免费获取项目源码 1.自定义菜单 开发前需要了解以下几点: 1.微信公众号的自定义菜单最多包括 ...
- 【微信服务号开发】01.接入指南
前言 当作为小白,来开发微信的时候,只依据官方文档来开发是很痛苦的,怎么配置,怎么编写代码文件,怎么让映射到外网访问,问题很多,比较痛苦. 下面内容来解决这些痛点,有不懂的问题,可以在下面留言评论哦. ...
最新文章
- Centos 6.5 Pxe+kickstart 无人值守安装操作系统
- js ajax上传文件到服务器,使用ajax上传并预览图片后传到服务器上
- 计算机系统化科学化和什么,自动化概论复习资料
- HLS_error implicit instantiation of undefined template ‘ssdm_int
- 升级到BigSur无法使用git和brew解决办法
- 二叉排序树与文件操作的设计与实现_堆排序就这么简单
- php 保护连接字符串,PHP OOP更新扩展类__construct上的受保护字符串
- 韩国FSC公布新方案允许分离银行加密业务 以帮助小型交易所继续运营
- C语言标准库函数大全(ctype、time 、stdio、stdlib、math、string)
- Cocos2d-x 3.17.2 集成X5WebView内核方法,完美运行
- 利用rancher轻松构建pass平台
- Android Intent 机制解析 - Intent 是什么?作用是什么?
- 发现在创建云服务器ecs实例的磁盘快照时_阿里云服务器怎么重装系统 阿里云VPS如何重装系统...
- minio error occured
- windows系统下Redis下载安装与配置(内附蓝奏云下载地址)
- 计算机科学和交互设计,交互设计(超越人机交互原书第5版)/计算机科学丛书
- 当我在ChatGPT上问重建大师,它居然这样回答我
- [Win32]画笔和规则区域填充
- macbook air扩展显示器全屏滑动怎样不一起滑动?
- 7种方法实现数组去重