微信开发一笔记

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)  字符串占位预处理



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值