New file |
| | |
| | | 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.rabbit.producter.AgentProducer; |
| | | import cn.hutool.core.collection.CollUtil; |
| | | import cn.hutool.core.util.StrUtil; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | 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; |
| | | |
| | | @RequestMapping("/unipayCallBack") |
| | | public String unipayCallBack(HttpServletRequest request){ |
| | | log.info("进入汇聚支付回调"); |
| | | String orderNo = ""; |
| | | BigDecimal orderAmount = BigDecimal.ZERO; |
| | | String payTradeNo = ""; |
| | | String callBackState = ""; |
| | | String requestURI = request.getRequestURI(); |
| | | // String output = java.net.URLDecoder.decode(requestURI, "UTF-8"); |
| | | String params = StrUtil.subAfter(requestURI, "?", true); |
| | | System.out.println(params); |
| | | List<String> paramStrList = StrUtil.splitTrim(params, "&"); |
| | | if(CollUtil.isNotEmpty(paramStrList)){ |
| | | for(String paramStr :paramStrList){ |
| | | boolean r2orderNo = paramStr.startsWith("r2_OrderNo"); |
| | | if(r2orderNo){ |
| | | orderNo = StrUtil.subAfter(paramStr, "=", true); |
| | | } |
| | | boolean r3Amount = paramStr.startsWith("r3_Amount"); |
| | | if(r3Amount){ |
| | | orderAmount = new BigDecimal(StrUtil.subAfter(paramStr, "=", true)); |
| | | } |
| | | boolean r6Status = paramStr.startsWith("r6_Status"); |
| | | if(r6Status){ |
| | | callBackState = StrUtil.subAfter(paramStr, "=", true); |
| | | } |
| | | boolean r7TrxNo = paramStr.startsWith("r7_TrxNo"); |
| | | if(r7TrxNo){ |
| | | payTradeNo = StrUtil.subAfter(paramStr, "=", true); |
| | | } |
| | | } |
| | | } |
| | | if("100".equals(callBackState) && StrUtil.isNotBlank(orderNo)){ |
| | | MallOrderInfo orderInfo = orderInfoMapper.selectByOrderNo(orderNo); |
| | | 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<String> 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); |
| | | } |
| | | |
| | | } |