From 4a6f137c07851a9471489e50f7c1331089236084 Mon Sep 17 00:00:00 2001 From: sjm <1191068887@qq.com> Date: Wed, 9 Aug 2023 18:11:44 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=8F=E7=A8=8B=E5=BA=8F=E7=9B=B8=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fjp/lc/test/service/ServiceTest.java | 3 ++- .../java/com/cyl/config/WechatConfig.java | 1 - .../h5/pojo/request/H5SmsLoginRequest.java | 2 ++ .../cyl/h5/pojo/request/OrderPayRequest.java | 3 +++ .../com/cyl/h5/service/H5MemberService.java | 24 +++++++++++++++++++ .../com/cyl/h5/service/H5OrderService.java | 15 ++++++++---- .../java/com/cyl/wechat/WechatPayService.java | 8 +++---- 7 files changed, 45 insertions(+), 11 deletions(-) diff --git a/ruoyi-admin/src/test/java/com/fjp/lc/test/service/ServiceTest.java b/ruoyi-admin/src/test/java/com/fjp/lc/test/service/ServiceTest.java index 8cc8e8b..5258ac9 100644 --- a/ruoyi-admin/src/test/java/com/fjp/lc/test/service/ServiceTest.java +++ b/ruoyi-admin/src/test/java/com/fjp/lc/test/service/ServiceTest.java @@ -12,6 +12,7 @@ import com.cyl.manager.aws.mapper.SystemStatisticsMapper; import com.cyl.manager.aws.service.SystemStatisticsService; import com.cyl.manager.ums.service.MemberCartService; import com.cyl.wechat.WechatAuthService; +import com.cyl.wechat.WechatPayData; import com.cyl.wechat.WechatPayService; import com.ruoyi.RuoYiApplication; import com.ruoyi.common.config.properties.SmsProperties; @@ -103,7 +104,7 @@ public class ServiceTest { // String code = "0611P2Ga1D8QCF0CVuJa1qNUJa11P2GL"; // WechatUserAuth userToken = wechatAuthService.getUserToken(code); String openId="oUA8I6lDdwSfz-EwR4284dU3KOYw"; - String res = wechatPayService.jsapiPay(UUID.randomUUID().toString().substring(0,30), "测试支付", 1, openId, 22L); + String res = wechatPayService.jsapiPay(UUID.randomUUID().toString().substring(0,30), "测试支付", 1, openId, 22L, WechatPayData.appId); System.out.println(res); } diff --git a/ruoyi-mall/src/main/java/com/cyl/config/WechatConfig.java b/ruoyi-mall/src/main/java/com/cyl/config/WechatConfig.java index 8d9c54d..882a827 100644 --- a/ruoyi-mall/src/main/java/com/cyl/config/WechatConfig.java +++ b/ruoyi-mall/src/main/java/com/cyl/config/WechatConfig.java @@ -9,7 +9,6 @@ import org.springframework.context.annotation.DependsOn; @Configuration @DependsOn("WechatPayData") -@ConditionalOnProperty(prefix = "wechat", name = "enabled", havingValue = "true") public class WechatConfig { @Bean diff --git a/ruoyi-mall/src/main/java/com/cyl/h5/pojo/request/H5SmsLoginRequest.java b/ruoyi-mall/src/main/java/com/cyl/h5/pojo/request/H5SmsLoginRequest.java index b3cffef..3dd0109 100644 --- a/ruoyi-mall/src/main/java/com/cyl/h5/pojo/request/H5SmsLoginRequest.java +++ b/ruoyi-mall/src/main/java/com/cyl/h5/pojo/request/H5SmsLoginRequest.java @@ -11,4 +11,6 @@ public class H5SmsLoginRequest extends H5LoginRequest { private String uuid; /** 微信授权信息 */ private WechatUserAuth authInfo; + /** 小程序openid **/ + private String mpOpenId; } diff --git a/ruoyi-mall/src/main/java/com/cyl/h5/pojo/request/OrderPayRequest.java b/ruoyi-mall/src/main/java/com/cyl/h5/pojo/request/OrderPayRequest.java index d097b7e..71c4248 100644 --- a/ruoyi-mall/src/main/java/com/cyl/h5/pojo/request/OrderPayRequest.java +++ b/ruoyi-mall/src/main/java/com/cyl/h5/pojo/request/OrderPayRequest.java @@ -15,4 +15,7 @@ public class OrderPayRequest { @ApiModelProperty(value = "用户id", hidden = true) private Long memberId; + + @ApiModelProperty(value = "微信支付方式 1:公众号 2:小程序") + private Integer wechatType = 1; } diff --git a/ruoyi-mall/src/main/java/com/cyl/h5/service/H5MemberService.java b/ruoyi-mall/src/main/java/com/cyl/h5/service/H5MemberService.java index d4e1277..49ba446 100644 --- a/ruoyi-mall/src/main/java/com/cyl/h5/service/H5MemberService.java +++ b/ruoyi-mall/src/main/java/com/cyl/h5/service/H5MemberService.java @@ -192,6 +192,9 @@ public class H5MemberService { memberWechat.setExpiresIn(request.getAuthInfo().getExpires_in()); memberWechat.setRefreshToken(request.getAuthInfo().getRefresh_token()); } + if (StringUtils.isNotEmpty(request.getMpOpenId())){ + memberWechat.setRoutineOpenid(request.getMpOpenId()); + } memberWechat.setCreateTime(optDate); memberWechat.setCreateBy(member.getId()); rows = memberWechatMapper.insert(memberWechat); @@ -201,6 +204,27 @@ public class H5MemberService { }else { //校验会员状态 validateMemberStatus(member); + //判断小程序openid是否插入 + if (StringUtils.isNotEmpty(request.getMpOpenId()) || request.getAuthInfo() != null){ + QueryWrapper queryWrapper = new QueryWrapper(); + queryWrapper.eq("member_id",member.getId()); + MemberWechat memberWechat = memberWechatMapper.selectOne(queryWrapper); + Boolean update = false; + if (StringUtils.isNotEmpty(request.getMpOpenId()) && StringUtils.isEmpty(memberWechat.getRoutineOpenid())) { + memberWechat.setRoutineOpenid(request.getMpOpenId()); + update = true; + } + if (request.getAuthInfo() != null && StringUtils.isEmpty(memberWechat.getOpenid())) { + memberWechat.setOpenid(request.getAuthInfo().getOpenid()); + memberWechat.setAccessToken(request.getAuthInfo().getAccess_token()); + memberWechat.setExpiresIn(request.getAuthInfo().getExpires_in()); + memberWechat.setRefreshToken(request.getAuthInfo().getRefresh_token()); + update = true; + } + if (update){ + memberWechatMapper.updateById(memberWechat); + } + } } return getLoginResponse(member.getId()); diff --git a/ruoyi-mall/src/main/java/com/cyl/h5/service/H5OrderService.java b/ruoyi-mall/src/main/java/com/cyl/h5/service/H5OrderService.java index 5ac4fb4..6bc5c8d 100644 --- a/ruoyi-mall/src/main/java/com/cyl/h5/service/H5OrderService.java +++ b/ruoyi-mall/src/main/java/com/cyl/h5/service/H5OrderService.java @@ -49,7 +49,7 @@ import com.wechat.pay.java.service.partnerpayments.jsapi.model.Transaction; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Lazy; + import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.Pageable; import org.springframework.http.ResponseEntity; @@ -96,7 +96,6 @@ public class H5OrderService { private OrderOperateHistoryService orderOperateHistoryService; @Autowired - @Lazy private WechatPayService wechatPayService; @Autowired @@ -496,17 +495,23 @@ public class H5OrderService { } //请开启微信支付 wechat.enabled=true //调用wx的jsapi拿prepayId,返回签名等信息 + String openId = memberWechat.getOpenid(); + String appId = WechatPayData.appId; + if (2 == req.getWechatType()) { + openId = memberWechat.getRoutineOpenid(); + appId = WechatPayData.miniProgramAppId; + } String prepayId = wechatPayService.jsapiPay( String.valueOf(req.getPayId()), orderDesc, Integer.valueOf(orderList.stream().map(Order::getPayAmount). reduce(BigDecimal.ZERO, BigDecimal::add).multiply(new BigDecimal(100)).stripTrailingZeros().toPlainString()), - memberWechat.getOpenid(), - req.getMemberId() + openId, + req.getMemberId(), + appId ); OrderPayResponse response = new OrderPayResponse(); response.setPayType(2); - String appId = WechatPayData.appId; String nonceStr = WechatPayUtil.generateNonceStr(); long timeStamp = WechatPayUtil.getCurrentTimestamp(); prepayId = "prepay_id=" + prepayId; diff --git a/ruoyi-mall/src/main/java/com/cyl/wechat/WechatPayService.java b/ruoyi-mall/src/main/java/com/cyl/wechat/WechatPayService.java index 123e8d1..9743fe8 100644 --- a/ruoyi-mall/src/main/java/com/cyl/wechat/WechatPayService.java +++ b/ruoyi-mall/src/main/java/com/cyl/wechat/WechatPayService.java @@ -7,12 +7,12 @@ 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 org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; + import org.springframework.stereotype.Service; + @Service @Slf4j -@ConditionalOnProperty(prefix = "wechat", name = "enabled", havingValue = "true") public class WechatPayService { @Autowired @@ -26,9 +26,9 @@ public class WechatPayService { * @param openId 用户openid * @return prepay_id */ - public String jsapiPay(String orderNo,String desc,Integer totalAmount,String openId, Long memberId){ + public String jsapiPay(String orderNo,String desc,Integer totalAmount,String openId, Long memberId,String appId){ PrepayRequest prepayRequest = new PrepayRequest(); - prepayRequest.setAppid(WechatPayData.appId); + prepayRequest.setAppid(appId); prepayRequest.setMchid(WechatPayData.merchantId); prepayRequest.setDescription(desc); prepayRequest.setOutTradeNo(orderNo);