支付宝退款
import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.domain.AlipayFundTransOrderQueryModel;
import com.alipay.api.domain.AlipayFundTransToaccountTransferModel;
import com.alipay.api.domain.AlipayTradeFastpayRefundQueryModel;
import com.alipay.api.domain.AlipayTradeRefundModel;
import com.alipay.api.internal.util.AlipaySignature;
import com.alipay.api.request.*;
import com.alipay.api.response.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.annotations.Param;
import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import java.sql.Timestamp;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
@Slf4j
@RestController
public class AlipayController {
private Logger logger = LoggerFactory.getLogger(AlipayController.class);
@GetMapping("/alipay/refund")
public void refund(@Param("order_code") String order_code, @Param("refund_reason") String refund_reason) throws AlipayApiException {
//获得初始化的AlipayClient
AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl, AlipayConfig.app_id, AlipayConfig.merchant_private_key, "json", AlipayConfig.charset, AlipayConfig.alipay_public_key, AlipayConfig.sign_type);
//设置请求参数
AlipayTradeRefundRequest alipayRequest = new AlipayTradeRefundRequest();
AlipayTradeRefundModel model=new AlipayTradeRefundModel();
//根据订单编码查询定制订单信息
OrderTradeDTO orderTradeDTO = orderMapper.getCustomizationTradeTotalAmount(order_code);
// 商户订单号
model.setOutTradeNo(order_code);
// 退款金额
model.setRefundAmount(orderTradeDTO.getTotalAmount().toString());
// 退款原因
model.setRefundReason(refund_reason);
// 退款订单号(同一个订单可以分多次部分退款,当分多次时必传)
//model.setOutRequestNo(UUID.randomUUID().toString());
alipayRequest.setBizModel(model);
AlipayTradeRefundResponse alipayResponse = alipayClient.execute(alipayRequest);
//获取支付宝交易状态
String code = alipayResponse.getCode();
String msg = alipayResponse.getMsg();
Result.success().setData(orderDTO);
}
@GetMapping("/alipay/refundQuery")
public Result refundQuery(String order_code, String refundOrderNo) throws AlipayApiException {
//获得初始化的AlipayClient
AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl, AlipayConfig.app_id, AlipayConfig.merchant_private_key, "json", AlipayConfig.charset, AlipayConfig.alipay_public_key, AlipayConfig.sign_type);
//设置请求参数
AlipayTradeFastpayRefundQueryRequest alipayRequest = new AlipayTradeFastpayRefundQueryRequest();
AlipayTradeFastpayRefundQueryModel model=new AlipayTradeFastpayRefundQueryModel();
//请二选一设置
//商户订单号,商户网站订单系统中唯一订单号
model.setOutTradeNo(order_code);
//支付宝交易号
//model.setTradeNo(tradeNo);
//请求退款接口时,传入的退款请求号,如果在退款请求时未传入,则该值为创建交易时的外部交易号,必填
if ( refundOrderNo == null){
model.setOutRequestNo(order_code);
}else {
model.setOutRequestNo(refundOrderNo);
}
alipayRequest.setBizModel(model);
AlipayTradeFastpayRefundQueryResponse alipayResponse = alipayClient.execute(alipayRequest);
//获取支付宝交易状态
String subCode = alipayResponse.getSubCode();
String subMsg = alipayResponse.getSubMsg();
return Result.success().setData(null);
}
}
提现:
import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.domain.AlipayFundTransOrderQueryModel;
import com.alipay.api.domain.AlipayFundTransToaccountTransferModel;
import com.alipay.api.domain.AlipayTradeFastpayRefundQueryModel;
import com.alipay.api.domain.AlipayTradeRefundModel;
import com.alipay.api.internal.util.AlipaySignature;
import com.alipay.api.request.*;
import com.alipay.api.response.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.annotations.Param;
import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import java.sql.Timestamp;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
@Slf4j
@RestController
public class AlipayController {
private Logger logger = LoggerFactory.getLogger(AlipayController.class);
@PostMapping("/alipay/transfer/accounts")
public Result transfer(TransactionDTO transactionDTO) throws AlipayApiException {
//获得初始化的AlipayClient
AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl, AlipayConfig.app_id, AlipayConfig.merchant_private_key, "json", AlipayConfig.charset, AlipayConfig.alipay_public_key, AlipayConfig.sign_type);
//设置请求参数
AlipayFundTransToaccountTransferRequest alipayRequest = new AlipayFundTransToaccountTransferRequest();
AlipayFundTransToaccountTransferModel model = new AlipayFundTransToaccountTransferModel();
// 商户订单号
model.setOutBizNo(transactionDTO.getOrderCode());
// 转账金额
model.setAmount(transactionDTO.getRemitAmount().toString());
//收款方账户类型
model.setPayeeType("ALIPAY_LOGONID");
//收款方账户
model.setPayeeAccount(transactionDTO.getTransferAcc());
//以下为可选
//付款方姓名,如果该字段不传,则默认显示付款方的支付宝认证姓名或单位名称
model.setPayerShowName("");
//收款方真实姓名,如果本参数不为空,则会校验该账户在支付宝登记的实名是否与收款方真实姓名一致
model.setPayeeRealName("");
// 转账备注
model.setRemark("作者支付宝提现");
alipayRequest.setBizModel(model);
AlipayFundTransToaccountTransferResponse alipayResponse = alipayClient.execute(alipayRequest);
OrderDTO orderDTO = new OrderDTO();
if ( alipayResponse.isSuccess()){
//获取支付宝交易状态
String code = alipayResponse.getCode();
String msg = alipayResponse.getMsg();
}
return Result.success().setData(orderDTO);
}
@GetMapping("/alipay/transferQuery")
public Result transferQuery(String order_code) throws AlipayApiException {
//获得初始化的AlipayClient
AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl, AlipayConfig.app_id, AlipayConfig.merchant_private_key, "json", AlipayConfig.charset, AlipayConfig.alipay_public_key, AlipayConfig.sign_type);
//设置请求参数
AlipayFundTransOrderQueryRequest alipayRequest = new AlipayFundTransOrderQueryRequest();
AlipayFundTransOrderQueryModel model=new AlipayFundTransOrderQueryModel();
model.setOutBizNo(order_code);
alipayRequest.setBizModel(model);
AlipayFundTransOrderQueryResponse alipayResponse = alipayClient.execute(alipayRequest);
//获取支付宝交易状态
String subCode = alipayResponse.getSubCode();
String subMsg = alipayResponse.getSubMsg();
return Result.success().setData(alipayResponse.getBody());
}
}



