Commit c37161ea authored by yinjiacheng's avatar yinjiacheng

update B&C端区分appId C端请求B端Server增加uid参数

parent 86f8c9c8
...@@ -10,14 +10,10 @@ class AppConfig { ...@@ -10,14 +10,10 @@ class AppConfig {
companion object { companion object {
// 是否开启加密 // 是否开启加密
const val IS_ENCRYPT = BuildConfig.IS_ENCRYPT 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 appIdMerchantB = "merchant-b"
const val appIdMerchantC = "merchant-c"
// 渠道
const val appid = "merchant-b"
// 客户端版本号 // 客户端版本号
const val cv = BuildConfig.VERSION_NAME const val cv = BuildConfig.VERSION_NAME
......
...@@ -2,43 +2,45 @@ package com.yidian.bcommon.http ...@@ -2,43 +2,45 @@ package com.yidian.bcommon.http
import com.google.gson.Gson import com.google.gson.Gson
import com.google.gson.reflect.TypeToken import com.google.gson.reflect.TypeToken
import com.yidian.bcommon.constant.AppConfig
import com.yidian.bcommon.app.YdBaseApplication 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.bcommon.utils.NetWorkUtils
import com.yidian.framework.mobile.xdiamond.SecretUtil 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 com.yidian.yac.ftdevicefinger.core.FtDeviceFingerManager
import timber.log.Timber
import java.lang.reflect.Type import java.lang.reflect.Type
class HttpParamsUtils { class HttpParamsUtils {
companion object { companion object {
private val gson by lazy { Gson() }
fun getPublicParamsMap(timeStamp: Long): HashMap<String, String> { fun getPublicParamsMap(timeStamp: Long): HashMap<String, String> {
val networkType = NetWorkUtils.getNetWorkType(YdBaseApplication.context) val paramsMap = hashMapOf(
val queryParamsMap = HashMap<String, String>() "appid" to BCommonManager.getAppId(),
queryParamsMap["appid"] = AppConfig.appid "cv" to AppConfig.cv,
queryParamsMap["cv"] = AppConfig.cv "version" to AppConfig.version,
queryParamsMap["version"] = AppConfig.version "distribution" to AppConfig.distribution,
queryParamsMap["distribution"] = AppConfig.distribution "net" to NetWorkUtils.getNetWorkType(YdBaseApplication.context),
queryParamsMap["net"] = networkType "platform" to AppConfig.platform,
queryParamsMap["platform"] = AppConfig.platform "device_finger" to getDeviceFinger(),
queryParamsMap["device_finger"] = getDeviceFinger() "reqid" to getRequestId(timeStamp)
queryParamsMap["reqid"] = getRequestId(timeStamp) )
return queryParamsMap 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?> { fun getPrivateParamsMap(paramsMap: HashMap<String, String?>, timeStamp: Long): HashMap<String, String?> {
return if (AppConfig.IS_ENCRYPT) { return if (AppConfig.IS_ENCRYPT) {
val reqId = getRequestId(timeStamp) paramsMap["secret"] = getSignString(getRequestId(timeStamp), timeStamp)
paramsMap["secret"] = getSignString(reqId, timeStamp)
paramsMap["ts"] = timeStamp.toString() paramsMap["ts"] = timeStamp.toString()
val paramsJson = Gson().toJson(paramsMap) // C端身份请求加uid
LogUtil.show("请求参数:$paramsJson") BCommonManager.getUid()?.let { paramsMap["user_id"] = it }
val tok = SecretUtil.rsaEncrypt(paramsJson) Timber.tag(BCommonManager.TAG_HTTP).d("request private params: ${gson.toJson(paramsMap)}")
val queryParamsMap = HashMap<String, String?>() hashMapOf("tok" to SecretUtil.rsaEncrypt(gson.toJson(paramsMap)))
queryParamsMap["tok"] = tok
queryParamsMap
} else { } else {
Timber.tag(BCommonManager.TAG_HTTP).d("request private params: ${gson.toJson(paramsMap)}")
paramsMap paramsMap
} }
} }
...@@ -50,21 +52,18 @@ class HttpParamsUtils { ...@@ -50,21 +52,18 @@ class HttpParamsUtils {
decodeResult.reason = res.reason decodeResult.reason = res.reason
decodeResult.status = res.status decodeResult.status = res.status
if (rsaResult != null) { if (rsaResult != null) {
val gson = Gson()
if (AppConfig.IS_ENCRYPT) { if (AppConfig.IS_ENCRYPT) {
val result = SecretUtil.rsaDecrypt(rsaResult as String) 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 decryptResult = gson.fromJson<HttpDecryptResult<T>>(result, object : TypeToken<HttpDecryptResult<T>>() {}.type)
val verifyParams = decryptResult.reqid + decryptResult.ts val verify = SecretUtil.verifySign(decryptResult.reqid + decryptResult.ts, decryptResult.secret)
val secretNet = decryptResult.secret
val verify = SecretUtil.verifySign(verifyParams, secretNet)
return if (verify) { return if (verify) {
LogUtil.show("===============验签成功==================") Timber.tag(BCommonManager.TAG_HTTP).d("verify success")
val resultJson = gson.toJson(decryptResult.data) val resultJson = gson.toJson(decryptResult.data)
decodeResult.result = gson.fromJson<T>(resultJson, type) decodeResult.result = gson.fromJson<T>(resultJson, type)
decodeResult decodeResult
} else { } else {
ToastUtil.showToast(YdBaseApplication.context, "验签失败") Timber.tag(BCommonManager.TAG_HTTP).d("verify failure")
decodeResult decodeResult
} }
} else { } else {
...@@ -73,33 +72,20 @@ class HttpParamsUtils { ...@@ -73,33 +72,20 @@ class HttpParamsUtils {
return decodeResult return decodeResult
} }
} }
LogUtil.show("===============rsaResult为空了==================")
return decodeResult return decodeResult
} }
private fun getDeviceFinger(): String { private fun getDeviceFinger(): String {
var deviceFinger = "" return FtDeviceFingerManager.getDeviceFinger() ?: ""
val tempId = FtDeviceFingerManager.getDeviceFinger()
if (tempId != null) {
deviceFinger = tempId
}
return deviceFinger
} }
private fun getRequestId(timeStamp: Long): String { private fun getRequestId(timeStamp: Long): String {
val sb = StringBuilder() return StringBuilder().append(BCommonManager.getAppId()).append('_').append(getDeviceFinger()).append('_').append(timeStamp)
sb.append(AppConfig.appid) .toString()
sb.append('_')
sb.append(getDeviceFinger())
sb.append('_')
sb.append(timeStamp)
return sb.toString()
} }
private fun getSignString(reqId: String, timeStamp: Long): String? { private fun getSignString(reqId: String, timeStamp: Long): String? {
val sb = StringBuilder() return SecretUtil.sign(StringBuilder().append(reqId).append(timeStamp).toString())
sb.append(reqId).append(timeStamp)
return SecretUtil.sign(sb.toString())
} }
} }
} }
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
}
}
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"
}
}
...@@ -15,8 +15,7 @@ import com.yidian.bcommon.constant.* ...@@ -15,8 +15,7 @@ import com.yidian.bcommon.constant.*
import com.yidian.bcommon.http.CommonDataSource import com.yidian.bcommon.http.CommonDataSource
import com.yidian.bcommon.http.bean.GetCommonConfigBean import com.yidian.bcommon.http.bean.GetCommonConfigBean
import com.yidian.bcommon.http.callback.IGetCommonConfigCallback import com.yidian.bcommon.http.callback.IGetCommonConfigCallback
import com.yidian.bcommon.sdk.ClientType import com.yidian.bcommon.sdk.BCommonManager
import com.yidian.bcommon.sdk.JudgeClientUtils
import com.yidian.bcommon.services.ZapServiceActionConstants import com.yidian.bcommon.services.ZapServiceActionConstants
import com.yidian.bcommon.services.ZapServiceNameConstants import com.yidian.bcommon.services.ZapServiceNameConstants
import com.yidian.bcommon.utils.StorageUtil import com.yidian.bcommon.utils.StorageUtil
...@@ -559,16 +558,11 @@ class MerchantCenterActivity : BaseActivity<ActivityMerchantCenterBinding>(), Me ...@@ -559,16 +558,11 @@ class MerchantCenterActivity : BaseActivity<ActivityMerchantCenterBinding>(), Me
CommonDataSource.getCommonConfig( CommonDataSource.getCommonConfig(
this, this,
hashMapOf( hashMapOf(
"appid" to AppConfig.appid, "appid" to BCommonManager.getAppId(),
"env" to AppConfig.TowerApiEnv.toString(), "env" to AppConfig.TowerApiEnv.toString(),
"version" to AppConfig.TowerApiVersion, "version" to AppConfig.TowerApiVersion,
"os" to AppConfig.TowerApiOS, "os" to AppConfig.TowerApiOS,
"keytag" to when (JudgeClientUtils.judgeClient(packageName)) { "keytag" to BCommonManager.getTowerProKeyTag()
ClientType.MERCHANT_B -> AppConfig.TowerApiKeyTagMerchantB
ClientType.MERCHANT_C -> AppConfig.TowerApiKeyTagMerchantC
// 默认使用B端配置
else -> AppConfig.TowerApiKeyTagMerchantB
}
) )
) )
} }
......
...@@ -181,7 +181,7 @@ object BaseInitConfig { ...@@ -181,7 +181,7 @@ object BaseInitConfig {
} }
} }
XInsight.init(context, AppConfig.appid, BuildConfig.DEBUG, config, provide) XInsight.init(context, AppConfig.appIdMerchantB, BuildConfig.DEBUG, config, provide)
} }
/** /**
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment