支付之后实现操作(接口)

1、查询支付状态接口

(1)在TPayLogController 中添加查询支付状态方法。

java 复制代码
@ApiOperation(value = "查询支付状态")
@GetMapping("queryOrderStatus/{orderNo}")
public R queryOrderStatus(@PathVariable String orderNo){
    //1调用接口,查询订单状态
    Map<String,String> map = payLogService.queryPayStatus(orderNo);
    //2判断支付返回结果是否成功
    if(map.get("trade_state").equals("SUCCESS")){//支付成功
        //3支付成功,修改订单状态,插入支付日志
        payLogService.updateOrderStatus(map);
        return R.ok().message("支付成功");
    }
    return R.ok().code(25000).message("支付中");
}

(2)在TpayLogService中添加接口方法

java 复制代码
Map<String, String> queryPayStatus(String orderNo);
void updateOrderStatus(Map<String, String> map);

(3)在TPayLogServiceImpl实现接口方法

java 复制代码
//调用接口,查询订单状态
@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 client = new HttpClient("https://api.mch.weixin.qq.com/pay/orderquery");
        client.setXmlParam(WXPayUtil.generateSignedXml(m,"T6m9iK73b0kn9g5v426MKfHQH7X8rKwb"));
        client.setHttps(true);
        client.post();
        //3获取微信反馈结果xml
           String content = client.getContent();
           System.out.println("支付结果返回="+content);
           //4转化xml成map
           Map<String, String> map = WXPayUtil.xmlToMap(content);
           return map;
    } catch (Exception e) {
        e.printStackTrace();
        throw new GuliException(20001,"支付失败");
    }
    
}

//支付成功,修改订单状态,插入支付日志
@Override
public void updateOrderStatus(Map<String, String> map) {
    //1修改订单状态status改为1
    //1.1根据订单号查询订单
    QueryWrapper<TOrder> wrapper = new QueryWrapper<>();
    wrapper.eq("order_no",map.get("out_trade_no"));
    TOrder order = orderService.getOne(wrapper);
    //1.2判断订单
    if(order==null){
        throw new GuliException(20001,"订单失效");
    }
    //1.3更改状态
    order.setStatus(1);//已支付
    orderService.updateById(order);
    //2支付日志表插入日志
    TPayLog payLog = new TPayLog();
    payLog.setOrderNo(order.getOrderNo());//支付订单号
    payLog.setPayTime(new Date());
    payLog.setPayType(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);//插入到支付日志表
}
相关推荐
字节源流36 分钟前
关于maven的依赖下不下来的问题
java·maven
pjx9871 小时前
服务间的“握手”:OpenFeign声明式调用与客户端负载均衡
java·运维·spring·负载均衡
prinrf('千寻)2 小时前
MyBatis-Plus 的 updateById 方法不更新 null 值属性的问题
java·开发语言·mybatis
老华带你飞2 小时前
实习记录小程序|基于SSM+Vue的实习记录小程序设计与实现(源码+数据库+文档)
java·数据库·spring boot·小程序·论文·毕设·实习记录小程序
在未来等你2 小时前
互联网大厂Java求职面试:AI与大模型应用集成及云原生挑战
java·微服务·ai·kubernetes·大模型·embedding·spring ai
my_styles2 小时前
docker-compose部署项目(springboot服务)以及基础环境(mysql、redis等)ruoyi-ry
spring boot·redis·后端·mysql·spring cloud·docker·容器
源码技术栈3 小时前
SaaS基于云计算、大数据的Java云HIS平台信息化系统源码
java·大数据·云计算·云his·his系统·云医院·区域his
编程、小哥哥3 小时前
互联网大厂Java面试:从Spring Boot到微服务架构的技术深挖
java·spring boot·redis·微服务·prometheus·面试技巧
揽你·入怀3 小时前
数据结构:ArrayList简单实现与常见操作实例详解
java·开发语言
okok__TXF3 小时前
SpringBoot3+AI
java·人工智能·spring