zoukankan      html  css  js  c++  java
  • [JavaCore] 微信手机浏览器版本判断

    公司要做微支付,微信浏览器版本要大于5

    package com.garinzhang.web.weixin;
    
    import org.apache.commons.lang.StringUtils;
    import org.apache.commons.lang.math.NumberUtils;
    
    /**
     *类说明
     *@author Garin Zhang
     */
    public class WchatUtil {
    
        public static final String WEI_XIN_BROWSER = "MicroMessenger/";
        public static final int WEI_XIN_LEGAL_VERSION = 5;
        /**
         * 正则使用不熟练,只能自己苦逼解析
         * @param userAgent
         * @return
         */
        public static boolean isLegalVersion(String userAgent) {
            // 判断是否为微信,并对支付渠道做相应处理
            // "Mozilla/5.0(iphone;CPU iphone OS 5_1_1 like Mac OS X) AppleWebKit/534.46(KHTML,like Geocko) Mobile/9B206 MicroMessenger/5.0"
            // String userAgent = request.getHeader("user-agent");
            boolean isLegalVersion = false;
            if(StringUtils.isNotBlank(userAgent)) {
                // 判断是否为微信
                int position = userAgent.indexOf(WEI_XIN_BROWSER);
                userAgent.matches(WEI_XIN_BROWSER);
                if(position != -1) {
                    String versionStr = userAgent.substring(position + WEI_XIN_BROWSER.length());
                    String[] splitVersion = versionStr.split("\.");
    
                    // 程序解析
                    if(splitVersion != null && splitVersion.length > 0) {
                        String mainVersion = splitVersion[0];
                        // 判断主版本号大于5
                        if(NumberUtils.isNumber(mainVersion)) {
                            int i = Integer.valueOf(mainVersion);
                            if(i >= WEI_XIN_LEGAL_VERSION) {
                                isLegalVersion = true;
                            }
                        }
                    }
                }
            }
            System.out.println("Agent: " + userAgent + ", isLegalVersion: " + isLegalVersion);
            return isLegalVersion;
        }
        public static void main(String[] args) {
            // 本来准备直接按照如下比较,结果发现当主版本号超过10的时候,就不灵了
            System.out.println("5.0".compareTo("5.0.2"));   // =0
            System.out.println("5.0".compareTo("10.1"));    // >0
            System.out.println("5.0".compareTo("0"));       // >0
            System.out.println("5.0".compareTo("4.0.2"));   // >0
            System.out.println("5.0".compareTo("5.1.2"));   // <0
    
            // 写个方法单独解析
            isLegalVersion("Mobile/9B206 MicroMessenger/5.0");  // true
            isLegalVersion("Mobile/9B206 MicroMessenger/5.0.2");// true
            isLegalVersion("Mobile/9B206 MicroMessenger/4.0");  // false
            isLegalVersion("Mobile/9B206 MicroMessenger/5.1");  // true
            isLegalVersion("Mobile/9B206 MicroMessenger/10.1"); // true
            isLegalVersion("Mobile/9B206 MicroMessenger/0.1");  // false
        }
    }

    正则版本,待正则熟练之后再补充

  • 相关阅读:
    Hadoop-2.4.1学习之Map任务源代码分析(下)
    微软面试题之两个链表的第一个公共结点
    再次轻度破解EXE文件
    源泉书签,助您管理海量收藏。www.yuanquanshuqian.com,今日更新:多标签功能已实现
    经验总结17--submitbutton,ajax提交
    python学习笔记(六)文件夹遍历,异常处理
    vue 数据传递的方法
    Vue 组件之间的数据传递
    Springboot文件下载
    springboot获取URL请求参数的几种方法
  • 原文地址:https://www.cnblogs.com/garinzhang/p/java_weixin_payment_browser_version.html
Copyright © 2011-2022 走看看