Java之品优购课程讲义_day18(7)

本文介绍了一种在前端和后端实现支付状态查询的方法,通过循环调用微信接口查询支付状态,并设置了时间限制以避免无限循环,同时在超时情况下重新生成二维码。

检测支付状态-前端代码
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"; 
     }     
    }    
   }
  ); 
 }

转载于:https://blog.51cto.com/13517854/2310565

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值