微信公众平台开发--开发准备

1.环境准备

(1)Java的开发环境必备
 jdk、环境变量配置、tomcat、eclipse等等

(2)注册微信公众账号

(3)外网映射工具(开发调试)

 映射工具有很多,例如花生壳,ngrok可以将内网映射到公网上面,这样就可以使用公网访问本机的网络服务。

(4)与微信的对接的URL应该满足以下的条件:

   在公网上能访问;

   只支持80端口;

   必须以http://或https://开头。

2.服务器配置

(1)外网固定ip
 微信要求访问必须使用固定ip,80端口,需要提供外网服务器配置或域名映射。
(2)微信开发认定程序

 public class SignUtil {  
 
private static String token = "xxxx";      // 与接口配置信息中的Token要一致  

    /** 
     * 验证签名 
     * @param signature 
     * @param timestamp 
     * @param nonce 
     * @return 
     */  
    public static boolean checkSignature(String signature, String timestamp, String nonce) {  
        String[] arr = new String[] { token, timestamp, nonce };  
        // 将token、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");  
            // 将三个参数字符串拼接成一个字符串进行sha1加密   
            byte[] digest = md.digest(content.toString().getBytes());  
            tmpStr = byteToStr(digest);  
        } catch (NoSuchAlgorithmException e) {  
            e.printStackTrace();  
        }  
  
        content = null;  
        // 将sha1加密后的字符串可与signature对比,标识该请求来源于微信   
        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;  
    }  
}  



@RequestMapping(value = "security", method = RequestMethod.GET)
public void doGet(HttpServletRequest request,HttpServletResponse response) {
try {
// 微信加密签名
       String signature = request.getParameter("signature");
       // 时间戳
       String timestamp = request.getParameter("timestamp");
       // 随机数
       String nonce = request.getParameter("nonce");
       // 随机字符串
       String echostr = request.getParameter("echostr");


if (SignUtil.checkSignature(signature, timestamp, nonce)) {
PrintWriter out = response.getWriter();
out.print(echostr);
out.close();
} else {
logger.info("这里存在非法请求!");
}
} catch (Exception e) {
logger.error(e, e);
}
}
(3)服务器配置


猜你喜欢

转载自blog.csdn.net/zyy_hbcz/article/details/79227602