Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
S
ShenghuoquanBusiness
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
bp
ShenghuoquanBusiness
Commits
c37161ea
Commit
c37161ea
authored
Jul 27, 2021
by
yinjiacheng
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
update B&C端区分appId C端请求B端Server增加uid参数
parent
86f8c9c8
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
115 additions
and
250 deletions
+115
-250
AppConfig.kt
...on/src/main/java/com/yidian/bcommon/constant/AppConfig.kt
+3
-7
HttpParamsUtils.kt
.../src/main/java/com/yidian/bcommon/http/HttpParamsUtils.kt
+32
-46
BCommonManager.kt
...on/src/main/java/com/yidian/bcommon/sdk/BCommonManager.kt
+76
-0
ToolsUtil.kt
...ommon/src/main/java/com/yidian/bcommon/utils/ToolsUtil.kt
+0
-187
MerchantCenterActivity.kt
...uoquan/bmanagercenter/ui/center/MerchantCenterActivity.kt
+3
-9
BaseInitConfig.kt
...main/java/com/yidian/shenghuoquan/broot/BaseInitConfig.kt
+1
-1
No files found.
CommonLib/BCommon/src/main/java/com/yidian/bcommon/constant/AppConfig.kt
View file @
c37161ea
...
...
@@ -10,14 +10,10 @@ class AppConfig {
companion
object
{
// 是否开启加密
const
val
IS_ENCRYPT
=
BuildConfig
.
IS_ENCRYPT
const
val
KUANGSHI_ALIVE_API_KEY
=
"32f9XIsReV4S15Ck_Sa3ky43XgAHUB9v"
const
val
KUANGSHI_SECRET
=
"usZbQYdI4PQeXhMftsRfHK2msj0DmSIl"
// file
const
val
FileProvider
=
BuildConfig
.
PROVIDER_NAME
// 渠道
const
val
appid
=
"merchant-b"
// 业务线
const
val
appIdMerchantB
=
"merchant-b"
const
val
appIdMerchantC
=
"merchant-c"
// 客户端版本号
const
val
cv
=
BuildConfig
.
VERSION_NAME
...
...
CommonLib/BCommon/src/main/java/com/yidian/bcommon/http/HttpParamsUtils.kt
View file @
c37161ea
...
...
@@ -2,43 +2,45 @@ package com.yidian.bcommon.http
import
com.google.gson.Gson
import
com.google.gson.reflect.TypeToken
import
com.yidian.bcommon.constant.AppConfig
import
com.yidian.bcommon.app.YdBaseApplication
import
com.yidian.bcommon.constant.AppConfig
import
com.yidian.bcommon.sdk.BCommonManager
import
com.yidian.bcommon.utils.NetWorkUtils
import
com.yidian.framework.mobile.xdiamond.SecretUtil
import
com.yidian.utils.LogUtil
import
com.yidian.utils.ToastUtil
import
com.yidian.yac.ftdevicefinger.core.FtDeviceFingerManager
import
timber.log.Timber
import
java.lang.reflect.Type
class
HttpParamsUtils
{
companion
object
{
private
val
gson
by
lazy
{
Gson
()
}
fun
getPublicParamsMap
(
timeStamp
:
Long
):
HashMap
<
String
,
String
>
{
val
networkType
=
NetWorkUtils
.
getNetWorkType
(
YdBaseApplication
.
context
)
val
queryParamsMap
=
HashMap
<
String
,
String
>()
queryParamsMap
[
"appid"
]
=
AppConfig
.
appid
queryParamsMap
[
"cv"
]
=
AppConfig
.
cv
queryParamsMap
[
"version"
]
=
AppConfig
.
version
queryParamsMap
[
"distribution"
]
=
AppConfig
.
distribution
queryParamsMap
[
"net"
]
=
networkType
queryParamsMap
[
"platform"
]
=
AppConfig
.
platform
queryParamsMap
[
"device_finger"
]
=
getDeviceFinger
()
queryParamsMap
[
"reqid"
]
=
getRequestId
(
timeStamp
)
return
queryParamsMap
val
paramsMap
=
hashMapOf
(
"appid"
to
BCommonManager
.
getAppId
(),
"cv"
to
AppConfig
.
cv
,
"version"
to
AppConfig
.
version
,
"distribution"
to
AppConfig
.
distribution
,
"net"
to
NetWorkUtils
.
getNetWorkType
(
YdBaseApplication
.
context
),
"platform"
to
AppConfig
.
platform
,
"device_finger"
to
getDeviceFinger
(),
"reqid"
to
getRequestId
(
timeStamp
)
)
Timber
.
tag
(
BCommonManager
.
TAG_HTTP
).
d
(
"request public params: ${gson.toJson(paramsMap)}"
)
return
paramsMap
}
fun
getPrivateParamsMap
(
paramsMap
:
HashMap
<
String
,
String
?
>,
timeStamp
:
Long
):
HashMap
<
String
,
String
?
>
{
return
if
(
AppConfig
.
IS_ENCRYPT
)
{
val
reqId
=
getRequestId
(
timeStamp
)
paramsMap
[
"secret"
]
=
getSignString
(
reqId
,
timeStamp
)
paramsMap
[
"secret"
]
=
getSignString
(
getRequestId
(
timeStamp
),
timeStamp
)
paramsMap
[
"ts"
]
=
timeStamp
.
toString
()
val
paramsJson
=
Gson
().
toJson
(
paramsMap
)
LogUtil
.
show
(
"请求参数:$paramsJson"
)
val
tok
=
SecretUtil
.
rsaEncrypt
(
paramsJson
)
val
queryParamsMap
=
HashMap
<
String
,
String
?>()
queryParamsMap
[
"tok"
]
=
tok
queryParamsMap
// C端身份请求加uid
BCommonManager
.
getUid
()
?.
let
{
paramsMap
[
"user_id"
]
=
it
}
Timber
.
tag
(
BCommonManager
.
TAG_HTTP
).
d
(
"request private params: ${gson.toJson(paramsMap)}"
)
hashMapOf
(
"tok"
to
SecretUtil
.
rsaEncrypt
(
gson
.
toJson
(
paramsMap
)))
}
else
{
Timber
.
tag
(
BCommonManager
.
TAG_HTTP
).
d
(
"request private params: ${gson.toJson(paramsMap)}"
)
paramsMap
}
}
...
...
@@ -50,21 +52,18 @@ class HttpParamsUtils {
decodeResult
.
reason
=
res
.
reason
decodeResult
.
status
=
res
.
status
if
(
rsaResult
!=
null
)
{
val
gson
=
Gson
()
if
(
AppConfig
.
IS_ENCRYPT
)
{
val
result
=
SecretUtil
.
rsaDecrypt
(
rsaResult
as
String
)
LogUtil
.
show
(
"返回参数:
$result"
)
Timber
.
tag
(
BCommonManager
.
TAG_HTTP
).
d
(
"response result:
$result"
)
val
decryptResult
=
gson
.
fromJson
<
HttpDecryptResult
<
T
>>(
result
,
object
:
TypeToken
<
HttpDecryptResult
<
T
>>()
{}.
type
)
val
verifyParams
=
decryptResult
.
reqid
+
decryptResult
.
ts
val
secretNet
=
decryptResult
.
secret
val
verify
=
SecretUtil
.
verifySign
(
verifyParams
,
secretNet
)
val
verify
=
SecretUtil
.
verifySign
(
decryptResult
.
reqid
+
decryptResult
.
ts
,
decryptResult
.
secret
)
return
if
(
verify
)
{
LogUtil
.
show
(
"===============验签成功==================
"
)
Timber
.
tag
(
BCommonManager
.
TAG_HTTP
).
d
(
"verify success
"
)
val
resultJson
=
gson
.
toJson
(
decryptResult
.
data
)
decodeResult
.
result
=
gson
.
fromJson
<
T
>(
resultJson
,
type
)
decodeResult
}
else
{
T
oastUtil
.
showToast
(
YdBaseApplication
.
context
,
"验签失败
"
)
T
imber
.
tag
(
BCommonManager
.
TAG_HTTP
).
d
(
"verify failure
"
)
decodeResult
}
}
else
{
...
...
@@ -73,33 +72,20 @@ class HttpParamsUtils {
return
decodeResult
}
}
LogUtil
.
show
(
"===============rsaResult为空了=================="
)
return
decodeResult
}
private
fun
getDeviceFinger
():
String
{
var
deviceFinger
=
""
val
tempId
=
FtDeviceFingerManager
.
getDeviceFinger
()
if
(
tempId
!=
null
)
{
deviceFinger
=
tempId
}
return
deviceFinger
return
FtDeviceFingerManager
.
getDeviceFinger
()
?:
""
}
private
fun
getRequestId
(
timeStamp
:
Long
):
String
{
val
sb
=
StringBuilder
()
sb
.
append
(
AppConfig
.
appid
)
sb
.
append
(
'_'
)
sb
.
append
(
getDeviceFinger
())
sb
.
append
(
'_'
)
sb
.
append
(
timeStamp
)
return
sb
.
toString
()
return
StringBuilder
().
append
(
BCommonManager
.
getAppId
()).
append
(
'_'
).
append
(
getDeviceFinger
()).
append
(
'_'
).
append
(
timeStamp
)
.
toString
()
}
private
fun
getSignString
(
reqId
:
String
,
timeStamp
:
Long
):
String
?
{
val
sb
=
StringBuilder
()
sb
.
append
(
reqId
).
append
(
timeStamp
)
return
SecretUtil
.
sign
(
sb
.
toString
())
return
SecretUtil
.
sign
(
StringBuilder
().
append
(
reqId
).
append
(
timeStamp
).
toString
())
}
}
}
CommonLib/BCommon/src/main/java/com/yidian/bcommon/sdk/BCommonManager.kt
0 → 100644
View file @
c37161ea
package
com.yidian.bcommon.sdk
import
com.yidian.bcommon.app.YdBaseApplication
import
com.yidian.bcommon.constant.AppConfig
/**
* author: yinjiacheng
* date: 7/27/21 2:01 PM
* description: BCommon Manager
*/
object
BCommonManager
{
const
val
TAG_HTTP
=
"merchant-b-http"
val
publicParams
by
lazy
{
HashMap
<
String
,
String
>()
}
val
privateParams
by
lazy
{
HashMap
<
String
,
String
>()
}
/**
* C端 uid
*/
// TODO: 7/27/21 Test
// private var uid: String? = "510227073302"
private
var
uid
:
String
?
=
null
/**
* 初始化公共参数
*/
fun
initPublicParams
(
params
:
HashMap
<
String
,
String
>)
{
params
.
forEach
{
publicParams
[
it
.
key
]
=
it
.
value
}
}
/**
* 初始化私有参数
*/
fun
initPrivateParams
(
params
:
HashMap
<
String
,
String
>)
{
params
.
forEach
{
privateParams
[
it
.
key
]
=
it
.
value
}
}
/**
* C端同步uid
*/
fun
syncUid
(
uid
:
String
)
{
this
.
uid
=
uid
}
/**
* 获取AppId
*/
fun
getAppId
():
String
{
return
when
(
JudgeClientUtils
.
judgeClient
(
YdBaseApplication
.
context
.
packageName
))
{
ClientType
.
MERCHANT_B
->
AppConfig
.
appIdMerchantB
ClientType
.
MERCHANT_C
->
AppConfig
.
appIdMerchantC
}
}
/**
* 获取TowerPro通用配置模块KeyTag
*/
fun
getTowerProKeyTag
():
String
{
return
when
(
JudgeClientUtils
.
judgeClient
(
YdBaseApplication
.
context
.
packageName
))
{
ClientType
.
MERCHANT_B
->
AppConfig
.
TowerApiKeyTagMerchantB
ClientType
.
MERCHANT_C
->
AppConfig
.
TowerApiKeyTagMerchantC
}
}
/**
* 获取C端uid
*/
fun
getUid
():
String
?
{
return
uid
}
}
CommonLib/BCommon/src/main/java/com/yidian/bcommon/utils/ToolsUtil.kt
deleted
100644 → 0
View file @
86f8c9c8
package
com.yidian.bcommon.utils
import
android.content.Context
import
android.content.Intent
import
android.graphics.Bitmap
import
android.net.Uri
import
android.os.Build
import
android.util.DisplayMetrics
import
android.util.Log
import
android.util.TypedValue
import
android.widget.Toast
import
com.yidian.bcommon.constant.AppConfig
import
com.yidian.bcommon.services.XEventService
import
com.yidian.utils.MD5Util
import
com.yidian.xarc.xevent.XBaseEvent
import
com.yidian.yac.ftdevicefinger.core.FtDeviceFingerManager
import
java.io.File
import
java.io.FileNotFoundException
import
java.io.FileOutputStream
import
java.util.*
object
ToolsUtil
{
//防止连续点击
private
var
lastClickTime
:
Long
=
0
//自定义快速点击时间
private
var
currentLastClickTime
:
Long
=
0
//备用自定义快速点击时间
private
var
tempLastClickTime
:
Long
=
0
//快速点击检测
val
isFastClick
:
Boolean
get
()
{
val
time
=
System
.
currentTimeMillis
()
val
timeD
=
time
-
lastClickTime
if
(
timeD
<
500
)
{
return
false
}
lastClickTime
=
time
return
true
}
//单位转换
fun
dp2px
(
context
:
Context
,
dpVal
:
Float
):
Int
{
return
TypedValue
.
applyDimension
(
TypedValue
.
COMPLEX_UNIT_DIP
,
dpVal
,
context
.
resources
.
displayMetrics
).
toInt
()
}
fun
dp2px
(
dpValue
:
Float
):
Int
{
return
TypedValue
.
applyDimension
(
1
,
dpValue
,
DisplayMetrics
()).
toInt
()
}
//格式化展示
fun
formatShowNum
(
count
:
Int
):
String
{
var
showCount
=
count
.
toString
()
when
{
count
in
1000
..
9999
->
{
val
floutCount
=
count
/
1000
showCount
=
floutCount
.
toString
().
format
(
"%.1f"
)
+
"K"
}
count
in
10000
..
99999999
->
{
val
floutCount
=
count
/
10000
showCount
=
floutCount
.
toString
().
format
(
"%.1f"
)
+
"W"
}
count
>=
100000000
->
{
val
floutCount
=
count
/
100000000
showCount
=
floutCount
.
toString
().
format
(
"%.1f"
)
+
"亿"
}
}
return
showCount
}
//event事件
fun
doAction
(
name
:
String
,
params
:
Any
)
{
Log
.
d
(
"song_test"
,
"event_bus.name = $name"
)
val
xBaseEvent
=
XBaseEvent
(
name
,
params
)
XEventService
.
postEvent
(
xBaseEvent
)
}
//自定义时间检测
fun
isCustomFastClick
(
timeNum
:
Long
):
Boolean
{
val
time
=
System
.
currentTimeMillis
()
val
timeD
=
time
-
currentLastClickTime
if
(
timeD
<
timeNum
)
{
return
false
}
currentLastClickTime
=
time
return
true
}
//备用自定义时间检测
fun
isCustomFastStatus
(
timeNum
:
Long
):
Boolean
{
val
time
=
System
.
currentTimeMillis
()
val
timeD
=
time
-
tempLastClickTime
if
(
timeD
<
timeNum
)
{
return
false
}
tempLastClickTime
=
time
return
true
}
//机型判断
fun
judgePhone
():
Boolean
{
val
manufacturer
:
String
=
Build
.
MANUFACTURER
return
if
(
manufacturer
.
isNotEmpty
())
{
when
(
manufacturer
.
toLowerCase
(
Locale
.
ROOT
))
{
"oppo"
->
true
"xiaomi"
->
true
else
->
false
}
}
else
false
}
fun
getYDEncryptionToken
():
String
{
val
temp
=
StringBuilder
()
//架构组提供的设备指纹
temp
.
append
(
AppConfig
.
appid
)
Log
.
d
(
"song_test"
,
"appid = "
+
AppConfig
.
appid
)
temp
.
append
(
FtDeviceFingerManager
.
getDeviceFinger
())
Log
.
d
(
"song_test"
,
"getDeviceFinger = "
+
FtDeviceFingerManager
.
getDeviceFinger
())
return
"UMPPTYKO"
+
MD5Util
.
md5Encrypt32Upper
(
temp
.
toString
())
}
fun
getDeviceBrandMask
():
Int
{
val
brand
=
Build
.
BRAND
var
mask
=
64
//0100 0000
if
(
"huawei"
.
equals
(
brand
,
ignoreCase
=
true
)
||
"honor"
.
equals
(
brand
,
ignoreCase
=
true
))
{
mask
=
32
//0010 0000
}
else
if
(
"meizu"
.
equals
(
brand
,
ignoreCase
=
true
))
{
mask
=
48
//0011 0000
}
else
if
(
"xiaomi"
.
equals
(
brand
,
ignoreCase
=
true
))
{
mask
=
16
//0001 0000
}
else
if
(
"nubia"
.
equals
(
brand
,
ignoreCase
=
true
))
{
mask
=
80
//0101 0000
}
else
if
(
"ZTE"
.
equals
(
brand
,
ignoreCase
=
true
))
{
mask
=
96
//0110 0000
}
else
if
(
"oppo"
.
equals
(
brand
,
ignoreCase
=
true
))
{
mask
=
112
//0111 0000
}
else
if
(
"vivo"
.
equals
(
brand
,
ignoreCase
=
true
))
{
mask
=
128
//0001 0000 0000
}
else
if
(
"samsung"
.
equals
(
brand
,
ignoreCase
=
true
))
{
mask
=
144
//0001 0001 0000
}
return
mask
}
fun
saveImage
(
bitmap
:
Bitmap
,
name
:
String
,
context
:
Context
):
Boolean
{
try
{
val
sdcardPath
=
System
.
getenv
(
"EXTERNAL_STORAGE"
)
val
dir
=
"$sdcardPath/life_circle_business/"
val
file
=
File
(
dir
)
if
(!
file
.
exists
())
{
file
.
mkdirs
()
}
val
mFile
=
File
(
dir
+
name
)
if
(
mFile
.
exists
())
{
Toast
.
makeText
(
context
,
"该图片已存在!"
,
Toast
.
LENGTH_SHORT
).
show
();
return
false
;
}
val
outputStream
=
FileOutputStream
(
mFile
)
bitmap
.
compress
(
Bitmap
.
CompressFormat
.
JPEG
,
100
,
outputStream
)
val
uri
:
Uri
=
Uri
.
fromFile
(
mFile
)
context
.
sendBroadcast
(
Intent
(
Intent
.
ACTION_MEDIA_SCANNER_SCAN_FILE
,
uri
))
return
true
}
catch
(
e
:
FileNotFoundException
)
{
e
.
printStackTrace
()
}
return
false
}
fun
randomName
():
String
{
val
randomNum
=
(
Math
.
random
()
*
1000
).
toInt
()
return
"lifeCircle$randomNum"
}
}
Components/BManagerCenter/src/main/java/com/yidian/shenghuoquan/bmanagercenter/ui/center/MerchantCenterActivity.kt
View file @
c37161ea
...
...
@@ -15,8 +15,7 @@ import com.yidian.bcommon.constant.*
import
com.yidian.bcommon.http.CommonDataSource
import
com.yidian.bcommon.http.bean.GetCommonConfigBean
import
com.yidian.bcommon.http.callback.IGetCommonConfigCallback
import
com.yidian.bcommon.sdk.ClientType
import
com.yidian.bcommon.sdk.JudgeClientUtils
import
com.yidian.bcommon.sdk.BCommonManager
import
com.yidian.bcommon.services.ZapServiceActionConstants
import
com.yidian.bcommon.services.ZapServiceNameConstants
import
com.yidian.bcommon.utils.StorageUtil
...
...
@@ -559,16 +558,11 @@ class MerchantCenterActivity : BaseActivity<ActivityMerchantCenterBinding>(), Me
CommonDataSource
.
getCommonConfig
(
this
,
hashMapOf
(
"appid"
to
AppConfig
.
appid
,
"appid"
to
BCommonManager
.
getAppId
()
,
"env"
to
AppConfig
.
TowerApiEnv
.
toString
(),
"version"
to
AppConfig
.
TowerApiVersion
,
"os"
to
AppConfig
.
TowerApiOS
,
"keytag"
to
when
(
JudgeClientUtils
.
judgeClient
(
packageName
))
{
ClientType
.
MERCHANT_B
->
AppConfig
.
TowerApiKeyTagMerchantB
ClientType
.
MERCHANT_C
->
AppConfig
.
TowerApiKeyTagMerchantC
// 默认使用B端配置
else
->
AppConfig
.
TowerApiKeyTagMerchantB
}
"keytag"
to
BCommonManager
.
getTowerProKeyTag
()
)
)
}
...
...
Components/BRoot/src/main/java/com/yidian/shenghuoquan/broot/BaseInitConfig.kt
View file @
c37161ea
...
...
@@ -181,7 +181,7 @@ object BaseInitConfig {
}
}
XInsight
.
init
(
context
,
AppConfig
.
app
id
,
BuildConfig
.
DEBUG
,
config
,
provide
)
XInsight
.
init
(
context
,
AppConfig
.
app
IdMerchantB
,
BuildConfig
.
DEBUG
,
config
,
provide
)
}
/**
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment