>위챗 애플릿 >위챗 개발 >WeChat 요청 검증의 2차 개발

WeChat 요청 검증의 2차 개발

Y2J
Y2J원래의
2017-05-10 09:22:461874검색

이 글에서는 주로 Java WeChat의 첫 번째 2차 개발인 Java WeChat 요청 확인 기능을 자세히 소개하며, 관심 있는 친구는 이를 참고하여

WeChat을 수행할 수 있습니다. Java의 보조 개발 프로젝트인 경우 여기에 프로세스를 작성하세요.

첫 번째 기사, WeChat 요청 확인

라이브러리를 가져와야 합니다: servlet-api.jar

첫 번째 단계: 만들기 새 패키지 com.wtz .service, 새 클래스 LoginServlet.java 만들기

package com.wtz.service;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.wtz.util.ValidationUtil;

/**
 *   @author wangtianze QQ:864620012
 * @date 2017年4月17日 下午8:11:32
 * <p>version:1.0</p>
 *  <p>description:微信请求验证类</p>
 */
public class LoginServlet extends HttpServlet {

 @Override
 protected void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  System.out.println("get请求。。。。。。");
  
  //1.获得微信签名的加密字符串
  String signature = request.getParameter("signature");
  
  //2.获得时间戳信息
  String timestamp = request.getParameter("timestamp");
   
  //3.获得随机数
  String nonce = request.getParameter("nonce");
  
  //4.获得随机字符串
  String echostr = request.getParameter("echostr");
  
  System.out.println("获得微信签名的加密字符串:"+signature);
  System.out.println("获得时间戳信息:"+timestamp);
  System.out.println("获得随机数:"+nonce);
  System.out.println("获得随机字符串:"+echostr);
  
  PrintWriter out = response.getWriter();
  
  //验证请求确认成功原样返回echostr参数内容,则接入生效,成为开发者成功,否则失败
  if(ValidationUtil.checkSignature(signature, timestamp, nonce)){
   out.print(echostr);
  }
  
  out.close();
  out = null;
 }
}

2단계: 새 패키지 com.wtz.util 만들기, 새 클래스 Validation.java 만들기

package com.wtz.util;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;

/**
 *  @author wangtianze QQ:864620012
 * @date 2017年4月17日 下午8:35:57
 * <p>version:1.0</p>
 *  <p>description:微信请求校验工具类</p>
 */
public class ValidationUtil {
 private static String token = "wangtianze";
 
 public static boolean checkSignature(String signature,String timestamp,String nonce){
  //1.将token,timestamp,nonce三个参数进行排序
  String[] str = new String[]{token,timestamp,nonce};
  Arrays.sort(str);
  
  //2.将三个参数字符串拼接成一个字符串
  StringBuilder buff = new StringBuilder();
  for(int i=0;i<buff.length();i++){
   buff.append(str[i]);
  }
  
  //3.进行sha1加密
  MessageDigest md = null;
  String result = "";
  try {
   md = MessageDigest.getInstance("SHA-1");
   byte[] data = md.digest(buff.toString().getBytes());
   
   //将字节数组转换成字符串
   result = bytesToString(data);
   
   System.out.println("加密后的字符串为:"+result);
   
  } catch (NoSuchAlgorithmException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  
  return result!=null?(result.equals(signature.toUpperCase())):false;
 }
 
 /**
  * 将字节数组转换成十六进制字符串
  * @param byteArray
  * @return
  */
 private static String bytesToString(byte[] byteArray){
  String stringDigest = "";
  for(int i=0;i<stringDigest.length();i++){
   stringDigest += byteToHexString(byteArray[i]);
  }
  return stringDigest;
 }
 
 /**
  * 将一个字节转换为十六进制字符串
  * @param mByte
  * @return
  */
 private static String byteToHexString(byte mByte){
  char[] digit = {&#39;0&#39;,&#39;1&#39;,&#39;2&#39;,&#39;3&#39;,&#39;4&#39;,&#39;5&#39;,&#39;6&#39;,&#39;7&#39;,&#39;8&#39;,&#39;9&#39;,&#39;A&#39;,&#39;B&#39;,&#39;C&#39;,&#39;D&#39;,&#39;E&#39;,&#39;F&#39;};
  char[] temp = new char[2];
  
  temp[0] = digit[(mByte>>>4) & 0X0F];
  temp[1] = digit[mByte & 0X0F];
  
  String str = new String(temp);
  return str;
 }
}

첫날부터 하세요 이것으로 위챗 요청 인증 기능이 완성되었습니다.

[관련 추천]

1. 위챗 공개계정 플랫폼 소스코드 다운로드

2.위챗 투표 소스코드

위 내용은 WeChat 요청 검증의 2차 개발의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.