java auth weixin_微信接入,微信java接入

java微信接入

1、进入微信公众平台。

1461037610348087991.png

2、点击配置,进行相关配置。

服务器端上传以下servletpackage servlet;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.security.MessageDigest;

import java.security.NoSuchAlgorithmException;

import java.util.Arrays;

import java.util.logging.Logger;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import net.sf.json.JSONObject;

import net.sf.json.xml.XMLSerializer;

/**

* @author haibing.xiao

* @since jdk1.6

* @version 1.0

*/

public class Wx extends HttpServlet{

private Logger log =Logger.getLogger(this.getClass().getName());

private static final long serialVersionUID = 1L;

private   String Token;

private   String echostr;

@Override

protected void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

connect(request,response);

}

@Override

protected void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

message(request,response);

}

/**

*@author haibing.xiao

*@return

*@exception

*@param

*

接入连接生效验证

*/

private void connect(HttpServletRequest request,HttpServletResponse response) throws ServletException, 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);//完成相互认证

}

}

/**

* @author haibing.xiao

* Date 2013-05-29

* @return boolean

* @exception ServletException, IOException

* @param

*

*

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

*/

private boolean accessing(HttpServletRequest request, HttpServletResponse response)throws ServletException, 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 = new StringBuffer();

for (int i = 0; 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;

}

}

private String 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;

}

return strDes;

}

public String bytes2Hex(byte[] bts) {

String des = "";

String tmp = null;

for (int i = 0; i 

tmp = (Integer.toHexString(bts[i] & 0xFF));

if (tmp.length() == 1) {

des += "0";

}

des += tmp;

}

return des;

}

public String getEchostr(){

return echostr;

}

/**

*@author haibing.xiao

*@return

*@exception ServletException, IOException

*@param

*

XML组装组件

*/

private void message(HttpServletRequest request,HttpServletResponse response) throws ServletException, 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中

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();

}

}

/**

* @author haibing.xiao

* @return

* @exception ServletException, IOException

* @param

*

业务转发组件

*

*/

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

String responseStr;

try {

XMLSerializer xmlSerializer=new XMLSerializer();

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();

}

}

private String creatRevertText(JSONObject jsonObject){

StringBuffer revert =new StringBuffer();

revert.append("");

revert.append("");

revert.append("");

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

revert.append("");

revert.append("");

revert.append("0");

revert.append("");

return revert.toString();

}

@Override

public void init() throws ServletException {

Token="linchaoqun";

}

private boolean isEmpty(String str){

return null ==str || "".equals(str) ? true :false;

}

private String trim(String str){

return null !=str  ? str.trim() : str;

}

}

3、点击提交

1461037772694091186.png

完成验证。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值