package cc.mrbird.febs.pay.controller; import cc.mrbird.febs.common.enumerates.AgentLevelEnum; import cc.mrbird.febs.common.enumerates.OrderStatusEnum; import cc.mrbird.febs.mall.entity.MallMember; import cc.mrbird.febs.mall.entity.MallOrderInfo; import cc.mrbird.febs.mall.mapper.MallOrderInfoMapper; import cc.mrbird.febs.mall.service.IApiMallMemberService; import cc.mrbird.febs.pay.model.UniPayCallBackDto; import cc.mrbird.febs.rabbit.producter.AgentProducer; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletRequest; import java.io.UnsupportedEncodingException; import java.math.BigDecimal; import java.util.Date; import java.util.List; @Slf4j @RestController @RequestMapping(value = "/api/unipay") public class UnipayController { @Autowired private MallOrderInfoMapper orderInfoMapper; @Autowired private IApiMallMemberService memberService; @Autowired private AgentProducer agentProducer; @GetMapping(value = "/unipayCallBack") public String unipayCallBack(HttpServletRequest request, UniPayCallBackDto uniPayCallBackDto){ log.info("进入汇聚支付回调"); String requestURI = request.getRequestURI(); log.info("进入汇聚支付回调"+ JSONUtil.parseObj(uniPayCallBackDto)); String orderNo = uniPayCallBackDto.getR2_OrderNo(); BigDecimal orderAmount = new BigDecimal(uniPayCallBackDto.getR3_Amount()); String callBackState = uniPayCallBackDto.getR6_Status(); String payTradeNo = uniPayCallBackDto.getR7_TrxNo(); // String output = java.net.URLDecoder.decode(requestURI, "UTF-8"); log.info("进入汇聚支付回调"+orderNo+";"+orderAmount+";"+payTradeNo+";"+callBackState); if("100".equals(callBackState) && StrUtil.isNotBlank(orderNo)){ MallOrderInfo orderInfo = orderInfoMapper.selectByOrderNo(orderNo); if(ObjectUtil.isNotEmpty(orderInfo)){ Integer status = orderInfo.getStatus(); if(OrderStatusEnum.WAIT_PAY.getValue() == status){ // BigDecimal amount = orderInfo.getAmount(); // if(amount.compareTo(orderAmount) == 0){ MallMember member = memberService.getById(orderInfo.getMemberId()); if (AgentLevelEnum.ZERO_LEVEL.name().equals(member.getLevel())) { member.setLevel(AgentLevelEnum.FIRST_LEVEL.name()); memberService.updateById(member); } orderInfo.setStatus(OrderStatusEnum.WAIT_SHIPPING.getValue()); orderInfo.setPayResult("1"); orderInfo.setPayTime(new Date()); orderInfo.setPayTradeNo(payTradeNo); orderInfoMapper.updateById(orderInfo); agentProducer.sendAutoLevelUpMsg(orderInfo.getMemberId()); // } } } } return "success"; } public static void main(String[] args) { String output = "https://www.baidu.com?r1_MerchantNo=888000000000000&r2_OrderNo=2020100000000000000&r3_Amount=10.00&r4_Cur=1&r5_Mp=goods&r6_Status=100&r7_TrxNo=100220100000000000&r8_BankOrderNo=100220100000000000&r9_BankTrxNo=4200000000202000000000000000&ra_PayTime=2022-08-11%2B16%253A14%253A39&rb_DealTime=2022-08-11%2B16%253A14%253A39&rc_BankCode=WEIXI_GZH&hmac=14c3819b5cc7bb80635901934f76c7a4"; String params = StrUtil.subAfter(output, "?", true); System.out.println(params); List paramStrList = StrUtil.splitTrim(params, "&"); String orderNo = ""; if(CollUtil.isNotEmpty(paramStrList)){ for(String paramStr :paramStrList){ boolean r2_orderNo = paramStr.startsWith("r2_OrderNo"); if(r2_orderNo){ orderNo = StrUtil.subAfter(paramStr, "=", true); } } } System.out.println(orderNo); } }