微信支付回调

2021-09-24  本文已影响0人  Liuluckyzz

上一篇写的微信支付问题,支付完成之后微信会自动回调我们在支付时候传递过去的路径进行回调。我们业务操作就在微信回调这里完成。

微信回调代码:

public String CDPayCallback(HttpServletRequest request,HttpServletResponse response) {
        System.out.println("微信回调接口方法 start");
        System.out.println("微信回调接口 操作逻辑 start");
        CallResult result = new CallResult();
        PageData pd = new PageData();
        String inputLine = "";
        String notityXml = "";
        try {
            while((inputLine = request.getReader().readLine()) != null){
                notityXml += inputLine;
            }
            //关闭流
            request.getReader().close();
            System.out.println("微信回调内容信息:"+notityXml);
            //解析成Map
            Map<String,String> map = readStringXmlOut(notityXml);
            //判断 支付是否成功
            if("SUCCESS".equals(map.get("result_code"))){
                logger.info("微信回调返回是否支付成功:是");
                //获得 返回的商户订单号
                String outTradeNo = map.get("out_trade_no").split("A")[1];
                System.out.println("微信回调返回商户订单号:"+outTradeNo);
                Map<String, Object> mapOrder = new HashMap<>();
                int sqlRow=0;
                //更新支付参数
                mapOrder.put("payStatus", "1");
                mapOrder.put("payTime", DateUtil.getTime().toString());
                mapOrder.put("payAmount", map.get("total_fee"));//交易总金额
                mapOrder.put("mchntOrderNo", outTradeNo);
                mapOrder.put("traceNo", map.get("transaction_id"));//交易单号
                mapOrder.put("tradeId", outTradeNo);//交易id
                mapOrder.put("orderId", outTradeNo);
                //更新消息参数
                mapOrder.put("personType", "0");// 人员类型(0-会员 1-师傅)
                String userId = orderService.getUserIdByHbId(outTradeNo);
                mapOrder.put("userId", userId);
                // 根据用户id查询用户姓名
                String personName = orderService.getUserNameById(userId);
                mapOrder.put("personName", personName);
                mapOrder.put("content", "付款");
                mapOrder.put("isTrace", "1"); // 订单跟踪(0-不跟踪 1-跟踪)
                mapOrder.put("createTime", DateUtil.getTime().toString());
                mapOrder.put("isRead", "0"); // 状态(0-未读 1-已读)
                // 进行自己的业务操作
                                sqlRow= orderService.updatePayOrder(mapOrder);
                //判断 是否更新成功
                if(sqlRow > 0){
                    logger.info("微信回调  订单号:"+outTradeNo +",修改状态成功");
                    //封装 返回值
                    StringBuffer buffer = new StringBuffer();
                    buffer.append("<xml>");
                    buffer.append("<return_code>SUCCESS</return_code>");
                    buffer.append("<return_msg>OK</return_msg>");
                    buffer.append("</xml>");
                    //给微信服务器返回 成功标示 否则会一直询问 咱们服务器 是否回调成功
                    PrintWriter writer = response.getWriter();
                    //返回
                    writer.print(buffer.toString());
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
// 解析xml
    public Map<String, String> readStringXmlOut(String xml) {
        Map<String, String> map = new HashMap<String, String>();
        Document doc = null;
        try {
            // 将字符串转为XML
            doc = DocumentHelper.parseText(xml);
            // 获取根节点
            Element rootElt = doc.getRootElement();
            for (Iterator i = rootElt.elementIterator(); i.hasNext();) {
                Element employee = (Element) i.next();
                map.put(employee.getName(), employee.getText());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return map;
    }
微信回调我们的地址时如果我们没有返回相对应的参数,微信会重复回调我们本地地址。所以我们要避免他重复回调。
上一篇 下一篇

猜你喜欢

热点阅读