提交 e75a9d35 作者: xiaowang

订单关闭、订单查询

上级 13aa392e
...@@ -7,10 +7,7 @@ import io.swagger.annotations.Api; ...@@ -7,10 +7,7 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse; import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses; import io.swagger.annotations.ApiResponses;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
...@@ -42,4 +39,18 @@ public class WechatPayController extends BaseController { ...@@ -42,4 +39,18 @@ public class WechatPayController extends BaseController {
public Map payCallback(HttpServletRequest request) { public Map payCallback(HttpServletRequest request) {
return wechatPayService.payCallback(request); return wechatPayService.payCallback(request);
} }
@ApiOperation(value = "关闭订单")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@GetMapping("closeOrder")
public ResultBody closeOrder(String orderNo) {
return wechatPayService.closeOrder(orderNo);
}
@ApiOperation(value = "查询订单")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@GetMapping("queryOrder")
public ResultBody queryOrder(String orderNo) {
return wechatPayService.queryOrder(orderNo);
}
} }
...@@ -15,4 +15,6 @@ public interface WechatPayDao { ...@@ -15,4 +15,6 @@ public interface WechatPayDao {
WxPayLogDO selectWxPayInfoByOrderNo(String orderNo); WxPayLogDO selectWxPayInfoByOrderNo(String orderNo);
void updateWxPayLog(WxPayLogDO wxPayLogDO); void updateWxPayLog(WxPayLogDO wxPayLogDO);
void deleteWxPayLogByOrderNo(String orderNo);
} }
package com.mmc.payment.model.vo.order;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @Author LW
* @date 2023/7/19 17:16
* 概要:
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class WxPayLogVO {
@ApiModelProperty("订单号")
private String outTradeNo;
@ApiModelProperty("付款银行")
private String bankType;
@ApiModelProperty("附加信息")
private String attach;
@ApiModelProperty("支付成功时间")
private String successTime;
@ApiModelProperty("支付者openid")
private String wxNotifyOpenid;
@ApiModelProperty("总金额")
private Integer wxNotifyTotal;
@ApiModelProperty("用户支付金额")
private Integer wxNotifyPayerTotal;
@ApiModelProperty("交易类型")
private String tradeType;
@ApiModelProperty("交易状态")
private String tradeState;
@ApiModelProperty("交易状态描述")
private String tradeStateDesc;
}
...@@ -9,19 +9,18 @@ import com.mmc.payment.enums.OrderPayStatus; ...@@ -9,19 +9,18 @@ import com.mmc.payment.enums.OrderPayStatus;
import com.mmc.payment.feign.UserAppApi; import com.mmc.payment.feign.UserAppApi;
import com.mmc.payment.model.dto.user.UserAccountSimpleDTO; import com.mmc.payment.model.dto.user.UserAccountSimpleDTO;
import com.mmc.payment.model.vo.order.OrderRequestParamsVO; import com.mmc.payment.model.vo.order.OrderRequestParamsVO;
import com.mmc.payment.model.vo.order.WxPayLogVO;
import com.mmc.payment.service.WechatPayService; import com.mmc.payment.service.WechatPayService;
import com.mmc.payment.util.WxConfigUtils; import com.mmc.payment.util.WxConfigUtils;
import com.wechat.pay.java.core.Config; import com.wechat.pay.java.core.Config;
import com.wechat.pay.java.core.cipher.SignatureResult; import com.wechat.pay.java.core.cipher.SignatureResult;
import com.wechat.pay.java.core.exception.ServiceException;
import com.wechat.pay.java.core.notification.NotificationConfig; import com.wechat.pay.java.core.notification.NotificationConfig;
import com.wechat.pay.java.core.notification.NotificationParser; import com.wechat.pay.java.core.notification.NotificationParser;
import com.wechat.pay.java.core.notification.RequestParam; import com.wechat.pay.java.core.notification.RequestParam;
import com.wechat.pay.java.service.partnerpayments.jsapi.model.Transaction; import com.wechat.pay.java.service.partnerpayments.jsapi.model.Transaction;
import com.wechat.pay.java.service.payments.jsapi.JsapiService; import com.wechat.pay.java.service.payments.jsapi.JsapiService;
import com.wechat.pay.java.service.payments.jsapi.model.Amount; import com.wechat.pay.java.service.payments.jsapi.model.*;
import com.wechat.pay.java.service.payments.jsapi.model.Payer;
import com.wechat.pay.java.service.payments.jsapi.model.PrepayRequest;
import com.wechat.pay.java.service.payments.jsapi.model.PrepayResponse;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -173,4 +172,56 @@ public class WechatPayServiceImpl implements WechatPayService { ...@@ -173,4 +172,56 @@ public class WechatPayServiceImpl implements WechatPayService {
} }
return result; return result;
} }
@Override
public ResultBody closeOrder(String orderNo) {
Config config = wxConfigUtils.createConfig();
// 构建service
JsapiService jsapiService = new JsapiService.Builder().config(config).build();
CloseOrderRequest closeRequest = new CloseOrderRequest();
closeRequest.setMchid(userSystemConstant.getMchid());
closeRequest.setOutTradeNo(orderNo);
// 方法没有返回值,意味着成功时API返回204 No Content
jsapiService.closeOrder(closeRequest);
// 删除数据库记录
wechatPayDao.deleteWxPayLogByOrderNo(orderNo);
return ResultBody.success();
}
@Override
public ResultBody queryOrder(String orderNo) {
// 查询订单的交易号
WxPayLogDO wxPayLogDO = wechatPayDao.selectWxPayInfoByOrderNo(orderNo);
if (wxPayLogDO == null) {
return ResultBody.error("订单不存在!");
}
if (wxPayLogDO.getTradeState().equals(OrderPayStatus.WAIT.getStatus())) {
return ResultBody.error("该订单暂未发起交易!");
}
Config config = wxConfigUtils.createConfig();
// 构建service
JsapiService service = new JsapiService.Builder().config(config).build();
QueryOrderByIdRequest queryRequest = new QueryOrderByIdRequest();
queryRequest.setMchid(userSystemConstant.getMchid());
queryRequest.setTransactionId(wxPayLogDO.getTransactionId());
try {
com.wechat.pay.java.service.payments.model.Transaction result = service.queryOrderById(queryRequest);
WxPayLogVO wxPayLogVO = new WxPayLogVO();
wxPayLogVO.setOutTradeNo(result.getOutTradeNo());
wxPayLogVO.setBankType(result.getBankType());
wxPayLogVO.setAttach(result.getAttach());
wxPayLogVO.setSuccessTime(result.getSuccessTime());
wxPayLogVO.setWxNotifyOpenid(result.getPayer().getOpenid());
wxPayLogVO.setWxNotifyTotal(result.getAmount().getTotal());
wxPayLogVO.setWxNotifyPayerTotal(result.getAmount().getPayerTotal());
wxPayLogVO.setTradeType(result.getTradeType().toString());
wxPayLogVO.setTradeState(result.getTradeState().toString());
wxPayLogVO.setTradeStateDesc(result.getTradeStateDesc());
return ResultBody.success(wxPayLogVO);
} catch (ServiceException e) {
return ResultBody.error(e.getErrorCode(), e.getMessage());
}
}
} }
...@@ -16,4 +16,8 @@ public interface WechatPayService { ...@@ -16,4 +16,8 @@ public interface WechatPayService {
ResultBody orderPay(OrderRequestParamsVO orderRequestParamsVO, Integer userAccountId, HttpServletRequest request) throws IOException; ResultBody orderPay(OrderRequestParamsVO orderRequestParamsVO, Integer userAccountId, HttpServletRequest request) throws IOException;
Map payCallback(HttpServletRequest request); Map payCallback(HttpServletRequest request);
ResultBody closeOrder(String orderNo);
ResultBody queryOrder(String orderNo);
} }
...@@ -31,6 +31,11 @@ ...@@ -31,6 +31,11 @@
trade_state_desc = #{tradeStateDesc} trade_state_desc = #{tradeStateDesc}
where order_no = #{outTradeNo} where order_no = #{outTradeNo}
</update> </update>
<delete id="deleteWxPayLogByOrderNo">
delete
from wx_pay_log
where order_no = #{orderNo}
</delete>
<select id="selectWxPayInfoByOrderNo" resultType="com.mmc.payment.entity.order.WxPayLogDO"> <select id="selectWxPayInfoByOrderNo" resultType="com.mmc.payment.entity.order.WxPayLogDO">
SELECT id, SELECT id,
order_port, order_port,
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论