A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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



0 个回复

您需要登录后才可以回帖 登录 | 加入黑马