Explorar el Código

微信消息服务验签

release_toaliyun_real
Stormeye.Wu hace 7 años
padre
commit
f5dbc33f3c
Se han modificado 2 ficheros con 102 adiciones y 0 borrados
  1. +33
    -0
      mallinkCApi/src/main/java/com/simple/controller/WxUserGrantController.java
  2. +69
    -0
      mallinkService/src/main/java/com/simple/utils/CheckUtil.java

+ 33
- 0
mallinkCApi/src/main/java/com/simple/controller/WxUserGrantController.java Ver fichero

@@ -18,6 +18,7 @@ import com.simple.domain.po.WxCUserCar;
import com.simple.service.WxAppinfoService;
import com.simple.service.WxCUserCarService;
import com.simple.service.WxCUserService;
import com.simple.utils.CheckUtil;
import com.simple.utils.IPUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
@@ -32,6 +33,9 @@ import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
@@ -319,5 +323,34 @@ public class WxUserGrantController extends BaseController {
return new ResultData(Result.SUCCESS,"获取查询成功", list);
}

/**
* 微信消息服务验证
* @param response
* @param request
* @throws IOException
*/
@RequestMapping(value = "/signature")
@ResponseBody
public void signature(HttpServletResponse response, HttpServletRequest request) throws IOException {


String signature = request.getParameter("signature");
String timestamp = request.getParameter("timestamp");
String nonce = request.getParameter("nonce");
String echostr = request.getParameter("echostr");

logger.warn("收到的微信服务验证信息"+signature+"\n"+timestamp+"\n"+nonce+"\n"+echostr);
PrintWriter out = response.getWriter();
/*
// 通过检验signature对请求进行校验,若校验成功则原样返回echostr,表示接入成功,否则接入失败
if (CheckUtil.checkSignature(wp.getToken(), signature, timestamp, nonce)) {
out.print(echostr);
logger.warn("微信服务验证成功===================="+echostr);
System.out.println("微信服务验证成功!");
}
*/
out.close();
}


}

+ 69
- 0
mallinkService/src/main/java/com/simple/utils/CheckUtil.java Ver fichero

@@ -0,0 +1,69 @@
package com.simple.utils;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;

public class CheckUtil {
//token为自己定义的一个字符串
public static boolean checkSignature(String token, String signature,String timestamp,String nonce) {
String[] arr = new String[]{token,timestamp,nonce};

//排序
Arrays.sort(arr);

//生成字符串
StringBuffer sb = new StringBuffer();
for(int i=0; i<arr.length; i++) {
sb.append(arr[i]);
}

//sha1加密
String tmpStr = getSHA1Str(sb.toString());
//加密字符串与signature比较的时候忽略大小写
return tmpStr.equals(signature.toUpperCase());
}

private static String getSHA1Str(String content) {
MessageDigest md = null;
String tmpStr = null;

try {
md = MessageDigest.getInstance("SHA-1");
// 将三个参数字符串拼接成一个字符串进行 shal 加密
byte[] digest = md.digest(content.toString().getBytes());
tmpStr = byteToStr(digest);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return tmpStr;
}

/**
* 将字节数组转换为十六进制字符串
* @param digest
* @return
*/
private static String byteToStr(byte[] digest) {
String strDigest = "";
for(int i = 0; i < digest.length; i++){
strDigest += byteToHexStr(digest[i]);
}
return strDigest;
}

/**
* 将字节转换为十六进制字符串
* @param b
* @return
*/
private static String byteToHexStr(byte b) {
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[(b >>> 4) & 0X0F];
tempArr[1] = Digit[b & 0X0F];

String s = new String(tempArr);
return s;
}
}

Cargando…
Cancelar
Guardar