2021与蓝度共同重构项目,服务端
liuhaonan
2022-10-26 c7be2ef037c5aebb0cd8f1f33e5fa934389e6083
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
package com.sandu.ximon.admin.utils;
 
import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.domain.AlipayTradeRefundModel;
import com.alipay.api.request.AlipayTradeQueryRequest;
import com.alipay.api.request.AlipayTradeRefundRequest;
import com.alipay.api.response.AlipayTradeRefundResponse;
import com.google.gson.Gson;
import com.sandu.ximon.admin.config.AlipayConfig;
import com.sandu.ximon.admin.pay.alipay.UsrAlipayConfigService;
import com.sandu.ximon.dao.domain.AliConfigEntity;
import com.sandu.ximon.dao.domain.WxConfigEntity;
import lombok.AllArgsConstructor;
 
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
 
@AllArgsConstructor
public class AliPayUtils {
 
 
    public static boolean alipayQuery(String out_trade_no, Long streetlightId) {
        AliConfigEntity aliConfigEntity = UsrAlipayConfigService.getBean().getConfigByPoleId(streetlightId);// 获取客户的支付宝配置
        String checkStr = ConfigCheckUtils.checkAlipayConfig(aliConfigEntity);
        if (checkStr != null) {
            LogUtils.error("查询失败");
            return false;
        }
        //获得初始化的AlipayClient
        AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl,
                aliConfigEntity.getAppId(), aliConfigEntity.getPrivateKey(),
                AlipayConfig.format, AlipayConfig.charset, aliConfigEntity.
                getPublicKey(), AlipayConfig.sign_type);
 
        //设置请求参数
        AlipayTradeQueryRequest alipayRequest = new AlipayTradeQueryRequest();
 
        //商户订单号,商户网站订单系统中唯一订单号
        alipayRequest.setBizContent("{\"out_trade_no\":\"" + out_trade_no + "\"}");
 
        //请求
        String result = null;
        try {
            result = alipayClient.execute(alipayRequest).getBody();
        } catch (AlipayApiException e) {
            e.printStackTrace();
        }
        Map map = (Map) new Gson().fromJson(result, Map.class).get("alipay_trade_query_response");
        if (map.get("sub_msg") != null) {
            if ("交易不存在".equals(map.get("sub_msg"))) {
                return false;
            }
        }
        if (map.get("trade_status") == null) {
            return false;
        }
        if ("TRADE_SUCCESS".equals(map.get("trade_status"))) {
//            String payTime = (String) map.get("send_pay_date");
            return true;
        } else if ("TRADE_CLOSED".equals(map.get("trade_status"))) {
            LogUtils.error("交易已关闭(支付宝)");
            return false;
        }
        return false;
    }
 
 
    /**
     * 支付宝退款接口
     *
     * @return
     */
    public static boolean alipayrefund(Long streetlightId,
                                       String out_trade_no,
                                       Double refundAmount) {
        //LogService.getBean().log((long)0, ServerTask.SERVER_TASK,"退款操作",null,"{ 进行支付宝退款:"+out_trade_no+" }");
        //退款金额,不能大于订单总金额
        String refund_amount = refundAmount + "";
        //退款的原因说明
        String refund_reason = "充电桩退款";
        //标识一次退款请求,同一笔交易多次退款需要保证唯一,如需部分退款,则此参数必传。
        String out_request_no = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
 
        AliConfigEntity AliConfigEntity = UsrAlipayConfigService.getBean().getConfigByPoleId(streetlightId);   //找到是哪个客户的充电桩  就退款给谁
        String checkStr = ConfigCheckUtils.checkAlipayConfig(AliConfigEntity);
        if (checkStr != null) {
            return false;
        }
 
        // SDK 公共请求类,包含公共请求参数,以及封装了签名与验签,开发者无需关注签名与验签
        AlipayClient client = new DefaultAlipayClient(AlipayConfig.gatewayUrl, AliConfigEntity.getAppId(),
                AliConfigEntity.getPrivateKey(), AlipayConfig.format,
                AlipayConfig.charset, AliConfigEntity.getPublicKey(), AlipayConfig.sign_type);
        AlipayTradeRefundRequest alipay_request = new AlipayTradeRefundRequest();
        AlipayTradeRefundModel model = new AlipayTradeRefundModel();
        model.setOutTradeNo(out_trade_no);
//        model.setTradeNo(out_trade_no);
        model.setRefundAmount(refund_amount);
        model.setRefundReason(refund_reason);
        model.setOutRequestNo(out_request_no);
        alipay_request.setBizModel(model);
 
        AlipayTradeRefundResponse alipay_response = null;
        try {
            alipay_response = client.execute(alipay_request);
        } catch (AlipayApiException e) {
            e.printStackTrace();
        }
//        System.out.println(alipay_response.getBody());
        if ("10000".equals(alipay_response.getCode())) {
            //  退款成功
            //   LogService.getBean().log((long)0, ServerTask.SERVER_TASK,"退款操作",null,"{ 进行支付宝退款(成功):"+out_trade_no+",退款金额:"+refundAmount+" }");
            return true;
        }
        //保存退款金额和退款单号,将订单状态置为完成(RFERROR),保存到数据库
        //  LogService.getBean().log((long)0, ServerTask.SERVER_TASK,"退款操作",null,"{ 进行支付宝退款(失败):"+out_trade_no+",退款金额:"+refundAmount+",reason: "+ JSON.toJSONString(alipay_response)+" }");
        return false;
    }
 
 
}