diff --git a/server/like-common/src/main/java/com/mdd/common/plugin/wechat/WxPayDriver.java b/server/like-common/src/main/java/com/mdd/common/plugin/wechat/WxPayDriver.java index b6fbf773..3e25c2d3 100644 --- a/server/like-common/src/main/java/com/mdd/common/plugin/wechat/WxPayDriver.java +++ b/server/like-common/src/main/java/com/mdd/common/plugin/wechat/WxPayDriver.java @@ -40,8 +40,8 @@ public class WxPayDriver { * @author fzr * @return WxPayService */ - public static WxPayService handler(String terminal) { - if (String.valueOf(ClientEnum.OA.getCode()).equalsIgnoreCase(terminal)) { + public static WxPayService handler(Integer terminal) { + if (ClientEnum.OA.getCode() == terminal) { resetConfig("oa"); } else { resetConfig("mnp"); diff --git a/server/like-front/src/main/java/com/mdd/front/LikeFrontInterceptor.java b/server/like-front/src/main/java/com/mdd/front/LikeFrontInterceptor.java index 0d7f33d3..5505a665 100644 --- a/server/like-front/src/main/java/com/mdd/front/LikeFrontInterceptor.java +++ b/server/like-front/src/main/java/com/mdd/front/LikeFrontInterceptor.java @@ -10,7 +10,6 @@ import com.mdd.common.enums.HttpEnum; import com.mdd.common.exception.LoginException; import com.mdd.common.mapper.user.UserMapper; import com.mdd.common.util.StringUtils; -import io.swagger.models.auth.In; import org.jetbrains.annotations.NotNull; import org.springframework.lang.NonNull; import org.springframework.stereotype.Component; @@ -46,13 +45,13 @@ public class LikeFrontInterceptor implements HandlerInterceptor { @NonNull Object handler) throws Exception { // 判断请求接口 + response.setContentType("application/json;charset=utf-8"); String reqUri = request.getRequestURI(); if (!(handler instanceof HandlerMethod) || !reqUri.startsWith("/api")) { return HandlerInterceptor.super.preHandle(request, response, handler); } // 记录当前平台 - response.setContentType("application/json;charset=utf-8"); String terminal = request.getHeader("terminal"); LikeFrontThreadLocal.put("terminal", StringUtils.isEmpty(terminal) ? "1" : terminal); diff --git a/server/like-front/src/main/java/com/mdd/front/controller/PayController.java b/server/like-front/src/main/java/com/mdd/front/controller/PayController.java index e3257b40..a6c7523d 100644 --- a/server/like-front/src/main/java/com/mdd/front/controller/PayController.java +++ b/server/like-front/src/main/java/com/mdd/front/controller/PayController.java @@ -2,8 +2,13 @@ package com.mdd.front.controller; import com.mdd.common.aop.NotLogin; import com.mdd.common.core.AjaxResult; +import com.mdd.front.LikeFrontThreadLocal; import com.mdd.front.service.IPayService; +import com.mdd.front.validate.PayPrepayValidate; import io.swagger.annotations.Api; +import io.swagger.models.auth.In; +import io.swagger.v3.oas.annotations.parameters.RequestBody; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -25,8 +30,12 @@ public class PayController { */ @NotLogin @PostMapping("/prepay") - public AjaxResult prepay() throws Exception { - iPayService.prepay(); + public AjaxResult prepay(@Validated @RequestBody PayPrepayValidate payPrepayValidate) throws Exception { + String scene = payPrepayValidate.getScene(); + Integer orderId = payPrepayValidate.getOrderId(); + Integer terminal = LikeFrontThreadLocal.getTerminal(); + + iPayService.prepay(scene, orderId, terminal); return AjaxResult.success(); } @@ -35,6 +44,8 @@ public class PayController { * * @return AjaxResult */ + @NotLogin + @PostMapping("/notifyMnp") public AjaxResult notifyMnp() { return AjaxResult.success(); } diff --git a/server/like-front/src/main/java/com/mdd/front/controller/RechargeController.java b/server/like-front/src/main/java/com/mdd/front/controller/RechargeController.java index 3b7ca1ce..18f9b7e8 100644 --- a/server/like-front/src/main/java/com/mdd/front/controller/RechargeController.java +++ b/server/like-front/src/main/java/com/mdd/front/controller/RechargeController.java @@ -6,12 +6,8 @@ import com.mdd.front.service.IRechargeService; import com.mdd.front.validate.RechargeValidate; import io.swagger.annotations.Api; import io.swagger.models.auth.In; -import io.swagger.v3.oas.annotations.parameters.RequestBody; import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.util.Map; diff --git a/server/like-front/src/main/java/com/mdd/front/service/IPayService.java b/server/like-front/src/main/java/com/mdd/front/service/IPayService.java index 033934de..6922e231 100644 --- a/server/like-front/src/main/java/com/mdd/front/service/IPayService.java +++ b/server/like-front/src/main/java/com/mdd/front/service/IPayService.java @@ -5,6 +5,6 @@ package com.mdd.front.service; */ public interface IPayService { - void prepay() throws Exception; + void prepay(String scene, Integer orderId, Integer terminal) throws Exception; } diff --git a/server/like-front/src/main/java/com/mdd/front/service/impl/PayServiceImpl.java b/server/like-front/src/main/java/com/mdd/front/service/impl/PayServiceImpl.java index 3914234b..5675a65b 100644 --- a/server/like-front/src/main/java/com/mdd/front/service/impl/PayServiceImpl.java +++ b/server/like-front/src/main/java/com/mdd/front/service/impl/PayServiceImpl.java @@ -1,45 +1,65 @@ package com.mdd.front.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderV3Request; import com.github.binarywang.wxpay.bean.result.WxPayUnifiedOrderV3Result; import com.github.binarywang.wxpay.bean.result.enums.TradeTypeEnum; import com.github.binarywang.wxpay.service.WxPayService; +import com.mdd.common.entity.RechargeOrder; +import com.mdd.common.mapper.RechargeOrderMapper; import com.mdd.common.plugin.wechat.WxPayDriver; +import com.mdd.common.util.RequestUtils; import com.mdd.front.service.IPayService; + import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import java.math.BigDecimal; import java.text.SimpleDateFormat; @Service public class PayServiceImpl implements IPayService { - SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); + @Resource + RechargeOrderMapper rechargeOrderMapper; @Override - public void prepay() throws Exception { + public void prepay(String scene, Integer orderId, Integer terminal) throws Exception { + RechargeOrder rechargeOrder = rechargeOrderMapper.selectOne( + new QueryWrapper() + .eq("id", orderId) + .last("limit 1")); - WxPayService wxPayService = WxPayDriver.handler("1"); + String orderSn = rechargeOrder.getOrderSn(); + Integer orderAmount = 1; + String orderDesc = "余额充值"; - String sn = "sn" + System.currentTimeMillis() / 1000; + // 失效时间 + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); Long expireTime = System.currentTimeMillis() + 60 * 1000; String timeExpire = format.format(expireTime) + "+08:00"; // 订单信息 WxPayUnifiedOrderV3Request wxPayUnifiedOrderV3Request = new WxPayUnifiedOrderV3Request(); - wxPayUnifiedOrderV3Request.setOutTradeNo(sn); - wxPayUnifiedOrderV3Request.setNotifyUrl("https://www.likeadmin.cn"); - wxPayUnifiedOrderV3Request.setDescription("充值"); + wxPayUnifiedOrderV3Request.setOutTradeNo(orderSn); + wxPayUnifiedOrderV3Request.setDescription(orderDesc); wxPayUnifiedOrderV3Request.setTimeExpire(timeExpire); + wxPayUnifiedOrderV3Request.setNotifyUrl(RequestUtils.uri() + "/api/pay/notifyMnp"); + + // 订单金额 WxPayUnifiedOrderV3Request.Amount amount = new WxPayUnifiedOrderV3Request.Amount(); - amount.setTotal(1); + amount.setTotal(orderAmount); amount.setCurrency("CNY"); wxPayUnifiedOrderV3Request.setAmount(amount); - // 付款人 + // 付款人员 WxPayUnifiedOrderV3Request.Payer payer = new WxPayUnifiedOrderV3Request.Payer(); payer.setOpenid(""); + + // 发起订单 + WxPayService wxPayService = WxPayDriver.handler(terminal); wxPayUnifiedOrderV3Request.setPayer(payer); WxPayUnifiedOrderV3Result.JsapiResult jsapiResult = wxPayService.createOrderV3(TradeTypeEnum.JSAPI, wxPayUnifiedOrderV3Request); System.out.println(jsapiResult); diff --git a/server/like-front/src/main/java/com/mdd/front/service/impl/RechargeServiceImpl.java b/server/like-front/src/main/java/com/mdd/front/service/impl/RechargeServiceImpl.java index 6552c753..9db20b9a 100644 --- a/server/like-front/src/main/java/com/mdd/front/service/impl/RechargeServiceImpl.java +++ b/server/like-front/src/main/java/com/mdd/front/service/impl/RechargeServiceImpl.java @@ -22,6 +22,15 @@ public class RechargeServiceImpl implements IRechargeService { @Resource RechargeOrderMapper rechargeOrderMapper; + /** + * 创建充值订单 + * + * @author fzr + * @param userId 用户ID + * @param terminal 设备端 + * @param rechargeValidate 参数 + * @return Map + */ @Override public Map placeOrder(Integer userId, Integer terminal, RechargeValidate rechargeValidate) { RechargeOrder order = new RechargeOrder(); @@ -38,7 +47,7 @@ public class RechargeServiceImpl implements IRechargeService { rechargeOrderMapper.insert(order); Map response = new LinkedHashMap<>(); - response.put("id", order.getId()); + response.put("orderId", order.getId()); return response; } @@ -49,14 +58,14 @@ public class RechargeServiceImpl implements IRechargeService { * @return String */ private String randMakeOrderSn() { - String date = TimeUtils.timestampToDate(System.currentTimeMillis()/1000, "YmdHis"); + String date = TimeUtils.timestampToDate(System.currentTimeMillis()/1000, "yyyyMMddHHmmss"); String sn; while (true) { sn = date + ToolUtils.randomInt(12); RechargeOrder snModel = rechargeOrderMapper.selectOne( new QueryWrapper() .select("id") - .eq("sn", sn) + .eq("order_sn", sn) .last("limit 1")); if (snModel == null) { break; diff --git a/server/like-front/src/main/java/com/mdd/front/validate/PayPrepayValidate.java b/server/like-front/src/main/java/com/mdd/front/validate/PayPrepayValidate.java new file mode 100644 index 00000000..ae25f536 --- /dev/null +++ b/server/like-front/src/main/java/com/mdd/front/validate/PayPrepayValidate.java @@ -0,0 +1,18 @@ +package com.mdd.front.validate; + +import io.swagger.annotations.ApiModel; +import lombok.Data; + +import java.io.Serializable; + +@Data +@ApiModel("预支付订单参数") +public class PayPrepayValidate implements Serializable { + + private static final long serialVersionUID = 1L; + + private String scene; + + private Integer orderId; + +} diff --git a/server/like-front/src/main/java/com/mdd/front/validate/RechargeValidate.java b/server/like-front/src/main/java/com/mdd/front/validate/RechargeValidate.java index b8cbef3f..87a59f5d 100644 --- a/server/like-front/src/main/java/com/mdd/front/validate/RechargeValidate.java +++ b/server/like-front/src/main/java/com/mdd/front/validate/RechargeValidate.java @@ -1,8 +1,6 @@ package com.mdd.front.validate; - import io.swagger.annotations.ApiModel; -import io.swagger.models.auth.In; import lombok.Data; import javax.validation.constraints.NotNull;