HttpServletRequest request = ServletActionContext.getRequest();HttpServletResponse response = ServletActionContext.getResponse();String method = request.getMethod();if(method != null && method.equals("GET")) out.close(); out = null; }if(method != null && method.equals("POST"))
**请求验证工具类(查找资料得到)**
package com.cntinker.util.wx.connect;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;/** * 请求校验工具类 * */
public class SignUtil { /** * 验证签名 * * @param signature * @param timestamp * @param nonce * @return */ public static boolean checkSignature(String weixintoken,String signature, String timestamp, String nonce) { String[] arr = new String[] { weixintoken, timestamp, nonce }; Arrays.sort(arr); StringBuilder content = new StringBuilder(); for (int i = 0; i < arr.length; i++) { content.append(arr[i]); } MessageDigest md = null; String tmpStr = null; try { md = MessageDigest.getInstance("SHA-1"); byte[] digest = md.digest(content.toString().getBytes()); tmpStr = byteToStr(digest); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } content = null; return tmpStr != null ? tmpStr.equals(signature.toUpperCase()) : false; } /** * 将字节数组转换为十六进制字符串 * * @param byteArray * @return */ private static String byteToStr(byte[] byteArray) { String strDigest = ""; for (int i = 0; i < byteArray.length; i++) { strDigest += byteToHexStr(byteArray[i]); } return strDigest; } /** * 将字节转换为十六进制字符串 * * @param mByte * @return */ private static String byteToHexStr(byte mByte) { char[] Digit = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; char[] tempArr = new char[2]; tempArr[0] = Digit[(mByte >>> 4) & 0X0F]; tempArr[1] = Digit[mByte & 0X0F]; String s = new String(tempArr); return s; }
}
**解析用户消息XML**
public String processRequest() {HttpServletRequest request = ServletActionContext.getRequest();String respMessage = null;try {Map<String, String> requestMap = MessageUtil.parseXml(request); String FromUserName = requestMap.get("FromUserName"); String ToUserName = requestMap.get("ToUserName"); String MsgType = requestMap.get("MsgType"); if (WXMsgType.REQ_MESSAGE_TYPE_TEXT.equals(MsgType)){String Content = requestMap.get("Content"); String message = null;if(Content.startsWith("t")){String type=Content.substring(1, Content.length());Map<String, Integer> index_count = wXFarmerImageService.findImageByUserId(FromUserName, type);Iterator iter =index_count.entrySet().iterator(); while (iter.hasNext()) { Map.Entry entry = (Map.Entry) iter.next(); String key = (String)entry.getKey(); int val = (int)entry.getValue(); if(key.equals("0")){if(val!=0){message = "照片分类成功,剩余"+val+"张图片未分类";}else{message = "照片分类成功";}}else if(key.equals("1")){message = "照片分类失败,请按照提示回复";}else if(key.equals("2")){message = "您上传的照片已经全部分类,无需重复提交!";}}respMessage = respfText(FromUserName, ToUserName, message, "1234567890123456");}else{message = "温馨提示:\n上传图片可直接回复图片或选择菜单上传"+ "\n上传生产计划请选择菜单进行上传"+ "\n查看个人信息请选择菜单进行查看";}respMessage = respfText(FromUserName, ToUserName, message, "1234567890123456");}if (WXMsgType.REQ_MESSAGE_TYPE_EVENT.equals(MsgType)) {String event = requestMap.get("Event");if ("subscribe".equals(event)){String message = null;Farmer farmer = new Farmer();farmer.setUserId(FromUserName);String access_Token = WXFGetTokenService.accessTokenIsOvertime();JSONObject userInformation = WeixinUtil.httpRequest(WXurl.WXF_USERNAME_URL.replace("ACCESS_TOKEN",access_Token).replace("OPENID",FromUserName), "GET", null);farmer.setUserName(userInformation.getString("nickname"));farmer.setHeadPortrait(userInformation.getString("headimgurl").substring(0, userInformation.getString("headimgurl").length()-1)+"64");farmer.setStatus("0");farmerService.saveFarmer(farmer);message = "欢迎关注康源公社服务号\n"+ "温馨提示:\n上传图片可直接回复图片或选择菜单上传"+ "\n上传生产计划请选择菜单进行上传"+ "\n查看个人信息请选择菜单进行查看";respMessage = respfText(FromUserName, ToUserName, message, "1234567890123456");}}if (WXMsgType.REQ_MESSAGE_TYPE_IMAGE.equals(MsgType)) {String picUrl = requestMap.get(WXMessage.PICURL);String status = farmerService.getStatus(FromUserName);String message = null;if(status.equals("0")){message ="点击上方文字进行填写信息";String access_tokenF = WXFGetTokenService.accessTokenIsOvertime();String messages = "+WXfInit.SERVICEURLW+"/xnr/page/wx/farmer/farmerExamine.action?farmerId="+FromUserName+"\">请前往页面填写审核信息。";Text text = new Text();text.setContent(messages);TextMessageF textMessageF =new TextMessageF();textMessageF.setTouser(FromUserName);textMessageF.setMsgtype("text");textMessageF.setText(text);String outputStr = JSONObject.fromObject(textMessageF).toString();JSONObject jsons = WeixinUtil.httpRequest(WXurl.WXF_MESSARW_TO_USER.replace("ACCESS_TOKEN", access_tokenF), "POST", outputStr);}else if(status.equals("3")){message = "审核资料已提交,请等待审核!";}else{wXFarmerImageService.save(FromUserName, picUrl);String types = farmerService.getFenleiByUserId(FromUserName);List<BusinessGoods> list = businessGoodsService.getTypeNameById(types);StringBuffer me = new StringBuffer();for (BusinessGoods businessGoods : list) {me.append("t"+businessGoods.getId()+businessGoods.getGoodsName()+"\n");}message = "请按顺序回复上传图片分类:"+me.toString();}respMessage = respfText(FromUserName, ToUserName, message, "1234567890123456");}}catch (Exception e) {e.printStackTrace();}return respMessage;}
**对用户的xml解析和返回和转义成xml形式工具类(查找资料获取)**
package com.xnradmin.client.service.wx;import java.io.InputStream;
import java.io.Writer;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import javax.servlet.http.HttpServletRequest;import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.core.util.QuickWriter;
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
import com.thoughtworks.xstream.io.xml.PrettyPrintWriter;
import com.thoughtworks.xstream.io.xml.XppDriver;
import com.xnradmin.client.messag.resp.Article;
import com.xnradmin.client.messag.resp.MusicMessage;
import com.xnradmin.client.messag.resp.NewsMessage;
import com.xnradmin.client.messag.resp.TextMessage;
import com.xnradmin.client.messag.resp.Voice;
import com.xnradmin.client.messag.resp.VoiceMessage;public class MessageUtil
{public static final String RESP_MESSAGE_TYPE_TEXT = "text";public static final String RESP_MESSAGE_TYPE_MUSIC = "music";public static final String RESP_MESSAGE_TYPE_NEWS = "news";public static final String REQ_MESSAGE_TYPE_TEXT = "text";public static final String REQ_MESSAGE_TYPE_IMAGE = "image";public static final String REQ_MESSAGE_TYPE_LINK = "link";public static final String REQ_MESSAGE_TYPE_LOCATION = "location";public static final String REQ_MESSAGE_TYPE_VOICE = "voice";public static final String REQ_MESSAGE_TYPE_EVENT = "event";public static final String EVENT_TYPE_SUBSCRIBE = "subscribe";public static final String EVENT_TYPE_UNSUBSCRIBE = "unsubscribe";public static final String EVENT_TYPE_CLICK = "click";private static XStream xstream = new XStream(new XppDriver() {public HierarchicalStreamWriter createWriter(Writer out) {return new PrettyPrintWriter(out){boolean cdata;public void startNode(String name, Class clazz){super.startNode(name, clazz);}protected void writeText(QuickWriter writer, String text) {if (this.cdata) {writer.write(");writer.write(text);writer.write("]]>");} else {writer.write(text);}}};}});
public static Map parseXml(HttpServletRequest request)throws Exception{Map map = new HashMap();InputStream inputStream = request.getInputStream();SAXReader reader = new SAXReader();Document document = reader.read(inputStream);Element root = document.getRootElement();List elementList = root.elements();for (Element e : elementList){map.put(e.getName(), e.getText());}inputStream.close();return map;}
public static String textMessageToXml(TextMessage textMessage){xstream.alias("xml", textMessage.getClass());return xstream.toXML(textMessage);}
public static String musicMessageToXml(MusicMessage musicMessage){xstream.alias("xml", musicMessage.getClass());return xstream.toXML(musicMessage);}
public static String newsMessageToXml(NewsMessage newsMessage){xstream.alias("xml", newsMessage.getClass());xstream.alias("item", new Article().getClass());return xstream.toXML(newsMessage); }
public static String voiceMessageToXml(VoiceMessage voiceMessage) {xstream.alias("xml", voiceMessage.getClass());xstream.alias("mediaId", new Voice().getClass());return xstream.toXML(voiceMessage);}
}
**返回文本型XML**
/**
*接收者openid
*发送者openid
*文本消息
*随机串
*/
private String respfText(String FromUserName, String ToUserName, String text, String MsgId) {TextMessage textMessage = new TextMessage();textMessage.setToUserName(FromUserName);textMessage.setFromUserName(ToUserName);textMessage.setCreateTime(new Date().getTime());textMessage.setMsgType("text");textMessage.setMsgId(MsgId);textMessage.setContent(text);return MessageUtil.textMessageToXml(textMessage);}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!