发表于: 2018-01-06 22:51:00

1 493


今天完成的事情

1.完成微信支付的相关逻辑


2.修复BUG


3.微信支付回调写完

/**
    * 微信支付回调
    * @param request
    * @param response
    * @return
    */
   @RequestMapping(value = "/a/pay/wechat/callback")
public @ResponseBody String weChatPayCallback(HttpServletRequest request,HttpServletResponse response) {
String retStr = null;
       try {
retStr = new String(Util.readInput(request.getInputStream()), "utf-8");
           Map<String, Object> map = XMLParser.getMapFromXML(retStr);
           log.info("收到回调,信息如下:"+retStr);

           //校验数据
           String mchId = (String) map.get("mch_id");
           if (!mchId.equals(mchId)) {
String xml = "<xml>"
                       + "<return_code><![ CDATA[FAILED]]></return_code>"
                       + "<return_msg><![CDATA[FAILED]]></return_msg>"
                       + "</xml>";
               response.getWriter().print(xml);
               response.getWriter().flush();
               response.getWriter().close();
               return "failed";
           }

String token;
           User user = null;

           String resultCode = (String) map.get("result_code");
           String returnCode = (String) map.get("return_code");
           String outTradeNo = (String) map.get("out_trade_no");
           String transactionNumber = (String) map.get("transaction_id");
           String attach = (String)map.get("attach");
           String commodityType = attach.split(",")[0];
           String userIdStr = attach.split(",")[1].trim();

           log.info("result code is===="+resultCode);
           log.info("transactionId is====="+transactionNumber);
           try {
//业务逻辑
               if (resultCode.equals("SUCCESS")) {
//修改order表中订单状态
                   orderService.changeOrderStateToPayFinished(outTradeNo,transactionNumber);

                   //插入userOrder表中成功订单信息
                   //TODO 修改该传递微信平台的参数
                   userOrderService.addSuccessOrderInformation(transactionNumber);

                   //反馈用户 //TODO low,应该开一个线程存储专门用来发送不同类型商品购买后通知用户的线程.
                   //判断是否是资料,是则发送下载url
                   log.info("commodityType is=="+commodityType);
                   if (commodityType.equals("1")) {
log.info("start to sending mail");

                       Long userId = Long.valueOf(userIdStr);
                       user = userService.getObjectById(userId);
                       List<Map<String, String>> ordersInfo = new ArrayList<>();
                       log.info("user info is===="+user);
                       List<Long> orderId = orderService.getOrderIdsByOutTradeNo(outTradeNo);
                       Data data = dataService.getObjectById(orderId.get(0));
                       emailOfSendCloudUtil.sendPaperUrl(attach.split(",")[2],user.getName(),"课时",data.getPaperUrl(),true);
//                        //获取订单信息
//                        List<Long> paperIds = orderService.getOrderIdsByOutTradeNo(outTradeNo);
//                        List<Data> papers = dataService.getObjectsByIds(paperIds);
//
//                        log.info("papers info is==="+papers);
//
//                        int length = paperIds.size();
//                        Map<String,String> orderInfo;
//                        Data paper;
//
//                        for (int i = 0; i < length; ++i) {
//                            orderInfo = new HashMap<>();
//                            paper = papers.get(i);
//
//                            orderInfo.put("periodName",paper.getPeriodName());
//                            orderInfo.put("paperUrl",paper.getPaperUrl());
//
//                            ordersInfo.add(orderInfo);
//                        }

                       log.info("ordersInfo is=="+ordersInfo);
                       emailOfSendCloudUtil.sendPaperUrl(user.getMail(),user.getName(),ordersInfo,true);
                       log.info("success to send mail");
                   }
} else {
orderService.changeOrderStateToPayFailed(outTradeNo,transactionNumber);
               }

}catch (Exception e) {
log.error("received weChat pay callback response,but operate the DB has error see===="+e);
               log.error("weChat pay callback info is==="+retStr);
               //向中心线程报告支付相关DB异常次数
               OpenPayThread.setCountOfDBError(OpenPayThread.getCountOfDBError()+1);
           }

//支付回调处理订单 更改订单状态
           response.setContentType("text/xml");
           String xml = "<xml>"
                   + "<return_code><![ CDATA[SUCCESS]]></return_code>"
                   + "<return_msg><![CDATA[OK]]></return_msg>"
                   + "</xml>";
           response.getWriter().print(xml);
           response.getWriter().flush();
           response.getWriter().close();

           log.info("===end===");
       }catch (Exception e) {
log.error(e);
           log.error("出现异常,失败======"+retStr);
           return "failed";
       }

return "success";
   }

逻辑比较简单.

明天计划完成的事情

1.合同前端测试微信支付


遇到的困难:


收获:


返回列表 返回列表
评论

    分享到