微信开发者验证接口开发
微信开发者接口验证。
Token,自己随便定义,与微信填写一致就可以了。
根据微信接入指南描述http://mp.weixin.qq.com/wiki/17/2d4265491f12608cd170a95559800f2d.html
第一步:填写服务器配置
第二步:验证服务器地址的有效性
第三步:依据接口文档实现业务逻辑
这里主要讲第二步验证服务器有效性。
建一个普通javaweb项目即可
建一个验证的Servlet,AccessAction.java
/* * Copyright (c) 2014-2018 Swingsoft Co.Ltd. All rights reserved. */ package com.mn606.weixin.action; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.mn606.weixin.util.AccessUtil; /** * 微信开发者验证接口 * * @author Swing */ public class AccessAction extends HttpServlet { /** * Comment for <code>serialVersionUID</code> */ private static final long serialVersionUID = 1L; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doPost(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String signature = req.getParameter("signature"); String timestamp = req.getParameter("timestamp"); String nonce = req.getParameter("nonce"); String echostr = req.getParameter("echostr"); if (AccessUtil.checkSignature(signature, timestamp, nonce)) { resp.getWriter().write(echostr); resp.getWriter().flush(); resp.getWriter().close(); } } }
第二个创建验证工具类AccessUtil.java
/* * Copyright (c) 2014-2018 Swingsoft Co.Ltd. All rights reserved. */ package com.mn606.weixin.util; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Arrays; /** * 微信开发者工具类 * * @author Swing */ public class AccessUtil { public final static String TOKEN = "abcdefg"; /** * * 校验签名是否正确 * * @param signature 微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。 * @param timestamp 时间戳 * @param nonce 随机数 * @return 正确返回true */ public static boolean checkSignature(String signature, String timestamp, String nonce) { // 验证参数是否为空 if (isBank(signature) || isBank(timestamp) || isBank(nonce)) { return false; } // 1.将token、timestamp、nonce三个参数进行字典序排序 String tmpStr = sort(TOKEN, timestamp, nonce); System.out.println(tmpStr); // 2.将三个参数字符串拼接成一个字符串进行sha1加密 tmpStr = sha1(tmpStr); System.out.println(tmpStr); // 3.开发者获得加密后的字符串可与signature对比,标识该请求来源于微信 if (tmpStr.equals(signature)) { return true; } else { return false; } } /** * * 进行字典序排序 * * @param value * @return */ public static String sort(String token, String timestamp, String nonce) { StringBuilder result = new StringBuilder(); String[] strArr = { TOKEN, timestamp, nonce }; Arrays.sort(strArr); for (int i = 0; i < strArr.length; i++) { result.append(strArr[i]); } return result.toString(); } /** * * 判断参数是否为空 * * @param value * @return */ public static boolean isBank(String value) { if (value != null && !value.trim().isEmpty()) { return false; } return false; } /** * * 使用SHA1加密 * * @param input * @return * @throws NoSuchAlgorithmException */ public static String sha1(String input) { MessageDigest mDigest; try { mDigest = MessageDigest.getInstance("SHA1"); byte[] result = mDigest.digest(input.getBytes()); StringBuffer sb = new StringBuffer(); for (int i = 0; i < result.length; i++) { sb.append(Integer.toString((result[i] & 0xff) + 0x100, 16).substring(1)); } return sb.toString(); } catch (NoSuchAlgorithmException e) { return null; } } }
其他的servlet自己去配置吧。
完成后,自己去在微信的接口填写正确的url,token提交验证。
相关推荐
jieq 2020-11-09
ZZZhangbingyi 2020-08-26
haixianTV 2020-08-15
Develop 2020-06-25
郴州小程序 2020-06-13
huningjun 2020-06-12
zuoliangzhu 2020-06-11
hgzhang 2020-06-04
浪味仙 2020-06-03
powderhose 2020-06-02
cdkey 2020-05-29
戴翔的技术 2020-05-27
郴州小程序 2020-05-26
cdkey 2020-05-26
sucheng 2020-05-25
newhappy 2020-05-16
cbao 2020-05-12
cbao 2020-04-26
草根工程师 2020-03-27