java微信开发-token验证
2017-06-06 17:37
197 查看
1、配置springMVC环境。
这里就不贴代码了。不知道的朋友,可以去看我的博客。2、验证token
说明:在微信公众号测试平台中填写了正确的url、token后,微信会向填写的url地址发送一条get请求。该请求带有signature、timestamp、nonce、echostr参数。服务端返回echostr参数,则表示token验证成功。@Controller
public class HelloWorldController {
/**
* 微信消息接收和token验证
* @param model
* @param request
* @param response
* @throws IOException
*/
@RequestMapping("/hello")
public void hello(Model model, HttpServletRequest request,HttpServletResponse response) throws IOException {
boolean isGet = request.getMethod().toLowerCase().equals("get");
PrintWriter print;
if (isGet) {
// 微信加密签名
String signature = request.getParameter("signature");
// 时间戳
String timestamp = request.getParameter("timestamp");
// 随机数
String nonce = request.getParameter("nonce");
// 随机字符串
String echostr = request.getParameter("echostr");
// 通过检验signature对请求进行校验,若校验成功则原样返回echostr,表示接入成功,否则接入失败
if (signature != null && CheckoutUtil.checkSignature(signature, timestamp, nonce)) {
try {
print = response.getWriter();
print.write(echostr);
print.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
}请求校验工具类
public class CheckoutUtil { // 与接口配置信息中的Token要一致 private static String token = "Javen"; /** * 验证签名 * * @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; } } } } }
3、在微信公众号测试平台中,填写url、token
注:1、url为项目路径且必须可以通过外网80端口访问
2、token必须和项目中token一致
转:http://lib.csdn.net/article/wechat/46003
相关文章推荐
- java微信开发-token验证
- java微信开发-token验证
- java微信公众账号开发者验证
- java微信签名,验证微信发送的signature,还有获取access_token和ticket
- Java企业微信开发_10_未验证域名归属,JS-SDK功能受限
- 微信测试公众号基本配置URL和Token的验证-JAVA
- 微信小程序 对微信用户数据的签名验证和加解密 Java版
- 微信公共平台验证接口JAVA实现
- java 微信小程序登录 验证登录并获取用户信息
- 微信开发(2):微信js sdk分享朋友圈,朋友,获取config接口注入权限验证(java)
- 移动端第三方登录(微信)java验证并获取用户信息
- java 开发微信中回调验证一直提示 解密失败处理(Java)
- java 微信开发token验证失败的一种情况
- Java企业微信开发_09_身份验证之移动端网页授权(有完整项目源码)
- 微信公众测试号使用Java Spring MVC,接口配置token验证。
- java微信签名,验证微信发送的signature,还有获取access_token和ticket
- java微信公众号开发 - 微信服务器的接入和验证
- Java微信二次开发(一) Java微信请求验证功能
- java官方工具包微信H5支付报“支付验证签名失败”
- 微信token验证失败Java解决办法