Browse Source

feat : 支付关联关系表修改

bilingfeng 2 years ago
parent
commit
be8592d5ed
21 changed files with 317 additions and 81 deletions
  1. 39 0
      game-module/game-common/src/main/java/com/zanxiang/common/enums/AppletStoreEnum.java
  2. 7 2
      game-module/game-common/src/main/java/com/zanxiang/common/enums/AppletTypeEnum.java
  3. 6 6
      game-module/game-common/src/main/java/com/zanxiang/common/enums/PayBoxTypeEnum.java
  4. 15 0
      game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/GameApplet.java
  5. 2 2
      game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/GamePayWay.java
  6. 12 2
      game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/PayApplication.java
  7. 6 1
      game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/PayBox.java
  8. 26 3
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/domain/dto/GameAppletDTO.java
  9. 2 2
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/domain/dto/GamePayWayDTO.java
  10. 38 0
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/domain/dto/MiPayConfigDTO.java
  11. 10 0
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/domain/dto/PayApplicationDTO.java
  12. 8 7
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/GameAppletServiceImpl.java
  13. 9 6
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/OrderPayServiceImpl.java
  14. 1 1
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/PayApplicationServiceImpl.java
  15. 36 0
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/PayBoxServiceImpl.java
  16. 10 0
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/UserServiceImpl.java
  17. 14 0
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/PayBoxService.java
  18. 7 0
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/UserService.java
  19. 1 1
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/api/WxApiService.java
  20. 10 2
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/pay/AliPayService.java
  21. 58 46
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/pay/MiPayService.java

+ 39 - 0
game-module/game-common/src/main/java/com/zanxiang/common/enums/AppletStoreEnum.java

@@ -0,0 +1,39 @@
+package com.zanxiang.common.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @author : lingfeng
+ * @time : 2023-01-15
+ * @description : 商城小程序枚举类型
+ */
+@Getter
+@AllArgsConstructor
+public enum AppletStoreEnum {
+
+    /**
+     * 商城百货
+     */
+    STORE_GOODS(1, "商城百货"),
+
+    /**
+     * 商城美妆
+     */
+    STORE_BEAUTY(2, "商城美妆"),
+
+    /**
+     * 商城内容
+     */
+    STORE_CONTENT(3, "商城内容");
+
+    /**
+     * 账号类型
+     */
+    private Integer type;
+
+    /**
+     * 账号类型名称
+     */
+    private String name;
+}

+ 7 - 2
game-module/game-common/src/main/java/com/zanxiang/common/enums/AppletTypeEnum.java

@@ -15,12 +15,17 @@ public enum AppletTypeEnum {
     /**
      * 小程序
      */
-    APPLET_MINI(1, "小程序"),
+    APPLET_APPLET(1, "小程序"),
 
     /**
      * 公众号
      */
-    APPLET_MP(2, "公众号");
+    APPLET_MP(2, "公众号"),
+
+    /**
+     * 支付宝应用
+     */
+    APPLET_APP(3, "支付宝应用");
 
     /**
      * 状态

+ 6 - 6
game-module/game-common/src/main/java/com/zanxiang/common/enums/PayBoxTypeEnum.java

@@ -15,19 +15,19 @@ import java.util.Objects;
 public enum PayBoxTypeEnum {
 
     /**
-     * 商城百货
+     * 微信小程序
      */
-    STORE_GOODS(1, "商城百货"),
+    PAY_BOX_WX_APPLET(1, "微信小程序"),
 
     /**
-     * 商城美妆
+     * 微信公众号
      */
-    STORE_BEAUTY(2, "商城美妆"),
+    PAY_BOX_WX_MP(2, "微信公众号"),
 
     /**
-     * 商城内容
+     * 支付宝应用
      */
-    STORE_CONTENT(3, "商城内容");
+    PAY_BOX_ALI_APP(3, "支付宝应用");
 
     /**
      * 账号类型

+ 15 - 0
game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/GameApplet.java

@@ -52,6 +52,21 @@ public class GameApplet {
      */
     private String appSecret;
 
+    /**
+     * 米大师应用id
+     */
+    private String miPayAppId;
+
+    /**
+     * 米大师应用密钥
+     */
+    private String miPayAppKey;
+
+    /**
+     * 米大师应用沙箱密钥
+     */
+    private String miPayAppKeyDev;
+
     /**
      * 消息推送token
      */

+ 2 - 2
game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/GamePayWay.java

@@ -68,9 +68,9 @@ public class GamePayWay {
     private String merchantNo;
 
     /**
-     * 支付配置(米大师)
+     * 客服消息卡片图片地址
      */
-    private String payConfig;
+    private String thumbUrl;
 
     /**
      * 状态 1 不可用 0 可用

+ 12 - 2
game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/PayApplication.java

@@ -49,15 +49,25 @@ public class PayApplication implements Serializable {
     private String appName;
 
     /**
-     * 类型,1 : 微信商城小程序, 2: 微信公众号
+     * 类型,1 : 小程序, 2 : 公众号,3 : 支付宝应用
      */
     private Integer type;
 
     /**
-     * 应用密钥
+     * 微信应用密钥
      */
     private String appSecret;
 
+    /**
+     * 支付宝应用私钥
+     */
+    private String privateKey;
+
+    /**
+     * 应用跳转路径
+     */
+    private String path;
+
     /**
      * 小程序收款商户
      */

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

@@ -49,10 +49,15 @@ public class PayBox implements Serializable {
     private String merchantIds;
 
     /**
-     * 盒子类型 1、商城百货 2、商城美妆 3、商城内容 4、公众号
+     * 盒子类型 1、小程序 2、微信公众号
      */
     private Integer type;
 
+    /**
+     * 商城小程序类型 1、商城百货 2、商城美妆 3、商城内容
+     */
+    private Integer storeType;
+
     /**
      * 描述
      */

+ 26 - 3
game-module/game-sdk/src/main/java/com/zanxiang/sdk/domain/dto/GameAppletDTO.java

@@ -1,5 +1,7 @@
 package com.zanxiang.sdk.domain.dto;
 
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
 import lombok.Data;
 
 /**
@@ -13,6 +15,7 @@ public class GameAppletDTO {
     /**
      * 主键
      */
+    @TableId(value = "id", type = IdType.AUTO)
     private Long id;
 
     /**
@@ -25,15 +28,35 @@ public class GameAppletDTO {
      */
     private String appId;
 
+    /**
+     * 小程序原始id
+     */
+    private String ghId;
+
+    /**
+     * 小程序名称
+     */
+    private String appName;
+
     /**
      * 小程序密钥
      */
     private String appSecret;
 
     /**
-     * 小程序原始id
+     * 米大师应用id
      */
-    private String ghId;
+    private String miPayAppId;
+
+    /**
+     * 米大师应用密钥
+     */
+    private String miPayAppKey;
+
+    /**
+     * 米大师应用沙箱密钥
+     */
+    private String miPayAppKeyDev;
 
     /**
      * 消息推送token
@@ -43,5 +66,5 @@ public class GameAppletDTO {
     /**
      * 消息推送加密密钥
      */
-    private String msgPushEncodingAesKey;
+    private String msgPushAesKey;
 }

+ 2 - 2
game-module/game-sdk/src/main/java/com/zanxiang/sdk/domain/dto/GamePayWayDTO.java

@@ -56,7 +56,7 @@ public class GamePayWayDTO {
     private String merchantNo;
 
     /**
-     * 支付配置(米大师, 客服支付)
+     * 客服消息卡片图片地址
      */
-    private String payConfig;
+    private String thumbUrl;
 }

+ 38 - 0
game-module/game-sdk/src/main/java/com/zanxiang/sdk/domain/dto/MiPayConfigDTO.java

@@ -0,0 +1,38 @@
+package com.zanxiang.sdk.domain.dto;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author : lingfeng
+ * @time : 2023-01-15
+ * @description : 米大师支付参数
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class MiPayConfigDTO {
+
+    /**
+     * 微信小程序appId
+     */
+    private String wxAppId;
+
+    /**
+     * 米大师支付应用id
+     */
+    private String appId;
+
+    /**
+     * 米大师现网AppKey
+     */
+    private String appKey;
+
+    /**
+     * 米大师沙箱AppKey
+     */
+    private String appKeyDev;
+}

+ 10 - 0
game-module/game-sdk/src/main/java/com/zanxiang/sdk/domain/dto/PayApplicationDTO.java

@@ -39,4 +39,14 @@ public class PayApplicationDTO {
      * 应用密钥
      */
     private String appSecret;
+
+    /**
+     * 应用跳转路径
+     */
+    private String path;
+
+    /**
+     * 支付宝应用私钥
+     */
+    private String privateKey;
 }

+ 8 - 7
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/GameAppletServiceImpl.java

@@ -25,6 +25,7 @@ import com.zanxiang.sdk.util.SignUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.logging.log4j.util.Strings;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.web.client.RestTemplate;
 import org.springframework.web.util.UriComponentsBuilder;
@@ -59,6 +60,9 @@ public class GameAppletServiceImpl extends ServiceImpl<GameAppletMapper, GameApp
     @Autowired
     private GamePayWayService gamePayWayService;
 
+    @Value("${payConfig.wx.customH5Url}")
+    private String customH5Url;
+
     @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);
@@ -116,20 +120,17 @@ public class GameAppletServiceImpl extends ServiceImpl<GameAppletMapper, GameApp
     private String sendCustomMessage(GameApplet gameApplet, String openId, Order order) {
         //查询订单支付方式
         GamePayWayDTO gamePayWayDTO = gamePayWayService.getById(order.getGamePayWayId());
-        Map<String, String> payConfigMap = JsonUtil.toMap(gamePayWayDTO.getPayConfig(), Map.class, String.class);
-        //h5支付页面地址
-        String h5Url = payConfigMap.get("url");
         //客服支付链接显示图片地址
-        String thumbUrl = payConfigMap.get("thumb_url");
+        String thumbUrl = gamePayWayDTO.getThumbUrl();
         //支付配置参数判断
-        if (Strings.isBlank(h5Url) || Strings.isBlank(thumbUrl)) {
-            log.error("h5支付页面地址或者支付链接显示图片地址不存在, gamePayWayDTO : {}", JsonUtil.toString(gamePayWayDTO));
+        if (Strings.isBlank(thumbUrl)) {
+            log.error("客服消息卡片图片地址不存在, gamePayWayDTO : {}", JsonUtil.toString(gamePayWayDTO));
             return HttpStatusEnum.SUCCESS.getMsg();
         }
         //订单金额
         BigDecimal amount = order.getAmount();
         //构造跳转链接url
-        URI url = UriComponentsBuilder.fromHttpUrl(h5Url)
+        URI url = UriComponentsBuilder.fromHttpUrl(this.customH5Url)
                 .queryParam("appId", gamePayWayDTO.getAppId())
                 .queryParam("orderId", order.getOrderId())
                 .queryParam("amount", amount)

+ 9 - 6
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/OrderPayServiceImpl.java

@@ -12,14 +12,12 @@ import com.zanxiang.mybatis.entity.Order;
 import com.zanxiang.mybatis.entity.OrderPayParam;
 import com.zanxiang.sdk.domain.bo.ProductPayParamBO;
 import com.zanxiang.sdk.domain.dto.GamePayWayDTO;
+import com.zanxiang.sdk.domain.dto.PayApplicationDTO;
 import com.zanxiang.sdk.domain.params.ProductPayParam;
 import com.zanxiang.sdk.domain.params.UserData;
 import com.zanxiang.sdk.domain.vo.PayParamVO;
 import com.zanxiang.sdk.enums.PayTypeEnum;
-import com.zanxiang.sdk.service.GamePayWayService;
-import com.zanxiang.sdk.service.OrderPayParamService;
-import com.zanxiang.sdk.service.OrderPayService;
-import com.zanxiang.sdk.service.OrderService;
+import com.zanxiang.sdk.service.*;
 import com.zanxiang.sdk.service.pay.PayBaseService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -50,6 +48,9 @@ public class OrderPayServiceImpl implements OrderPayService {
     @Autowired
     private OrderPayParamService orderPayParamService;
 
+    @Autowired
+    private PayApplicationService payApplicationService;
+
     @Override
     public PayParamVO getPayParam(String code, String orderId, HttpServletRequest request) {
         Order order = orderService.getOne(new LambdaQueryWrapper<Order>()
@@ -108,10 +109,12 @@ public class OrderPayServiceImpl implements OrderPayService {
                 || Objects.equals(PayDeviceEnum.CUSTOM_PAY.getPayDeviceId(), product.getPayDevice())) {
             //查询支付配置
             GamePayWayDTO gamePayWayDTO = gamePayWayService.getGamePayWay(userData.getGameId(), product.getPayWay(), product.getPayDevice());
+            //查询支付应用信息
+            PayApplicationDTO payApplicationDTO = payApplicationService.getPayApplication(gamePayWayDTO.getAppId());
             //构造参数信息
             Map<Object, Object> paramMap = new HashMap<>(4);
-            paramMap.put("appId", gamePayWayDTO.getAppId());
-            paramMap.put("path", "pages/gamePay/index");
+            paramMap.put("appId", payApplicationDTO.getAppId());
+            paramMap.put("path", payApplicationDTO.getPath());
             paramMap.put("orderId", product.getOrderId());
             paramMap.put("amount", product.getAmount());
             log.error("下单参数返回, paramMap : {}", JsonUtil.toString(paramMap));

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

@@ -61,7 +61,7 @@ public class PayApplicationServiceImpl extends ServiceImpl<PayApplicationMapper,
 
     private static final String SIGN_TYPE = "MD5";
 
-    @Value("${payConfig.wx.returnUrl}")
+    @Value("${payConfig.wx.appletNotifyUrl}")
     private String notifyUrl;
 
     @Override

+ 36 - 0
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/PayBoxServiceImpl.java

@@ -0,0 +1,36 @@
+package com.zanxiang.sdk.service.Impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zanxiang.common.exception.BaseException;
+import com.zanxiang.mybatis.entity.PayBox;
+import com.zanxiang.mybatis.mapper.PayBoxMapper;
+import com.zanxiang.sdk.domain.dto.PayMerchantDTO;
+import com.zanxiang.sdk.service.PayBoxService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+import org.springframework.stereotype.Service;
+
+/**
+ * 支付盒子 服务实现类
+ *
+ * @author xufeng
+ * @date 2022-06-22 15:26
+ */
+@Component
+@Slf4j
+@Service
+public class PayBoxServiceImpl extends ServiceImpl<PayBoxMapper, PayBox> implements PayBoxService {
+
+    /**
+     * 根据盒子id查询商户信息
+     */
+    public PayMerchantDTO getMerchantByBoxId(Long payBoxId) {
+        PayBox payBox = super.getById(payBoxId);
+        if (payBox == null) {
+            log.error("参数错误, 支付盒子信息不存在, payBoxId : {}", payBoxId);
+            throw new BaseException("参数错误, 支付盒子信息不存在");
+        }
+        //查询盒子绑定的商户
+        return null;
+    }
+}

+ 10 - 0
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/UserServiceImpl.java

@@ -224,4 +224,14 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
         }
         return BeanUtils.copy(user, UserDTO.class);
     }
+
+    @Override
+    public UserDTO getUserByUserId(Long userId) {
+        User user = super.getById(userId);
+        if (user == null) {
+            log.error("参数错误, 根据userId查询用户信息不存在,  userId : {}", userId);
+            throw new BaseException("参数错误, 根据userId查询用户信息不存在");
+        }
+        return BeanUtils.copy(user, UserDTO.class);
+    }
 }

+ 14 - 0
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/PayBoxService.java

@@ -0,0 +1,14 @@
+package com.zanxiang.sdk.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zanxiang.mybatis.entity.PayBox;
+
+/**
+ * 支付盒子 服务类接口
+ *
+ * @author xufeng
+ * @date 2022-06-22 15:26
+ */
+
+public interface PayBoxService extends IService<PayBox> {
+}

+ 7 - 0
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/UserService.java

@@ -79,4 +79,11 @@ public interface UserService extends IService<User> {
      */
     UserDTO getUserByOpenId(Long gameId, String openId);
 
+    /**
+     * 根据openId查询用户信息
+     *
+     * @param userId : 用户id
+     * @return : 返回用户信息
+     */
+    UserDTO getUserByUserId(Long userId);
 }

+ 1 - 1
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/api/WxApiService.java

@@ -42,7 +42,7 @@ public class WxApiService {
      * @return {@link String}
      */
     public String getOpenIdByType(String code, String appId, String secret, Integer type) {
-        if (Objects.equals(type, AppletTypeEnum.APPLET_MINI.getType())) {
+        if (Objects.equals(type, AppletTypeEnum.APPLET_APPLET.getType())) {
             return this.getAppletOpenId(code, appId, secret);
         }
         if (Objects.equals(type, AppletTypeEnum.APPLET_MP.getType())) {

+ 10 - 2
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/pay/AliPayService.java

@@ -14,7 +14,9 @@ import com.zanxiang.common.enums.OsEnum;
 import com.zanxiang.module.util.JsonUtil;
 import com.zanxiang.sdk.domain.bo.ProductPayParamBO;
 import com.zanxiang.sdk.domain.dto.GamePayWayDTO;
+import com.zanxiang.sdk.domain.dto.PayApplicationDTO;
 import com.zanxiang.sdk.domain.dto.PayMerchantDTO;
+import com.zanxiang.sdk.service.PayApplicationService;
 import com.zanxiang.sdk.service.PayMerchantService;
 import com.zanxiang.sdk.util.HttpUtil;
 import lombok.extern.slf4j.Slf4j;
@@ -76,6 +78,9 @@ public class AliPayService extends PayBaseService {
     @Autowired
     private PayMerchantService payMerchantService;
 
+    @Autowired
+    private PayApplicationService payApplicationService;
+
     @Override
     public ResultMap create(ProductPayParamBO product) {
         this.attach = product.getAttach();
@@ -262,10 +267,13 @@ public class AliPayService extends PayBaseService {
     private void configInit(GamePayWayDTO gamePayWayDTO) {
         //商户信息
         PayMerchantDTO payMerchantDTO = payMerchantService.getByMerchantNo(gamePayWayDTO.getMerchantNo());
+        //查询支付应用信息
+        PayApplicationDTO payApplicationDTO = payApplicationService.getPayApplication(gamePayWayDTO.getAppId());
         //支付参数
         Map<String, String> payConfigMap = JsonUtil.toMap(payMerchantDTO.getPayConfig(), Map.class, String.class);
-        //添加支付指定的应用id信息
-        payConfigMap.put("appId", gamePayWayDTO.getAppId());
+        //支付宝应用id和应用私钥
+        payConfigMap.put("appId", payApplicationDTO.getAppId());
+        payConfigMap.put("merchantPrivateKey", payApplicationDTO.getPrivateKey());
         //赋值配置信息
         this.config = JsonUtil.toObj(JsonUtil.toString(payConfigMap), Config.class);
         log.error("初始化的支付配置信息, config : {}", JsonUtil.toString(this.config));

+ 58 - 46
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/pay/MiPayService.java

@@ -1,23 +1,22 @@
 package com.zanxiang.sdk.service.pay;
 
 import com.alibaba.fastjson.JSONObject;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.zanxiang.common.domain.MiPayConfig;
 import com.zanxiang.common.domain.ResultMap;
 import com.zanxiang.common.enums.HttpStatusEnum;
-import com.zanxiang.common.enums.StatusEnum;
 import com.zanxiang.common.exception.BaseException;
 import com.zanxiang.common.exception.CustomException;
 import com.zanxiang.common.utils.StringUtils;
 import com.zanxiang.common.utils.URIUtil;
 import com.zanxiang.module.util.JsonUtil;
-import com.zanxiang.mybatis.entity.GamePayWay;
 import com.zanxiang.sdk.constant.MiPayConstants;
 import com.zanxiang.sdk.domain.bo.ProductPayParamBO;
+import com.zanxiang.sdk.domain.dto.GameAppletDTO;
+import com.zanxiang.sdk.domain.dto.MiPayConfigDTO;
 import com.zanxiang.sdk.domain.dto.PlatformOrderDTO;
-import com.zanxiang.sdk.service.GamePayWayService;
+import com.zanxiang.sdk.domain.dto.UserDTO;
+import com.zanxiang.sdk.service.GameAppletService;
 import com.zanxiang.sdk.service.OrderService;
-import com.zanxiang.sdk.service.api.WxApiService;
+import com.zanxiang.sdk.service.UserService;
 import com.zanxiang.sdk.util.WxPayUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -41,14 +40,11 @@ import java.util.Objects;
 @Service
 public class MiPayService extends PayBaseService {
 
-    @Autowired
-    private WxApiService wxApiService;
-
     @Autowired
     private OrderService orderService;
 
     @Autowired
-    private GamePayWayService gamePayWayService;
+    private GameAppletService gameAppletService;
 
     @Value("${spring.profiles.active}")
     private String springActive;
@@ -56,13 +52,18 @@ public class MiPayService extends PayBaseService {
     @Autowired
     private RestTemplate restTemplate;
 
-    private String code;
+    @Autowired
+    private UserService userService;
+
+    /**
+     * 米大师支付配置
+     */
+    private MiPayConfigDTO config;
 
     private int isSand = 1;
 
     @Override
     public ResultMap create(ProductPayParamBO product) {
-        this.code = product.getCode();
         //查询订单
         PlatformOrderDTO orderInfo = orderService.info(product.getOutTradeNo());
         if (Objects.isNull(orderInfo)) {
@@ -72,27 +73,17 @@ public class MiPayService extends PayBaseService {
             throw new CustomException(HttpStatusEnum.ORDER_GAME_ID_IS_NULL);
         }
         this.isSand = Objects.equals(this.springActive, "dev") ? 1 : 0;
-        //查询游戏配置
-        GamePayWay one = gamePayWayService.getOne(new LambdaQueryWrapper<GamePayWay>()
-                .eq(GamePayWay::getGameId, orderInfo.getGameId())
-                .eq(GamePayWay::getStatus, StatusEnum.YES.getCode())
-                .gt(GamePayWay::getPayBoxId, 0)
-                .last("limit 1")
-        );
-        if (Objects.isNull(one) || StringUtils.isEmpty(one.getPayConfig())) {
-            throw new CustomException(HttpStatusEnum.GET_CONFIG_ERROR);
-        }
-        //米大师支付配置
-        MiPayConfig miPayConfig = JSONObject.parseObject(one.getPayConfig(), MiPayConfig.class);
+        this.configInit(product.getGameId());
         //获取用户openId
-        String openId = wxApiService.getAppletOpenId(code, miPayConfig.getWxAppId(), "a8df1c1146f89f06d07d1e494f845ede");
+        UserDTO userDTO = userService.getUserByUserId(product.getUserId());
+        String openId = userDTO.getOpenId();
         //获取米大师钱包余额
-        Long balance = this.midasGetBalance(openId, miPayConfig);
+        Long balance = this.midasGetBalance(openId);
         //返回参数
         Map<String, String> result = new HashMap<>();
         //余额充足, 直接扣除
         if (balance >= orderInfo.getAmount().longValue()) {
-            String billNo = this.midasPay(openId, miPayConfig, orderInfo);
+            String billNo = this.midasPay(openId, orderInfo);
             result.put("status", "0");
             result.put("billNo", billNo);
         }
@@ -101,7 +92,7 @@ public class MiPayService extends PayBaseService {
             result.put("currencyType", "CNY");
             result.put("mode", "game");
             result.put("zoneId", "1");
-            result.put("offerId", miPayConfig.getAppId());
+            result.put("offerId", config.getAppId());
             result.put("env", String.valueOf(this.isSand));
             result.put("buyQuantity", orderInfo.getAmount().toString());
             result.put("status", "1");
@@ -111,37 +102,40 @@ public class MiPayService extends PayBaseService {
         return ResultMap.ok(result);
     }
 
-    private Long midasGetBalance(String openId, MiPayConfig miPayConfig) {
+    private Long midasGetBalance(String openId) {
         Map<String, String> paramMap = new HashMap<>();
         paramMap.put("openid", openId);
-        paramMap.put("appid", miPayConfig.getWxAppId());
-        paramMap.put("offer_id", miPayConfig.getAppId());
+        paramMap.put("appid", config.getWxAppId());
+        paramMap.put("offer_id", config.getAppId());
         paramMap.put("ts", String.valueOf(System.currentTimeMillis() / 1000));
         paramMap.put("zone_id", "1");
         paramMap.put("pf", "android");
+
+
+
         String urlPath = this.isSand == 1 ? "/cgi-bin/midas/sandbox/getbalance" : "/cgi-bin/midas/getbalance";
-        String appKey = this.isSand == 1 ? miPayConfig.getAppKeyDev() : miPayConfig.getAppKey();
+        String appKey = this.isSand == 1 ? config.getAppKeyDev() : config.getAppKey();
         String sig = WxPayUtil.miPaySin("POST", urlPath, paramMap, appKey);
-        paramMap.put("sig", sig);
-        Map<String, String> result = this.miPayApi(MiPayConstants.BALANCE_URL, miPayConfig, paramMap);
+
+
+
+        paramMap.put("sig", this.sign("POST", paramMap));
+        Map<String, String> result = this.miPayApi(MiPayConstants.BALANCE_URL, paramMap);
         return Long.valueOf(result.get("balance"));
     }
 
-    private String midasPay(String openId, MiPayConfig miPayConfig, PlatformOrderDTO orderInfo) {
+    private String midasPay(String openId, PlatformOrderDTO orderInfo) {
         Map<String, String> paramMap = new HashMap<>();
-        paramMap.put("appid", miPayConfig.getWxAppId());
+        paramMap.put("appid", config.getWxAppId());
         paramMap.put("openid", openId);
-        paramMap.put("offer_id", miPayConfig.getAppId());
+        paramMap.put("offer_id", config.getAppId());
         paramMap.put("ts", String.valueOf(System.currentTimeMillis() / 1000));
         paramMap.put("pf", "android");
         paramMap.put("zone_id", "1");
         paramMap.put("amt", orderInfo.getAmount().toString());
         paramMap.put("bill_no", orderInfo.getOrderId());
-        String urlPath = this.isSand == 1 ? "/cgi-bin/midas/sandbox/getbalance" : "/cgi-bin/midas/getbalance";
-        String appKey = this.isSand == 1 ? miPayConfig.getAppKeyDev() : miPayConfig.getAppKey();
-        String sig = WxPayUtil.miPaySin("POST", urlPath, paramMap, appKey);
-        paramMap.put("sig", sig);
-        Map<String, String> result = this.miPayApi(MiPayConstants.PAY_URL, miPayConfig, paramMap);
+        paramMap.put("sig", this.sign("POST", paramMap));
+        Map<String, String> result = this.miPayApi(MiPayConstants.PAY_URL, paramMap);
         return result.get("bill_no");
     }
 
@@ -177,15 +171,15 @@ public class MiPayService extends PayBaseService {
         return token;
     }
 
-    private Map<String, String> miPayApi(String url, MiPayConfig miPayConfig, Map<String, String> paramMap) {
+    private Map<String, String> miPayApi(String url, Map<String, String> paramMap) {
         try {
             //使用沙箱时,沙箱地址替换
-            String appKey = miPayConfig.getAppKey();
+            String appKey = config.getAppKey();
             if (this.isSand == 1) {
                 url = url.replace("/cgi-bin/midas/", "/cgi-bin/midas/sandbox/");
-                appKey = miPayConfig.getAppKeyDev();
+                appKey = config.getAppKeyDev();
             }
-            String accessToken = getAccessToken(miPayConfig.getAppId(), appKey);
+            String accessToken = getAccessToken(config.getAppId(), appKey);
             if (StringUtils.isEmpty(accessToken)) {
                 throw new CustomException(HttpStatusEnum.ACCESS_TOKEN_CREATE_ERROR);
             }
@@ -210,6 +204,24 @@ public class MiPayService extends PayBaseService {
         }
     }
 
+    private void configInit(Long gameId) {
+        //查询游戏小程序信息
+        GameAppletDTO gameAppletDTO = gameAppletService.getByGameId(gameId);
+        //支付配置赋值
+        this.config = MiPayConfigDTO.builder()
+                .wxAppId(gameAppletDTO.getAppId())
+                .appId(gameAppletDTO.getMiPayAppId())
+                .appKey(gameAppletDTO.getMiPayAppKey())
+                .appKeyDev(gameAppletDTO.getMiPayAppKeyDev())
+                .build();
+    }
+
+    private String sign(String method, Map<String, String> paramMap) {
+        String urlPath = this.isSand == 1 ? "/cgi-bin/midas/sandbox/getbalance" : "/cgi-bin/midas/getbalance";
+        String appKey = this.isSand == 1 ? config.getAppKeyDev() : config.getAppKey();
+        return WxPayUtil.miPaySin(method, urlPath, paramMap, appKey);
+    }
+
     @Override
     public String notify(HttpServletRequest request, HttpServletResponse response) {
         throw new BaseException("米大师支付不存在异步回调");