From e3eb55d5f33eddb7ed29874189ab5132fd180df0 Mon Sep 17 00:00:00 2001 From: xiaoyong931011 <15274802129@163.com> Date: Tue, 23 Aug 2022 16:06:29 +0800 Subject: [PATCH] 20220822 --- src/main/java/cc/mrbird/febs/pay/controller/UnipayController.java | 107 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 107 insertions(+), 0 deletions(-) diff --git a/src/main/java/cc/mrbird/febs/pay/controller/UnipayController.java b/src/main/java/cc/mrbird/febs/pay/controller/UnipayController.java new file mode 100644 index 0000000..4a0cdb1 --- /dev/null +++ b/src/main/java/cc/mrbird/febs/pay/controller/UnipayController.java @@ -0,0 +1,107 @@ +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); + } + +} -- Gitblit v1.9.1