微信公众号java接入指南_JAVA微信开发-新手接入指南

packagecom.wx.servlet;importjava.io.IOException;importjava.io.InputStream;importjava.io.OutputStream;importjava.security.MessageDigest;importjava.security.NoSuchAlgorithmException;importjava.util.Arrays;importjava.util.logging.Logger;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importnet.sf.json.JSONObject;importnet.sf.json.xml.XMLSerializer;/***@authorhaibing.xiao

*@sincejdk1.6

*@version1.0*/

public class WeixinServlet extendsHttpServlet{private Logger log =Logger.getLogger(this.getClass().getName());private static final long serialVersionUID = 1L;privateString Token;privateString echostr;

@Overrideprotected voiddoGet(HttpServletRequest request, HttpServletResponse response)throwsServletException, IOException {

connect(request,response);

}

@Overrideprotected voiddoPost(HttpServletRequest request, HttpServletResponse response)throwsServletException, IOException {

message(request,response);

}/***@authorhaibing.xiao

*@return*@exception*@param*

*

接入连接生效验证

*/

private void connect(HttpServletRequest request,HttpServletResponse response) throwsServletException, IOException{

log.info("RemoteAddr: "+request.getRemoteAddr());

log.info("QueryString: "+request.getQueryString());if(!accessing(request, response)){

log.info("服务器接入失败.......");return;

}

String echostr=getEchostr();if(echostr!=null && !"".equals(echostr)){

log.info("服务器接入生效..........");

response.getWriter().print(echostr);//完成相互认证

}

}/***@authorhaibing.xiao

* Date 2013-05-29

*@returnboolean

*@exceptionServletException, IOException

*@param*

*

用来接收微信公众平台的验证

*/

private boolean accessing(HttpServletRequest request, HttpServletResponse response)throwsServletException, IOException {

String signature= request.getParameter("signature");

String timestamp= request.getParameter("timestamp");

String nonce= request.getParameter("nonce");

String echostr= request.getParameter("echostr");if( isEmpty(signature)){return false;

}if(isEmpty(timestamp)){return false;

}if(isEmpty(nonce)){return false;

}if(isEmpty(echostr)){return false;

}

String[] ArrTmp={ Token, timestamp, nonce };

Arrays.sort(ArrTmp);

StringBuffer sb= newStringBuffer();for (int i = 0; i < ArrTmp.length; i++) {

sb.append(ArrTmp[i]);

}

String pwd=Encrypt(sb.toString());

log.info("signature:"+signature+"timestamp:"+timestamp+"nonce:"+nonce+"pwd:"+pwd+"echostr:"+echostr);if(trim(pwd).equals(trim(signature))){this.echostr =echostr;return true;

}else{return false;

}

}privateString Encrypt(String strSrc) {

MessageDigest md= null;

String strDes= null;byte[] bt =strSrc.getBytes();try{

md= MessageDigest.getInstance("SHA-1");

md.update(bt);

strDes= bytes2Hex(md.digest()); //to HexString

} catch(NoSuchAlgorithmException e) {

System.out.println("Invalid algorithm.");return null;

}returnstrDes;

}public String bytes2Hex(byte[] bts) {

String des= "";

String tmp= null;for (int i = 0; i < bts.length; i++) {

tmp= (Integer.toHexString(bts[i] & 0xFF));if (tmp.length() == 1) {

des+= "0";

}

des+=tmp;

}returndes;

}publicString getEchostr(){returnechostr;

}/***@authorhaibing.xiao

*@return*@exceptionServletException, IOException

*@param*

*

XML组装组件

*/

private void message(HttpServletRequest request,HttpServletResponse response) throwsServletException, IOException{

InputStream is=request.getInputStream();//取HTTP请求流长度

int size =request.getContentLength();//用于缓存每次读取的数据

byte[] buffer = new byte[size];//用于存放结果的数组

byte[] xmldataByte = new byte[size];int count = 0;int rbyte = 0;//循环读取

while (count

rbyte =is.read(buffer);for(int i=0;i

xmldataByte[count+ i] =buffer[i];

}

count+=rbyte;

}

is.close();

String requestStr= new String(xmldataByte, "UTF-8");try{

manageMessage(requestStr,request,response);

}catch(Exception e){

e.printStackTrace();

}

}/***@authorhaibing.xiao

*@return*@exceptionServletException, IOException

*@param*

*

业务转发组件

**/

private void manageMessage(String requestStr,HttpServletRequest request,HttpServletResponse response)throwsServletException,IOException{

String responseStr;try{

XMLSerializer xmlSerializer=newXMLSerializer();

JSONObject jsonObject=(JSONObject) xmlSerializer.read(requestStr);

String event=jsonObject.getString("Event");

String msgtype=jsonObject.getString("MsgType");if("CLICK".equals(event) && "event".equals(msgtype)){ //菜单click事件

String eventkey =jsonObject.getString("EventKey");if("hytd_001".equals(eventkey)){ //hytd_001 这是好友团队按钮的标志值

jsonObject.put("Content", "欢迎使用好友团队菜单click按钮.");

}

}

responseStr=creatRevertText(jsonObject);//创建XML

log.info("responseStr:"+responseStr);

OutputStream os=response.getOutputStream();

os.write(responseStr.getBytes("UTF-8"));

}catch(Exception e) {

e.printStackTrace();

}

}privateString creatRevertText(JSONObject jsonObject){

StringBuffer revert=newStringBuffer();

revert.append("");

revert.append("");

revert.append("");

revert.append(""+jsonObject.get("CreateTime")+"");

revert.append("");

revert.append("");

revert.append("0");

revert.append("");returnrevert.toString();

}

@Overridepublic void init() throwsServletException {

Token="test123";

}private booleanisEmpty(String str){return null ==str || "".equals(str) ? true :false;

}privateString trim(String str){return null !=str ?str.trim() : str;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值