黑马程序员技术交流社区

标题: 【郑州校区】Java之品优购课程讲义_day18(7) [打印本页]

作者: 谷粒姐姐    时间: 2018-10-30 09:52
标题: 【郑州校区】Java之品优购课程讲义_day18(7)
检测支付状态-前端代码
4.3.1 服务层
在 payService.js 新增方法
[AppleScript] 纯文本查看 复制代码
//查询支付状态 
this.queryPayStatus=function(out_trade_no){
  return $http.get('pay/queryPayStatus.do?out_trade_no='+out_trade_no);
}

2 控制层
在 payController.js 中新增方法
[AppleScript] 纯文本查看 复制代码
//查询支付状态  
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 方法的回调方法中调用此查询方法
[AppleScript] 纯文本查看 复制代码
//本地生成二维码 
$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 方法
[AppleScript] 纯文本查看 复制代码
@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
[AppleScript] 纯文本查看 复制代码
//查询支付状态  
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";
     }      
    }     
   }
  );
}








欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2