Ver Fonte

feat : 支付参数逻辑修改

bilingfeng há 2 anos atrás
pai
commit
b89cb37064

+ 39 - 6
game-module/game-sdk/src/main/java/com/zanxiang/sdk/controller/AppletController.java

@@ -1,31 +1,50 @@
 package com.zanxiang.sdk.controller;
 
+import com.zanxiang.common.domain.ResultMap;
+import com.zanxiang.module.util.JsonUtil;
 import com.zanxiang.sdk.annotation.UnSignCheck;
+import com.zanxiang.sdk.domain.params.MiniAppPayParam;
 import com.zanxiang.sdk.domain.vo.GameAppletVO;
 import com.zanxiang.sdk.service.GameAppletService;
+import com.zanxiang.sdk.service.OrderPayService;
+import com.zanxiang.sdk.service.PayApplicationService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiResponse;
 import io.swagger.annotations.ApiResponses;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
 /**
  * @author : lingfeng
  * @time : 2023-01-04
- * @description : 客服消息
+ * @description : 小程序接口
  */
-@Api(tags = "sdk初始化接口")
+@Api(tags = "小程序接口")
 @RestController
-@RequestMapping(value = "/api/applet")
+@RequestMapping(value = "/api")
+@Slf4j
 public class AppletController {
 
+    @Resource
+    private OrderPayService orderPayService;
+
     @Autowired
     private GameAppletService gameAppletService;
 
+    @Autowired
+    private PayApplicationService payApplicationService;
+
     @UnSignCheck
     @ApiOperation(value = "小程序客服消息认证")
-    @GetMapping("/custom/msg/{appId}")
+    @GetMapping("/applet/custom/msg/{appId}")
     @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = GameAppletVO.class)})
     public String appletMsgCheck(@PathVariable("appId") String appId, @RequestParam String signature,
                                  @RequestParam String timestamp, @RequestParam String nonce,
@@ -34,8 +53,8 @@ public class AppletController {
     }
 
     @UnSignCheck
-    @ApiOperation(value = "小程序客服消息事件")
-    @PostMapping("/custom/msg/{appId}")
+    @ApiOperation(value = "小程序客服消息事件监听")
+    @PostMapping("/applet/custom/msg/{appId}")
     @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = GameAppletVO.class)})
     public String appletMsg(@PathVariable("appId") String appId, @RequestParam String signature,
                             @RequestParam String timestamp, @RequestParam String nonce,
@@ -43,4 +62,18 @@ public class AppletController {
         return gameAppletService.appletMsg(appId, signature, timestamp, nonce, postData);
     }
 
+    @UnSignCheck
+    @ApiOperation(value = "微信支付回调(小程序独立)")
+    @RequestMapping(value = "/pay/applet/wxPayNotify", method = RequestMethod.POST)
+    public String wxAppletPayNotify(HttpServletRequest request, HttpServletResponse response) throws IOException {
+        return orderPayService.appletNotify(request, response);
+    }
+
+    @UnSignCheck
+    @ApiOperation(value = "支付参数生成(小程序独立)")
+    @PostMapping(value = "/pay/applet/create")
+    public ResultMap create(@Validated @RequestBody MiniAppPayParam payParam, HttpServletRequest request) {
+        log.error("接收到支付请求, payParam : {}", JsonUtil.toString(payParam));
+        return payApplicationService.miniAppPay(payParam, request);
+    }
 }

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

@@ -6,16 +6,13 @@ import com.zanxiang.common.enums.PayWayEnum;
 import com.zanxiang.module.util.JsonUtil;
 import com.zanxiang.sdk.annotation.UnSignCheck;
 import com.zanxiang.sdk.annotation.ValidLogin;
-import com.zanxiang.sdk.domain.params.MiniAppPayParam;
 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.service.OrderPayService;
-import com.zanxiang.sdk.service.PayApplicationService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
@@ -39,11 +36,8 @@ public class PayController {
     @Resource
     private OrderPayService orderPayService;
 
-    @Autowired
-    private PayApplicationService payApplicationService;
-
     @UnSignCheck
-    @ApiOperation(value = "获取小程序/客服支付参数")
+    @ApiOperation(value = "获取客服支付参数")
     @GetMapping(value = "/param/applet")
     public ResultVO<PayParamVO> getPayParam(@RequestParam String code, @RequestParam String orderId, HttpServletRequest request) {
         return ResultVO.ok(orderPayService.getPayParam(code, orderId, request));
@@ -62,14 +56,6 @@ public class PayController {
         return orderPayService.payCreate(product, userData);
     }
 
-    @UnSignCheck
-    @ApiOperation(value = "支付参数生成(小程序独立)")
-    @PostMapping(value = "/applet/create")
-    public ResultMap create(@Validated @RequestBody MiniAppPayParam payParam, HttpServletRequest request) {
-        log.error("接收到支付请求, payParam : {}", JsonUtil.toString(payParam));
-        return payApplicationService.miniAppPay(payParam, request);
-    }
-
     @UnSignCheck
     @ApiOperation(value = "支付宝支付异步回调(二维码、H5、网站)")
     @RequestMapping(value = "/notify", method = RequestMethod.POST)
@@ -78,19 +64,12 @@ public class PayController {
     }
 
     @UnSignCheck
-    @ApiOperation(value = "微信支付回调")
+    @ApiOperation(value = "微信支付异步回调")
     @RequestMapping(value = "/wxPayNotify", method = RequestMethod.POST)
     public String wxPayNotify(HttpServletRequest request, HttpServletResponse response) throws IOException {
         return orderPayService.notify(request, response, PayWayEnum.WX_PAY.getPayWayId());
     }
 
-    @UnSignCheck
-    @ApiOperation(value = "微信支付回调(小程序独立)")
-    @RequestMapping(value = "/applet/wxPayNotify", method = RequestMethod.POST)
-    public String wxAppletPayNotify(HttpServletRequest request, HttpServletResponse response) throws IOException {
-        return orderPayService.appletNotify(request, response);
-    }
-
     @UnSignCheck
     @ApiOperation(value = "支付宝支付同步回调(二维码、H5、网站)")
     @RequestMapping(value = "/alipaySynNotify", method = RequestMethod.GET)

+ 2 - 2
game-module/game-sdk/src/main/java/com/zanxiang/sdk/domain/bo/ProductPayAttachParamBO.java

@@ -13,10 +13,10 @@ public class ProductPayAttachParamBO {
 
     private Long userId;
 
-    private String gamePayWayId;
+    private Long gamePayWayId;
 
     private String orderId;
 
-    private Integer payWay;
+    private Long payWay;
 
 }

+ 4 - 14
game-module/game-sdk/src/main/java/com/zanxiang/sdk/domain/bo/ProductPayParamBO.java

@@ -20,7 +20,7 @@ public class ProductPayParamBO {
     /**
      * 游戏id
      */
-    private String gameId;
+    private Long gameId;
 
     /**
      * 玩家id
@@ -63,14 +63,14 @@ public class ProductPayParamBO {
     private ProductPayAttachParamBO attach;
 
     /**
-     * 支付方式 (1:PC,平板 2:Wap 3:App )
+     * 支付类型, 1:PC, 2: h5支付, 3: App支付, 4: 小程序支付, 5: 米大师支付, 6:客服支付
      */
-    private Integer payDevice;
+    private Long payDevice;
 
     /**
      * 支付类型(1:支付宝 2:微信 3:米大师)
      */
-    private Integer payWay;
+    private Long payWay;
 
     /**
      * 微信小程序商城支付code
@@ -79,16 +79,6 @@ public class ProductPayParamBO {
 
     //================以下非传项=================
 
-    /**
-     * 前台回调地址  非扫码支付使用
-     */
-    private String frontUrl;
-
-    /**
-     * 支付相关配置
-     */
-    private Object config;
-
     /**
      * 支付类型详情(android / ios/ window)
      */

+ 2 - 2
game-module/game-sdk/src/main/java/com/zanxiang/sdk/domain/params/ProductPayParam.java

@@ -25,14 +25,14 @@ public class ProductPayParam {
      */
     @ApiModelProperty(notes = "支付方式(1:支付宝 2:微信 3:米大师)")
     @NotNull(message = "支付方式不可为空")
-    private Integer payWay;
+    private Long payWay;
 
     /**
      * 支付类型, 1:PC, 2: h5支付, 3: App支付, 4: 小程序支付, 5: 米大师支付, 6:客服支付
      */
     @ApiModelProperty(notes = "支付类型, 1:PC, 2: h5支付, 3: App支付, 4: 小程序支付, 5: 米大师支付, 6:客服支付")
     @NotNull(message = "支付类型不可为空")
-    private Integer payDevice;
+    private Long payDevice;
 
     /**
      * 商品ID

+ 5 - 13
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/GamePayWayService.java

@@ -11,22 +11,14 @@ import org.springframework.stereotype.Component;
  */
 @Component
 public interface GamePayWayService extends IService<GamePayWay> {
-    /**
-     * 根据id获取游戏支付方式详情
-     *
-     * @param id
-     * @return
-     */
-    GamePayWay getInfo(String id);
 
     /**
-     * 根据游戏ID与支付方式获支付配置
+     * 通过主键id查询
      *
-     * @param gameId
-     * @param payType
-     * @return
+     * @param id id
+     * @return {@link GamePayWayDTO}
      */
-    GamePayWay getPayWayToOrderPay(String gameId, Integer payType);
+    GamePayWayDTO getById(Long id);
 
     /**
      * 获取游戏支付配置
@@ -36,5 +28,5 @@ public interface GamePayWayService extends IService<GamePayWay> {
      * @param payDeviceId 支付设备id
      * @return {@link GamePayWayDTO}
      */
-    GamePayWayDTO getGamePayWay(String gameId, Long payWayId, Long payDeviceId);
+    GamePayWayDTO getGamePayWay(Long gameId, Long payWayId, Long payDeviceId);
 }

+ 7 - 21
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/GamePayWayServiceImpl.java

@@ -5,7 +5,6 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.zanxiang.common.enums.DeleteEnum;
 import com.zanxiang.common.enums.StatusEnum;
 import com.zanxiang.common.exception.BaseException;
-import com.zanxiang.common.utils.StringUtils;
 import com.zanxiang.module.util.bean.BeanUtil;
 import com.zanxiang.mybatis.entity.GamePayWay;
 import com.zanxiang.mybatis.mapper.GamePayWayMapper;
@@ -23,30 +22,17 @@ import org.springframework.stereotype.Service;
 public class GamePayWayServiceImpl extends ServiceImpl<GamePayWayMapper, GamePayWay> implements GamePayWayService {
 
     @Override
-    public GamePayWay getInfo(String id) {
-        return getOne(new LambdaQueryWrapper<GamePayWay>().eq(GamePayWay::getId, id).eq(GamePayWay::getIsDelete, DeleteEnum.NO.getCode()));
-    }
-
-    @Override
-    public GamePayWay getPayWayToOrderPay(String gameId, Integer payType) {
-        GamePayWay payInfo = getOne(new LambdaQueryWrapper<GamePayWay>()
-                .eq(GamePayWay::getGameId, gameId)
-                .eq(GamePayWay::getPayWayId, payType)
-                .eq(GamePayWay::getIsDelete, DeleteEnum.NO.getCode())
-                .eq(GamePayWay::getStatus, StatusEnum.YES.getCode())
-                .last("limit 1")
-                .orderByDesc(GamePayWay::getCreateTime));
-        if (payInfo == null) {
-            throw new RuntimeException("暂无该游戏支付方式 gameId:" + gameId + " payType:" + payType);
-        }
-        if (StringUtils.isEmpty(payInfo.getPayConfig())) {
-            throw new RuntimeException("游戏支付方式为空 gameId:" + gameId + " payType:" + payType);
+    public GamePayWayDTO getById(Long id) {
+        GamePayWay gamePayWay = super.getById(id);
+        if (gamePayWay == null) {
+            log.error("参数错误, 游戏支付配置信息不存在, id : {}", id);
+            throw new BaseException("参数错误, 游戏支付配置信息不存在");
         }
-        return payInfo;
+        return BeanUtil.copy(gamePayWay, GamePayWayDTO.class);
     }
 
     @Override
-    public GamePayWayDTO getGamePayWay(String gameId, Long payWayId, Long payDeviceId) {
+    public GamePayWayDTO getGamePayWay(Long gameId, Long payWayId, Long payDeviceId) {
         GamePayWay gamePayWay = getOne(new LambdaQueryWrapper<GamePayWay>()
                 .eq(GamePayWay::getGameId, gameId)
                 .eq(GamePayWay::getPayWayId, payWayId)

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

@@ -5,7 +5,6 @@ import com.zanxiang.common.domain.ResultMap;
 import com.zanxiang.common.enums.HttpStatusEnum;
 import com.zanxiang.common.enums.OrderStateEnum;
 import com.zanxiang.common.enums.PayDeviceEnum;
-import com.zanxiang.common.enums.PayWayEnum;
 import com.zanxiang.common.exception.BaseException;
 import com.zanxiang.common.utils.SpringUtils;
 import com.zanxiang.module.util.JsonUtil;
@@ -76,17 +75,17 @@ public class OrderPayServiceImpl implements OrderPayService {
         }
         //创建支付参数
         ProductPayParamBO bo = ProductPayParamBO.builder()
-                .gameId(order.getGameId().toString())
+                .gameId(order.getGameId())
                 .userId(order.getUserId())
-                .payDevice(order.getPayDevice())
+                .payDevice(order.getPayDeviceId())
                 .deviceSystem(order.getDeviceSystem())
                 .spbillCreateIp(IpUtil.getRealIp(request))
                 .outTradeNo(order.getOrderId())
-                .payWay(PayWayEnum.WX_PAY.getPayWayId())
+                .payWay(order.getPayWayId())
                 .code(code)
                 .build();
         //调起支付
-        PayTypeEnum payTypeEnum = PayTypeEnum.getByPayType(bo.getPayWay());
+        PayTypeEnum payTypeEnum = PayTypeEnum.getByPayType(bo.getPayWay().intValue());
         PayBaseService service = SpringUtils.getBean(payTypeEnum.getClazz());
         service.payCreate(bo);
         //重新查询
@@ -119,16 +118,16 @@ public class OrderPayServiceImpl implements OrderPayService {
         }
         //创建支付参数
         ProductPayParamBO bo = new ProductPayParamBO();
-        bo.setGameId(userData.getGameId().toString());
+        bo.setGameId(userData.getGameId());
         bo.setUserId(userData.getUserId());
-        bo.setPayDevice(product.getPayDevice() == null ? userData.getDeviceType() : product.getPayDevice());
+        bo.setPayDevice(product.getPayDevice());
         bo.setDeviceSystem(userData.getDeviceSystem());
         bo.setSpbillCreateIp(userData.getIp());
         bo.setOutTradeNo(product.getOrderId());
         bo.setPayWay(product.getPayWay());
         bo.setCode(product.getCode());
         //调起支付
-        PayTypeEnum payTypeEnum = PayTypeEnum.getByPayType(bo.getPayWay());
+        PayTypeEnum payTypeEnum = PayTypeEnum.getByPayType(bo.getPayWay().intValue());
         PayBaseService service = SpringUtils.getBean(payTypeEnum.getClazz());
         return service.payCreate(bo);
     }

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

@@ -9,6 +9,7 @@ import com.zanxiang.common.utils.bean.BeanUtils;
 import com.zanxiang.mybatis.entity.*;
 import com.zanxiang.mybatis.mapper.OrderMapper;
 import com.zanxiang.sdk.domain.bo.PlatformOrderBO;
+import com.zanxiang.sdk.domain.dto.GamePayWayDTO;
 import com.zanxiang.sdk.domain.dto.PayMerchantDTO;
 import com.zanxiang.sdk.domain.dto.PlatformOrderDTO;
 import com.zanxiang.sdk.domain.params.ProductPayParam;
@@ -98,9 +99,9 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
             throw new BaseException("参数错误, 角色信息不存在");
         }
         //游戏支付配置信息
-        GamePayWay gamePayWay = gamePayWayService.getPayWayToOrderPay(String.valueOf(gameId), payParam.getPayWay());
+        GamePayWayDTO gamePayWayDTO = gamePayWayService.getGamePayWay(gameId, payParam.getPayWay(), payParam.getPayDevice());
         //商户信息 todo : 盒子和小程序查询商户要根据盒子查询
-        PayMerchantDTO payMerchantDTO = payMerchantService.getByMerchantNo(gamePayWay.getMerchantNo());
+        PayMerchantDTO payMerchantDTO = payMerchantService.getByMerchantNo(gamePayWayDTO.getMerchantNo());
         //生成订单id
         String orderNum = this.getOrderNum(userData.getUserId());
         //用户已有订单数
@@ -124,18 +125,18 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
                 .amount(payParam.getAmount())
                 .productId(payParam.getProductId())
                 .productName(payParam.getProductName())
-                .gamePaywayId(gamePayWay.getId())
+                .gamePaywayId(gamePayWayDTO.getId())
                 .ext(payParam.getExtension())
                 .isFirstRecharge(count > 0 ? 0 : 1)
-                .payDevice(payParam.getPayDevice())
+                .payDeviceId(payParam.getPayDevice())
                 .createTime(LocalDateTime.now())
                 .updateTime(LocalDateTime.now())
                 .username(user.getUsername())
                 .regTime(user.getCreateTime())
                 .deviceSystem(userData.getDeviceSystem())
-                .merchantNo(gamePayWay.getMerchantNo())
+                .merchantNo(gamePayWayDTO.getMerchantNo())
                 .merchantName(payMerchantDTO.getMerchantName())
-                .payWayId(gamePayWay.getPayWayId())
+                .payWayId(gamePayWayDTO.getPayWayId())
                 .regGameId(user.getGameId())
                 .callBackStatus(CallBackEnum.UN_CALL_BACK.getCallBackStatus())
                 .roleLevel(gameUserRole.getRoleLevel())

+ 8 - 3
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/PerformOrderServiceImpl.java

@@ -12,6 +12,7 @@ import com.zanxiang.common.utils.StringUtils;
 import com.zanxiang.common.utils.URIUtil;
 import com.zanxiang.module.util.JsonUtil;
 import com.zanxiang.mybatis.entity.*;
+import com.zanxiang.sdk.domain.dto.GamePayWayDTO;
 import com.zanxiang.sdk.domain.dto.PlatformOrderDTO;
 import com.zanxiang.sdk.domain.result.PushCpResult;
 import com.zanxiang.sdk.service.*;
@@ -235,8 +236,12 @@ public class PerformOrderServiceImpl implements PerformOrderService {
                 log.error("订单:{} 更新商户号统计时,该订单GamePaywayId为空", orderInfo.getOrderId());
                 return false;
             }
-            GamePayWay gamePayWayInfo = gamePayWayService.getInfo(String.valueOf(orderInfo.getGamePaywayId()));
-            if (Objects.isNull(gamePayWayInfo)) {
+//            GamePayWay gamePayWayInfo = gamePayWayService.getInfo(String.valueOf(orderInfo.getGamePaywayId()));
+
+
+            GamePayWayDTO gamePayWayDTO = gamePayWayService.getById(orderInfo.getGamePaywayId());
+
+            if (Objects.isNull(gamePayWayDTO)) {
                 log.error("订单:{} 更新商户号统计时,获取GamePayway表id:{}信息为空", orderInfo.getOrderId(), orderInfo.getGamePaywayId());
                 return false;
             }
@@ -251,7 +256,7 @@ public class PerformOrderServiceImpl implements PerformOrderService {
 //                return false;
 //            }
             PayMerchant payMerchantInfo = payMerchantService.getOne(new LambdaQueryWrapper<PayMerchant>()
-                    .eq(PayMerchant::getMerchantNo, gamePayWayInfo.getMerchantNo()));
+                    .eq(PayMerchant::getMerchantNo, gamePayWayDTO.getMerchantNo()));
 
             BigDecimal amount = orderInfo.getAmount();
             LocalDateTime updateTime = payMerchantInfo.getDayUpdateDate();

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

@@ -13,8 +13,12 @@ import com.zanxiang.common.enums.HttpStatusEnum;
 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.PayMerchantDTO;
+import com.zanxiang.sdk.service.PayMerchantService;
 import com.zanxiang.sdk.util.HttpUtil;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
@@ -69,6 +73,9 @@ public class AliPayService extends PayBaseService {
      */
     private Config config;
 
+    @Autowired
+    private PayMerchantService payMerchantService;
+
     /**
      * 支付调起
      *
@@ -78,11 +85,14 @@ public class AliPayService extends PayBaseService {
     @Override
     public ResultMap create(ProductPayParamBO product) {
         this.attach = product.getAttach();
-        this.configInit(getPayConfig(product.getGameId(), product.getPayWay()));
+        this.configInit(getPayConfig(product.getGameId(), product.getPayWay(), product.getPayDevice()));
         //回调地址中拼接游戏具体支付方式
         this.returnUrl = this.returnUrlConfig + "?" + "gamePayWayId=" + attach.getGamePayWayId();
         this.notifyUrl = this.notifyUrlConfig + "?" + "gamePayWayId=" + attach.getGamePayWayId();
-        switch (product.getPayDevice()) {
+        //支付方式
+        int payDevice = product.getPayDevice().intValue();
+        //不同的支付途径
+        switch (payDevice) {
             case 1:
                 return this.pc(product);
             case 2:
@@ -115,7 +125,7 @@ public class AliPayService extends PayBaseService {
             //回调地址拼接参数不参加sign验证
             params.remove("gamePayWayId");
             //初始化配置
-            configInit(getPayConfig(gamePayWayId));
+            configInit(gamePayWayService.getById(Long.valueOf(gamePayWayId)));
             Boolean flag = Factory.Payment.Common().verifyNotify(params);
             if (flag) {
                 if (paySuccess(orderNo, params.get("total_amount"), params.get("trade_no"), gamePayWayId)) {
@@ -159,7 +169,7 @@ public class AliPayService extends PayBaseService {
             //回调地址拼接参数不参加sign验证
             params.remove("gamePayWayId");
             //初始化配置
-            configInit(getPayConfig(gamePayWayId));
+            configInit(gamePayWayService.getById(Long.valueOf(gamePayWayId)));
             //验证签名
             Boolean flag = Factory.Payment.Common().verifyNotify(params);
             if (flag) {
@@ -288,12 +298,17 @@ public class AliPayService extends PayBaseService {
     /**
      * 配置初始化
      *
-     * @param obj : 配置参数
+     * @param gamePayWayDTO : 游戏支付配置信息
      */
-    @Override
-    public void configInit(String obj) {
-        Config config = JSONObject.parseObject(obj, Config.class);
-        Factory.setOptions(config);
-        this.config = config;
+    private void configInit(GamePayWayDTO gamePayWayDTO) {
+        //商户信息
+        PayMerchantDTO payMerchantDTO = payMerchantService.getByMerchantNo(gamePayWayDTO.getMerchantNo());
+        //支付参数
+        Map<String, String> payConfigMap = JsonUtil.toMap(payMerchantDTO.getPayConfig(), Map.class, String.class);
+        //添加支付指定的应用id信息
+        payConfigMap.put("appId", gamePayWayDTO.getAppId());
+        //赋值配置信息
+        this.config = JsonUtil.toObj(JsonUtil.toString(payConfigMap), Config.class);
+        log.error("初始化的支付配置信息, config : {}", JsonUtil.toString(this.config));
     }
 }

+ 0 - 5
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/pay/MiPayService.java

@@ -240,9 +240,4 @@ public class MiPayService extends PayBaseService {
     public ResultMap synNotify(HttpServletRequest request) {
         return null;
     }
-
-    @Override
-    public void configInit(String obj) {
-
-    }
 }

+ 11 - 42
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/pay/PayBaseService.java

@@ -4,7 +4,6 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.zanxiang.common.domain.ResultMap;
 import com.zanxiang.common.enums.OrderStateEnum;
 import com.zanxiang.common.exception.BaseException;
-import com.zanxiang.mybatis.entity.GamePayWay;
 import com.zanxiang.mybatis.entity.Order;
 import com.zanxiang.sdk.domain.bo.PlatformOrderBO;
 import com.zanxiang.sdk.domain.bo.ProductPayAttachParamBO;
@@ -52,24 +51,23 @@ public abstract class PayBaseService {
     public ResultMap payCreate(ProductPayParamBO product) {
         try {
             //获取订单信息
-            PlatformOrderDTO info = orderService.info(product.getOutTradeNo());
-            if (info == null) {
+            PlatformOrderDTO platformOrderDTO = orderService.info(product.getOutTradeNo());
+            if (platformOrderDTO == null) {
                 throw new RuntimeException("订单不存在");
             }
-            String gameId = String.valueOf(info.getGameId());
+            Long gameId = platformOrderDTO.getGameId();
             //根据订单中游戏id,获取游戏的支付方式
-            GamePayWay payInfo = gamePayWayService.getPayWayToOrderPay(gameId, product.getPayWay());
-            product.setProductId(info.getProductId());
-            product.setSubject(info.getProductName());
+            GamePayWayDTO gamePayWayDTO = gamePayWayService.getGamePayWay(gameId, product.getPayWay(), product.getPayDevice());
+            product.setProductId(platformOrderDTO.getProductId());
+            product.setSubject(platformOrderDTO.getProductName());
             product.setGameId(gameId);
-            product.setTotalFee(String.valueOf(info.getAmount()));
-            product.setOutTradeNo(info.getOrderId());
-            product.setConfig(payInfo.getPayConfig());
+            product.setTotalFee(String.valueOf(platformOrderDTO.getAmount()));
+            product.setOutTradeNo(platformOrderDTO.getOrderId());
             ProductPayAttachParamBO attachBO = new ProductPayAttachParamBO();
             attachBO.setUserId(product.getUserId());
             attachBO.setOrderId(product.getOutTradeNo());
             attachBO.setPayWay(product.getPayWay());
-            attachBO.setGamePayWayId(String.valueOf(payInfo.getId()));
+            attachBO.setGamePayWayId(gamePayWayDTO.getId());
             product.setAttach(attachBO);
             this.attach = attachBO;
             ResultMap result = this.create(product);
@@ -107,18 +105,6 @@ public abstract class PayBaseService {
         return orderService.pay(bo);
     }
 
-    /**
-     * 获取支付配置
-     *
-     * @param gameId 游戏id
-     * @param payWay 支付方式
-     */
-    public String getPayConfig(String gameId, Integer payWay) {
-        GamePayWay payInfo = gamePayWayService.getPayWayToOrderPay(gameId, payWay);
-        this.attach.setGamePayWayId(String.valueOf(payInfo.getId()));
-        return payInfo.getPayConfig();
-    }
-
     /**
      * 获取游戏支付配置
      *
@@ -127,22 +113,12 @@ public abstract class PayBaseService {
      * @param payDeviceId 支付设备id
      * @return {@link GamePayWayDTO}
      */
-    public GamePayWayDTO getPayConfig(String gameId, Long payWayId, Long payDeviceId) {
+    public GamePayWayDTO getPayConfig(Long gameId, Long payWayId, Long payDeviceId) {
         GamePayWayDTO gamePayWayDTO = gamePayWayService.getGamePayWay(gameId, payWayId, payDeviceId);
-        this.attach.setGamePayWayId(String.valueOf(gamePayWayDTO.getId()));
+        this.attach.setGamePayWayId(gamePayWayDTO.getId());
         return gamePayWayDTO;
     }
 
-    /**
-     * 获取支付配置
-     *
-     * @param gamePayWay 支付方式id
-     */
-    public String getPayConfig(String gamePayWay) {
-        return gamePayWayService.getInfo(gamePayWay).getPayConfig();
-    }
-
-
     /**
      * 支付调起
      *
@@ -168,11 +144,4 @@ public abstract class PayBaseService {
      * @return : 返回回调结果
      */
     public abstract ResultMap synNotify(HttpServletRequest request);
-
-    /**
-     * 配置初始化
-     *
-     * @param obj : 配置参数
-     */
-    public abstract void configInit(String obj);
 }

+ 22 - 23
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/pay/WxPayService.java

@@ -6,15 +6,16 @@ import com.zanxiang.common.enums.DeleteEnum;
 import com.zanxiang.common.enums.HttpStatusEnum;
 import com.zanxiang.common.exception.BaseException;
 import com.zanxiang.module.util.JsonUtil;
-import com.zanxiang.module.util.bean.BeanUtil;
 import com.zanxiang.mybatis.entity.OrderPayParam;
 import com.zanxiang.sdk.constant.WxPayConstants;
 import com.zanxiang.sdk.domain.bo.ProductPayAttachParamBO;
 import com.zanxiang.sdk.domain.bo.ProductPayParamBO;
 import com.zanxiang.sdk.domain.bo.WxPayConfigBO;
 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.OrderPayParamService;
+import com.zanxiang.sdk.service.PayApplicationService;
 import com.zanxiang.sdk.service.PayMerchantService;
 import com.zanxiang.sdk.service.api.WxApiService;
 import com.zanxiang.sdk.util.HttpUtil;
@@ -88,13 +89,18 @@ public class WxPayService extends PayBaseService {
     @Autowired
     private PayMerchantService payMerchantService;
 
+    @Autowired
+    private PayApplicationService payApplicationService;
+
     @Override
     public ResultMap create(ProductPayParamBO product) {
         this.attach = product.getAttach();
         //初始化配置
-        this.configInit(getPayConfig(product.getGameId(), product.getPayWay()));
+        this.configInit(getPayConfig(product.getGameId(), product.getPayWay(), product.getPayDevice()));
+        //支付方式
+        int payDevice = product.getPayDevice().intValue();
         //不同的支付途径
-        switch (product.getPayDevice()) {
+        switch (payDevice) {
             case 1:
                 //PC
                 return this.pcPay(product);
@@ -124,7 +130,7 @@ public class WxPayService extends PayBaseService {
             log.info("回调参数中attach值为空");
             return null;
         }
-        configInit(getPayConfig(attachBO.getGamePayWayId()));
+        configInit(gamePayWayService.getById(attachBO.getGamePayWayId()));
         // 账号信息
         String key = config.getApiKey();
         // 判断签名是否正确
@@ -140,7 +146,7 @@ public class WxPayService extends PayBaseService {
             String orderNo = packageParams.get("out_trade_no");
             log.info("微信订单号{}付款成功", orderNo);
             if (paySuccess(attachBO.getOrderId(), String.valueOf(Float.parseFloat(packageParams.get("total_fee")) / 100),
-                    packageParams.get("transaction_id"), attachBO.getGamePayWayId())) {
+                    packageParams.get("transaction_id"), attachBO.getGamePayWayId().toString())) {
                 // 通知微信.异步确认成功.必写.不然会一直通知后台.八次之后就认为交易失败了
                 xmlMap.put("return_code", "SUCCESS");
                 xmlMap.put("return_msg", "OK");
@@ -222,7 +228,6 @@ public class WxPayService extends PayBaseService {
             miniMap.put("timeStamp", createTime);
             miniMap.put("nonceStr", nonceStr);
             miniMap.put("package", successMap);
-
             //保存订单支付参数
             orderPayParamService.save(OrderPayParam.builder()
                     .orderId(product.getOutTradeNo())
@@ -233,7 +238,6 @@ public class WxPayService extends PayBaseService {
                     .createTime(LocalDateTime.now())
                     .updateTime(LocalDateTime.now())
                     .build());
-
             //返回
             return ResultMap.ok(miniMap);
         } catch (Exception e) {
@@ -284,26 +288,21 @@ public class WxPayService extends PayBaseService {
         }
     }
 
-    /**
-     * 配置初始化
-     */
-    @Override
-    public void configInit(String obj) {
-        this.config = JsonUtil.toObj(obj, WxPayConfigBO.class);
-    }
-
-    /**
-     * 配置初始化
-     */
-    public void configInit(GamePayWayDTO gamePayWayDTO) {
+    private void configInit(GamePayWayDTO gamePayWayDTO) {
+        //商户信息
         PayMerchantDTO payMerchantDTO = payMerchantService.getByMerchantNo(gamePayWayDTO.getMerchantNo());
-        WxPayConfigBO payConfigBO = BeanUtil.copy(payMerchantDTO, WxPayConfigBO.class);
-        //todo :
-       // this.config = JsonUtil.toObj(obj, WxPayConfigBO.class);
+        WxPayConfigBO payConfigBO = JsonUtil.toObj(payMerchantDTO.getPayConfig(), WxPayConfigBO.class);
+        //支付应用信息
+        PayApplicationDTO payApplicationDTO = payApplicationService.getPayApplication(gamePayWayDTO.getAppId());
+        payConfigBO.setAppId(payApplicationDTO.getAppId());
+        payConfigBO.setAppSecret(payApplicationDTO.getAppSecret());
+        //赋值配置信息
+        this.config = payConfigBO;
+        log.error("初始化的支付配置信息, config : {}", JsonUtil.toString(this.config));
     }
 
     @Override
     public ResultMap synNotify(HttpServletRequest request) {
-        return null;
+        throw new BaseException("微信支付不存在同步回调!");
     }
 }