javaweb——微信公众号开发(1

第一次测试用测试号链接微信服务器时,需要配置接口信息

在这里插入图片描述
url就是自己的服务器中项目的地址
token是开发者自定义的验证信息

开发者提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上,GET请求携带参数如下表所示:

参数描述
signature微信加密签名signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
timestamp时间戳
nonce随机数
echostr随机字符串

开发者通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。加密/校验流程如下:

1)将token、timestamp、nonce三个参数进行字典序排序
2)将三个参数字符串拼接成一个字符串进行sha1加密
3)开发者获得加密后的字符串可与signature对比,标识该请求来源于微信

1)sevlet获取验证数据

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//System.out.println("get");
		/*
		 * 获取微信get请求参数
		 * signature	微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
		 * timestamp	时间戳
		 * nonce		随机数
		 * echostr		随机字符串
		 */
		String signature = request.getParameter("signature");
		String timestamp = request.getParameter("timestamp");
		String nonce = request.getParameter("nonce");
		String echostr = request.getParameter("echostr");
		
		wxTest wx = new wxTest();
		Boolean res = wx.Check(signature, timestamp, nonce);
		if(res) {
			PrintWriter out = response.getWriter();
			out.write(echostr);
		}else {
			System.out.println("配置失败");
		}
	}

2)wxTest验证接收到的数据

	// token就是用户配置接口时填写的自定义token
	private final String TOKEN = "happypower";
	
	public Boolean Check(String signature,String timestamp,String nonce) {
		// 1)将token、timestamp、nonce三个参数进行字典序排序
		String[] strArr = {TOKEN,timestamp,nonce};
		Arrays.sort(strArr);
		
		// 2)将三个参数字符串拼接成一个字符串进行sha1加密
		String strSha1 = strArr[0]+strArr[1]+strArr[2];
		String result = this.Sha1(strSha1);
		System.out.println(signature);
		System.out.println(result);
		// 3)开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
		if(signature.equalsIgnoreCase(result)) {
			return true;
		}else {
			return false;
		}
	}

3)sha1加密实现

	public String Sha1(String str) {
		try {
			// 创建一个十六进制字符数组
			char[] ch = "0123456789abcdef".toCharArray();
			// 获取一个Sha1加密对象
			MessageDigest md = MessageDigest.getInstance("Sha1");
			byte[] strBit =  md.digest(str.getBytes());
			
			StringBuilder sb = new StringBuilder();
			for (byte b : strBit) {
				sb.append(ch[b >>> 4 & 15]);
				sb.append(ch[b & 15]);
			}
			
			return sb.toString();
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		}
		return null;
		
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值