这篇文章将为大家详细讲解有关java微信开发API服务器接入的示例,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
<强>一、说明强>
*本示例根据微信开发文档:http://mp.weixin.qq.com/wiki/home/index.html最新版(4/3/2016 5:34:36 PM)进行开发演示。
*编辑平台:myeclipse10.7 + win32 + jdk1.7 + tomcat7.0
*服务器:windows server 2008 64位
*平台要求:servlet使用注解方式,平台要求:j2ee6.0 + jdk6.0 + tomcat7.0 +
*演示更加注重于API解析。
*为了便于测试说明,每个测试用例为独立,不依赖于其它方法。对于封装,不多加考虑。
*演示尽可能按照API要求进行,目的:了解文档使用方式,达到举一反三的效果。
*知识要求:牢固的java基础,了解http网络通信知识,对于javaweb有足够了解,json解析
*当前时间:4/3/2016 5:32:57点,以该时间为准。
<强>二、文档原文(摘要)强>
文档地址:http://mp.weixin.qq.com/wiki/8/f9a0b8382e0b77d87b3bcc1ce6fbc104.html
接入微信公众平台开发,开发者需要按照如下步骤完成:
1,填写服务器配置
2,验证服务器地址的有效性,
3,依据接口文档实现业务逻辑
三、文档理解
验证服务器地址的有效性
<强> 1,api这样介绍:强>
开发者提交信息后,微信服务器将发送得到请求到填写的服务器地址URL上,得到请求携带四个参数:签名、时间戳、nonce, echostr
开发者通过检验签名对请求进行校验(下面有校验方式)。
若确认此次得到请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。
加密/校验流程如下:
1),将牌,时间戳,现时标志三个参数进行字典序排序
2),将三个参数字符串拼接成一个字符串进行sha1加密
3),开发者获得加密后的字符串可与签名对比,标识该请求来源于微信
<强> 2,理解强>
说明该请求是“获得”方式,并且访问该请求会返回四个参数:签名、时间戳、nonce, echostr。
我们需要接受这几个参数,然后进行处理。如果验证成功,返回接收到的“echostr”,否则验证失败。
验证方式是对接受到的令牌,时间戳,现时标志三个参数进行字典序排序,然后进行sha1加密,最后和签名对比。
*加密后的字符串可与签名对比,如果相等【该处api可能解释不是太明白,返回“echostr验证成功。
<强> 3,实现强>
创建一个servlet CoreServlet实现HttpServlet,重载doGet方法。
参数准备
//,设置一个全局的令牌,开发者自己设置.api这样解释:令牌可由开发者可以任意填写,//,用作生成签名(该令牌会和接口URL中包含的令牌进行比对,从而验证安全性) String token =,“wgyscsf";//,根据api说明,获取上述四个参数 String signature =, req.getParameter (“signature"); String timestamp =, req.getParameter (“timestamp"); String nonce =, req.getParameter (“nonce"); String echostr =, req.getParameter (“echostr");
根据api所说的三步骤进行操作
//,第一步:将牌,时间戳,现时标志三个参数进行字典序排序 时间=String [], parms new String[],{,令牌,时间戳,nonce },//,将需要字典序排列的字符串放到数组中 Arrays.sort(改);//,按照api要求进行字典序排序【百度:什么是字典序排序】//,第二步:将三个参数字符串拼接成一个字符串进行sha1加密【百度:java sha1加密】//,拼接字符串 String parmsString =,““//,注意,此处不能=零。 for (int 小姐:=,0;,小姐:& lt;, parms.length;,我+ +),{ parmsString +=,才能改(我); }//,sha1加密 String mParms =,零;//,加密后的结果 ……,//该地方是sha1加密的实现,不再贴代码,,,, 时间=mParms hexString.toString();//,加密结果/* ,* api要求:,若确认此次得到请求来自微信服务器,请原样返回echostr参数内容,,则接入生效,,成为开发者成功,否则接入失败。 ,*///,第三步:开发者获得加密后的字符串可与签名对比,标识该请求来源于微信接入成功。 System.out.println (TAG +,“:“, +, mParms +,“- - - - -在“,+,签名); if (mParms.equals(签名),{//才能,System.out.println (TAG +,“:“, +, mParms +,“- - - - -在“,+,签名); printWriter.write才能(echostr); },{else //,才能接入失败,不用回写//才能,System.out.println(时间+ TAG “接入失败“); }java微信开发API服务器接入的示例