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 = "<a href=\""+WXfInit.SERVICEURLW+"/xnr/page/wx/farmer/farmerExamine.action?farmerId="+FromUserName+"\">请前往页面填写审核信息。</a>";
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("<![CDATA[");
writer.write(text);
writer.write("]]>");
} else {
writer.write(text);
}
}
};
}
});
public static Map<String, String> 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<Element> 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);
}