2021与蓝度共同重构项目,服务端
MercuryZ
2022-03-31 ef270bd1855b5ce3f398c5df024840a498e33a8f
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/AliPayUtils.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,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;
    }
}