公司要做微支付,微信浏览器版本要大于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
}
}

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

[JavaCore] 微信手机浏览器版本判断的更多相关文章

  1. [完美]原生JS获取浏览器版本判断--支持Edge,IE,Chrome,Firefox,Opera,Safari,以及各种使用Chrome和IE混合内核的浏览器

    截至自2017-08-11,支持现世已出的几乎所有PC端浏览器版本判断. 受支持的PC端浏览器列表: Edge IE Chrome Firefox Opera Safari QQ浏览器 360系列浏览 ...

  2. javascript判断手机浏览器版本信息

    <script type="text/javascript"> /* * 智能机浏览器版本信息: * */ var browser={ versions:functio ...

  3. IE浏览器版本判断 HTML代码

    <!--[if IE 6.0]> <div id="noie6" style="z-index: 20002;border: 1px solid #F7 ...

  4. 在手机浏览器中判断App是否已安装

    从网上搜到之前手机中判断App是否安装可以通过onblur事件+定时器来实现. 但现在要做这个功能时,按网上的说法已经不能实现了.因为现在浏览器中打开App,window不会触发onblur事件. 在 ...

  5. IE浏览器版本判断

    <script type="text/javascript"> var browser=navigator.appName var b_version=navigato ...

  6. jquery判断浏览器版本插件,jquery-browser.js

    jquery判断浏览器版本插件,jquery-browser.js,jquery 判断是否为ie浏览器插件 >>>>>>>>>>>&g ...

  7. 识别手机浏览器代码【C#和JS两种语言】

    C# 识别手机浏览器代码: public static bool MobileBrowserDetect() { bool bismobile = false; try { #region 包含and ...

  8. 通过浏览器navigator判断浏览器版本或者手机类型&&判断微信访问

    javascript 的navigator属性,不常用,但是用处也不少,主要用处是在做浏览器兼容的问题的时候,现在有的网站已经不兼容IE6,用户假如用IE6浏览网页的话,会提示浏览器升级等信息.或者判 ...

  9. js判断手机浏览器操作系统和微信浏览器的方法

    做手机端的前端开发,少不了对手机平台的判断.如,对于app下载,就要判断在Android平台下就显示Android下载提示:在iOS平台下就显示iOS下载提示. 今天就为大家介绍一下用js判断手机客户 ...

随机推荐

  1. 谷歌Chrome浏览器开发者工具的基础功能

    上一篇我们学习了谷歌Chrome浏览器开发者工具的基础功能,下面介绍的是Chrome开发工具中最有用的面板Sources.Sources面板几乎是最常用到的Chrome功能面板,也是解决一般问题的主要 ...

  2. Yii中的错误及异常处理

    Yii中的错误及异常处理 Yii已经默认已经在CApplication上实现了异常和错误的接管,这是通过php的set_exception_handler, set_error_handler实现的. ...

  3. PhpExcel笔记,phpExcel中文帮助手册

    下面是总结的几个使用方法 include 'PHPExcel.php'; include 'PHPExcel/Writer/Excel2007.php'; //或者include 'PHPExcel/ ...

  4. jQuery数组($.each,$.grep,$.map,$.merge,$.inArray,$.unique,$.makeArray)处理函数详解

    1. $.each(array, [callback]) 遍历[常用] 解释: 不同于例遍jQuery对象的$().each()方法,此方法可用于例遍任何对象.回调函数拥有两个参数:第一个为对象的成员 ...

  5. oracle数据库两表数据比较

    本文转自http://blog.sina.com.cn/s/blog_3ff4e1ad0100tdl2.html 1 引言 在程序设计的过程中,往往会遇到两个记录集的比较.如华东电网PMS接口中实现传 ...

  6. ACM/ICPC 之 网络流入门-Ford Fulkerson与SAP算法(POJ1149-POJ1273)

    第一题:按顾客访问猪圈的顺序依次构图(顾客为结点),汇点->第一个顾客->第二个顾客->...->汇点 //第一道网络流 //Ford-Fulkerson //Time:47M ...

  7. event.srcElement 用法笔记e.target

    event.srcElement 可以捕获当前事件作用的对象,如event.srcElement.tagName可以捕获活动标记名称. 注意获取的标记都以大写表示,如"TD",&q ...

  8. SQL Server order by语句学习回顾

    主要学习: 1.以指定的次序返回查询结果 2.按多个字段排序 3.按字串排序 4.处理排序空值 5.根据数据项的键排序 具体实例1---以指定的次序返回查询结果 n使用ORDER BY子句可以对结果集 ...

  9. UVA 11827 Maximum GCD

    F - Maximum GCD Time Limit:1000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Given the ...

  10. 无限轮播的N+2 策略

    N张照片把contentsSize设置为N+2个图片的宽度,例子如下,两端填充如图,当处于一端时,且即将进入循环状态的时候,如第二张图,从状态1滑动到状态2,在滑动结束的时候,将当前的位置直接转到状态 ...