Kaynağa Gözat

feat : 对接调试修改

bilingfeng 2 yıl önce
ebeveyn
işleme
980e671464

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

@@ -127,7 +127,7 @@ public class LoginServiceImpl implements RegisterLoginService {
         //查询微信小游戏信息
         GameAppletDTO gameAppletDTO = gameAppletService.getByGameId(userData.getGameId());
         //获取用户微信小游戏的openId
-        String openId = wxApiService.getOpenId(param.getCode(), gameAppletDTO.getAppId(), gameAppletDTO.getAppSecret());
+        String openId = wxApiService.getAppletOpenId(param.getCode(), gameAppletDTO.getAppId(), gameAppletDTO.getAppSecret());
         //根据openId查询用户
         User user = userService.getOne(new LambdaQueryWrapper<User>()
                 .eq(User::getGameId, userData.getGameId()).eq(User::getOpenId, openId));

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

@@ -31,14 +31,14 @@ public class WxApiService {
     private RedisUtil<String> redisUtil;
 
     /**
-     * 获取用户应用openId
+     * 小程序/小游戏获取用户应用openId
      *
      * @param code   : 授权code
      * @param appId  : 应用id
      * @param secret : 应用密钥
      * @return {@link String}
      */
-    public String getOpenId(String code, String appId, String secret) {
+    public String getAppletOpenId(String code, String appId, String secret) {
         // 请求微信服务器,使用code获取openid
         Map<String, String> paramMap = new HashMap<>(4);
         paramMap.put("appid", appId);
@@ -56,6 +56,32 @@ public class WxApiService {
         return userMap.get("openid");
     }
 
+    /**
+     * 公众号获取用户应用openId
+     *
+     * @param code   : 授权code
+     * @param appId  : 应用id
+     * @param secret : 应用密钥
+     * @return {@link String}
+     */
+    public String getMpOpenId(String code, String appId, String secret) {
+        // 请求微信服务器,使用code获取openid
+        Map<String, String> paramMap = new HashMap<>(4);
+        paramMap.put("appid", appId);
+        paramMap.put("secret", secret);
+        paramMap.put("code", code);
+        paramMap.put("grant_type", "authorization_code");
+        // 发送请求
+        String url = URIUtil.fillUrlParams("https://api.weixin.qq.com/sns/oauth2/access_token", paramMap, Boolean.FALSE);
+        String sr = restTemplate.getForObject(url, String.class);
+        // 解析相应内容(转换成json对象)
+        Map<String, String> userMap = JsonUtil.toMap(sr, Map.class, String.class);
+        if (userMap == null || Strings.isBlank(userMap.get("openid"))) {
+            throw new BaseException("获取用户公众号openId失败");
+        }
+        return userMap.get("openid");
+    }
+
     /**
      * 获取访问令牌
      *

+ 6 - 22
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/pay/MiPayService.java

@@ -6,7 +6,6 @@ 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;
@@ -17,9 +16,9 @@ import com.zanxiang.sdk.domain.bo.ProductPayParamBO;
 import com.zanxiang.sdk.domain.dto.PlatformOrderDTO;
 import com.zanxiang.sdk.service.GamePayWayService;
 import com.zanxiang.sdk.service.OrderService;
+import com.zanxiang.sdk.service.api.WxApiService;
 import com.zanxiang.sdk.util.WxPayUtil;
 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;
@@ -41,6 +40,9 @@ import java.util.Objects;
 @Service
 public class MiPayService extends PayBaseService {
 
+    @Autowired
+    private WxApiService wxApiService;
+
     @Autowired
     private OrderService orderService;
 
@@ -81,7 +83,8 @@ public class MiPayService extends PayBaseService {
         }
         //米大师支付配置
         MiPayConfig miPayConfig = JSONObject.parseObject(one.getPayConfig(), MiPayConfig.class);
-        String openId = this.getOpenId(code, miPayConfig.getWxAppId());
+        //获取用户openId
+        String openId = wxApiService.getAppletOpenId(code, miPayConfig.getWxAppId(), "a8df1c1146f89f06d07d1e494f845ede");
         //获取米大师钱包余额
         Long balance = this.midasGetBalance(openId, miPayConfig);
         //返回参数
@@ -228,25 +231,6 @@ public class MiPayService extends PayBaseService {
         }
     }
 
-    private String getOpenId(String code, String appId) {
-        // 请求微信服务器,使用code获取openid
-        Map<String, String> paramMap = new HashMap<>(4);
-        paramMap.put("appid", appId);
-        paramMap.put("secret", "a8df1c1146f89f06d07d1e494f845ede");
-        paramMap.put("js_code", code);
-        paramMap.put("grant_type", "authorization_code");
-        // 发送请求
-        String url = URIUtil.fillUrlParams("https://api.weixin.qq.com/sns/jscode2session", paramMap, Boolean.FALSE);
-        String sr = restTemplate.getForObject(url, String.class);
-        // 解析相应内容(转换成json对象)
-        Map<String, String> userMap = JsonUtil.toMap(sr, Map.class, String.class);
-        if (userMap == null || Strings.isBlank(userMap.get("openid"))) {
-            throw new BaseException("小程序支付获取用户openId为空");
-        }
-        return userMap.get("openid");
-    }
-
-
     @Override
     public String notify(HttpServletRequest request, HttpServletResponse response) {
         return null;

+ 7 - 16
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/pay/WxPayService.java

@@ -5,7 +5,6 @@ import com.zanxiang.common.domain.ResultMap;
 import com.zanxiang.common.enums.DeleteEnum;
 import com.zanxiang.common.enums.HttpStatusEnum;
 import com.zanxiang.common.exception.BaseException;
-import com.zanxiang.common.utils.URIUtil;
 import com.zanxiang.module.util.JsonUtil;
 import com.zanxiang.mybatis.entity.OrderPayParam;
 import com.zanxiang.sdk.constant.WxPayConstants;
@@ -13,6 +12,7 @@ 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.service.OrderPayParamService;
+import com.zanxiang.sdk.service.api.WxApiService;
 import com.zanxiang.sdk.util.HttpUtil;
 import com.zanxiang.sdk.util.WxPayUtil;
 import com.zanxiang.sdk.util.XmlUtil;
@@ -82,6 +82,9 @@ public class WxPayService extends PayBaseService {
     @Autowired
     private OrderPayParamService orderPayParamService;
 
+    @Autowired
+    private WxApiService wxApiService;
+
     @Override
     public ResultMap create(ProductPayParamBO product) {
         this.attach = product.getAttach();
@@ -191,22 +194,10 @@ public class WxPayService extends PayBaseService {
     private ResultMap miniAppPay(ProductPayParamBO product) {
         try {
             Map<Object, Object> miniMap = new HashMap<>(5);
-            // 请求微信服务器,使用code获取openid
-            Map<String, String> paramMap = new HashMap<>(4);
-            paramMap.put("appid", config.getAppId());
-            paramMap.put("secret", config.getAppSecret());
-            paramMap.put("js_code", product.getCode());
-            paramMap.put("grant_type", "authorization_code");
-            // 发送请求
-            String url = URIUtil.fillUrlParams("https://api.weixin.qq.com/sns/jscode2session", paramMap, Boolean.FALSE);
-            String sr = restTemplate.getForObject(url, String.class);
-            // 解析相应内容(转换成json对象)
-            Map<String, String> userMap = JsonUtil.toMap(sr, Map.class, String.class);
-            if (userMap == null || Strings.isBlank(userMap.get("openid"))) {
-                throw new BaseException("小程序支付获取用户openId为空");
-            }
+            //获取用户openId
+            String openId = wxApiService.getMpOpenId(product.getCode(), config.getAppId(), config.getAppSecret());
             //下单
-            Map<String, String> successMap = this.unifiedOrder(product, WX_PAY_JSAPI, userMap.get("openid"));
+            Map<String, String> successMap = this.unifiedOrder(product, WX_PAY_JSAPI, openId);
             // 支付参数
             String prepayId = successMap.get("prepay_id");
             // 随机字符串