黑马程序员技术交流社区

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

作者: 谷粒姐姐    时间: 2018-10-30 09:50
标题: 【郑州校区】Java之品优购课程讲义_day18(6)
品优购-检测支付状态
4.1 需求分析及实现思路
4.1.1 需求分析
当用户支付成功后跳转到成功页面

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;
}








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