1、微信扫码登录:http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login appid appsecret 及微信号
token是用于验证开发者的 会在WeixinAction 的doget方法中实行校验!
SignUtil 是用来校验token的
protected void doGet(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 (signature==null) {
response.getWriter().write("参数错误!");
return;
}
boolean result=SignUtil.validSign(signature,ConfigUtil.getValue("token"), timestamp, nonce);
if (result) {
response.getWriter().write(echostr);
}else {
response.getWriter().write("验证失败!");
}
}
public class SignUtil {
public static boolean validSign(String signature, String token, String timestamp, String nonce) {
String[] paramArr = new String[] { token, timestamp, nonce };
Arrays.sort(paramArr);
StringBuilder sb = new StringBuilder(paramArr[0]);
sb.append(paramArr[1]).append(paramArr[2]);
String ciphertext = null;
try {
MessageDigest md = MessageDigest.getInstance("SHA-1");
byte[] digest = md.digest(sb.toString().getBytes());
ciphertext = byteToStr(digest);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return ciphertext != null ? ciphertext.equals(signature.toUpperCase()) : false;
}
private static String byteToStr(byte[] byteArray) {
String rst = "";
for (int i = 0; i < byteArray.length; i++) {
rst += byteToHex(byteArray[i]);
}
return rst;
}
private static String byteToHex(byte b) {
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[(b >>> 4) & 0X0F];
tempArr[1] = Digit[b & 0X0F];
String s = new String(tempArr);
return s;
}
}
dopost()方法是用来接收微信发送信息的 以xml格式input流形式接收 不同的消息返回不同类型的标签内容
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 接收消息
request.setCharacterEncoding(charset);
response.setCharacterEncoding(charset);
WeixinRequest wxr;
try {
wxr = WeixinMessageUtil.toWeixinRequest(request.getInputStream());
System.out.println(wxr.getContent());
TextReponseMessage msg=new TextReponseMessage();
msg.setFromUserName(wxr.getToUserName());
msg.setToUserName(wxr.getFromUserName());
msg.setCreateTime(System.currentTimeMillis()+"");
msg.setMsgType("text");
msg.setContent("我是你龙哥");
response.getWriter().write(WeixinMessageUtil.totResopseXml(msg));
} catch (Exception e) {
e.printStackTrace();
}
}
"https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s";可以用来返回token信息 token可用于调用其他接口
InputStreamReader 可用于编码处理 解决乱码! XStream toxml()方法用于将字符串转化为XML fromXML可以返回一个对象
fastjson JSONObject.parseObject(json2, 类名.class);用于将json字符串转化为对象
JSONObject.parseArray(json, User.class);用于将json字符串转化为集合数组
toJSONString(list) 将对象转化为JSON字符串
String.format(GET_TOKEN, APPID,SECRET) 字符串占位预处理