Prechádzať zdrojové kódy

feat : 支付管理相关信息修改

bilingfeng 2 rokov pred
rodič
commit
4b8644682d

+ 1 - 1
game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/Order.java

@@ -151,7 +151,7 @@ public class Order {
     /**
      * 支付配置id
      */
-    private Long gamePaywayId;
+    private Long gamePayWayId;
 
     /**
      * 支付时间

+ 3 - 2
game-module/game-sdk/src/main/java/com/zanxiang/sdk/controller/SmsController.java

@@ -3,6 +3,7 @@ package com.zanxiang.sdk.controller;
 import com.zanxiang.common.domain.ResultVO;
 import com.zanxiang.sdk.domain.params.SmsCheckParam;
 import com.zanxiang.sdk.domain.params.SmsSendParam;
+import com.zanxiang.sdk.domain.params.UserData;
 import com.zanxiang.sdk.domain.vo.UserLoginVO;
 import com.zanxiang.sdk.service.SmsService;
 import io.swagger.annotations.Api;
@@ -32,8 +33,8 @@ public class SmsController {
     @ApiOperation(value = "发送短信")
     @PostMapping("/send/msg")
     @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = UserLoginVO.class)})
-    public ResultVO<Boolean> smsSend(@Validated @RequestBody SmsSendParam smsSendParam) {
-        return smsService.smsSend(smsSendParam);
+    public ResultVO<Boolean> smsSend(@Validated @RequestBody SmsSendParam smsSendParam, UserData userData) {
+        return smsService.smsSend(smsSendParam, userData);
     }
 
     @ApiOperation(value = "验证码校验")

+ 2 - 2
game-module/game-sdk/src/main/java/com/zanxiang/sdk/controller/UserController.java

@@ -39,8 +39,8 @@ public class UserController {
     @ApiOperation(value = "忘记密码找回")
     @PostMapping("/find/password")
     @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = UserLoginVO.class)})
-    public ResultVO<Boolean> findPassword(@Validated @RequestBody FindPasswordParam param) {
-        return userService.findPassword(param);
+    public ResultVO<Boolean> findPassword(@Validated @RequestBody FindPasswordParam param, UserData userData) {
+        return userService.findPassword(param, userData);
     }
 
     @ApiOperation(value = "用户修改密码")

+ 5 - 0
game-module/game-sdk/src/main/java/com/zanxiang/sdk/domain/dto/UserDTO.java

@@ -57,6 +57,11 @@ public class UserDTO {
      */
     private String mobile;
 
+    /**
+     * 微信小游戏用户openId
+     */
+    private String openId;
+
     /**
      * 设备来源 mobile,android,iphone,ipad,web,pc,mac,wxapp
      */

+ 45 - 38
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/GameAppletServiceImpl.java

@@ -2,18 +2,21 @@ package com.zanxiang.sdk.service.Impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zanxiang.common.enums.OrderStateEnum;
 import com.zanxiang.common.exception.BaseException;
 import com.zanxiang.module.util.JsonUtil;
 import com.zanxiang.module.util.bean.BeanUtil;
 import com.zanxiang.mybatis.entity.GameApplet;
 import com.zanxiang.mybatis.entity.Order;
-import com.zanxiang.mybatis.entity.User;
 import com.zanxiang.mybatis.mapper.GameAppletMapper;
 import com.zanxiang.sdk.domain.dto.AppletMsgDTO;
 import com.zanxiang.sdk.domain.dto.GameAppletDTO;
+import com.zanxiang.sdk.domain.dto.GamePayWayDTO;
+import com.zanxiang.sdk.domain.dto.UserDTO;
 import com.zanxiang.sdk.domain.params.UserData;
 import com.zanxiang.sdk.domain.vo.GameAppletVO;
 import com.zanxiang.sdk.service.GameAppletService;
+import com.zanxiang.sdk.service.GamePayWayService;
 import com.zanxiang.sdk.service.OrderService;
 import com.zanxiang.sdk.service.UserService;
 import com.zanxiang.sdk.service.api.WxApiService;
@@ -25,6 +28,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.web.client.RestTemplate;
 import org.springframework.web.util.UriComponentsBuilder;
 
+import java.math.BigDecimal;
 import java.net.URI;
 import java.util.HashMap;
 import java.util.Map;
@@ -51,6 +55,9 @@ public class GameAppletServiceImpl extends ServiceImpl<GameAppletMapper, GameApp
     @Autowired
     private RestTemplate restTemplate;
 
+    @Autowired
+    private GamePayWayService gamePayWayService;
+
     @Override
     public String appletMsgCheck(String appId, String signature, String timestamp, String nonce, String echoStr) throws Exception {
         log.error("验证参数, appId : {}, signature : {}, timestamp : {}, nonce : {}, echoStr : {}", appId, signature, timestamp, nonce, echoStr);
@@ -62,7 +69,7 @@ public class GameAppletServiceImpl extends ServiceImpl<GameAppletMapper, GameApp
         String mySignature = SignUtil.SHA1(gameApplet.getMsgPushToken(), timestamp, nonce);
         log.error("计算出来的签名, signature : {},  mySignature : {}", signature, mySignature);
         if (!Objects.equals(mySignature, signature)) {
-            throw new BaseException("签名不匹配");
+            throw new BaseException("验证签名不匹配");
         }
         return echoStr;
     }
@@ -71,73 +78,73 @@ public class GameAppletServiceImpl extends ServiceImpl<GameAppletMapper, GameApp
     public String appletMsg(String appId, String signature, String timestamp, String nonce, String postData) throws Exception {
         log.error("接收到事件消息, appId : {}, signature : {}, timestamp : {}, nonce : {}, postData : {}",
                 appId, signature, timestamp, nonce, postData);
+        String result = "success";
         if (Strings.isBlank(postData)) {
-            return "success";
+            return result;
         }
         GameApplet gameApplet = super.getOne(new LambdaQueryWrapper<GameApplet>()
                 .eq(GameApplet::getAppId, appId));
         if (gameApplet == null) {
-            return "success";
+            return result;
         }
         String mySignature = SignUtil.SHA1(gameApplet.getMsgPushToken(), timestamp, nonce);
-        log.error("计算出来的签名, signature : {},  mySignature : {}", signature, mySignature);
         if (!Objects.equals(mySignature, signature)) {
-            return "success";
+            log.error("计算出来的签名不匹配, signature : {},  mySignature : {}", signature, mySignature);
+            return result;
         }
         AppletMsgDTO appletMsgDTO = JsonUtil.toObj(postData, AppletMsgDTO.class);
         //消息内容判断, 值回复文本消息为2的内容
         if (!Objects.equals(appletMsgDTO.getMsgType(), "text") || !Objects.equals(appletMsgDTO.getContent(), "2")) {
-            return "success";
-        }
-        //查询用户信息
-        User user = userService.getOne(new LambdaQueryWrapper<User>()
-                .eq(User::getGameId, gameApplet.getGameId())
-                .eq(User::getOpenId, appletMsgDTO.getFromUserName()));
-        if (user == null) {
-            return "success";
+            return result;
         }
+        //用户信息
+        UserDTO userDTO = userService.getUserByOpenId(gameApplet.getGameId(), appletMsgDTO.getFromUserName());
         //查询用户最新订单
         Order order = orderService.getOne(new LambdaQueryWrapper<Order>()
-                .eq(Order::getUserId, user.getId())
+                .eq(Order::getUserId, userDTO.getId())
+                .eq(Order::getStatus, OrderStateEnum.NO_PAY.getCode())
                 .orderByDesc(Order::getCreateTime)
                 .last("limit 1"));
         if (order == null) {
-            return "success";
+            return result;
         }
-        this.sendCustomMessage(gameApplet, user, order);
-        return "success";
+        //发送客服消息
+        return this.sendCustomMessage(gameApplet, userDTO.getOpenId(), order);
     }
 
-    private void sendCustomMessage(GameApplet gameApplet, User user, Order order) {
-        //获取接口token
-        String accessToken = wxApiService.getAccessToken(gameApplet.getAppId(), gameApplet.getAppSecret());
-        URI uri = UriComponentsBuilder.fromHttpUrl("https://api.weixin.qq.com/cgi-bin/message/custom/send")
-                .queryParam("access_token", accessToken)
-                .build().toUri();
-        log.error("发送客服消息url, uri : {}", uri);
-
-        Map<String, Object> paramMap = new HashMap<>(4);
-        paramMap.put("touser", user.getOpenId());
-        paramMap.put("msgtype", "link");
-        //link参数
-        Map<String, Object> linkMap = new HashMap<>(4);
-        linkMap.put("title", "点我充值");
-        linkMap.put("description", "点我充值" + order.getAmount() + "元,用于购买" + order.getAmount() + "元档充值");
-        //构造url
+    private String sendCustomMessage(GameApplet gameApplet, String openId, Order order) {
+        //查询订单支付方式
+        GamePayWayDTO gamePayWayDTO = gamePayWayService.getById(order.getGamePayWayId());
+        //订单金额
+        BigDecimal amount = order.getAmount();
+        //构造跳转链接url
         URI url = UriComponentsBuilder.fromHttpUrl("http://corp.complaint.zanxiangnet.com/html/wechatPay/index.html")
-                .queryParam("appId", "wx91208c6c8651a97d")
+                .queryParam("appId", gamePayWayDTO.getAppId())
                 .queryParam("orderId", order.getOrderId())
-                .queryParam("amount", order.getAmount())
-                .queryParam("description", "购买" + order.getAmount() + "元档充值")
+                .queryParam("amount", amount)
+                .queryParam("description", "购买" + amount + "元档充值")
                 .build().toUri();
-        //添加参数
+        //link参数构造
+        Map<String, Object> linkMap = new HashMap<>(4);
+        linkMap.put("title", "点我充值");
+        linkMap.put("description", "点我充值" + amount + "元,用于购买" + amount + "元档充值");
         linkMap.put("url", url);
         linkMap.put("thumb_url", "https://book.zanxiangnet.com/qc-tip/1.jpg");
+        //客服消息参数构造
+        Map<String, Object> paramMap = new HashMap<>(3);
+        paramMap.put("touser", openId);
+        paramMap.put("msgtype", "link");
         paramMap.put("link", linkMap);
         log.error("客服消息发送参数, paramMap : {}", JsonUtil.toString(paramMap));
+        //获取接口token
+        String accessToken = wxApiService.getAccessToken(gameApplet.getAppId(), gameApplet.getAppSecret());
+        URI uri = UriComponentsBuilder.fromHttpUrl("https://api.weixin.qq.com/cgi-bin/message/custom/send")
+                .queryParam("access_token", accessToken)
+                .build().toUri();
         // 发送请求
         String result = restTemplate.postForObject(uri, paramMap, String.class);
         log.error("客服消息发送结果, result : {}", result);
+        return "success";
     }
 
     @Override

+ 1 - 1
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/OrderServiceImpl.java

@@ -125,7 +125,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
                 .amount(payParam.getAmount())
                 .productId(payParam.getProductId())
                 .productName(payParam.getProductName())
-                .gamePaywayId(gamePayWayDTO.getId())
+                .gamePayWayId(gamePayWayDTO.getId())
                 .ext(payParam.getExtension())
                 .isFirstRecharge(count > 0 ? 0 : 1)
                 .payDeviceId(payParam.getPayDevice())

+ 3 - 32
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/SmsServiceImpl.java

@@ -10,6 +10,7 @@ import com.zanxiang.sdk.constant.RedisKeyConstant;
 import com.zanxiang.sdk.domain.dto.UserDTO;
 import com.zanxiang.sdk.domain.params.SmsCheckParam;
 import com.zanxiang.sdk.domain.params.SmsSendParam;
+import com.zanxiang.sdk.domain.params.UserData;
 import com.zanxiang.sdk.service.SmsService;
 import com.zanxiang.sdk.service.UserService;
 import com.zanxiang.sdk.util.RedisUtil;
@@ -40,20 +41,14 @@ public class SmsServiceImpl implements SmsService {
     @Autowired
     private AliSmsService aliSmsService;
 
-    /**
-     * 发送短信验证码
-     *
-     * @param smsSendParam : 获取短信验证码参数
-     * @return : 返回发送结果
-     */
     @Override
-    public ResultVO<Boolean> smsSend(SmsSendParam smsSendParam) {
+    public ResultVO<Boolean> smsSend(SmsSendParam smsSendParam, UserData userData) {
         //类型
         Integer type = smsSendParam.getType();
         //手机号码
         String mobile = smsSendParam.getMobile();
         //根据手机号获取用户信息
-        UserDTO userDTO = userService.getUserInfoByMobile(mobile);
+        UserDTO userDTO = userService.getUserInfoByMobile(mobile, userData.getGameId());
         //找回密码获取
         if (Objects.equals(type, SmsTypeEnum.SMS_FIND_PWD.getType())) {
             //手机号对应用户信息不存在
@@ -85,12 +80,6 @@ public class SmsServiceImpl implements SmsService {
         return new ResultVO<>(HttpStatusEnum.SUCCESS, Boolean.TRUE);
     }
 
-    /**
-     * 前端校验短信验证码
-     *
-     * @param smsCheckParam : 参数
-     * @return : 返回验证结果和token
-     */
     @Override
     public ResultVO<String> smsCheck(SmsCheckParam smsCheckParam) {
         //校验短信验证码
@@ -99,14 +88,6 @@ public class SmsServiceImpl implements SmsService {
         return new ResultVO<>(httpStatusEnum);
     }
 
-    /**
-     * 校验短信验证码
-     *
-     * @param type   : 短信类型
-     * @param mobile : 手机号
-     * @param code   : 验证码
-     * @return : 返回验证结果
-     */
     @Override
     public HttpStatusEnum smsCheck(Integer type, String mobile, String code) {
         //验证类型
@@ -135,21 +116,11 @@ public class SmsServiceImpl implements SmsService {
         return HttpStatusEnum.SUCCESS;
     }
 
-    /**
-     * 获取手机验证码
-     */
     private String randomCode() {
         Random random = new Random();
         return String.valueOf(random.nextInt(999999) + 100000);
     }
 
-    /**
-     * 手机验证码缓存key
-     *
-     * @param mobile : 手机号
-     * @param type   : 短信类型
-     * @return : 返回redis缓存key
-     */
     private String smsKey(String mobile, Integer type) {
         return RedisKeyConstant.SMS_PHONE_KEY + "_" + mobile + "_" + type;
     }

+ 19 - 41
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/UserServiceImpl.java

@@ -52,15 +52,9 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
     @Autowired
     private UserCardService userCardService;
 
-    /**
-     * 忘记密码找回
-     *
-     * @param param : 修改密码的参数
-     * @return : 返回修改结果
-     */
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public ResultVO<Boolean> findPassword(FindPasswordParam param) {
+    public ResultVO<Boolean> findPassword(FindPasswordParam param, UserData userData) {
         String userName = param.getUserName();
         String mobile = param.getMobile();
         String code = param.getCode();
@@ -69,6 +63,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
         User user;
         if (Strings.isNotBlank(userName)) {
             user = super.getOne(new LambdaQueryWrapper<User>()
+                    .eq(User::getGameId, userData.getGameId())
                     .eq(User::getUsername, userName));
             if (user == null) {
                 return new ResultVO<>(HttpStatusEnum.USERNAME_NOT_EXISTS);
@@ -81,6 +76,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
             }
         } else {
             user = super.getOne(new LambdaQueryWrapper<User>()
+                    .eq(User::getGameId, userData.getGameId())
                     .eq(User::getMobile, mobile));
             if (user == null) {
                 return new ResultVO<>(HttpStatusEnum.PHONE_NOT_REG);
@@ -102,13 +98,6 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
         return new ResultVO<>(HttpStatusEnum.SUCCESS, Boolean.TRUE);
     }
 
-    /**
-     * 用户重置密码
-     *
-     * @param param    : 修改密码的参数
-     * @param userData : userData
-     * @return : 返回修改结果
-     */
     @Override
     @Transactional(rollbackFor = Exception.class)
     public ResultVO<Boolean> updatePassword(UpdatePasswordParam param, UserData userData) {
@@ -142,13 +131,6 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
         return new ResultVO<>(HttpStatusEnum.SUCCESS, Boolean.TRUE);
     }
 
-    /**
-     * 用户绑定手机
-     *
-     * @param param    : 绑定手机参数
-     * @param userData : userData
-     * @return : 返回修改结果
-     */
     @Override
     @Transactional(rollbackFor = Exception.class)
     public ResultVO<Boolean> bindPhone(BindPhoneParam param, UserData userData) {
@@ -184,12 +166,6 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
         return new ResultVO<>(HttpStatusEnum.SUCCESS, Boolean.TRUE);
     }
 
-    /**
-     * 获取用户信息
-     *
-     * @param userData : 用户信息
-     * @return : 返回用户详情信息
-     */
     @Override
     public UserVO getUserDetail(UserData userData) {
         Long userId = userData.getUserId();
@@ -216,12 +192,6 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
         return userVO;
     }
 
-    /**
-     * 用户获取游戏客服信息
-     *
-     * @param userData : userData
-     * @return : 返回用户信息
-     */
     @Override
     public CustomerVO getUserCustomer(UserData userData) {
         Long gameId = userData.getGameId();
@@ -235,15 +205,23 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
                 .build();
     }
 
-    /**
-     * 根据手机号获取用户信息
-     *
-     * @param mobile : 用户手机号
-     * @return : 返回用户信息
-     */
     @Override
-    public UserDTO getUserInfoByMobile(String mobile) {
-        User user = super.getOne(new LambdaQueryWrapper<User>().eq(User::getMobile, mobile));
+    public UserDTO getUserInfoByMobile(String mobile, Long gameId) {
+        User user = super.getOne(new LambdaQueryWrapper<User>()
+                .eq(User::getGameId, gameId)
+                .eq(User::getMobile, mobile));
+        return BeanUtils.copy(user, UserDTO.class);
+    }
+
+    @Override
+    public UserDTO getUserByOpenId(Long gameId, String openId) {
+        User user = super.getOne(new LambdaQueryWrapper<User>()
+                .eq(User::getGameId, gameId)
+                .eq(User::getOpenId, openId));
+        if (user == null) {
+            log.error("参数错误, 根据openId查询用户信息不存在, gameId : {}, openId : {}", gameId, openId);
+            throw new BaseException("参数错误, 根据openId查询用户信息不存在");
+        }
         return BeanUtils.copy(user, UserDTO.class);
     }
 }

+ 3 - 1
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/SmsService.java

@@ -4,6 +4,7 @@ import com.zanxiang.common.domain.ResultVO;
 import com.zanxiang.common.enums.HttpStatusEnum;
 import com.zanxiang.sdk.domain.params.SmsCheckParam;
 import com.zanxiang.sdk.domain.params.SmsSendParam;
+import com.zanxiang.sdk.domain.params.UserData;
 
 /**
  * @author : lingfeng
@@ -16,9 +17,10 @@ public interface SmsService {
      * 发送短信验证码
      *
      * @param smsSendParam : 获取短信验证码参数
+     * @param userData     : 用户信息
      * @return : 返回发送结果
      */
-    ResultVO<Boolean> smsSend(SmsSendParam smsSendParam);
+    ResultVO<Boolean> smsSend(SmsSendParam smsSendParam, UserData userData);
 
     /**
      * 前端校验短信验证码

+ 14 - 3
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/UserService.java

@@ -21,10 +21,11 @@ public interface UserService extends IService<User> {
     /**
      * 忘记密码找回
      *
-     * @param param : 修改密码的参数
+     * @param param    : 修改密码的参数
+     * @param userData : 用户信息
      * @return : 返回修改结果
      */
-    ResultVO<Boolean> findPassword(FindPasswordParam param);
+    ResultVO<Boolean> findPassword(FindPasswordParam param, UserData userData);
 
     /**
      * 用户重置密码
@@ -64,8 +65,18 @@ public interface UserService extends IService<User> {
      * 根据手机号获取用户信息
      *
      * @param mobile : 用户手机号
+     * @param gameId : 游戏id
+     * @return : 返回用户信息
+     */
+    UserDTO getUserInfoByMobile(String mobile, Long gameId);
+
+    /**
+     * 根据openId查询用户信息
+     *
+     * @param gameId : 游戏id
+     * @param openId : 微信小游戏openId
      * @return : 返回用户信息
      */
-    UserDTO getUserInfoByMobile(String mobile);
+    UserDTO getUserByOpenId(Long gameId, String openId);
 
 }

+ 1 - 0
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/pay/WxPayService.java

@@ -289,6 +289,7 @@ public class WxPayService extends PayBaseService {
     }
 
     private void configInit(GamePayWayDTO gamePayWayDTO) {
+        //todo : 如果是关联了盒子, 则不存在商户id, 得根据盒子查询商户信息
         //商户信息
         PayMerchantDTO payMerchantDTO = payMerchantService.getByMerchantNo(gamePayWayDTO.getMerchantNo());
         WxPayConfigBO payConfigBO = JsonUtil.toObj(payMerchantDTO.getPayConfig(), WxPayConfigBO.class);