Verify Alipay account signature MD5

   

public static Map<String,String> data(context ctxt){

               Map<String,String> map =new HashMap<String,String>();

              String nofitime=ctxt.getValueAt("notifytime");//This is the parameter passed by Alipay

              ....................

                map.put("notifytime",nofitime);

                  ...............

                return map;

}

 

// Call   Map<String,String>
in actionIion params=this.data(context);

 if(AlipayNotify.verfy(params){

     //Signature verification by executing the business

}

 //AlipayNotify class


public class AlipayNotify{

          //Alipay verification message address

         private static final String HTTPS_URL="https://mapi.alipay.com/gateway.do?service=notify_verify&";

        //Verify whether it is a message sent by Alipay

public static boolean verify(Map<String,String> params){

        String responseTxt="false";

     /** Need to verify Alipay URL address

         if(params.get("notify_id") !=null){

        String notify_id=params.get("notify_id");

        responseTxt=verifyResponse(notify_id);

        }

        */

     String sign="  ";

      if(params.get("sign") !=null){

       sign=params.get("sign");

      }

      boolean isSign=getSignVeryfy(params,sign);

      //Write logging (need to debug and uncomment two lines)

     //String words="responseTxt="+responseTxt+"\n isSgin="+"\nReturned parameters"+createLinkString(params);

     //logResult(words);

   if(isSign){

     return true;

    }esle{

    return false;

  }

}

Add in the constant class AlipayConfig

      public static String paratner = " ";//Cooperator ID fixed value

      public static String key="";//The private fixed value of the merchant

      public static Sting log_path="D\\";t//Debug create txt folder path

      public static Stirng input_charset="UTF-8";//设置字符格式

      public static String sign_type="MD5";//签名方式 不需要修改

      //生成签名结果,根据反馈过来的数据

  public static boolean getSignVeryfy(Map<String,String> params,String sign){

      //过滤空值,sgin与sign_type参数 paraFilter

         Map<String,String> paramNew=paraFilter(Params);;

     //把数组所有元素排序  按照 ?参数=参数值 ?的模式用? 字符拼接成字符 cteateLinkString

     String preSignStr=cteateLinkString(paramNew);

     //获得签名验证结果

       boolean isSign=false;

       if(AlipayConfig,sign_type.equals("MD5"){

         isSign=MD5.verify(preSignStr,AlipayConfig.key,AlipayConfig.input_charset

       }

       retrun isSign;

   }


    //verify签名字符 ,签名结果,密钥,编码格式

    public static boolean verify(String text,String sign,String key, String input_charset){

       text=text+key;

       String mysign=DigestUtils.md5Hex(getContentBytes(text,inut_cahrset)); //md5Hex这是框架方法

       if(mysign.equals(sign)){

          return true;

       }else{

         return false;

       }

    }

  private static byte[] getContentBytes(String content,,String charset){

   if(charset ==null || "".equals(charset)){

     return content.getBytes();

   }

  try{

    return content.getBytes(charset);

  }catch(UnsupportedEncoding e){

     }

 

 }

 

   //verifyResponse方法 获取远程服务器ATN结果,验证是否是支付宝服务器发送过的请求,验证返回URL

    private static String verifyResponse(String notify_id){

              String partner= AlipayConfig.partner;

             String verfy_url=HTTPS_URL+"partner="+partner+"&notify_id="+notify_id;

             return checkUrl(verfy_url);

 

   }


    //checkUrl方法

     public static String checkUrl(String urlValue){

     String inputline="";

       URL url=new URL(urlValue);

       HttpURLConnection urlconnection=(HttpURLConnection)url.openConnection();

       BufferedReader in =new BufferedReader(new InputStreamReader(urlconnection.getInputStream());

       inputline=in.readLine().toString();

      //这里需要捕捉异常

      return inputline;

    }


   ////过滤空值,sgin与sign_type参数 paraFilter 方法

    public static Map<String,String>paraFilter(Map<String,String> map){

      Map<String,String> result=new HashMap<String,Stirng>();

      if(map ==null || map.size()<=0){

        return result;

       }

       for(String key map.keySet()){

        Stirng value=map.get(key);

          if(value == null || value.equals("") || key.equlasIgnoreCase("sign") || key.equlasIgnoreCase("sign_type"){

               continue;

            }

            result.put(key,value);

       }

        return result;

    }


       //把数组所有元素排序  按照 ?参数=参数值 ?的模式用? 字符拼接成字符 cteateLinkString  方法  

      public static Map<String,String> cteateLinkString (Map<String,String> params){

          List<Stirng>keys=new ArrayList<String>(params.keySet());

         Collections.sort(keys);

        String prestr="";

        for(int i=0;i<keys.size();i++){

             String key =keys.get(i);

           String value =params.get(Key);

           if(i ==keys.size() -1){//拼接式不包括最后一个?字符

               prestr=prestr+key+"="+value;

            }else{

                  prestr=prest+key +"="+value+"&";

              }

        }

       return prestr;

     } 


 //日志方法  logResult

     public static void logResult(String word){

         FileWrite writer=null;

        try{

      writer=new FileWriter(AlipayConfig.log_path+"alipay_log"+System.currentTimeMills()+".txt");

       writer.write(word);

       }catch(exception e){

  

       }finally{

      if(writer !=null){

         writer.close();

             }

         }

     }

  


}







Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325938550&siteId=291194637