Browse Source

fix : 米大师支付增加兑换比例

bilingfeng 1 year ago
parent
commit
55adb3a010

+ 1 - 1
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/SDKApplication.java

@@ -23,7 +23,7 @@ public class SDKApplication {
 
     public static void main(String[] args) {
         SpringApplication.run(SDKApplication.class, args);
-        System.out.println("赞象SDK服务启动成功 <新增用户角色活跃信息上报接口2> ( ´・・)ノ(._.`) \n" +
+        System.out.println("赞象SDK服务启动成功 <米大师支付增加兑换比例> ( ´・・)ノ(._.`) \n" +
                 " ___________ _   __\n" +
                 "/  ___|  _  \\ | / /\n" +
                 "\\ `--.| | | | |/ / \n" +

+ 1 - 5
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/controller/PayController.java

@@ -7,7 +7,6 @@ import com.zanxiang.game.module.sdk.pojo.param.ProductPayParam;
 import com.zanxiang.game.module.sdk.pojo.param.UserData;
 import com.zanxiang.game.module.sdk.pojo.vo.PayParamVO;
 import com.zanxiang.game.module.sdk.service.IOrderPayService;
-import com.zanxiang.game.module.sdk.service.pay.MiPayService;
 import com.zanxiang.module.util.JsonUtil;
 import com.zanxiang.module.util.pojo.ResultVO;
 import io.swagger.annotations.Api;
@@ -38,9 +37,6 @@ public class PayController {
     @Autowired
     private IOrderPayService orderPayService;
 
-    @Autowired
-    private MiPayService miPayService;
-
     @UnSignCheck
     @ApiOperation(value = "获取客服支付参数")
     @GetMapping(value = "/param/applet")
@@ -82,7 +78,7 @@ public class PayController {
         return orderPayService.notify(request, response, PayWayEnum.WX_PAY.getPayWayId());
     }
 
-    @ApiOperation(value = "米大师支付异步回调")
+    @ApiOperation(value = "米大师支付异步回调<接口已弃用>")
     @RequestMapping(value = "/miPayNotify", method = RequestMethod.GET)
     public ResultVO<Map> miPayNotify(@RequestParam String orderId, @ValidLogin UserData userData) {
         //返回参数

+ 5 - 0
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/pojo/dto/GameAppletDTO.java

@@ -119,6 +119,11 @@ public class GameAppletDTO {
          * 米大师沙箱AppKey
          */
         private String appKeyDev;
+
+        /**
+         * 兑换比例
+         */
+        private Integer scale;
     }
 
     @Data

+ 5 - 0
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/pojo/dto/MiPayConfigDTO.java

@@ -53,6 +53,11 @@ public class MiPayConfigDTO {
      */
     private String appKeyDev;
 
+    /**
+     * 兑换比例
+     */
+    private Integer scale;
+
     /**
      * 根据环境返回对应的密钥
      *

+ 18 - 8
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/pay/MiPayService.java

@@ -103,7 +103,7 @@ public class MiPayService extends PayBaseService {
         payParamMap.put("zoneId", "1");
         payParamMap.put("offerId", config.getOfferId());
         payParamMap.put("env", String.valueOf(this.isSand));
-        payParamMap.put("buyQuantity", orderInfo.getAmount().intValue());
+        payParamMap.put("buyQuantity", this.getOrderAmount(orderInfo.getAmount()));
         payParamMap.put("status", "1");
         payParamMap.put("balance", String.valueOf(balance));
         payParamMap.put("orderId", product.getOutTradeNo());
@@ -143,7 +143,7 @@ public class MiPayService extends PayBaseService {
         return Long.valueOf(resultMap.get("balance"));
     }
 
-    private Tuple2<Long, String> midasPay(String openId, String sessionKey, BigDecimal amount, String orderId) {
+    private Tuple2<Long, String> midasPay(String openId, String sessionKey, long amount, String orderId) {
         //接口参数
         Map<String, Object> postBodyMap = new HashMap<>(7);
         postBodyMap.put("openid", openId);
@@ -151,7 +151,7 @@ public class MiPayService extends PayBaseService {
         postBodyMap.put("ts", System.currentTimeMillis() / 1000);
         postBodyMap.put("zone_id", "1");
         postBodyMap.put("env", this.isSand);
-        postBodyMap.put("amount", amount.intValue());
+        postBodyMap.put("amount", amount);
         postBodyMap.put("bill_no", orderId);
         String postBody = JsonUtil.toString(postBodyMap);
         //接口token
@@ -210,6 +210,7 @@ public class MiPayService extends PayBaseService {
                 .offerId(miPayConfigBean.getAppId())
                 .appKey(miPayConfigBean.getAppKey())
                 .appKeyDev(miPayConfigBean.getAppKeyDev())
+                .scale(miPayConfigBean.getScale())
                 .build();
     }
 
@@ -254,17 +255,19 @@ public class MiPayService extends PayBaseService {
         this.configInit(platformOrderDTO.getGameId());
         //获取用户openId
         UserDTO userDTO = userService.getUserByUserId(platformOrderDTO.getUserId());
-        String openId = userDTO.getOpenId();
         String sessionKey = userDTO.getSessionKey();
+        String openId = userDTO.getOpenId();
         //获取米大师钱包余额
         Long balance = this.midasGetBalance(openId, sessionKey);
+        //订单代币金额
+        long orderAmount = this.getOrderAmount(platformOrderDTO.getAmount());
         //余额不足, 无法扣除
-        if (balance < platformOrderDTO.getAmount().longValue()) {
+        if (balance < orderAmount) {
             log.error("米大师游戏币不足, 无法扣除! balance : {}, orderId : {}", balance, orderId);
             throw new BaseException("米大师游戏币不足, 无法扣除!");
         }
         //余额充足, 直接扣除
-        Tuple2<Long, String> tuple2 = this.midasPay(openId, sessionKey, platformOrderDTO.getAmount(), platformOrderDTO.getOrderId());
+        Tuple2<Long, String> tuple2 = this.midasPay(openId, sessionKey, orderAmount, platformOrderDTO.getOrderId());
         //支付成功
         this.paySuccess(platformOrderDTO.getOrderId(), platformOrderDTO.getAmount().toString(), tuple2.getT2());
         //返回参数
@@ -292,13 +295,15 @@ public class MiPayService extends PayBaseService {
         String sessionKey = userDTO.getSessionKey();
         //获取米大师钱包余额
         Long balance = this.midasGetBalance(openId, sessionKey);
+        //订单代币金额
+        long orderAmount = this.getOrderAmount(platformOrderDTO.getAmount());
         //余额不足, 无法扣除
-        if (balance < platformOrderDTO.getAmount().longValue()) {
+        if (balance < orderAmount) {
             log.error("米大师游戏币不足, 无法扣除! balance : {}, orderId : {}", balance, orderId);
             return Boolean.FALSE;
         }
         //余额充足, 直接扣除
-        Tuple2<Long, String> tuple2 = this.midasPay(openId, sessionKey, platformOrderDTO.getAmount(), platformOrderDTO.getOrderId());
+        Tuple2<Long, String> tuple2 = this.midasPay(openId, sessionKey, orderAmount, platformOrderDTO.getOrderId());
         log.error("米大师余额扣除返回, orderId : {}, tuple2 : {}", orderId, JsonUtil.toString(tuple2));
         //支付成功逻辑
         this.miPaySuccess(platformOrderDTO.getOrderId(), platformOrderDTO.getAmount().toString(), weChatPayInfoTuple2);
@@ -339,4 +344,9 @@ public class MiPayService extends PayBaseService {
                 .set(Order::getUpdateTime, LocalDateTime.now())
                 .eq(Order::getOrderId, orderId));
     }
+
+    private long getOrderAmount(BigDecimal amount) {
+        int scale = this.config.getScale() == null ? 1 : this.config.getScale();
+        return amount.longValue() * scale;
+    }
 }