微信公众平台企业号回调模式的URL验证--jdk6、jdk7加密问题

    private  static  final  long  serialVersionUID = 4440739483644821986L;
     String sToken =  "5XaQ8cG6x2pULd" ; //这个Token是随机生成,但是必须跟企业号上的相同
     String sCorpID =  "wx4edd47d3a6r4r991" ; //这里是你企业号的CorpID
     String sEncodingAESKey =  "jWmYm7qjusnxu65ZRjGtBxmz3KA1tkAj3ykkR6q2B2C" ; //这个EncodingAESKey是随机生成,但是必须跟企业号上的相同
     /**
      * 确认请求来自微信服务器
      * @throws IOException 
      */
     public  void  doGet(HttpServletRequest request, HttpServletResponse response)  throws  IOException{
         
         // 微信加密签名 
         String sVerifyMsgSig = request.getParameter( "msg_signature" );
         // 时间戳
         String sVerifyTimeStamp = request.getParameter( "timestamp" );
         // 随机数
         String sVerifyNonce = request.getParameter( "nonce" );
         // 随机字符串
         String sVerifyEchoStr = request.getParameter( "echostr" );
         String sEchoStr;  //需要返回的明文
         PrintWriter out = response.getWriter();  
         WXBizMsgCrypt wxcpt;
         try  {
             wxcpt =  new  WXBizMsgCrypt(sToken, sEncodingAESKey, sCorpID);
             sEchoStr = wxcpt.VerifyURL(sVerifyMsgSig, sVerifyTimeStamp,sVerifyNonce, sVerifyEchoStr);
             // 验证URL成功,将sEchoStr返回
             out.print(sEchoStr);  
         catch  (AesException e1) {
             e1.printStackTrace();
         }
     }
    
    关于上面接入代码不过多讲解,只说我碰到的问题
    我本机是jdk1.6.0_23  ,下载JCEPolicyJDK6,,百度中搜索"UnlimitedJCEPolicyJDK6"这个进行下载,覆盖到\lib\security中,
       还有官方提供的代码报错部分解决办法(WXBizMsgCrypt.java,PKCS7Encoder.java):
        把Arrays.copyOfRange()方法,替换成下面的方法
       public static byte[] copyOfRange(byte[] original, int from, int to) {
        int newLength = to - from;
        if (newLength < 0)
            throw new IllegalArgumentException(from + " > " + to);
        byte[] copy = new byte[newLength];
        System.arraycopy(original, from, copy, 0,
                         Math.min(original.length - from, newLength));
        return copy;
    }
     static String CHARSET = "utf-8";
     static byte[] encode(int count) {
byte[] b = null;
try{
// 计算需要填充的位数
int amountToPad = BLOCK_SIZE - (count % BLOCK_SIZE);
if (amountToPad == 0) {
amountToPad = BLOCK_SIZE;
}
// 获得补位所用的字符
char padChr = chr(amountToPad);
String tmp = new String();
for (int index = 0; index < amountToPad; index++) {
tmp += padChr;
}
b = tmp.getBytes(CHARSET);
}catch(Exception e){
e.printStackTrace();
}
return b;
}
剩下就搞定了



 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值