支付宝回调


 1     //这个是支付宝回调的信息
 2     @RequestMapping("alipay_callback.do")  3  @ResponseBody  4     public Object alipayCallback(HttpServletRequest request){  5         Map<String,String> params = Maps.newHashMap();  6         //getParameterMap()一般多用于接收前台表单多参数传输的数据  7         //支付宝的回调都是把信息放到request里面
 8         Map requestParams = request.getParameterMap();  9         //keyset()是获取所有的key值,iterator()是迭代遍历
10         for(Iterator iter = requestParams.keySet().iterator();iter.hasNext();){ 11             String name = (String)iter.next(); 12             //这里把key放到数组里面
13             String[] values = (String[]) requestParams.get(name); 14             String valueStr = ""; 15             //这个for循环的尊用就是把上面那个String中的值都遍历一遍
16             for(int i = 0 ; i <values.length;i++){ 17                 //这个是三元运算符
18                 valueStr = (i == values.length -1)?valueStr + values[i]:valueStr + values[i]+","; 19  } 20             //把数据全部加进map集合中 name就是key valueStr就是value
21  params.put(name,valueStr); 22  } 23         //sign就是签名 trade_status是交易的状态
24         logger.info("支付宝回调,sign:{},trade_status:{},参数:{}",params.get("sign"),params.get("trade_status"),params.toString()); 25 
26         //非常重要,验证回调的正确性,是不是支付宝发的.并且呢还要避免重复通知. 27         //这个非常重要,但是不知道这个是什么意思
       //这个是签名类型 sign参数已经帮我们删除掉了,在这里我们要把签名类型删除掉
28 params.remove("sign_type"); 29 try { 30 //这里是RSA验证签名 31 // Configs.getAlipayPublicKey() 其实就是支付宝的应用公钥(记住不是支付宝的公钥,是支付宝应用公钥) 32 //Configs.getSignType()也就是支付宝文本类型里面的签名类型:RSA2 33 boolean alipayRSACheckedV2 = AlipaySignature.rsaCheckV2(params, Configs.getAlipayPublicKey(),"utf-8",Configs.getSignType()); 34 //如果验证上面的boolean为true的话,我们就应该更改下订单的状态,减少下库存这些操作 35 if(!alipayRSACheckedV2){ 36 return ServerResponse.createByErrorMessage("非法请求,验证不通过,再恶意请求我就报警找网警了"); 37 } 38 } catch (AlipayApiException e) { 39 logger.error("支付宝验证回调异常",e); 40 }

 

  //回调之后修改账单状态
        ServerResponse serverResponse = iOrderService.aliCallback(params);
        if(serverResponse.isSuccess()){
            return Const.AlipayCallback.RESPONSE_SUCCESS;
        }
        return Const.AlipayCallback.RESPONSE_FAILED;
    }

 

处理订单状态点我查看

 

 

如果你感觉本文对你有帮助,欢迎进群一起探讨交流:点我加群


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM