|
|
|
@@ -139,8 +139,14 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { |
|
|
|
record.setPayOrderStatus(EnumPayStatus.PAY_STATUS_WAIT.getCode()); |
|
|
|
List<WxPayOrder> list = wxPayOrderMapper.findList(record); |
|
|
|
String payOrderNo = ""; |
|
|
|
if (list.size() <= 0) { |
|
|
|
// 3. 创建支付订单 |
|
|
|
if (list.size() > 0) { |
|
|
|
// 3.0 已有支付订单,关闭之前的 |
|
|
|
payOrderClose(appInfo, list.get(0)); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
{ |
|
|
|
// 3.1 创建支付订单 |
|
|
|
Long id = idworker.nextId(); |
|
|
|
payOrderNo = String.valueOf(id); |
|
|
|
record.setId(id); |
|
|
|
@@ -168,10 +174,6 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { |
|
|
|
logger.error("pay order insert error: " + record.toString()); |
|
|
|
throw new MallinkException(ErrorCode.DB_FAIL); |
|
|
|
} |
|
|
|
} else { |
|
|
|
record = list.get(0); |
|
|
|
record.setShare(isShare.getCode()); |
|
|
|
payOrderNo = String.valueOf(record.getId()); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@@ -837,8 +839,13 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { |
|
|
|
if ("SUCCESS".equalsIgnoreCase(return_code)) { |
|
|
|
if ("SUCCESS".equals(result_code)) { |
|
|
|
record.setPayOrderStatus(EnumPayStatus.PAY_STATUS_CANCEL.getCode()); |
|
|
|
handlePayOrderStatusUpdate(record); |
|
|
|
return new ResultData(Result.SUCCESS, "订单关闭成功", returnMap); |
|
|
|
record.setUpdateTime(new Date()); |
|
|
|
try { |
|
|
|
wxPayOrderMapper.updateByPrimaryKeySelective(record); |
|
|
|
} catch (Exception e) { |
|
|
|
logger.error("pay order 关单:{} 成功", record.getId()); |
|
|
|
} |
|
|
|
return new ResultData(Result.SUCCESS, "支付订单关闭成功", returnMap); |
|
|
|
} else { |
|
|
|
String errMsg = ""; |
|
|
|
JSONObject errObj = errorMapClose.getJSONObject(result_code); |
|
|
|
@@ -1319,7 +1326,7 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { |
|
|
|
|
|
|
|
@Override |
|
|
|
@Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) |
|
|
|
public void handlePayOrderStatusUpdate(WxPayOrder record) { |
|
|
|
public void handlePayOrderStatusUpdate(WxPayOrder record, int status) { |
|
|
|
// 判断支付状态 |
|
|
|
if (record.getPayOrderStatus() == EnumPayStatus.PAY_STATUS_WAIT.getCode()) { |
|
|
|
logger.error("pay handle, payOrder " + record.getPayOrderNo() + |
|
|
|
@@ -1348,80 +1355,51 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { |
|
|
|
|
|
|
|
Date currentDate = new Date(); |
|
|
|
if (record.getId() > 0) { |
|
|
|
// 有价券 |
|
|
|
// 1. get appinfo |
|
|
|
WxAppinfo appInfo = getWxAppinfo(order.getType(), order.getTenantId()); |
|
|
|
|
|
|
|
WxPayOrder updateOrder = null; |
|
|
|
|
|
|
|
// 检查支付订单状态 |
|
|
|
WxPayOrder payOrderQ = new WxPayOrder(); |
|
|
|
payOrderQ.setId(record.getId()); |
|
|
|
payOrderQ.setTenantId(order.getTenantId()); |
|
|
|
payOrderQ.setOrderId(record.getOrderId()); |
|
|
|
try { |
|
|
|
updateOrder = wxPayOrderMapper.selectOne(payOrderQ); |
|
|
|
} catch (Exception e) { |
|
|
|
logger.error(e.getMessage()); |
|
|
|
throw new MallinkException(ErrorCode.PAY_ORDER_NOT_FOUND); |
|
|
|
} |
|
|
|
|
|
|
|
if (record.getPayOrderStatus() == EnumPayStatus.PAY_STATUS_FAIL.getCode()) { |
|
|
|
// 支付订单失败,取消此订单 |
|
|
|
if (record.getPayAmount() > 0) { |
|
|
|
payOrderQ = new WxPayOrder(); |
|
|
|
payOrderQ.setTenantId(order.getTenantId()); |
|
|
|
payOrderQ.setOrderId(record.getOrderId()); |
|
|
|
payOrderQ.setPayOrderStatus(EnumPayStatus.PAY_STATUS_WAIT.getCode()); |
|
|
|
List<WxPayOrder> payOrders = wxPayOrderMapper.select(payOrderQ); |
|
|
|
for (WxPayOrder payOrder : payOrders) { |
|
|
|
payOrderClose(appInfo, payOrder); |
|
|
|
} |
|
|
|
} |
|
|
|
} else { |
|
|
|
// 支付订单成功? |
|
|
|
if (updateOrder.getPayOrderStatus().equals(EnumPayStatus.PAY_STATUS_SUCCESS.getCode())) { |
|
|
|
if (StringUtils.isNotBlank(updateOrder.getTransactionId())) { |
|
|
|
// 回调已设置成功 |
|
|
|
// 继续修改订单状态 |
|
|
|
} else { |
|
|
|
// 回调异常 |
|
|
|
throw new MallinkException(ErrorCode.PAY_ORDER_ERROR.getCode(), "transactionId未获取"); |
|
|
|
} |
|
|
|
} else if (updateOrder.getPayOrderStatus().equals(EnumPayStatus.PAY_STATUS_WAIT.getCode())) { |
|
|
|
// 回调未返回,主动检查支付订单状态 |
|
|
|
try { |
|
|
|
record.setPayOrderNo(String.valueOf(record.getId())); |
|
|
|
String response = wechatPayOrderQuery(appInfo, record); |
|
|
|
if (2 == status) { |
|
|
|
// 前端支付取消, |
|
|
|
// 回调未返回,主动检查支付订单状态 |
|
|
|
try { |
|
|
|
record.setPayOrderNo(String.valueOf(record.getId())); |
|
|
|
String response = wechatPayOrderQuery(appInfo, record); |
|
|
|
|
|
|
|
logger.info("pay order query, " + record.toString() + ", response: " + response); |
|
|
|
Map<String, String> returnMap = WxPayment.xmlToMap(response); |
|
|
|
String result_code = returnMap.get("result_code"); |
|
|
|
if ("SUCCESS".equals(result_code)) { |
|
|
|
String trade_state = returnMap.get("trade_state"); |
|
|
|
//SUCCESS—支付成功 |
|
|
|
//REFUND—转入退款 |
|
|
|
//NOTPAY—未支付 |
|
|
|
//CLOSED—已关闭 |
|
|
|
//REVOKED—已撤销(刷卡支付) |
|
|
|
//USERPAYING--用户支付中 |
|
|
|
//PAYERROR--支付失败(其他原因,如银行返回失败) |
|
|
|
if ("SUCCESS".equals(trade_state)) { |
|
|
|
// 查询支付订单 -- 已支付 |
|
|
|
// 继续更改状态 |
|
|
|
} else if ("USERPAYING".equals(trade_state)) { |
|
|
|
// 继续检查状态 |
|
|
|
} else { |
|
|
|
// 支付订单未成功,返回异常 |
|
|
|
throw new MallinkException(ErrorCode.PAY_ORDER_ERROR.getCode(), "支付订单未成功"); |
|
|
|
logger.info("pay order query, " + record.toString() + ", response: " + response); |
|
|
|
Map<String, String> returnMap = WxPayment.xmlToMap(response); |
|
|
|
String result_code = returnMap.get("result_code"); |
|
|
|
if ("SUCCESS".equals(result_code)) { |
|
|
|
String trade_state = returnMap.get("trade_state"); |
|
|
|
//SUCCESS—支付成功 |
|
|
|
//REFUND—转入退款 |
|
|
|
//NOTPAY—未支付 |
|
|
|
//CLOSED—已关闭 |
|
|
|
//REVOKED—已撤销(刷卡支付) |
|
|
|
//USERPAYING--用户支付中 |
|
|
|
//PAYERROR--支付失败(其他原因,如银行返回失败) |
|
|
|
if ("SUCCESS".equals(trade_state)) { |
|
|
|
// 查询支付订单 -- 已支付 |
|
|
|
// 继续更改状态 |
|
|
|
} else if ("USERPAYING".equals(trade_state)) { |
|
|
|
// 继续检查状态 |
|
|
|
} else { |
|
|
|
// 支付订单未成功,返回异常 |
|
|
|
record.setPayOrderStatus(EnumPayStatus.PAY_STATUS_FAIL.getCode()); |
|
|
|
try { |
|
|
|
wxPayOrderMapper.updateByPrimaryKeySelective(record); |
|
|
|
} catch (Exception e) { |
|
|
|
logger.error("支付订单失败状态更新异常: " + e.getMessage()); |
|
|
|
} |
|
|
|
throw new MallinkException(ErrorCode.PAY_ORDER_ERROR.getCode(), "支付订单未成功"); |
|
|
|
} |
|
|
|
} catch (MallinkException e) { |
|
|
|
throw new MallinkException(ErrorCode.PAY_ORDER_ERROR.getCode(), e.getMessage()); |
|
|
|
} catch (RuntimeException e) { |
|
|
|
throw new MallinkException(ErrorCode.PAY_ORDER_ERROR.getCode(), e.getMessage()); |
|
|
|
} catch (Exception e) { |
|
|
|
throw new MallinkException(ErrorCode.PAY_ORDER_ERROR.getCode(), e.getMessage()); |
|
|
|
} |
|
|
|
} catch (MallinkException e) { |
|
|
|
throw new MallinkException(ErrorCode.PAY_ORDER_ERROR.getCode(), e.getMessage()); |
|
|
|
} catch (RuntimeException e) { |
|
|
|
throw new MallinkException(ErrorCode.PAY_ORDER_ERROR.getCode(), e.getMessage()); |
|
|
|
} catch (Exception e) { |
|
|
|
throw new MallinkException(ErrorCode.PAY_ORDER_ERROR.getCode(), e.getMessage()); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|