要成为微信开发者,首先需要进入接入校验,微信相关的接入文档地址为:
具体步骤如下:
一、填写服务器配置
1、申请微信公众号,并登陆:https://mp./
2、填写相关的参数:点击左侧菜单栏中的【开发】中的【基本配置】
3、修改服务器配置:
1)填写URL:/wechat/authenticate(注意需要使用80端口)
2)填写Token:wechat(这个token需要与程序中的token一致)
二、验证服务器地址的有效性
2、该请求会带上四个参数:signature、timestamp、nonce、echostr
3、开发者对参数进行相应的处理后,与signature进行对比,如果相等,则直接输出echostr,代表接入成功,否则接入失败,具体逻辑如下:
1)将token(自定义的)、timestamp、nonce进行字典排序
2)将三个参数拼接着一个字符串
3)将拼接后的字符串进行SHA-1加密
4)将加密后的字符串与signature进行对比
4、具体实现代码如下(为了代码的简洁明了,暂时没使用任何框架):
packagecn.kolbe.wechat.authenticate.controller;
importjava.io.IOException;
importjava.io.PrintWriter;
importjava.security.MessageDigest;
importjava.security.NoSuchAlgorithmException;
importjava.util.Arrays;
importjavax.servlet.ServletException;
importjavax.servlet.annotation.WebServlet;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
@WebServlet("/authenticate")
publicclassAuthenticateControllerextendsHttpServlet{
//token可自定义
privatestaticfinalStringTOKEN="wechat";
privatestaticfinallongserialVersionUID=1L;
/**
*微信公众平台接入校验
*/
@Override
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
response.setCharacterEncoding("utf-8");
PrintWriterout=response.getWriter();
//将token,timestamp,nonce三个参数进行字典排序
String[]sourceArray=newString[]{TOKEN,request.getParameter("timestamp"),request.getParameter("nonce")};
Arrays.sort(sourceArray);
//将三个参数字符串拼接成一个字符串
StringBuildersortArray=newStringBuilder();
for(Strings:sourceArray){
sortArray.append(s);
}
//对拼接成功的字符串进行SHA-1加密
StringhexString=byteArrayToHex(sortArray.toString().getBytes());
//将加密过的字符串与signature对比
if(hexString!=null&&hexString.equals(request.getParameter("signature"))){
//如果相等则原样输出echostr,接入成功
out.print(request.getParameter("echostr"));
}else{
//如果不相等,则接入失败
response.setContentType("text/html;charset=utf-8");
out.println("校验失败");
}
out.close();
}
/**
*将字节数组加密后转化成十六进制字符串
*@parambyteArray
*@return
*/
publicStringbyteArrayToHex(byte[]byteArray){
try{
MessageDigestmd=MessageDigest.getInstance("SHA-1");
md.update(byteArray);
byte[]digest=md.digest();
Strings=newString();
StringBuilderresult=newStringBuilder();
for(byteb:digest){
if((s=Integer.toHexString(b)).length()
s=0+s;
}
result.append(s);
}
returnresult.toString();
}catch(NoSuchAlgorithmExceptione){
e.printStackTrace();
}
returnnull;
}
}
三、接入成功
1、如果顺利完成上面两步,并提示接入成功,此时代表已经成功接入微信
2、后续微信会将用户的消息通过Post发送到:/wechat/authenticate,我们可以在AuthenticateController中的doPost方法进行相应的逻辑处理