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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

品优购-检测支付状态
4.1 需求分析及实现思路
4.1.1 需求分析
当用户支付成功后跳转到成功页面
1540864064(1).jpg
2 实现思路
我们通过 HttpClient 工具类实现对远程支付接口的调用。
接口链接:https://api.mch.weixin.qq.com/pay/orderquery
具体参数参见“查询订单”API, 我们在 controller 方法中轮询调用查询订单(间隔 3 秒), 当返回状态为 success 时,我们会在 controller 方法返回结果。前端代码收到结果后跳转到成 功页面。
2 检测支付状态-后端代码
4.2.1 服务接口层

在 pinyougou-pay-interface 的 WeixinPayService.java 中新增方法定义
[AppleScript] 纯文本查看 复制代码
/** 
  * 查询支付状态 
  * @param out_trade_no 
  */ 
 public Map queryPayStatus(String out_trade_no); 

服务实现层
在 pinyougou-pay-service 的 WeixinPayServiceImpl.java 中实现方法
[AppleScript] 纯文本查看 复制代码
@Override 
 public Map queryPayStatus(String out_trade_no) { 
  Map param=new HashMap(); 
  param.put("appid", appid);//公众账号 ID 
  param.put("mch_id", partner);//商户号 
  param.put("out_trade_no", out_trade_no);//订单号 
  param.put("nonce_str", WXPayUtil.generateNonceStr());//随机字符串 
  String url="https://api.mch.weixin.qq.com/pay/orderquery";   
  try { 
   String xmlParam = WXPayUtil.generateSignedXml(param, partnerkey);  
   HttpClient client=new HttpClient(url); 
   client.setHttps(true); 
client.setXmlParam(xmlParam); 
   client.post(); 
   String result = client.getContent();    
   Map<String, String> map = WXPayUtil.xmlToMap(result); 
   System.out.println(map); 
   return map;    
  } catch (Exception e) { 
   e.printStackTrace(); 
   return null; 
  }  
 } 

控制层
在 pinyougou-cart-web 的 PayController.java 新增方法
[AppleScript] 纯文本查看 复制代码
/** 
  * 查询支付状态 
  * @param out_trade_no 
  * @return 
  */ 
 @RequestMapping("/queryPayStatus") 
 public Result queryPayStatus(String out_trade_no){ 
  Result result=null;   
  while(true){ 
//调用查询接口 
   Map<String,String> map = weixinPayService.queryPayStatus(out_trade_no); 
   if(map==null){//出错    
    result=new  Result(false, "支付出错"); 
    break; 
   }    
   if(map.get("trade_state").equals("SUCCESS")){//如果成功     
    result=new  Result(true, "支付成功"); 
    break; 
   }    
   try { 
    Thread.sleep(3000);//间隔三秒 
   } catch (InterruptedException e) { 
    e.printStackTrace(); 
   }        
  } 
  return result; 
 } 



0 个回复

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