wuxw
2023-10-27 a3f3bdb9d56cb9b4d1527b0306758df3fc2cb8b6
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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
package com.java110.acct.payment.adapt.easypay;
 
import com.alibaba.fastjson.JSONObject;
import com.java110.acct.payment.IRefundMoneyAdapt;
import com.java110.acct.payment.adapt.bbgpay.EncryptDecryptFactory;
import com.java110.acct.payment.adapt.easypay.utils.HttpConnectUtils;
import com.java110.core.client.FtpUploadTemplate;
import com.java110.core.client.OssUploadTemplate;
import com.java110.core.factory.GenerateCodeFactory;
import com.java110.core.log.LoggerFactory;
import com.java110.dto.paymentPool.PaymentPoolDto;
import com.java110.dto.paymentPoolValue.PaymentPoolValueDto;
import com.java110.dto.wechat.OnlinePayDto;
import com.java110.intf.acct.IOnlinePayRefundV1InnerServiceSMO;
import com.java110.intf.acct.IOnlinePayV1InnerServiceSMO;
import com.java110.intf.acct.IPaymentPoolValueV1InnerServiceSMO;
import com.java110.intf.fee.IReturnPayFeeInnerServiceSMO;
import com.java110.intf.order.IOrderInnerServiceSMO;
import com.java110.intf.store.ISmallWechatV1InnerServiceSMO;
import com.java110.utils.util.PayUtil;
import com.java110.vo.ResultVo;
import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
 
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
@Service("easyRefundMoney")
public class EasyRefundMoneyAdapt implements IRefundMoneyAdapt {
 
 
    @Autowired
    private IPaymentPoolValueV1InnerServiceSMO paymentPoolValueV1InnerServiceSMOImpl;
 
    @Autowired
    private IReturnPayFeeInnerServiceSMO returnPayFeeInnerServiceSMOImpl;
 
    @Autowired
    private IOrderInnerServiceSMO orderInnerServiceSMOImpl;
 
    @Autowired
    private IOnlinePayV1InnerServiceSMO onlinePayV1InnerServiceSMOImpl;
 
    @Autowired
    private ISmallWechatV1InnerServiceSMO smallWechatV1InnerServiceSMOImpl;
 
    @Autowired
    private RestTemplate outRestTemplate;
 
 
    private static Logger logger = LoggerFactory.getLogger(EasyRefundMoneyAdapt.class);
 
    @Autowired
    private FtpUploadTemplate ftpUploadTemplate;
 
    @Autowired
    private OssUploadTemplate ossUploadTemplate;
 
    @Autowired
    private IOnlinePayRefundV1InnerServiceSMO onlinePayRefundV1InnerServiceSMOImpl;
 
    @Override
    public ResultVo refund(OnlinePayDto onlinePayDto, PaymentPoolDto paymentPoolDto) throws Exception {
 
        PaymentPoolValueDto paymentPoolValueDto = new PaymentPoolValueDto();
        paymentPoolValueDto.setPpId(paymentPoolDto.getPpId());
        List<PaymentPoolValueDto> paymentPoolValueDtos = paymentPoolValueV1InnerServiceSMOImpl.queryPaymentPoolValues(paymentPoolValueDto);
 
        if (paymentPoolValueDtos == null || paymentPoolValueDtos.isEmpty()) {
            throw new IllegalArgumentException("配置错误,未配置参数");
        }
 
        String ORGID = PaymentPoolValueDto.getValue(paymentPoolValueDtos, "ORGID"); // 客户编号
        String ORGMERCODE = PaymentPoolValueDto.getValue(paymentPoolValueDtos, "ORGMERCODE");
        String ORGTERMNO = PaymentPoolValueDto.getValue(paymentPoolValueDtos, "ORGTERMNO");
        String EASYPAY_PUBLIC_KEY = PaymentPoolValueDto.getValue(paymentPoolValueDtos, "EASYPAY_PUBLIC_KEY");
        String MER_RSA_PRIVATE_KEY = PaymentPoolValueDto.getValue(paymentPoolValueDtos, "MER_RSA_PRIVATE_KEY");
 
        JSONObject paramIn = new JSONObject();
        paramIn.put("orgId", ORGID);
        paramIn.put("orgMercode", ORGMERCODE);
        paramIn.put("orgTermno", ORGTERMNO);
        paramIn.put("signType", BasePay.SIGN_TYPE_RSA256);
        paramIn.put("orgTrace", GenerateCodeFactory.getGeneratorId("10"));
 
        JSONObject bizData = new JSONObject();
        bizData.put("oriOrgTrace", onlinePayDto.getOrderId());
        bizData.put("transAmt", PayUtil.moneyToIntegerStr(Double.parseDouble(onlinePayDto.getRefundFee())));
 
        paramIn.put("bizData", bizData);
        String sign = BasePay.sign(paramIn, MER_RSA_PRIVATE_KEY);
        paramIn.put("sign", sign);
 
        String requestStr = paramIn.toJSONString();
 
        String response = null;
        try {
            response = HttpConnectUtils.sendHttpSRequest(BasePay.BASE_URL + "/ledger/mposrefund", requestStr, "JSON", null);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        System.out.println("\n响应报文:" + response);
        BasePay.checkSign(response, EASYPAY_PUBLIC_KEY);
 
        JSONObject paramOut = JSONObject.parseObject(response);
        if (!"000000".equals(paramOut.getString("sysRetCode"))) {
            return new ResultVo(ResultVo.CODE_ERROR, "退款失败" + paramOut.getString("sysRetMsg"));
        }
 
        JSONObject resData = paramOut.getJSONObject("bizData");
 
        if (!"00".equals(resData.getString("tradeRetCode"))) {
            return new ResultVo(ResultVo.CODE_ERROR, "退款失败" + paramOut.getString("tradeRetMsg"));
 
        }
        return new ResultVo(ResultVo.CODE_OK, "退款完成");
 
 
    }
 
 
}