支付寶回調


 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