zoukankan      html  css  js  c++  java
  • 在线教育项目-day15【微信扫码登录后端】

    一、生成二维码方法

    controller

    为了看到返回的数据我们对map做一个输出

    @GetMapping("createNative/{orderNo}")
        public R createNative(@PathVariable String orderNo){
            Map map=payLogService.createNative(orderNo);
            System.out.println("#############返回二维码map集合"+map);
            return R.OK().data(map);
        }

    serviceimpl

    主要是分为四步

    1.根据订单号查询订单信息

    2.使用map设置生成二维码需要参数

    3.发送httpclient请求,传递参数xml格式,微信支付提供的固定的地址

    4.得到发送请求返回结果

    public Map createNative(String orderNo) {
            try {
                //1 根据订单号查询订单信息
                QueryWrapper<TOrder> wrapper = new QueryWrapper<>();
                wrapper.eq("order_no",orderNo);
                TOrder order = orderService.getOne(wrapper);
    
                //2 使用map设置生成二维码需要参数
                Map m = new HashMap();
                m.put("appid","wx74862e0dfcf69954");
                m.put("mch_id", "1558950191");
                m.put("nonce_str", WXPayUtil.generateNonceStr());
                m.put("body", order.getCourseTitle()); //课程标题
                m.put("out_trade_no", orderNo); //订单号
                m.put("total_fee", order.getTotalFee().multiply(new BigDecimal("100")).longValue()+"");
                m.put("spbill_create_ip", "127.0.0.1");
                m.put("notify_url", "http://guli.shop/api/order/weixinPay/weixinNotify
    ");
                m.put("trade_type", "NATIVE");
    
                //3 发送httpclient请求,传递参数xml格式,微信支付提供的固定的地址
                HttpClient client = new HttpClient("https://api.mch.weixin.qq.com/pay/unifiedorder");
                //设置xml格式的参数
                client.setXmlParam(WXPayUtil.generateSignedXml(m,"T6m9iK73b0kn9g5v426MKfHQH7X8rKwb"));
                client.setHttps(true);
                //执行post请求发送
                client.post();
    
                //4 得到发送请求返回结果
                //返回内容,是使用xml格式返回
                String xml = client.getContent();
    
                //把xml格式转换map集合,把map集合返回
                Map<String,String> resultMap = WXPayUtil.xmlToMap(xml);
    
                //最终返回数据 的封装
                Map map = new HashMap();
                map.put("out_trade_no", orderNo);
                map.put("course_id", order.getCourseId());
                map.put("total_fee", order.getTotalFee());
                map.put("result_code", resultMap.get("result_code"));  //返回二维码操作状态码
                map.put("code_url", resultMap.get("code_url"));        //二维码地址
    
                return map;
            }catch(Exception e) {
                throw new onlineEduException(20001,"生成二维码失败");
            }
        }

    二、查询订单状态

    controller

    有两个方法,一个是查询订单状态另一个是更新订单表

     @GetMapping("queryPaystatus/{orderNo}")
        public R queryPaystatus(@PathVariable String orderNo){
            Map<String,String> map=payLogService.queryPaystatus(orderNo);
            System.out.println("###########查询订单状态map集合"+map);
            if(map==null){
                return R.Error().message("支付出错");
            }
            if(map.get("trade_state").equals("SUCCESS")){
                //添加记录,更新订单表状态
                payLogService.updateOrderStatus(map);
                return R.OK().code(20000).message("支付成功");
            }
            return R.OK().code(25000).message("支付中");
    
        }

    serviceImpl

    @Override
        public Map<String, String> queryPaystatus(String orderNo) {
            try {
                //1、封装参数
                Map m = new HashMap<>();
                m.put("appid", "wx74862e0dfcf69954");
                m.put("mch_id", "1558950191");
                m.put("out_trade_no", orderNo);
                m.put("nonce_str", WXPayUtil.generateNonceStr());
    
                //2 发送httpclient
                HttpClient client = new HttpClient("https://api.mch.weixin.qq.com/pay/orderquery");
                client.setXmlParam(WXPayUtil.generateSignedXml(m,"T6m9iK73b0kn9g5v426MKfHQH7X8rKwb"));
                client.setHttps(true);
                client.post();
    
                //3 得到请求返回内容
                String xml = client.getContent();
                Map<String, String> resultMap = WXPayUtil.xmlToMap(xml);
                //4、转成Map再返回
                return resultMap;
            }catch(Exception e) {
                return null;
            }
        }
    
        @Override
        public void updateOrderStatus(Map<String, String> map) {
            //从map获取订单号
            String orderNo = map.get("out_trade_no");
            //根据订单号查询订单信息
            QueryWrapper<TOrder> wrapper = new QueryWrapper<>();
            wrapper.eq("order_no",orderNo);
            TOrder order = orderService.getOne(wrapper);
    
            //更新订单表订单状态
            if(order.getStatus().intValue() == 1) { return; }
            order.setStatus(1);//1代表已经支付
            orderService.updateById(order);
    
            //向支付表添加支付记录
            TPayLog payLog = new TPayLog();
            payLog.setOrderNo(orderNo);  //订单号
            payLog.setPayTime(new Date()); //订单完成时间
            payLog.setPayType(1);//支付类型 1微信
            payLog.setTotalFee(order.getTotalFee());//总金额(分)
    
            payLog.setTradeState(map.get("trade_state"));//支付状态
            payLog.setTransactionId(map.get("transaction_id")); //流水号
            payLog.setAttr(JSONObject.toJSONString(map));
    
            baseMapper.insert(payLog);
        }
    @GetMapping("queryPaystatus/{orderNo}")
    public R queryPaystatus(@PathVariable String orderNo){
    Map<String,String> map=payLogService.queryPaystatus(orderNo);
    System.out.println("###########查询订单状态map集合"+map);
    if(map==null){
    return R.Error().message("支付出错");
    }
    if(map.get("trade_state").equals("SUCCESS")){
    //添加记录,更新订单表状态
    payLogService.updateOrderStatus(map);
    return R.OK().code(20000).message("支付成功");
    }
    return R.OK().code(25000).message("支付中");

    }
  • 相关阅读:
    IOS6.0 应用内直接下载程序 不需跳转AppStore
    维护Product
    CRM Service summary 1
    "No update of sales order X from purchase order (error V1 154)."
    Organizational Management
    懂PMP的好处
    Buying Center
    更新
    Business Partner定义,以及与Account的区分
    Fact Sheet
  • 原文地址:https://www.cnblogs.com/dmzna/p/12879708.html
Copyright © 2011-2022 走看看