如果我们没有公众号可以测试又不想申请企业性质可以申请测试公众号,申请地址
http://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&t=sandbox/index
申请好后需要填写如下信息,这里比较重要就是需要提供接口验证,也就是你把
微信会调用我们写的服务接口,具体Java验证代码
@GetMapping(value = "/checksign",produces = { "application/json;charset=utf-8" })
public String getWeChatButt(@RequestParam String signature,
@RequestParam String timestamp,@RequestParam String nonce,
@RequestParam String echostr) {
//检验signature
Boolean flag = WeChatService.checkSignature(signature, token, timestamp, nonce);
if(flag) {
return echostr;
}
return null;
}
public static boolean checkSignature(String signature, String token, String timestamp, String nonce) {
//对参数进行排序
TreeSet<String> ts = new TreeSet<String>();
ts.add(token);
ts.add(timestamp);
ts.add(nonce);
String str;
String tempStr="";
while((str=ts.pollFirst())!=null){
tempStr+=str;
}
// SHA1加密
String sha1Str = SHA1(tempStr);
// 检验签名是否一致
return sha1Str.equals(signature);
}
/**
* SHA-1加密
* @param str 需要加密的字符串
* @return 返回加密后的字符串
*/
public static String SHA1(String str) {
MessageDigest digest = java.security.MessageDigest.getInstance("SHA1");
digest.update(str.getBytes());
byte messageDigest[] = digest.digest();
// Create Hex String
StringBuffer hexStr = new StringBuffer();
// 字节数组转换为 十六进制 数
for (int i = 0; i < messageDigest.length; i++) {
String shaHex = Integer.toHexString(messageDigest[i] & 0xFF);
if (shaHex.length() < 2) {
hexStr.append(0);
}
hexStr.append(shaHex);
}
return hexStr.toString();
}