diff --git a/src/main/java/com/yxt/pay/api/order/PayTypeEnum.java b/src/main/java/com/yxt/pay/api/order/PayTypeEnum.java index 4648c72..21f6dc4 100644 --- a/src/main/java/com/yxt/pay/api/order/PayTypeEnum.java +++ b/src/main/java/com/yxt/pay/api/order/PayTypeEnum.java @@ -7,7 +7,7 @@ package com.yxt.pay.api.order; **/ public enum PayTypeEnum { - WECHAT("wxPay","微信支付"), + WECHAT("wxpay","微信支付"), ZHIFUBAO("zfbPay","支付宝支付"), diff --git a/src/main/java/com/yxt/pay/biz/order/OrderRest.java b/src/main/java/com/yxt/pay/biz/order/OrderRest.java index 8251b18..b1d941f 100644 --- a/src/main/java/com/yxt/pay/biz/order/OrderRest.java +++ b/src/main/java/com/yxt/pay/biz/order/OrderRest.java @@ -11,6 +11,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import java.io.IOException; /** @@ -39,12 +40,17 @@ public class OrderRest extends ApiBaseAction { } @PostMapping("wxPayNotify") - ResultBean wxPayNotify(HttpServletRequest request) throws IOException { - return orderService.wxPayNotify(request.getInputStream()); + ResultBean wxPayNotify(HttpServletRequest request,HttpServletResponse response) throws IOException { + return orderService.wxPayNotify(request,response); } @PostMapping("selectOrder") ResultBean selectOrder(@RequestBody OrderQuery query) { return orderService.selectOrder(query); } + + @PostMapping("orderQuery") + ResultBean orderQuery(@RequestBody OrderQuery query){ + return orderService.orderQuery(query); + } } diff --git a/src/main/java/com/yxt/pay/biz/order/OrderService.java b/src/main/java/com/yxt/pay/biz/order/OrderService.java index 1fa6584..40f69fa 100644 --- a/src/main/java/com/yxt/pay/biz/order/OrderService.java +++ b/src/main/java/com/yxt/pay/biz/order/OrderService.java @@ -12,7 +12,10 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.servlet.ServletInputStream; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import java.io.ByteArrayOutputStream; +import java.io.InputStream; import java.math.BigDecimal; import java.util.*; @@ -31,6 +34,8 @@ public class OrderService extends MybatisBaseService { String tradeType = "JSAPI"; //微信统一下单 String uniformorder = "https://api.mch.weixin.qq.com/pay/unifiedorder"; + //订单查询 + String orderquery = "https://api.mch.weixin.qq.com/pay/orderquery"; public ResultBean createOrder(OrderDto dto) { ResultBean rb = ResultBean.fireFail(); @@ -191,9 +196,14 @@ public class OrderService extends MybatisBaseService { return rb; } - public ResultBean wxPayNotify(ServletInputStream inputStream) { + public ResultBean wxPayNotify(HttpServletRequest request, HttpServletResponse response) { ResultBean rb = ResultBean.fireFail(); try { + request.setCharacterEncoding("UTF-8"); + response.setCharacterEncoding("UTF-8"); + response.setContentType("text/html;charset=UTF-8"); + response.setHeader("Access-Control-Allow-Origin", "*"); + InputStream inputStream = request.getInputStream(); ByteArrayOutputStream outSteam = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len = 0; @@ -211,6 +221,9 @@ public class OrderService extends MybatisBaseService { // 业务处理 //根据订单编号查询 PayOrder payOrder = baseMapper.selectBySn(out_trade_no); + if (payOrder == null) { + return rb.setMsg("订单不存在"); + } payOrder.setState(2); payOrder.setModifyTime(new Date()); payOrder.setPayTypeValue("微信"); @@ -243,4 +256,66 @@ public class OrderService extends MybatisBaseService { map.put("payType", payOrder.getPayTypeValue()); return rb.success().setData(map); } + + public ResultBean orderQuery(OrderQuery query) { + ResultBean rb = ResultBean.fireFail(); + PayOrder payOrder = fetchBySid(query.getMainSid()); + if (payOrder == null) { + return rb.setMsg("订单不存在"); + } + WxPayVo wxPayVo = new WxPayVo(payOrder.getSource()); + Map parame = new TreeMap(); + parame.put("appid", wxPayVo.getAppId()); + // 商家账号。 + parame.put("mch_id", wxPayVo.getMchId()); + String randomStr = CharUtil.getRandomNum(18).toUpperCase(); + // 随机字符串 + parame.put("nonce_str", randomStr); + // 商户订单编号 + parame.put("out_trade_no", payOrder.getOutTradeNo()); + + String sign = WechatUtil.arraySign(parame, wxPayVo.getSecret()); + // 数字签证 + parame.put("sign", sign); + + String xml = MapUtils.convertMap2Xml(parame); + log.info("xml:" + xml); + Map resultUn = null; + try { + resultUn = XmlUtil.xmlStrToMap(WechatUtil.requestOnce(orderquery, xml)); + } catch (Exception e) { + e.printStackTrace(); + return rb.setMsg("查询失败,error=" + e.getMessage()); + } + // 响应报文 + String return_code = MapUtils.getString("return_code", resultUn); + String return_msg = MapUtils.getString("return_msg", resultUn); + + if (!"SUCCESS".equals(return_code)) { + return rb.setMsg("查询失败,error=" + return_msg); + } + + String trade_state = MapUtils.getString("trade_state", resultUn); + if ("SUCCESS".equals(trade_state)) { + payOrder.setState(2); + payOrder.setModifyTime(new Date()); + baseMapper.updateById(payOrder); + Map map = new HashMap<>(); + payOrder = fetchBySid(query.getMainSid()); + map.put("createTime", DateUtils.format(payOrder.getCreateTime(), "yyyy-MM-dd HH:mm:ss")); + map.put("payTime", DateUtils.format(payOrder.getModifyTime(), "yyyy-MM-dd HH:mm:ss")); + map.put("outTradeNo", payOrder.getOutTradeNo()); + map.put("mainSid", payOrder.getSid()); + map.put("trade_type", payOrder.getPayTypeValue());//交易类型 + return rb.success().setData(map); + } else if ("USERPAYING".equals(trade_state)) { + + + } else { + // 失败 + return rb.setMsg("查询失败,error=" + trade_state); + } + + return null; + } }