xiaoyong931011
2022-08-23 e132dd55051c165b11cfc401dc52d1d580367c91
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
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();
 
        log.info("进入汇聚支付回调"+requestURI);
//            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);
                }
            }
        }
 
        log.info("进入汇聚支付回调"+orderNo+";"+orderAmount+";"+payTradeNo+";"+callBackState);
        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);
    }
 
}