浏览代码

客户端操作系统识别

xufeng 2 年之前
父节点
当前提交
0f8aaece2a

+ 17 - 13
game-module/game-sdk/src/main/java/com/zanxiang/sdk/common/util/DeviceCheckUtil.java

@@ -105,18 +105,13 @@ public class DeviceCheckUtil {
      * @return
      */
     public static String getDeviceSystem(String userAgent) {
+
         if (StringUtils.isEmpty(userAgent)) {
             return OsEnum.SYSTEM_OTHER.getOs();
         }
-        //window
+        //统一转小写
         userAgent = userAgent.toLowerCase(Locale.ROOT);
-        if (userAgent.contains(OsEnum.SYSTEM_WINDOW.getOs())) {
-            return OsEnum.SYSTEM_WINDOW.getOs();
-        }
-        //linux
-        if (userAgent.contains(OsEnum.SYSTEM_LINUX.getOs())) {
-            return OsEnum.SYSTEM_LINUX.getOs();
-        }
+
         boolean isMobile = isMobile(userAgent);
         if (isMobile) {
             // android
@@ -127,12 +122,21 @@ public class DeviceCheckUtil {
             if (isIOS(userAgent)) {
                 return OsEnum.SYSTEM_IOS.getOs();
             }
-        } else {
-            //mac
-            if (userAgent.contains(OsEnum.SYSTEM_MAC.getOs())) {
-                return OsEnum.SYSTEM_MAC.getOs();
-            }
         }
+        //mac
+        if (userAgent.contains(OsEnum.SYSTEM_MAC.getOs())) {
+            return OsEnum.SYSTEM_MAC.getOs();
+        }
+
+        //window
+        if (userAgent.contains(OsEnum.SYSTEM_WINDOW.getOs())) {
+            return OsEnum.SYSTEM_WINDOW.getOs();
+        }
+        //linux
+        if (userAgent.contains(OsEnum.SYSTEM_LINUX.getOs())) {
+            return OsEnum.SYSTEM_LINUX.getOs();
+        }
+
 
         return OsEnum.SYSTEM_OTHER.getOs();
     }

+ 37 - 34
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/pay/AlipayServiceImpl.java

@@ -201,44 +201,47 @@ public class AlipayServiceImpl extends PayService implements OrderPayService {
                 HashMap<String, String> result = new HashMap<>();
                 String body = response.getBody();
                 result.put("fromData", body);
-                //安卓与ios系统时才单独获取app支付地址
-                if (product.getDeviceSystem().contains(OsEnum.SYSTEM_ANDROID.getOs()) || product.getDeviceSystem().contains(OsEnum.SYSTEM_IOS.getOs())) {
-                    Pattern pattern = Pattern.compile("action=\"(.*)\">", Pattern.CASE_INSENSITIVE);
-                    Matcher matcher = pattern.matcher(body);
-                    if (matcher.find()) {
-                        String url = matcher.group();
-                        url = url.substring(8, url.length() - 2);
-                        System.out.println(url);
-                        Pattern param = Pattern.compile("value=\"(.*)\">", Pattern.CASE_INSENSITIVE);
-                        Matcher paraMatcher = param.matcher(body);
-                        if (paraMatcher.find()) {
-                            String paramData = paraMatcher.group();
-                            paramData = paramData.substring(7, paramData.length() - 2);
-                            paramData = paramData.replace("&quot;", "\"");
-                            String mobileClientUrl = HttpUtil.postDataUrl(url, "biz_content=" + paramData, null);
-                            System.out.println(mobileClientUrl);
-                            String alipayContentBody = HttpUtil.postData(mobileClientUrl, "");
-                            Pattern mobileClientParam = Pattern.compile("\\{\"queryResultUrl\".*?\"}", Pattern.CASE_INSENSITIVE);
-                            Matcher mobileClientMatcher = mobileClientParam.matcher(alipayContentBody);
-                            System.out.println(mobileClientMatcher);
-                            String deeplink_android = "alipays://platformapi/startApp?appId=20000125&orderSuffix=";
-                            String deeplink_ios = "alipay://alipayclient/?";
-                            if (mobileClientMatcher.find()) {
-                                //示例:{"queryResultUrl":"/h5/h5RoutePayResultQuery.json?h5_route_token=GZ00rxXoidjHj2airAK8nhYz70MUBsmobilecashierGZ00","invokeAlipayData":{"dataString":"h5_route_token=\"GZ00rxXoidjHj2airAK8nhYz70MUBsmobilecashierGZ00\"&is_h5_route=\"true\""}
-                                String pageData = mobileClientMatcher.group() + "}";
-                                JSONObject jsonObject = JSONObject.parseObject(pageData);
-                                Object invokeAlipayData = jsonObject.get("invokeAlipayData");
-                                String dataString = JSONObject.parseObject(invokeAlipayData.toString()).get("dataString").toString();
-                                deeplink_android += URLEncoder.encode(dataString, "utf-8");
-                                deeplink_ios += URLEncoder.encode(pageData, "utf-8");
-                                if (product.getDeviceSystem().contains(OsEnum.SYSTEM_ANDROID.getOs())) {
-                                    result.put("appLink", deeplink_android);
-                                } else {
-                                    result.put("appLink", deeplink_ios);
+                try {
+                    //安卓与ios系统时才单独获取app支付地址
+                    if (product.getDeviceSystem().contains(OsEnum.SYSTEM_ANDROID.getOs()) || product.getDeviceSystem().contains(OsEnum.SYSTEM_IOS.getOs())) {
+                        Pattern pattern = Pattern.compile("action=\"(.*)\">", Pattern.CASE_INSENSITIVE);
+                        Matcher matcher = pattern.matcher(body);
+                        if (matcher.find()) {
+                            String url = matcher.group();
+                            url = url.substring(8, url.length() - 2);
+                            Pattern param = Pattern.compile("value=\"(.*)\">", Pattern.CASE_INSENSITIVE);
+                            Matcher paraMatcher = param.matcher(body);
+                            if (paraMatcher.find()) {
+                                String paramData = paraMatcher.group();
+                                paramData = paramData.substring(7, paramData.length() - 2);
+                                paramData = paramData.replace("&quot;", "\"");
+                                String mobileClientUrl = HttpUtil.postDataUrl(url, "biz_content=" + paramData, null);
+                                System.out.println(mobileClientUrl);
+                                String alipayContentBody = HttpUtil.postData(mobileClientUrl, "");
+                                Pattern mobileClientParam = Pattern.compile("\\{\"queryResultUrl\".*?\"}", Pattern.CASE_INSENSITIVE);
+                                Matcher mobileClientMatcher = mobileClientParam.matcher(alipayContentBody);
+                                System.out.println(mobileClientMatcher);
+                                String deeplink_android = "alipays://platformapi/startApp?appId=20000125&orderSuffix=";
+                                String deeplink_ios = "alipay://alipayclient/?";
+                                if (mobileClientMatcher.find()) {
+                                    //示例:{"queryResultUrl":"/h5/h5RoutePayResultQuery.json?h5_route_token=GZ00rxXoidjHj2airAK8nhYz70MUBsmobilecashierGZ00","invokeAlipayData":{"dataString":"h5_route_token=\"GZ00rxXoidjHj2airAK8nhYz70MUBsmobilecashierGZ00\"&is_h5_route=\"true\""}
+                                    String pageData = mobileClientMatcher.group() + "}";
+                                    JSONObject jsonObject = JSONObject.parseObject(pageData);
+                                    Object invokeAlipayData = jsonObject.get("invokeAlipayData");
+                                    String dataString = JSONObject.parseObject(invokeAlipayData.toString()).get("dataString").toString();
+                                    deeplink_android += URLEncoder.encode(dataString, "utf-8");
+                                    deeplink_ios += URLEncoder.encode(pageData, "utf-8");
+                                    if (product.getDeviceSystem().contains(OsEnum.SYSTEM_ANDROID.getOs())) {
+                                        result.put("appLink", deeplink_android);
+                                    } else {
+                                        result.put("appLink", deeplink_ios);
+                                    }
                                 }
                             }
                         }
                     }
+                } catch (Exception e) {
+                    logger.error("获取支付包app支付时发生异常,已通过from表单形式调起支付 fromData:{}, e:{}", body, e);
                 }
                 return ResultMap.ok(product.getPayDevice(), result);
             }