公司要做微支付,微信浏览器版本要大于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. PHP socket编程需要了解的一些基本知识

    前面讲到了 fsockopen 的各种情况,其中涉及了很多其它知识,比如chunked分段传输,Keep-Alive,HTTP头字段等额外的知识,如果对这些知识一知半解,会影响对 PHP 的 sock ...

  2. C#中委托演变的的三个阶段

    命名函数 匿名方法 lambda表达式 委托是一种可以把引用存储为函数的类型,定义了委托后,就可以声明该委托类型的变量,接着把这个变量初始化为与委托有相同返回类型和参数列表的函数引用,之后就可以使用委 ...

  3. sharepoint2013隐藏左侧导航栏更换新的

    $("#zz16_V4QuickLaunchMenu").hide()//隐藏 更换新的 <script type="text/javascript" s ...

  4. windows下安装Apache 64bit

    文件下载:http://pan.baidu.com/s/1c0oDjFE 一.Apache的安装 http://www.blogjava.net/greatyuqing/archive/2013/02 ...

  5. Calendar类测试

    public static void main(String[] args) throws ParseException { // 字符串转换日期格式 // DateFormat fmtDateTim ...

  6. 设计算法,求AB两个整数集合的交集

    [本文链接] http://www.cnblogs.com/hellogiser/p/ab-set-intersection.html [分析] 思路1:排序法 对集合A和集合B进行排序(升序,用快排 ...

  7. hdu3652

    基本的数位dp,需要记录前面除以13的余数. #include <cstdio> #include <cstring> using namespace std; #define ...

  8. c++ vector struct 使用

    1. //test.h #include <string> using namespace std; struct AA { string a1; string a2; string a3 ...

  9. 基础01 dos命令

    常见的dos命令: 盘符:        进入指定的盘下面. 操作文件夹:                   dir                                   列出当前控制 ...

  10. 移动端设页面根目录HTML的字体大小

    @media (max-width: 359px){ html { font-size: 62.5%; }}@media (min-width: 360px) and (max-width: 374p ...