github.com/chanxuehong/wechat@v0.0.0-20230222024006-36f0325263cd/util/wxver.go (about)

     1  package util
     2  
     3  import (
     4  	"fmt"
     5  	"regexp"
     6  	"strconv"
     7  	"strings"
     8  )
     9  
    10  // 获取微信客户端的版本.
    11  //
    12  //	userAgent: 微信内置浏览器的 User-Agent;
    13  //	x, y, z, w:   如果微信版本为 5.3.1.2 则有 x==5, y==3, z==1, w==2
    14  //	err:       错误信息
    15  func WXVersion(userAgent string) (x, y, z, w int, err error) {
    16  	userAgent = versionRegexp.FindString(userAgent)
    17  	if userAgent == "" {
    18  		err = fmt.Errorf("不是有效的微信浏览器 User-Agent: %s", userAgent)
    19  		return
    20  	}
    21  	userAgent = userAgent[len("MicroMessenger/"):]
    22  
    23  	strArr := strings.Split(userAgent, ".")
    24  	verArr := make([]int, len(strArr))
    25  
    26  	for i, str := range strArr {
    27  		verArr[i], err = strconv.Atoi(str)
    28  		if err != nil {
    29  			err = fmt.Errorf("不是有效的微信浏览器 User-Agent: %s", userAgent)
    30  			return
    31  		}
    32  	}
    33  
    34  	switch len(verArr) {
    35  	default:
    36  		fallthrough
    37  	case 4:
    38  		x = verArr[0]
    39  		y = verArr[1]
    40  		z = verArr[2]
    41  		w = verArr[3]
    42  		return
    43  	case 3:
    44  		x = verArr[0]
    45  		y = verArr[1]
    46  		z = verArr[2]
    47  		return
    48  	case 2:
    49  		x = verArr[0]
    50  		y = verArr[1]
    51  		return
    52  	case 1:
    53  		x = verArr[0]
    54  		return
    55  	}
    56  }
    57  
    58  // Mozilla/5.0 (Linux; Android 4.4.4; Che1-CL10 Build/Che1-CL10; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.49 Mobile MQQBrowser/6.2 TBS/043128 Safari/537.36 MicroMessenger/6.5.7.1041 NetType/WIFI Language/zh_CN
    59  var versionRegexp = regexp.MustCompile(`MicroMessenger/\d+(\.\d+)*`)