|
|
@@ -32,6 +32,10 @@ import com.wechat.pay.java.service.payments.jsapi.JsapiServiceExtension;
|
|
|
import com.wechat.pay.java.service.payments.jsapi.model.*;
|
|
|
import com.wechat.pay.java.service.payments.model.Transaction;
|
|
|
import com.wechat.pay.java.service.payments.nativepay.NativePayService;
|
|
|
+import com.wechat.pay.java.service.refund.RefundService;
|
|
|
+import com.wechat.pay.java.service.refund.model.QueryByOutRefundNoRequest;
|
|
|
+import com.wechat.pay.java.service.refund.model.Refund;
|
|
|
+import com.wechat.pay.java.service.refund.model.Status;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.http.impl.client.CloseableHttpClient;
|
|
|
import org.apache.poi.ss.usermodel.Row;
|
|
|
@@ -63,6 +67,7 @@ import java.util.*;
|
|
|
import static com.template.common.utils.StrUtils.getUUIDBits;
|
|
|
import static com.wechat.pay.java.service.payments.model.Transaction.TradeStateEnum.NOTPAY;
|
|
|
import static com.wechat.pay.java.service.payments.model.Transaction.TradeStateEnum.SUCCESS;
|
|
|
+import static com.wechat.pay.java.service.refund.model.Status.*;
|
|
|
|
|
|
/**
|
|
|
* <p>
|
|
|
@@ -2414,8 +2419,16 @@ public class HouseOrderController implements HouseOrderAPI {
|
|
|
JSONObject h5Refund = JSONObject.parseObject(msg);
|
|
|
|
|
|
System.out.println(TimeExchange.getTime() + "微信退款返回的信息:" + h5Refund);
|
|
|
-
|
|
|
+ RefundRecord rpr = new RefundRecord();
|
|
|
+ rpr.setHouseOrderId(payRecord.getId());
|
|
|
+ rpr.setRefundNo(refund_no);
|
|
|
+ rpr.setUserId(Integer.valueOf(houseOrder.getReserveUserId()));
|
|
|
+ rpr.setRefundPrice(new BigDecimal(total).divide(new BigDecimal("100")).setScale(2));
|
|
|
+ rpr.setIsSuccess(0);
|
|
|
+ rpr.setRemark("发起微信支付退款金额:"+total+"- "+TimeExchange.getTime());
|
|
|
+ houseOrder.setOrderStatus("6");
|
|
|
houseOrderService.updateById(houseOrder);
|
|
|
+ refundRecordService.updateById(rpr);
|
|
|
houseNumberStateService.updateById(houseNumberState);
|
|
|
return CommonResult.ok(h5Refund);
|
|
|
}
|
|
|
@@ -2459,38 +2472,37 @@ public class HouseOrderController implements HouseOrderAPI {
|
|
|
JSONObject resourceMap = JSONObject.parseObject(plainText);
|
|
|
// 获取 trade_state 值
|
|
|
String tradeState = resourceMap.get("refund_status").toString();
|
|
|
- if (tradeState.equals("SUCCESS")) {
|
|
|
-
|
|
|
- // 获取 amount 字段
|
|
|
- Map<String, Object> amountMap = (Map<String, Object>) resourceMap.get("amount");
|
|
|
- //获得 返回的商户订单号
|
|
|
- String outTradeNo = resourceMap.get("out_trade_no").toString();
|
|
|
+ // 获取 amount 字段
|
|
|
+ Map<String, Object> amountMap = (Map<String, Object>) resourceMap.get("amount");
|
|
|
+ //获得 返回的商户订单号
|
|
|
+ String outTradeNo = resourceMap.get("out_trade_no").toString();
|
|
|
// 微信支付订单号
|
|
|
- String transactionId = resourceMap.get("transaction_id").toString();
|
|
|
+ String transactionId = resourceMap.get("transaction_id").toString();
|
|
|
// 商户退款单号
|
|
|
- String outRefundNo = resourceMap.get("out_refund_no").toString();
|
|
|
+ String outRefundNo = resourceMap.get("out_refund_no").toString();
|
|
|
// 微信支付退款单号
|
|
|
- String refundId = resourceMap.get("refund_id").toString();
|
|
|
+ String refundId = resourceMap.get("refund_id").toString();
|
|
|
// 退款成功时间
|
|
|
- String success_time = resourceMap.get("success_time").toString();
|
|
|
+ String success_time = resourceMap.get("success_time").toString();
|
|
|
|
|
|
// 用户退款金额
|
|
|
- String total_fee = amountMap.get("payer_refund").toString();
|
|
|
- //业务逻辑------------
|
|
|
- LambdaQueryWrapper<HouseOrder> wrapperHo = new LambdaQueryWrapper<>();
|
|
|
- wrapperHo.eq(HouseOrder::getOrderNumber, outTradeNo);
|
|
|
- HouseOrder rr = houseOrderService.getOne(wrapperHo);
|
|
|
- if (ObjectUtils.isNotEmpty(rr)) {
|
|
|
- LambdaQueryWrapper<RefundRecord> wrapperRr = new LambdaQueryWrapper<>();
|
|
|
- wrapperRr.eq(RefundRecord::getHouseOrderId, rr.getId());
|
|
|
- RefundRecord rpr = refundRecordService.getOne(wrapperRr);
|
|
|
- if (rpr == null) {
|
|
|
+ String total_fee = amountMap.get("payer_refund").toString();
|
|
|
+ //业务逻辑------------
|
|
|
+ LambdaQueryWrapper<HouseOrder> wrapperHo = new LambdaQueryWrapper<>();
|
|
|
+ wrapperHo.eq(HouseOrder::getOrderNumber, outTradeNo);
|
|
|
+ PayRecord payRecord=payRecordService.getOne(new QueryWrapper<PayRecord>().eq("pay_no",outTradeNo));
|
|
|
+ HouseOrder rr = houseOrderService.getById(payRecord.getHouseOrderId());
|
|
|
+ LambdaQueryWrapper<RefundRecord> wrapperRr = new LambdaQueryWrapper<>();
|
|
|
+ wrapperRr.eq(RefundRecord::getHouseOrderId, rr.getId());
|
|
|
+ RefundRecord rpr = refundRecordService.getOne(wrapperRr);
|
|
|
+ if (tradeState.equals("SUCCESS")) {
|
|
|
+ if (rpr == null) {
|
|
|
// 保存支付信息
|
|
|
rpr = new RefundRecord();
|
|
|
rpr.setHouseOrderId(rr.getId());
|
|
|
rpr.setUserId(Integer.valueOf(rr.getReserveUserId()));
|
|
|
- rpr.setWxNo(outRefundNo);
|
|
|
- rpr.setRefundNo(refundId);
|
|
|
+ rpr.setRefundNo(outRefundNo);
|
|
|
+ rpr.setWxNo(refundId);
|
|
|
System.out.println("回调的金额:" + total_fee);
|
|
|
rpr.setRefundPrice(new BigDecimal(total_fee).divide(new BigDecimal("100")).setScale(2));
|
|
|
rpr.setIsSuccess(1);
|
|
|
@@ -2505,12 +2517,12 @@ public class HouseOrderController implements HouseOrderAPI {
|
|
|
}
|
|
|
|
|
|
} else if (rpr.getIsSuccess() != ePayStatu.Paysuccess.getValue()) {
|
|
|
- rpr.setWxNo(outRefundNo);
|
|
|
- rpr.setRefundNo(refundId);
|
|
|
+ rpr.setRefundNo(outRefundNo);
|
|
|
+ rpr.setWxNo(refundId);
|
|
|
System.out.println("回调的金额:" + total_fee);
|
|
|
rpr.setRefundPrice(new BigDecimal(total_fee).divide(new BigDecimal("100")).setScale(2));
|
|
|
rpr.setIsSuccess(1);
|
|
|
- rpr.setRemark("微信支付退款成功");
|
|
|
+ rpr.setRemark(rpr.getRemark()+"|微信支付退款成功金额:"+total_fee+"--"+TimeExchange.getTime());
|
|
|
Boolean updateRpr = refundRecordService.updateById(rpr);
|
|
|
if (!updateRpr) {
|
|
|
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
|
|
|
@@ -2521,7 +2533,7 @@ public class HouseOrderController implements HouseOrderAPI {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- }
|
|
|
+
|
|
|
|
|
|
// 订单状态
|
|
|
rr.setOrderStatus("9");
|
|
|
@@ -2542,9 +2554,14 @@ public class HouseOrderController implements HouseOrderAPI {
|
|
|
jsonObject.put("code", "SUCCESS");
|
|
|
jsonObject.put("message", "SUCCESS");
|
|
|
response.getWriter().write(jsonObject.toJSONString());
|
|
|
-
|
|
|
-
|
|
|
} else {
|
|
|
+ if (rpr!=null){
|
|
|
+ rpr.setRefundNo(outRefundNo);
|
|
|
+ rpr.setWxNo(refundId);
|
|
|
+ rpr.setIsSuccess(2);
|
|
|
+ rpr.setRemark(rpr.getRemark()+"|微信支付退款失败:"+tradeState+"--"+TimeExchange.getTime());
|
|
|
+
|
|
|
+ }
|
|
|
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
|
|
|
JSONObject jsonObject = new JSONObject();
|
|
|
jsonObject.put("code", "FAIL");
|
|
|
@@ -2554,16 +2571,16 @@ public class HouseOrderController implements HouseOrderAPI {
|
|
|
}
|
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
-// response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
|
|
|
-// JSONObject jsonObject = new JSONObject();
|
|
|
-// jsonObject.put("code", "FAIL");
|
|
|
-// jsonObject.put("message", "失败");
|
|
|
-// response.getWriter().write(jsonObject.toJSONString());
|
|
|
- response.setStatus(HttpServletResponse.SC_OK);
|
|
|
+ response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
|
|
|
JSONObject jsonObject = new JSONObject();
|
|
|
- jsonObject.put("code", "SUCCESS");
|
|
|
- jsonObject.put("message", "SUCCESS");
|
|
|
+ jsonObject.put("code", "FAIL");
|
|
|
+ jsonObject.put("message", "失败");
|
|
|
response.getWriter().write(jsonObject.toJSONString());
|
|
|
+// response.setStatus(HttpServletResponse.SC_OK);
|
|
|
+// JSONObject jsonObject = new JSONObject();
|
|
|
+// jsonObject.put("code", "SUCCESS");
|
|
|
+// jsonObject.put("message", "SUCCESS");
|
|
|
+// response.getWriter().write(jsonObject.toJSONString());
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -2619,6 +2636,7 @@ public class HouseOrderController implements HouseOrderAPI {
|
|
|
} catch (Exception e) {
|
|
|
return CommonResult.fail("关闭已生成支付订单失败返回:"+e.getMessage());
|
|
|
}
|
|
|
+ payRecord.setPayPrice(BigDecimal.valueOf(price));
|
|
|
payRecord.setPayNo(CommonUtil.generateUUID());
|
|
|
payRecord.setRemark("更新订单");
|
|
|
payRecordService.updateById(payRecord);
|
|
|
@@ -2662,6 +2680,101 @@ public class HouseOrderController implements HouseOrderAPI {
|
|
|
return CommonResult.ok(response);
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public CommonResult queryRefundById(String refundNo) {
|
|
|
+ Refund refund= new Refund();
|
|
|
+ Map<String,Object> result=new HashMap<>();
|
|
|
+ HouseOrder one = houseOrderService.getById(refundNo);
|
|
|
+ RefundRecord reFundRecord=refundRecordService.getOne(new QueryWrapper<RefundRecord>().eq("house_order_id",refundNo));
|
|
|
+ if(reFundRecord==null||reFundRecord.getId()==null){
|
|
|
+ result.put("code","1001");
|
|
|
+ result.put("message","该订单没有退款记录");
|
|
|
+ one.setOrderStatus("9");
|
|
|
+ one.setRefundTime(new Date());
|
|
|
+ houseOrderService.updateById(one);
|
|
|
+ return CommonResult.ok(result);
|
|
|
+ }
|
|
|
+ if(reFundRecord.getIsSuccess()==1){
|
|
|
+ result.put("code","200");
|
|
|
+ result.put("message","退款已完成");
|
|
|
+ one.setOrderStatus("9");
|
|
|
+ one.setRefundTime(new Date());
|
|
|
+ houseOrderService.updateById(one);
|
|
|
+ return CommonResult.ok(result);
|
|
|
+ }
|
|
|
+ if(reFundRecord.getIsSuccess()==2){
|
|
|
+ result.put("code","1002");
|
|
|
+ result.put("message","退款失败,原因:"+reFundRecord.getRemark());
|
|
|
+ //失败不更新订房单
|
|
|
+ return CommonResult.ok(result);
|
|
|
+ }
|
|
|
+ //退款中状态去微信查
|
|
|
+ if(reFundRecord.getIsSuccess()==0){
|
|
|
+ QueryByOutRefundNoRequest queryByOutRefundNoRequest = new QueryByOutRefundNoRequest();
|
|
|
+ // 调用request.setXxx(val)设置所需参数,具体参数可见Request定义
|
|
|
+// queryOrderByIdRequest.setSubMchid(wxPayV3Config.getMchId());
|
|
|
+ queryByOutRefundNoRequest.setOutRefundNo(reFundRecord.getRefundNo());
|
|
|
+ log.info("微信支付查询订单入参:"+queryByOutRefundNoRequest.toString());
|
|
|
+ Config config =
|
|
|
+ new RSAAutoCertificateConfig.Builder()
|
|
|
+ .merchantId( wxPayV3Config.getMchId())
|
|
|
+ .privateKeyFromPath(wxPayV3Config.getKeyPath())
|
|
|
+ .merchantSerialNumber(wxPayV3Config.getSerialNum())
|
|
|
+ .apiV3Key(wxPayV3Config.getApiKey3())
|
|
|
+ .build();
|
|
|
+ RefundService service =new RefundService.Builder()
|
|
|
+ .config(config)
|
|
|
+ .build();
|
|
|
+ try {
|
|
|
+ refund = service.queryByOutRefundNo(queryByOutRefundNoRequest);
|
|
|
+ log.info("微信退款查询订单出参:"+refund.toString());
|
|
|
+ switch (refund.getStatus()){
|
|
|
+ case SUCCESS:
|
|
|
+ one.setOrderStatus("9");
|
|
|
+ one.setRefundTime(new Date());
|
|
|
+ reFundRecord.setRefundNo(refund.getOutRefundNo());
|
|
|
+ reFundRecord.setWxNo(refund.getRefundId());
|
|
|
+ reFundRecord.setRefundPrice(new BigDecimal(refund.getAmount().getPayerRefund()).divide(new BigDecimal("100")).setScale(2));
|
|
|
+ reFundRecord.setIsSuccess(1);
|
|
|
+ reFundRecord.setRemark(reFundRecord.getRemark()+"|微信支付退款成功金额:"+refund.getAmount().getPayerRefund()+"--"+TimeExchange.getTime()+"-"+refund.getUserReceivedAccount());
|
|
|
+ result.put("code","200");
|
|
|
+ result.put("message","退款成功");
|
|
|
+ break;
|
|
|
+ case PROCESSING:
|
|
|
+ result.put("code","1003");
|
|
|
+ result.put("message","退款处理中,请稍后再查询:"+reFundRecord.getRemark());
|
|
|
+ break;
|
|
|
+ case CLOSED:
|
|
|
+ one.setOrderStatus("9");
|
|
|
+ one.setRefundTime(new Date());
|
|
|
+ reFundRecord.setIsSuccess(2);
|
|
|
+ reFundRecord.setRemark(reFundRecord.getRemark()+"|退款处理失败,退款订单被关闭,联系商户处理:"+TimeExchange.getTime());
|
|
|
+ result.put("code","1004");
|
|
|
+ result.put("message","退款处理失败,退款订单被关闭,联系商户处理");
|
|
|
+ break;
|
|
|
+ case ABNORMAL:
|
|
|
+ reFundRecord.setIsSuccess(2);
|
|
|
+ one.setOrderStatus("9");
|
|
|
+ one.setRefundTime(new Date());
|
|
|
+ reFundRecord.setRemark(reFundRecord.getRemark()+"|退款处理失败,退款异常,联系商户处理:"+TimeExchange.getTime());
|
|
|
+ result.put("code","1005");
|
|
|
+ result.put("message","退款处理失败,退款异常,联系商户处理");
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ boolean a=houseOrderService.updateById(one);
|
|
|
+ boolean b=refundRecordService.updateById(reFundRecord);
|
|
|
+ if (!a||!b){
|
|
|
+ throw new Exception("更新支付状态失败");
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ return CommonResult.fail(e.getMessage());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return CommonResult.ok(result);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
public static void main(String[] args) throws Exception {
|
|
|
// 获取签名
|
|
|
// 随机字符串
|