diff --git a/src/main/java/com/peanut/modules/pay/alipay/config/AliPayConfig.java b/src/main/java/com/peanut/modules/pay/alipay/config/AliPayConfig.java index 14e8c5d8..3a7b10d2 100644 --- a/src/main/java/com/peanut/modules/pay/alipay/config/AliPayConfig.java +++ b/src/main/java/com/peanut/modules/pay/alipay/config/AliPayConfig.java @@ -24,13 +24,13 @@ public class AliPayConfig { * 应用公钥 */ - public static final String HS_ALIPAY_PUBLIC_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmvqCFRgQCqflYxyHhPyBVBVon51FkGAT8H31hAufhCiW6hAv8HFUn2Tyl6TwAd09HOlessQjjMYLlGRHXkTOVvd1n9I5La7YrrN+F6O/b4Jy17I9k7QDdZLvUKeXm1VcPlj3aSJdZzhTcAqImkj5sFzrFSE+THHMVL5hlAzVIPHWFaA/Vh2Ltdzt9HOL5vo2Bgru5b4kanI5xBaKCfzkaHC6iWxxWk81jBoogGJ1FEky9QSOb4QzSQ4ZtwecFGe/4+PRFkGGW1dH15Qq2UXq3zy6wIF2EfeT/utivV4fHnc04U6z15i1z/f406s9tdfIo10qBfBIH4VQ9jSwkg4ndwIDAQAB"; + public static final String HS_ALI_PUBLIC_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmvqCFRgQCqflYxyHhPyBVBVon51FkGAT8H31hAufhCiW6hAv8HFUn2Tyl6TwAd09HOlessQjjMYLlGRHXkTOVvd1n9I5La7YrrN+F6O/b4Jy17I9k7QDdZLvUKeXm1VcPlj3aSJdZzhTcAqImkj5sFzrFSE+THHMVL5hlAzVIPHWFaA/Vh2Ltdzt9HOL5vo2Bgru5b4kanI5xBaKCfzkaHC6iWxxWk81jBoogGJ1FEky9QSOb4QzSQ4ZtwecFGe/4+PRFkGGW1dH15Qq2UXq3zy6wIF2EfeT/utivV4fHnc04U6z15i1z/f406s9tdfIo10qBfBIH4VQ9jSwkg4ndwIDAQAB"; /** * 支付宝公钥 */ - public static final String HS_ALI_PUBLIC_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAiVLUVTnNuq+2C1FRtcIRcG3rCgtVVulkz2QljKbPr7NNWTJJIIfGwyhNuH76s5D1lvNmn2NkuoqM0cMJCSd+W+JW9KpdQ0dgumFHCoRA/OWUoqpLvEOmm2hRMaWpvd+OQq2aPz+p+z6pqZ9SAlgUIolzrUn4idCvgIycqRaGsf1sEJFR5W+rneqtMhNYHdwemqaqnysInwshHR3cHs1AC6y/eL6pcQhaYJ5qVMIRg54/6Lr4CU114Rmph7UM9C28ulmHkFMN/DKPUDbM1+glxjzmqHQChY293Db0dlwZeiDWF3Tli2BVd6pz5KEkQlUsGeLW1O0rT9T9sxzsavxArwIDAQAB"; + public static final String HS_ALIPAY_PUBLIC_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAiVLUVTnNuq+2C1FRtcIRcG3rCgtVVulkz2QljKbPr7NNWTJJIIfGwyhNuH76s5D1lvNmn2NkuoqM0cMJCSd+W+JW9KpdQ0dgumFHCoRA/OWUoqpLvEOmm2hRMaWpvd+OQq2aPz+p+z6pqZ9SAlgUIolzrUn4idCvgIycqRaGsf1sEJFR5W+rneqtMhNYHdwemqaqnysInwshHR3cHs1AC6y/eL6pcQhaYJ5qVMIRg54/6Lr4CU114Rmph7UM9C28ulmHkFMN/DKPUDbM1+glxjzmqHQChY293Db0dlwZeiDWF3Tli2BVd6pz5KEkQlUsGeLW1O0rT9T9sxzsavxArwIDAQAB"; /** * 回调地址 因为是内网开发 目前为内网穿透地址 diff --git a/src/main/java/com/peanut/modules/pay/alipay/config/AliPayUtil.java b/src/main/java/com/peanut/modules/pay/alipay/config/AliPayUtil.java index 18925a4f..45bb0dbd 100644 --- a/src/main/java/com/peanut/modules/pay/alipay/config/AliPayUtil.java +++ b/src/main/java/com/peanut/modules/pay/alipay/config/AliPayUtil.java @@ -3,28 +3,19 @@ package com.peanut.modules.pay.alipay.config; import com.alipay.api.AlipayApiException; import com.alipay.api.AlipayClient; -import com.alipay.api.domain.AlipayTradeAppPayModel; -import com.alipay.api.domain.AlipayTradeQueryModel; -import com.alipay.api.domain.AlipayTradeRefundModel; -import com.alipay.api.request.AlipayTradeAppPayRequest; -import com.alipay.api.request.AlipayTradeQueryRequest; -import com.alipay.api.request.AlipayTradeRefundRequest; -import com.alipay.api.request.AlipayTradeWapPayRequest; -import com.alipay.api.response.AlipayTradeAppPayResponse; -import com.alipay.api.response.AlipayTradeQueryResponse; -import com.alipay.api.response.AlipayTradeRefundResponse; -import com.alipay.api.response.AlipayTradeWapPayResponse; +import com.alipay.api.domain.*; +import com.alipay.api.request.*; +import com.alipay.api.response.*; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; -import com.peanut.modules.pay.alipay.config.AliPayConfig; import com.peanut.modules.pay.alipay.dto.AlipayDTO; import com.peanut.modules.pay.alipay.dto.ReFundDTO; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import org.springframework.stereotype.Component; - import java.util.HashMap; import java.util.Map; +import java.util.UUID; @Component @@ -98,7 +89,7 @@ public class AliPayUtil { * @param reFundDTO * @return Map */ - public AlipayTradeRefundResponse aliPayRefund(ReFundDTO reFundDTO) { + public Map aliPayRefund(ReFundDTO reFundDTO) { log.info(">>>>>>>>>支付宝退款 订单号 = {}", reFundDTO.getOutTrandeNo()); Map map = new HashMap(); AlipayTradeRefundRequest request = new AlipayTradeRefundRequest(); @@ -107,22 +98,22 @@ public class AliPayUtil { model.setRefundAmount(String.valueOf(reFundDTO.getRefundAmount())); // 支付宝交易号 model.setTradeNo(reFundDTO.getTradeNo()); - // 订单支付时传入的商户订单号 - model.setOutTradeNo(reFundDTO.getOutTrandeNo()); if (StringUtils.isNotBlank(reFundDTO.getRefundReason())) { // 退款原因 model.setRefundReason(reFundDTO.getRefundReason()); } + model.setOutRequestNo(UUID.randomUUID().toString().substring(0, 6)); request.setBizModel(model); AlipayTradeRefundResponse response = null; + try { response = AliPayConfig.getAliPayClient().execute(request); - return response; + map.put("msg", response.getBody()); } catch (Exception e) { log.info(">>>>>>>>>>退款出现异常 exception = {}", e); e.printStackTrace(); } - return response; + return map; } /** diff --git a/src/main/java/com/peanut/modules/pay/alipay/controller/AliPayController.java b/src/main/java/com/peanut/modules/pay/alipay/controller/AliPayController.java index 4e80169b..9bcf8bdc 100644 --- a/src/main/java/com/peanut/modules/pay/alipay/controller/AliPayController.java +++ b/src/main/java/com/peanut/modules/pay/alipay/controller/AliPayController.java @@ -3,18 +3,17 @@ package com.peanut.modules.pay.alipay.controller; import com.alibaba.fastjson.JSONObject; import com.peanut.common.utils.R; import com.peanut.modules.pay.alipay.dto.AlipayDTO; +import com.peanut.modules.pay.alipay.dto.ReFundDTO; import com.peanut.modules.pay.alipay.service.AliPayService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; - import javax.servlet.http.HttpServletRequest; import java.util.Map; - /** * 支付宝支付控制层 */ @@ -47,4 +46,14 @@ public class AliPayController { return R.ok().put("aliNotify",aliNotify); } + /** + * 支付宝退款 + */ + @RequestMapping("/refund") + public R refund(@RequestBody ReFundDTO reFundDTO) { + String refund = aliPayService.refund(reFundDTO); + return R.ok().put("msg",refund); + } + + } diff --git a/src/main/java/com/peanut/modules/pay/alipay/service/AliPayService.java b/src/main/java/com/peanut/modules/pay/alipay/service/AliPayService.java index 7933431f..22059550 100644 --- a/src/main/java/com/peanut/modules/pay/alipay/service/AliPayService.java +++ b/src/main/java/com/peanut/modules/pay/alipay/service/AliPayService.java @@ -3,6 +3,7 @@ package com.peanut.modules.pay.alipay.service; import com.peanut.modules.pay.alipay.dto.AlipayDTO; +import com.peanut.modules.pay.alipay.dto.ReFundDTO; import javax.servlet.http.HttpServletRequest; @@ -23,6 +24,12 @@ public interface AliPayService { */ String aliNotify(HttpServletRequest request); + /** + * 支付宝退款 + * @param reFundDTO + * @return + */ + String refund(ReFundDTO reFundDTO); } diff --git a/src/main/java/com/peanut/modules/pay/alipay/service/impl/AliPayServiceImpl.java b/src/main/java/com/peanut/modules/pay/alipay/service/impl/AliPayServiceImpl.java index 6444591c..28776d91 100644 --- a/src/main/java/com/peanut/modules/pay/alipay/service/impl/AliPayServiceImpl.java +++ b/src/main/java/com/peanut/modules/pay/alipay/service/impl/AliPayServiceImpl.java @@ -16,12 +16,12 @@ import com.peanut.modules.book.service.*; import com.peanut.modules.pay.alipay.config.AliPayConfig; import com.peanut.modules.pay.alipay.config.AliPayUtil; import com.peanut.modules.pay.alipay.dto.AlipayDTO; +import com.peanut.modules.pay.alipay.dto.ReFundDTO; import com.peanut.modules.pay.alipay.service.AliPayService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; - import javax.servlet.http.HttpServletRequest; import java.math.BigDecimal; import java.util.*; @@ -109,7 +109,7 @@ public class AliPayServiceImpl implements AliPayService { log.info(">>>>>>>>>>支付宝回调 sign = {}, trade_status = {}, out_trade_no = {}, 参数 = {}", params.get("sign"), params.get("trade_status"), params.get("out_trade_no"), params.toString()); //调用SDK验证签名,验证是阿里回调,而不是其他恶意回调 - boolean flag = AlipaySignature.rsaCheckV1(params, AliPayConfig.HS_ALI_PUBLIC_KEY, AliPayConfig.CHARSET, AliPayConfig.SIGN_TYPE); + boolean flag = AlipaySignature.rsaCheckV1(params, AliPayConfig.HS_ALIPAY_PUBLIC_KEY, AliPayConfig.CHARSET, AliPayConfig.SIGN_TYPE); log.info(">>>>>>>>>>验签结果 flag = {}", flag); if (flag) { log.info(">>>>>>>>>>验签通过"); @@ -247,6 +247,24 @@ public class AliPayServiceImpl implements AliPayService { } } + @Override + public String refund(ReFundDTO reFundDTO) { + log.info(">>>>>>>>>>App请求支付宝退款接口"); + Map map = aliPayUtil.aliPayRefund(reFundDTO); + Object obj = map.get("msg"); + String resJson = obj.toString(); + log.info(">>>>>>>>>>>支付宝返回的信息是 resJson = {}", resJson); + Map res = JSONObject.parseObject(resJson); + //10000表示接口请求成功,Y表示资金变动成功 + if ("10000".equals(((Map)res.get("alipay_trade_refund_response")).get("code"))&& + "Y".equals(((Map)res.get("alipay_trade_refund_response")).get("fund_change"))){ + log.info(">>>>>>>>>>>支付宝退款成功!<<<<<<<<<<<<<"); + //表操作 + + + } + return resJson; + } //TODO 更新订单状态