微信公众平台基本配置

参考:http://www.2cto.com/weixin/201504/387494.html
接入微信公众平台开发,第一步需要填写服务器配置:

URL处需要填写自己服务器请求地址,它是开发者用来接收微信消息和时间的接口URL。Token可以随便写,但是这里的token,微信会通过填写的url去验证token。所以,在自己项目中要写一个用来协助微信验证信息的servlet。

/**
 * 核心请求处理类 
 *
 */
public class WechatServlet extends HttpServlet {

    private static final longserialVersionUID = 5021188348833856475L;
    @Override
    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"); 
       PrintWriter out = response.getWriter();  
       // 通过检验signature对请求进行校验,
//若校验成功则原样返回echostr,表示接入成功,否则接入失败 
       if(SignUtil.checkSignature(signature, timestamp, nonce)) {  
               out.print(echostr); 
       } 
       out.close();
       out = null;
   }

/**
  * 请求校验工具类
  */
 public class SignUtil {
     // 与接口配置信息中的Token要一致
     private static String token = "845C2550903CE6FA54CACDB82EAD4350";


     public static boolean checkSignature(String signature, String timestamp,
            String nonce) {
        //从请求中(也就是微信服务器传过来的)拿到的token, timestamp, nonce
        String[] arr = new String[] { token, timestamp, nonce };
        // 将token、timestamp、nonce三个参数进行字典序排序
        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;
    }

  //将加密后的字节数组变成字符串
    private static String byteToStr(byte[] byteArray) {
        String strDigest = "";
        for(int i = 0; i < byteArray.length; i++) {
            strDigest += byteToHexStr(byteArray[i]);
        }
        return strDigest;
    }

    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 = newchar[2];
        tempArr[0] = Digit[(mByte >>> 4) & 0X0F];
        tempArr[1] = Digit[mByte & 0X0F];

        String s = newString(tempArr);
        return s;
    }
//用于字典排序
    public static void sort(String a[]) {
        for(int i = 0; i < a.length - 1; i++) {
            for(int j = i + 1; j < a.length; j++) {
                if(a[j].compareTo(a[i]) < 0) {
                    String temp = a[i];
                    a[i] = a[j];
                    a[j] = temp;
                }
            }
        }
    }
}

以上验证的核心代码。
web.xml中增加配置:
web中配置

综上,
微信中基本配置

URL填写的是用来协助微信验证的路径,
Token中的值填写的是SignUtil类中定义的token的值,
EncodingAESKey随机生成即可。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值