检测支付状态-前端代码 4.3.1 服务层 在 payService.js 新增方法

//查询支付状态 
 this.queryPayStatus=function(out_trade_no){
  return $http.get('pay/queryPayStatus.do?out_trade_no='+out_trade_no); 
 }

2 控制层 
在 payController.js 中新增方法 

//查询支付状态  
 queryPayStatus=function(out_trade_no){
  payService.queryPayStatus(out_trade_no).success(
   function(response){
    if(response.success){
     location.href="paysuccess.html"; 
    }else{     
     location.href="payfail.html";         
    }    
   }
  ); 
 }

在 createNative 方法的回调方法中调用此查询方法 

//本地生成二维码 
 $scope.createNative=function(){
  payService.createNative().success(
   function(response){
..........        
        queryPayStatus(response.out_trade_no);//查询支付状态    
   }
  );   
 }

查询时间限制 
4.4.1 问题分析 
如果用户到了二维码页面一直未支付,或是关掉了支付页面,我们的代码会一直循环调
用微信接口,这样会对程序造成很大的压力。所以我们要加一个时间限制或是循环次数限制, 当超过时间或次数时,跳出循环。 
4.4.2 代码完善 
(1)修改 pinyougou-cart-web 工程 PayController.java 的 queryPayStatus 方法 

@RequestMapping("/queryPayStatus")
 public Result queryPayStatus(String out_trade_no){
  Result result=null;   
  int x=0;   
  while(true){
   //调用查询接口 
   .......   
   try {
    Thread.sleep(3000);//间隔三秒 
   } catch (InterruptedException e) {
e.printStackTrace(); 
   } 
   //为了不让循环无休止地运行,我们定义一个循环变量,如果这个变量超过了这个值则退
出循环,设置时间为 5 分钟 
   x++; 
   if(x>=100){
    result=new  Result(false, "二维码超时"); 
    break; 
   }
  }
  return result; 
 }

(2)修改 payController.js 

//查询支付状态  
 queryPayStatus=function(out_trade_no){
  payService.queryPayStatus(out_trade_no).success(
   function(response){
    if(response.success){
     location.href="paysuccess.html"; 
    }else{
     if(response.message=='二维码超时'){
      $scope.createNative();//重新生成二维码      
     }else{
 location.href="payfail.html"; 
     }     
    }    
   }
  ); 
 }