下面列出了com.alipay.api.response.AlipayTradeRefundResponse#isSuccess ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
@Override
public boolean refund(String orderNum) {
//TODO 根据实际业务参数填写
Integer orderFrom=0;
AliPayConfig aliPayConfig= (AliPayConfig) getPayConfig(orderFrom);
AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do",aliPayConfig.getAppId(),aliPayConfig.getAppPrivateKey(),"json",aliPayConfig.getCharset(),aliPayConfig.getAliPayPublicKey(),"RSA2");
AlipayTradeRefundRequest request = new AlipayTradeRefundRequest();
Map<String,String> bizContent = new HashMap<>();
bizContent.put("out_trade_no",orderNum);
String refundAmount="";
bizContent.put("refund_amount",refundAmount);
AlipayTradeRefundResponse response = null;
try {
response = alipayClient.execute(request);
if(!response.isSuccess()){
return false;
}
} catch (AlipayApiException e) {
logger.error("调用支付宝退款失败 ====> "+e.getErrMsg());
}
return true;
}
/**
* 支付宝退款
*
* @param orderId
* @param servletRequest
* @return
*/
public Result aliRefund(Long orderId, HttpServletRequest servletRequest) throws Exception {
// 校验订单信息
Order order = orderService.findOne(orderId);
if (order.getStatus() < OrderStatus.PAY.getStatus()) {
log.error(ExceptionMessage.ORDER_STATUS_INCORRECTNESS + " orderId: {}", orderId);
throw new ValidateException(ExceptionMessage.ORDER_STATUS_INCORRECTNESS);
}
// 创建退款请求builder,设置请求参数
AlipayTradeRefundRequest request = new AlipayTradeRefundRequest();
Map<String, String> params = new TreeMap<>();
// 必须 商户订单号
params.put("out_trade_no", order.getOutTradeNo());
// 必须 支付宝交易号
params.put("trade_no", order.getTotalFee().toString());
// 必须 退款金额
params.put("refund_amount", order.getTotalFee().toString());
// 可选 代表 退款的原因说明
params.put("refund_reason", "退款的原因说明");
// 可选 标识一次退款请求,同一笔交易多次退款需要保证唯一(就是out_request_no在2次退款一笔交易时,要不一样),如需部分退款,则此参数必传
params.put("out_request_no", 1 + RandomUtil.randomNum(11));
// 可选 代表 商户的门店编号
params.put("store_id", "90m");
request.setBizContent(objectMapper.writeValueAsString(params));
AlipayTradeRefundResponse responseData = alipayClient.execute(request);
if (responseData.isSuccess()) {
log.info("ali refund success tradeNo:{}", order.getOutTradeNo());
return Result.success(ExceptionMessage.SUCCESS);
}
log.info("ali refund failed tradeNo:{}", order.getOutTradeNo());
return Result.error(ExceptionMessage.ALI_PAY_REFUND_FAILED);
}
/**
* 支付宝退款接口;
*
* @param bizContent 支付宝退款接口的业务内容请求JSON实例
* @return 是否调用成功
* @author Leibniz
*/
public static boolean refund(RefundBizContent bizContent, Account wxAccount){
String bizContentStr = bizContent.toString(); // 将参数bizContent转成字符串
// 检查bizContent是否合法
if(!bizContent.checkParameters()){
throw new IllegalArgumentException("错误的支付宝退款接口请求业务JSON:" + bizContentStr); // 抛出异常
}
AliAccountInfo aliAccountInfo = new AliAccountInfo(wxAccount.getZfbappid(), wxAccount.getZfbprivkey(), wxAccount.getZfbpubkey(), null, null, null);
AlipayClient alipayClient = AliPayCliFactory.getAlipayClient(aliAccountInfo); // 获取支付宝连接
AlipayTradeRefundRequest request = new AlipayTradeRefundRequest(); // 创建退款请求
request.setBizContent(bizContentStr); // 设置请求的bizContent
AlipayTradeRefundResponse response = null;
try {
response = alipayClient.execute(request); // 发送退款请求并获得响应
} catch (AlipayApiException e) { // 捕捉异常
LOG.error("调用支付宝退款接口时抛出异常,请求的JSON:" + bizContentStr, e); // 打日志
}
// 判断是否有响应
if (response != null) { // 响应成功
// 判断退款是否成功
if (response.isSuccess()) { // 退款成功
LOG.info("调用成功"); // 打日志
return true; // 退款成功
} else { // 退款失败
LOG.error("调用支付宝退款接口错误,code={},msg={},sub_code={},sub_msg={}", new Object[]{response.getCode(), response.getMsg(), response.getSubCode(), response.getSubMsg()}); // 打日志
}
} else { // 响应失败
LOG.error("调用支付宝退款接口时发生异常,返回响应对象为null!{}", bizContentStr); // 打日志
}
return false; // 退款失败
}
/**
* 支付宝退款接口;
*
* @param bizContent 支付宝退款接口的业务内容请求JSON实例
* @param acc 企业用户账户对象
* 异步返回 是否调用成功
*
* @author Leibniz
*/
public void alipayRefund(RefundBizContent bizContent, JsonObject acc, String successUrl, Handler<Boolean> callback) {
String bizContentStr = bizContent.toString(); // 将参数bizContent转成字符串
// 检查bizContent是否合法
if (!bizContent.checkParameters()) {
throw new IllegalArgumentException("错误的支付宝退款接口请求业务JSON:" + bizContentStr); // 抛出异常
}
String notifyUrl = zfbPayNotifyUrl; // 服务器后台回调通知的url
AliAccountInfo aliAccountInfo = new AliAccountInfo(acc.getString(ZFBAPPID), acc.getString(ZFBPRIVKEY), acc.getString(ZFBPUBKEY), successUrl, notifyUrl, null); // 该对象保存了支付宝账号的相关信息,以及请求回调地址
AlipayClient alipayClient = AliPayCliFactory.getAlipayClient(aliAccountInfo); // 获取支付宝连接
AlipayTradeRefundRequest request = new AlipayTradeRefundRequest(); // 创建退款请求
request.setBizContent(bizContentStr); // 设置请求的bizContent
AlipayTradeRefundResponse response = null;
try {
response = alipayClient.execute(request); // 发送退款请求并获得响应
} catch (AlipayApiException e) { // 捕捉异常
log.error("调用支付宝退款接口时抛出异常,请求的JSON:" + bizContentStr, e); // 打日志
}
// 判断是否有响应
if (response != null) { // 响应成功
// 判断退款是否成功
if (response.isSuccess()) { // 退款成功
log.info("调用成功"); // 打日志
callback.handle(true);
// 退款成功,其他都是错
} else { // 退款失败
log.error("调用支付宝退款接口错误,code={},msg={},sub_code={},sub_msg={}", response.getCode(), response.getMsg(), response.getSubCode(), response.getSubMsg()); // 打日志
callback.handle(false);
}
} else { // 响应失败
log.error("调用支付宝退款接口时发生异常,返回响应对象为null!{}", bizContentStr); // 打日志
callback.handle(false);
}
}
@Override
public Map doAliRefundReq(String jsonParam) {
String logPrefix = "【支付宝退款】";
BaseParam baseParam = JsonUtil.getObjectFromJson(jsonParam, BaseParam.class);
Map<String, Object> bizParamMap = baseParam.getBizParamMap();
if (ObjectValidUtil.isInvalid(bizParamMap)) {
_log.warn("{}失败, {}. jsonParam={}", logPrefix, RetEnum.RET_PARAM_NOT_FOUND.getMessage(), jsonParam);
return RpcUtil.createFailResult(baseParam, RetEnum.RET_PARAM_NOT_FOUND);
}
JSONObject refundOrderObj = baseParam.isNullValue("refundOrder") ? null : JSONObject.parseObject(bizParamMap.get("refundOrder").toString());
RefundOrder refundOrder = JSON.toJavaObject(refundOrderObj, RefundOrder.class);
if (ObjectValidUtil.isInvalid(refundOrder)) {
_log.warn("{}失败, {}. jsonParam={}", logPrefix, RetEnum.RET_PARAM_INVALID.getMessage(), jsonParam);
return RpcUtil.createFailResult(baseParam, RetEnum.RET_PARAM_INVALID);
}
String refundOrderId = refundOrder.getRefundOrderId();
String mchId = refundOrder.getMchId();
String channelId = refundOrder.getChannelId();
PayChannel payChannel = baseService4PayOrder.baseSelectPayChannel(mchId, channelId);
alipayConfig.init(payChannel.getParam());
AlipayClient client = new DefaultAlipayClient(alipayConfig.getUrl(), alipayConfig.getApp_id(), alipayConfig.getRsa_private_key(), AlipayConfig.FORMAT, AlipayConfig.CHARSET, alipayConfig.getAlipay_public_key(), AlipayConfig.SIGNTYPE);
AlipayTradeRefundRequest request = new AlipayTradeRefundRequest();
AlipayTradeRefundModel model = new AlipayTradeRefundModel();
model.setOutTradeNo(refundOrder.getPayOrderId());
model.setTradeNo(refundOrder.getChannelPayOrderNo());
model.setOutRequestNo(refundOrderId);
model.setRefundAmount(AmountUtil.convertCent2Dollar(refundOrder.getRefundAmount().toString()));
model.setRefundReason("正常退款");
request.setBizModel(model);
Map<String, Object> map = new HashMap<>();
map.put("refundOrderId", refundOrderId);
map.put("isSuccess", false);
try {
AlipayTradeRefundResponse response = client.execute(request);
if(response.isSuccess()){
map.put("isSuccess", true);
map.put("channelOrderNo", response.getTradeNo());
}else {
_log.info("{}返回失败", logPrefix);
_log.info("sub_code:{},sub_msg:{}", response.getSubCode(), response.getSubMsg());
map.put("channelErrCode", response.getSubCode());
map.put("channelErrMsg", response.getSubMsg());
}
} catch (AlipayApiException e) {
_log.error(e, "");
}
return RpcUtil.createBizResult(baseParam, map);
}