支付宝退款
This commit is contained in:
@@ -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";
|
||||
|
||||
/**
|
||||
* 回调地址 因为是内网开发 目前为内网穿透地址
|
||||
|
||||
@@ -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<String,Object>
|
||||
*/
|
||||
public AlipayTradeRefundResponse aliPayRefund(ReFundDTO reFundDTO) {
|
||||
public Map<String, Object> 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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -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<String, Object> map = aliPayUtil.aliPayRefund(reFundDTO);
|
||||
Object obj = map.get("msg");
|
||||
String resJson = obj.toString();
|
||||
log.info(">>>>>>>>>>>支付宝返回的信息是 resJson = {}", resJson);
|
||||
Map<String,Object> 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 更新订单状态
|
||||
|
||||
|
||||
Reference in New Issue
Block a user