Explorar el Código

[支付异常修改][修改]:api不能设置订单支付成功,支付成功只能通过回调和微信订单查询结果设置

release_toaliyun_real
Stormeye.Wu hace 7 años
padre
commit
bde5c81569
Se han modificado 3 ficheros con 25 adiciones y 18 borrados
  1. +0
    -3
      mallinkCApi/src/main/java/com/iformall/controller/WxPayOrderController.java
  2. +22
    -14
      mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java
  3. +3
    -1
      mallinkService/src/main/resources/mapper/WxOrderMapper.xml

+ 0
- 3
mallinkCApi/src/main/java/com/iformall/controller/WxPayOrderController.java Ver fichero

@@ -99,9 +99,6 @@ public class WxPayOrderController extends BaseController {
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "payOrderId参数不正确"); return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "payOrderId参数不正确");
} }
} }
if (!status.equals(EnumPayStatus.PAY_WAY_CANCEL.getCode())) {
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "只支持取消支付订单");
}


WxPayOrder payOrder = new WxPayOrder(); WxPayOrder payOrder = new WxPayOrder();
payOrder.setId(payOrderId); payOrder.setId(payOrderId);


+ 22
- 14
mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java Ver fichero

@@ -263,6 +263,7 @@ public class WxPayOrderServiceImpl implements WxPayOrderService {
futureDate.setTime(currentDate.getTime() + 15 * 60 * 1000); futureDate.setTime(currentDate.getTime() + 15 * 60 * 1000);
wxPayOrderSP.setTime_expire(Utility.getDataFormatStringYYYYMMDDHHmmss(futureDate)); // 15分钟后结束 wxPayOrderSP.setTime_expire(Utility.getDataFormatStringYYYYMMDDHHmmss(futureDate)); // 15分钟后结束
wxPayOrderSP.setSign_type("HMAC-SHA256"); wxPayOrderSP.setSign_type("HMAC-SHA256");
wxPayOrderSP.setProfit_sharing(null);
if (isShare == EnumPayShare.YES) { if (isShare == EnumPayShare.YES) {
wxPayOrderSP.setProfit_sharing("Y"); wxPayOrderSP.setProfit_sharing("Y");
} }
@@ -406,6 +407,8 @@ public class WxPayOrderServiceImpl implements WxPayOrderService {
@Override @Override
public ResultData payOrderQuery(WxAppinfo appInfo, WxPayOrder record) { public ResultData payOrderQuery(WxAppinfo appInfo, WxPayOrder record) {
try { try {
if (StringUtils.isBlank(record.getPayOrderNo()))
record.setPayOrderNo(String.valueOf(record.getId()));
String response = wechatPayOrderQuery(appInfo, record); String response = wechatPayOrderQuery(appInfo, record);


logger.info("pay order query, " + record.toString() + ", response: " + response); logger.info("pay order query, " + record.toString() + ", response: " + response);
@@ -738,7 +741,6 @@ public class WxPayOrderServiceImpl implements WxPayOrderService {
@Override @Override
@Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class})
public void handlePayOrderStatusUpdate(WxPayOrder record) { public void handlePayOrderStatusUpdate(WxPayOrder record) {
// 只支持取消 payOrder
// 判断支付状态 // 判断支付状态
if (record.getPayOrderStatus() == EnumPayStatus.PAY_WAY_WAIT.getCode()) { if (record.getPayOrderStatus() == EnumPayStatus.PAY_WAY_WAIT.getCode()) {
logger.error("pay handle, payOrder " + record.getPayOrderNo() + logger.error("pay handle, payOrder " + record.getPayOrderNo() +
@@ -755,23 +757,33 @@ public class WxPayOrderServiceImpl implements WxPayOrderService {
logger.error("pay handle, order " + record.getOrderId() + " not found , payOrderGid : " + record.getPayOrderNo()); logger.error("pay handle, order " + record.getOrderId() + " not found , payOrderGid : " + record.getPayOrderNo());
throw new MallinkException(ErrorCode.USER_IS_EMPTY); throw new MallinkException(ErrorCode.USER_IS_EMPTY);
} }
// 1. get appinfo
WxAppinfo appInfo = null;
WxAppinfo appinfoQ = new WxAppinfo();
appinfoQ.setTenantId(order.getTenantId());
appinfoQ.setType(EnumAppType.C.getCode());
List<WxAppinfo> appList = wxAppinfoMapper.select(appinfoQ);
if (appList.size() > 0) {
appInfo = appList.get(0);


if (order.getPayment() > 0) {
// 订单金额不为0时, 支付订单未创建, 返回异常
if (!(record.getId() >0)) {
throw new MallinkException(ErrorCode.PAY_ORDER_NOT_FOUND);
}
} }


Date currentDate = new Date(); Date currentDate = new Date();
if (record.getId() > 0) { if (record.getId() > 0) {
// 1. get appinfo
WxAppinfo appInfo = null;
WxAppinfo appinfoQ = new WxAppinfo();
appinfoQ.setTenantId(order.getTenantId());
appinfoQ.setType(EnumAppType.C.getCode());
List<WxAppinfo> appList = wxAppinfoMapper.select(appinfoQ);
if (appList.size() > 0) {
appInfo = appList.get(0);
}

WxPayOrder updateOrder = null; WxPayOrder updateOrder = null;


// 检查支付订单状态 // 检查支付订单状态
WxPayOrder payOrderQ = new WxPayOrder(); WxPayOrder payOrderQ = new WxPayOrder();
payOrderQ.setId(record.getId()); payOrderQ.setId(record.getId());
payOrderQ.setTenantId(order.getTenantId());
payOrderQ.setOrderId(record.getOrderId()); payOrderQ.setOrderId(record.getOrderId());
try { try {
updateOrder = wxPayOrderMapper.selectOne(payOrderQ); updateOrder = wxPayOrderMapper.selectOne(payOrderQ);
@@ -805,6 +817,7 @@ public class WxPayOrderServiceImpl implements WxPayOrderService {
} else if (updateOrder.getPayOrderStatus().equals(EnumPayStatus.PAY_WAY_WAIT.getCode())) { } else if (updateOrder.getPayOrderStatus().equals(EnumPayStatus.PAY_WAY_WAIT.getCode())) {
// 回调未返回,主动检查支付订单状态 // 回调未返回,主动检查支付订单状态
try { try {
record.setPayOrderNo(String.valueOf(record.getId()));
String response = wechatPayOrderQuery(appInfo, record); String response = wechatPayOrderQuery(appInfo, record);


logger.info("pay order query, " + record.toString() + ", response: " + response); logger.info("pay order query, " + record.toString() + ", response: " + response);
@@ -836,11 +849,6 @@ public class WxPayOrderServiceImpl implements WxPayOrderService {
} }
} }
} }
} else {
// 支付订单未创建, 订单金额不为0时, 返回异常
if (order.getPayment() > 0) {
throw new MallinkException(ErrorCode.PAY_ORDER_NOT_FOUND);
}
} }


// 修改订单状态 // 修改订单状态


+ 3
- 1
mallinkService/src/main/resources/mapper/WxOrderMapper.xml Ver fichero

@@ -219,7 +219,9 @@


<select id="selectDetailOfCUser" parameterType="com.iformall.domain.po.WxOrder" resultMap="CVoResultMap"> <select id="selectDetailOfCUser" parameterType="com.iformall.domain.po.WxOrder" resultMap="CVoResultMap">
select <include refid="allCUserOrderDetailColumns" /> select <include refid="allCUserOrderDetailColumns" />
from (wx_order o,wx_coupon co,wx_merchant m)
FROM wx_order o
left join wx_coupon co ON o.coupon_id = co.id
left join wx_merchant m ON co.merchant_id = m.id
left join wx_coupon_order c on o.id = c.order_id left join wx_coupon_order c on o.id = c.order_id
left join wx_merchant_shop ms on ms.merchant_id = m.id and ms.is_del = 0 left join wx_merchant_shop ms on ms.merchant_id = m.id and ms.is_del = 0
left join wx_shop s on ms.shop_id = s.id left join wx_shop s on ms.shop_id = s.id


Cargando…
Cancelar
Guardar