private
static
final
long
serialVersionUID = 4440739483644821986L;
String sToken =
"5XaQ8cG6x2pULd"
;
//这个Token是随机生成,但是必须跟企业号上的相同
String sCorpID =
"wx4edd47d3a6r4r991"
;
//这里是你企业号的CorpID
String sEncodingAESKey =
"jWmYm7qjusnxu65ZRjGtBxmz3KA1tkAj3ykkR6q2B2C"
;
//这个EncodingAESKey是随机生成,但是必须跟企业号上的相同
/**
* 确认请求来自微信服务器
* @throws IOException
*/
public
void
doGet(HttpServletRequest request, HttpServletResponse response)
throws
IOException{
// 微信加密签名
String sVerifyMsgSig = request.getParameter(
"msg_signature"
);
// 时间戳
String sVerifyTimeStamp = request.getParameter(
"timestamp"
);
// 随机数
String sVerifyNonce = request.getParameter(
"nonce"
);
// 随机字符串
String sVerifyEchoStr = request.getParameter(
"echostr"
);
String sEchoStr;
//需要返回的明文
PrintWriter out = response.getWriter();
WXBizMsgCrypt wxcpt;
try
{
wxcpt =
new
WXBizMsgCrypt(sToken, sEncodingAESKey, sCorpID);
sEchoStr = wxcpt.VerifyURL(sVerifyMsgSig, sVerifyTimeStamp,sVerifyNonce, sVerifyEchoStr);
// 验证URL成功,将sEchoStr返回
out.print(sEchoStr);
}
catch
(AesException e1) {
e1.printStackTrace();
}
}
关于上面接入代码不过多讲解,只说我碰到的问题
我本机是jdk1.6.0_23 ,下载JCEPolicyJDK6,,百度中搜索"UnlimitedJCEPolicyJDK6"这个进行下载,覆盖到\lib\security中,
还有官方提供的代码报错部分解决办法(WXBizMsgCrypt.java,PKCS7Encoder.java):
把Arrays.copyOfRange()方法,替换成下面的方法
public static byte[] copyOfRange(byte[] original, int from, int to) {
int newLength = to - from;
if (newLength < 0)
throw new IllegalArgumentException(from + " > " + to);
byte[] copy = new byte[newLength];
System.arraycopy(original, from, copy, 0,
Math.min(original.length - from, newLength));
return copy;
}
static String CHARSET = "utf-8";
static byte[] encode(int count) {
byte[] b = null;
try{
// 计算需要填充的位数
int amountToPad = BLOCK_SIZE - (count % BLOCK_SIZE);
if (amountToPad == 0) {
amountToPad = BLOCK_SIZE;
}
// 获得补位所用的字符
char padChr = chr(amountToPad);
String tmp = new String();
for (int index = 0; index < amountToPad; index++) {
tmp += padChr;
}
b = tmp.getBytes(CHARSET);
}catch(Exception e){
e.printStackTrace();
}
return b;
}
剩下就搞定了