测试号接入
接口配置信息验证
开发者提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上,GET请求携带参数有4个:signature、timestamp、nonce、echostr。
开发者通过检验signature对请求进行校验(下面有校验方式)。
若确认此次GET请求来自微信服务器,原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。
加密/校验流程如下:
1)将token、timestamp、nonce三个参数进行字典序排序 2)将三个参数字符串拼接成一个字符串进行sha1加密 3)开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
//加密/校验流程
//1)将token、timestamp、nonce三个参数进行字典序排序
String[] strs = new String[]{TOKEN,timestamp,nonce};
Arrays.sort(strs);
//2)将三个参数字符串拼接成一个字符串进行sha1加密
String str = strs[0] + strs[1] + strs[2];
String mysig = sha1(str);
System.out.println("mysig:"+mysig);
System.out.println("signature:"+signature);
//3)开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
if(mysig.equals(signature)){
return true;
}
//sha1加密
private String sha1(String str) {
try {
//获取加密对象
MessageDigest md = MessageDigest.getInstance("sha1");
//得到加密后的字节数组
byte[] bytes = md.digest(str.getBytes());
char[] chars = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
StringBuilder sb = new StringBuilder();
for(byte b : bytes){
//高四位转化16进制数
sb.append(chars[(b>>4)&15]);
//低四位转化为16进制数
sb.append(chars[b&15]);
}
return sb.toString();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return null;
}