前面几篇文章一直都在说微信公众平台的开发准备工作,那么从这篇开始我们就将正式的进入JAVA微信公众平台开发的整个流程,那么这篇我们开始聊聊如何将我们的服务端和微信公众平台对接!
<强>(一)接入流程解析
强>
在我们的开发过程中无论如何最好的参考工具当然是我们的官方文档了:http://mp.weixin.qq.com/wiki/8/f9a0b8382e0b77d87b3bcc1ce6fbc104.html
<强>通过上面我们可以看出其中接入微信公众平台开发,开发者需要按照如下步骤完成:
强>
-
<李>填写服务器配置李>
<李>验证服务器地址的有效性李>
<李>依据接口文档实现业务逻辑李>
按照上面的逻辑可能是填写服务器配置信息是在第一步,但是我们在真实的开发过程中往往都是先做第二步【编写代码实现验证服务器地址的有效性,因为没有第二步的完成第一步的配置是不能达到任何效果的!
<强>(二)验证服务器有效性代码编写强>
按照开发文档我们知道我们的应用服务器需要接受微信服务器的得到请求,其中包含四个参数(签名、时间戳、nonce echostr),然后通过校验方式校验服务器的可靠性,校验方式如下:
-
<李>将牌、时间戳、nonce三个参数进行字典序排序李>
<李>将三个参数字符串拼接成一个字符串进行sha1加密李>
<李>开发者获得加密后的字符串可与签名对比,标识该请求来源于微信李>
①我在这里写了一个工具类去实现其中的前两步,将三个参数排序并返回sha1加密后的字符串,代码如下:
包com.cuiyongzhi.wechat.util; 进口java.security.MessageDigest; 进口java.security.NoSuchAlgorithmException; 进口java.util.Arrays;/* * *名称:SignUtil * @Description:请求校验工具类 * @author dapengniao * @date 2016年3月4日下午6:25:41 */公开课SignUtil {//与接口配置信息中的令牌要一致 私有静态字符串标记=" dapengniaowechat”;/* * *验证签名 * @param签名 * @param时间戳 * @param现时标志 * @return */公共静态布尔checkSignature(时间戳字符串,字符串,字符串nonce) { String [] arr=新String[]{令牌,时间戳,nonce};//将牌,时间戳,现时标志三个参数进行字典序排序 Arrays.sort (arr); StringBuilder内容=new StringBuilder (); for (int i=0;我& lt;arr.length;我+ +){ content.append (arr[我]); } MessageDigest md=零; 字符串tmpStr=零; 尝试{ md=MessageDigest.getInstance (sha - 1);//将三个参数字符串拼接成一个字符串进行sha1加密 byte[]消化=md.digest (content.toString () .getBytes ()); tmpStr=byteToStr(消化); }捕捉(NoSuchAlgorithmException e) { e.printStackTrace (); } 内容=零;//将sha1加密后的字符串可与签名对比,标识该请求来源于微信 返回tmpStr !=null & # 63;tmpStr.equals (signature.toUpperCase()):假; }/* * *将字节数组转换为十六进制字符串 * @param中byteArray * @return */私有静态字符串byteToStr (byte[]中byteArray) { 字符串strDigest=" "; for (int i=0;我& lt;byteArray.length;我+ +){ strDigest +=byteToHexStr(中byteArray[我]); } 返回strDigest; }/* * *将字节转换为十六进制字符串 * @param兆字节 * @return */私有静态字符串byteToHexStr兆字节(字节){ char[]数字={' 0 ',' 1 ',' 2 ',' 3 ',' 4 ',' 5 ',' 6 ',' 7 ',' 8 ',' 9 ',' ',' B ', ' C ', ' D ', ' E ', ' F '}; char [] tempArr=new char [2]; tempArr[0]=数字[(兆字节祝辞祝辞祝辞4),0 x0f]; tempArr[1]=数字(兆字节,0 x0f]; 字符串s=新的字符串(tempArr); 返回年代; } } >之前②将我们的工具类应用到我们的服务器验证过程中,这里我新建一个控制器为WechatSecurity,实现同一个得到用于接收参数和返回验证参数,简单代码如下:
Java微信公众平台开发(1)接入微信公众平台