|
|
@ -143,7 +143,7 @@ public class WxMiniappPayServiceImpl implements WxMiniappPayService { |
|
|
|
//权限验证 |
|
|
|
//HanHaiMember hanHaiMember = shiroRealm.checkUserTokenIsEffectHanHaiOpenId(token);//小程序权限验证 |
|
|
|
HanHaiMember hanHaiMember = shiroRealm.checkUserTokenIsEffectHanHaiAccount(token); //公众号权限验证; |
|
|
|
//HanHaiMember hanHaiMember = hanHaiMemberService.getById("1919297392365035521"); |
|
|
|
//HanHaiMember hanHaiMember = hanHaiMemberService.getById("1935289020980486145"); |
|
|
|
|
|
|
|
// 初始化服务 |
|
|
|
RefundService service = new RefundService.Builder().config(config).build(); |
|
|
@ -166,74 +166,113 @@ public class WxMiniappPayServiceImpl implements WxMiniappPayService { |
|
|
|
if(null != check){ |
|
|
|
return Response.error("该订单已经退款过:"+orderId); |
|
|
|
} |
|
|
|
//添加退款记录 |
|
|
|
MassageRefoundLog massageRefoundLog = new MassageRefoundLog(); |
|
|
|
massageRefoundLog.setStatus("0");//退款状态 |
|
|
|
massageRefoundLog.setOrderId(orderId);//退款订单号 |
|
|
|
massageRefoundLog.setRefoundAmount(payOrder.getAmount());//退款金额 |
|
|
|
massageRefoundLog.setUserId(hanHaiMember.getId());//退款用户 |
|
|
|
massageRefoundLogService.save(massageRefoundLog); |
|
|
|
|
|
|
|
switch (payOrder.getPayType()){ |
|
|
|
//微信支付退款 |
|
|
|
case "0": |
|
|
|
//添加退款记录 |
|
|
|
MassageRefoundLog massageRefoundLog = new MassageRefoundLog(); |
|
|
|
massageRefoundLog.setStatus("0");//退款状态 |
|
|
|
massageRefoundLog.setOrderId(orderId);//退款订单号 |
|
|
|
massageRefoundLog.setRefoundAmount(payOrder.getAmount());//退款金额 |
|
|
|
massageRefoundLog.setUserId(hanHaiMember.getId());//退款用户 |
|
|
|
massageRefoundLogService.save(massageRefoundLog); |
|
|
|
// if (payOrder.getAmount().compareTo(req.getRefundAmount()) < 0) { |
|
|
|
// return Response.error("退款金额不能大于支付金额"); |
|
|
|
// } |
|
|
|
|
|
|
|
CreateRequest request = new CreateRequest(); |
|
|
|
// 调用request.setXxx(val)设置所需参数,具体参数可见Request定义 |
|
|
|
request.setOutTradeNo(orderId); |
|
|
|
request.setOutRefundNo("REFUND_" + orderId); |
|
|
|
AmountReq amount = new AmountReq(); |
|
|
|
// 订单总金额,单位为分,只能为整数,详见支付金额 |
|
|
|
amount.setTotal(decimalToLong(payOrder.getAmount())); |
|
|
|
// 退款金额,单位为分,只能为整数,不能超过支付总额 |
|
|
|
amount.setRefund(decimalToLong(payOrder.getAmount())); |
|
|
|
amount.setCurrency("CNY"); |
|
|
|
|
|
|
|
request.setAmount(amount); |
|
|
|
request.setNotifyUrl(refundNotifyUrl); |
|
|
|
// 调用接口 |
|
|
|
Refund refund = null; |
|
|
|
try { |
|
|
|
refund = service.create(request); |
|
|
|
} catch (HttpException e) { |
|
|
|
log.error("退款申请失败,发送HTTP请求失败:", e); |
|
|
|
return Response.error("退款失败"); |
|
|
|
} catch (MalformedMessageException e) { |
|
|
|
log.error("退款申请失败,解析微信支付应答或回调报文异常,返回信息:", e); |
|
|
|
return Response.error("退款失败"); |
|
|
|
} catch (ValidationException e) { |
|
|
|
log.error("退款申请失败,验证签名失败,返回信息:", e); |
|
|
|
return Response.error("验证签名失败"); |
|
|
|
} catch (ServiceException e) { |
|
|
|
log.error("退款申请失败,发送HTTP请求成功,返回异常,返回码:{},返回信息:", e.getErrorCode(), e); |
|
|
|
return Response.error("退款失败:" + e.getErrorMessage()); |
|
|
|
} catch (Exception e) { |
|
|
|
log.error("退款申请失败,异常:", e); |
|
|
|
return Response.error("退款失败"); |
|
|
|
} |
|
|
|
if (Status.SUCCESS.equals(refund.getStatus())) { |
|
|
|
log.info("退款成功!-订单号:{}", payOrder.getId()); |
|
|
|
|
|
|
|
//修改退款记录订单状态 |
|
|
|
MassageRefoundLog refoundLog = massageRefoundLogService.lambdaQuery() |
|
|
|
.eq(MassageRefoundLog::getOrderId, payOrder.getId()) |
|
|
|
.one(); |
|
|
|
|
|
|
|
refoundLog.setRefoundTime(CommonUtils.getCurrentTime()); |
|
|
|
refoundLog.setStatus("1"); |
|
|
|
massageRefoundLogService.updateById(refoundLog); |
|
|
|
|
|
|
|
return Response.success("退款成功"); |
|
|
|
} else if (Status.CLOSED.equals(refund.getStatus())) { |
|
|
|
log.info("退款关闭!-订单号:{}", payOrder.getId()); |
|
|
|
return Response.error("退款关闭"); |
|
|
|
} else if (Status.PROCESSING.equals(refund.getStatus())) { |
|
|
|
log.info("退款处理中!-订单号:{}", payOrder.getId()); |
|
|
|
return Response.error("退款处理中"); |
|
|
|
} else if (Status.ABNORMAL.equals(refund.getStatus())) { |
|
|
|
log.info("退款异常!-订单号:{}", payOrder.getId()); |
|
|
|
return Response.error("退款异常"); |
|
|
|
CreateRequest request = new CreateRequest(); |
|
|
|
// 调用request.setXxx(val)设置所需参数,具体参数可见Request定义 |
|
|
|
request.setOutTradeNo(orderId); |
|
|
|
request.setOutRefundNo("REFUND_" + orderId); |
|
|
|
AmountReq amount = new AmountReq(); |
|
|
|
// 订单总金额,单位为分,只能为整数,详见支付金额 |
|
|
|
amount.setTotal(decimalToLong(payOrder.getAmount())); |
|
|
|
// 退款金额,单位为分,只能为整数,不能超过支付总额 |
|
|
|
amount.setRefund(decimalToLong(payOrder.getAmount())); |
|
|
|
amount.setCurrency("CNY"); |
|
|
|
|
|
|
|
request.setAmount(amount); |
|
|
|
request.setNotifyUrl(refundNotifyUrl); |
|
|
|
// 调用接口 |
|
|
|
Refund refund = null; |
|
|
|
try { |
|
|
|
refund = service.create(request); |
|
|
|
} catch (HttpException e) { |
|
|
|
log.error("退款申请失败,发送HTTP请求失败:", e); |
|
|
|
return Response.error("退款失败"); |
|
|
|
} catch (MalformedMessageException e) { |
|
|
|
log.error("退款申请失败,解析微信支付应答或回调报文异常,返回信息:", e); |
|
|
|
return Response.error("退款失败"); |
|
|
|
} catch (ValidationException e) { |
|
|
|
log.error("退款申请失败,验证签名失败,返回信息:", e); |
|
|
|
return Response.error("验证签名失败"); |
|
|
|
} catch (ServiceException e) { |
|
|
|
log.error("退款申请失败,发送HTTP请求成功,返回异常,返回码:{},返回信息:", e.getErrorCode(), e); |
|
|
|
return Response.error("退款失败:" + e.getErrorMessage()); |
|
|
|
} catch (Exception e) { |
|
|
|
log.error("退款申请失败,异常:", e); |
|
|
|
return Response.error("退款失败"); |
|
|
|
} |
|
|
|
if (Status.SUCCESS.equals(refund.getStatus())) { |
|
|
|
log.info("退款成功!-订单号:{}", payOrder.getId()); |
|
|
|
|
|
|
|
//修改退款记录订单状态 |
|
|
|
MassageRefoundLog refoundLog = massageRefoundLogService.lambdaQuery() |
|
|
|
.eq(MassageRefoundLog::getOrderId, payOrder.getId()) |
|
|
|
.one(); |
|
|
|
|
|
|
|
refoundLog.setRefoundTime(CommonUtils.getCurrentTime()); |
|
|
|
refoundLog.setStatus("1"); |
|
|
|
massageRefoundLogService.updateById(refoundLog); |
|
|
|
|
|
|
|
return Response.success("退款成功"); |
|
|
|
} else if (Status.CLOSED.equals(refund.getStatus())) { |
|
|
|
log.info("退款关闭!-订单号:{}", payOrder.getId()); |
|
|
|
return Response.error("退款关闭"); |
|
|
|
} else if (Status.PROCESSING.equals(refund.getStatus())) { |
|
|
|
log.info("退款处理中!-订单号:{}", payOrder.getId()); |
|
|
|
return Response.error("退款处理中"); |
|
|
|
} else if (Status.ABNORMAL.equals(refund.getStatus())) { |
|
|
|
log.info("退款异常!-订单号:{}", payOrder.getId()); |
|
|
|
return Response.error("退款异常"); |
|
|
|
} |
|
|
|
return Response.error("退款失败"); |
|
|
|
case "1": |
|
|
|
//余额支付退款 |
|
|
|
|
|
|
|
//修改用户余额 |
|
|
|
BigDecimal refoundMoney = payOrder.getAmount();//退款金额 |
|
|
|
BigDecimal newBalance = hanHaiMember.getPrice().add(refoundMoney); |
|
|
|
hanHaiMember.setPrice(newBalance); |
|
|
|
hanHaiMemberService.updateById(hanHaiMember); |
|
|
|
|
|
|
|
//修改订单退款状态 |
|
|
|
MassageOrder order = massageOrderService |
|
|
|
.lambdaQuery() |
|
|
|
.eq(MassageOrder::getId, payOrder.getId()) |
|
|
|
.eq(MassageOrder::getIsRefound, "0") |
|
|
|
.one(); |
|
|
|
if(null != order){ |
|
|
|
order.setStatus("3"); |
|
|
|
order.setIsRefound("1"); |
|
|
|
massageOrderService.updateById(order); |
|
|
|
} |
|
|
|
|
|
|
|
//添加退款记录 |
|
|
|
MassageRefoundLog refoundLog = new MassageRefoundLog(); |
|
|
|
refoundLog.setStatus("1");//退款状态 |
|
|
|
refoundLog.setOrderId(orderId);//退款订单号 |
|
|
|
refoundLog.setRefoundAmount(payOrder.getAmount());//退款金额 |
|
|
|
refoundLog.setUserId(hanHaiMember.getId());//退款用户 |
|
|
|
refoundLog.setRefoundTime(CommonUtils.getCurrentTime()); |
|
|
|
massageRefoundLogService.save(refoundLog); |
|
|
|
return Response.success("退款到余额成功"); |
|
|
|
default: |
|
|
|
//余额支付退款 |
|
|
|
return Response.error("支付方式错误,退款失败"); |
|
|
|
} |
|
|
|
return Response.error("退款失败"); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|