feat(home): 新增健康银行H5链接参数服务端加密功能
- 新增 EncryptInfoBean 数据类,承载服务端返回的加密参数 - 新增 getSysEnCryptInfo 接口及完整数据层/视图层调用链 - 修改 getHomeBankH5Url() 仅返回参数字符串,由调用方拼接完整 URL - 将 HOME_BANK_H5 改为 public,支持 Fragment 层直接引用 - 测试环境下健康银行入口通过加密参数跳转 WebActivity - 登录后预加载加密信息,提升首次点击响应速度 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
e2d53f851d
commit
dc55c65b87
@@ -49,3 +49,6 @@ data class HomeBannerBean(
|
|||||||
val updateTime: String
|
val updateTime: String
|
||||||
)
|
)
|
||||||
|
|
||||||
|
data class EncryptInfoBean(
|
||||||
|
val encryptData: String?
|
||||||
|
)
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import com.xjjk.healthyclients.bean.home.HomeBannerBean
|
|||||||
import com.xjjk.healthyclients.bean.home.HomeNoticeBean
|
import com.xjjk.healthyclients.bean.home.HomeNoticeBean
|
||||||
import com.xjjk.healthyclients.bean.home.HomeWatchAllDataBean
|
import com.xjjk.healthyclients.bean.home.HomeWatchAllDataBean
|
||||||
import com.xjjk.healthyclients.bean.home.WatchInfoBean
|
import com.xjjk.healthyclients.bean.home.WatchInfoBean
|
||||||
|
import com.xjjk.healthyclients.bean.home.EncryptInfoBean
|
||||||
import com.xjjk.healthyclients.bean.user.CheckInBean
|
import com.xjjk.healthyclients.bean.user.CheckInBean
|
||||||
import com.xjjk.healthyclients.bean.user.PointDetailBean
|
import com.xjjk.healthyclients.bean.user.PointDetailBean
|
||||||
import com.xjjk.healthyclients.bean.user.PointRank
|
import com.xjjk.healthyclients.bean.user.PointRank
|
||||||
@@ -85,5 +86,11 @@ interface HomeApi {
|
|||||||
@GET("/health-watch/api/watchData/findWatchInfo")
|
@GET("/health-watch/api/watchData/findWatchInfo")
|
||||||
suspend fun getHomeWatchInfo(@QueryMap params: MutableMap<String, Any?>): ApiResponse<WatchInfoBean>
|
suspend fun getHomeWatchInfo(@QueryMap params: MutableMap<String, Any?>): ApiResponse<WatchInfoBean>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* weburl参数加密
|
||||||
|
*/
|
||||||
|
@GET("/health-system/api/sys/encryptInfo")
|
||||||
|
suspend fun getSysEnCryptInfo(@QueryMap params: MutableMap<String, Any?>): ApiResponse<EncryptInfoBean>
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
package com.xjjk.healthyclients.data.repository
|
package com.xjjk.healthyclients.data.repository
|
||||||
|
|
||||||
import com.xjjk.healthyclients.base.repository.BaseRepository
|
import com.xjjk.healthyclients.base.repository.BaseRepository
|
||||||
|
import com.xjjk.healthyclients.bean.home.EncryptInfoBean
|
||||||
import com.xjjk.healthyclients.bean.home.HomeBannerBean
|
import com.xjjk.healthyclients.bean.home.HomeBannerBean
|
||||||
import com.xjjk.healthyclients.bean.home.HomeNoticeBean
|
import com.xjjk.healthyclients.bean.home.HomeNoticeBean
|
||||||
import com.xjjk.healthyclients.bean.home.HomeWatchAllDataBean
|
import com.xjjk.healthyclients.bean.home.HomeWatchAllDataBean
|
||||||
@@ -100,4 +101,12 @@ object HomeRepository : BaseRepository() {
|
|||||||
service.getHomeWatchInfo(map)
|
service.getHomeWatchInfo(map)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
suspend fun getSysEnCryptInfo(str: String?): ApiResponse<EncryptInfoBean> {
|
||||||
|
return apiCall {
|
||||||
|
val map = mutableMapOf<String, Any?>()
|
||||||
|
map["str"] = str
|
||||||
|
service.getSysEnCryptInfo(map)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
package com.xjjk.healthyclients.fragment
|
package com.xjjk.healthyclients.fragment
|
||||||
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
|
import android.text.TextUtils
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.lifecycle.Lifecycle
|
import androidx.lifecycle.Lifecycle
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
@@ -17,12 +18,14 @@ import com.xjjk.healthyclients.base.BaseVMBFragment
|
|||||||
import com.xjjk.healthyclients.bean.guidance.GuidanceListBean
|
import com.xjjk.healthyclients.bean.guidance.GuidanceListBean
|
||||||
import com.xjjk.healthyclients.databinding.FragmentHomeBinding
|
import com.xjjk.healthyclients.databinding.FragmentHomeBinding
|
||||||
import com.xjjk.healthyclients.event.HomeTabChangeEvent
|
import com.xjjk.healthyclients.event.HomeTabChangeEvent
|
||||||
|
import com.xjjk.healthyclients.retrofit.UrlConfig
|
||||||
import com.xjjk.healthyclients.superfuntion.initColors
|
import com.xjjk.healthyclients.superfuntion.initColors
|
||||||
import com.xjjk.healthyclients.superfuntion.showBanner
|
import com.xjjk.healthyclients.superfuntion.showBanner
|
||||||
import com.xjjk.healthyclients.superfuntion.startAppointmentWaitAffirmActivity
|
import com.xjjk.healthyclients.superfuntion.startAppointmentWaitAffirmActivity
|
||||||
import com.xjjk.healthyclients.superfuntion.startGroupChat
|
import com.xjjk.healthyclients.superfuntion.startGroupChat
|
||||||
import com.xjjk.healthyclients.superfuntion.startLoginActivity
|
import com.xjjk.healthyclients.superfuntion.startLoginActivity
|
||||||
import com.xjjk.healthyclients.superfuntion.startMyGuidanceActivity
|
import com.xjjk.healthyclients.superfuntion.startMyGuidanceActivity
|
||||||
|
import com.xjjk.healthyclients.superfuntion.startWebActivity
|
||||||
import com.xjjk.healthyclients.ui.activity.EmptyActivity
|
import com.xjjk.healthyclients.ui.activity.EmptyActivity
|
||||||
import com.xjjk.healthyclients.ui.activity.LoginActivity
|
import com.xjjk.healthyclients.ui.activity.LoginActivity
|
||||||
import com.xjjk.healthyclients.ui.activity.guidance.adapter.GuidanceFragmentDoctorAdapter
|
import com.xjjk.healthyclients.ui.activity.guidance.adapter.GuidanceFragmentDoctorAdapter
|
||||||
@@ -169,16 +172,26 @@ class HomeFragment :
|
|||||||
}
|
}
|
||||||
|
|
||||||
R.id.home_head_tab4 -> {
|
R.id.home_head_tab4 -> {
|
||||||
|
if (UrlConfig.baseUrlType == UrlConfig.BaseUrlType.TEST) {
|
||||||
|
if (DataStoreManager.isLogin()) {
|
||||||
|
val value = mViewModel.enCryptInfoUrl.value
|
||||||
|
if (TextUtils.isEmpty(value)) {
|
||||||
|
mViewModel.getSysEnCryptInfo(UrlConfig.getHomeBankH5Url())
|
||||||
|
showToast("网络错误")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
requireContext().startWebActivity(UrlConfig.HOME_BANK_H5+"?param="+ value, myTitle = "健康银行")
|
||||||
|
} else {
|
||||||
|
startLoginActivity(requireContext())
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
val bundle = Bundle()
|
val bundle = Bundle()
|
||||||
bundle.putString("title", "健康银行")
|
bundle.putString("title", "健康银行")
|
||||||
toActivity(EmptyActivity::class.java, bundle)
|
toActivity(EmptyActivity::class.java, bundle)
|
||||||
|
|
||||||
//
|
|
||||||
// if (DataStoreManager.isLogin()) {
|
|
||||||
// requireContext().startWebActivity(UrlConfig.getHomeBankH5Url(), myTitle = "健康银行")
|
|
||||||
// } else {
|
|
||||||
// startLoginActivity(requireContext())
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
R.id.home_head_tab3 -> {
|
R.id.home_head_tab3 -> {
|
||||||
@@ -327,6 +340,16 @@ class HomeFragment :
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// lifecycleScope.launch{
|
||||||
|
// repeatOnLifecycle(Lifecycle.State.CREATED){
|
||||||
|
// mViewModel.enCryptInfoUrl.collectLatest { url ->
|
||||||
|
// requireContext().startWebActivity(
|
||||||
|
// UrlConfig.HOME_BANK_H5+"?param="+url,
|
||||||
|
// myTitle = "健康银行"
|
||||||
|
// )
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -338,6 +361,7 @@ class HomeFragment :
|
|||||||
if (DataStoreManager.isLogin()) {
|
if (DataStoreManager.isLogin()) {
|
||||||
homeNoticeStartRepeat()
|
homeNoticeStartRepeat()
|
||||||
mViewModel.getHomeWatchInfo(DataStoreManager.getUserId())
|
mViewModel.getHomeWatchInfo(DataStoreManager.getUserId())
|
||||||
|
mViewModel.getSysEnCryptInfo(UrlConfig.getHomeBankH5Url())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ object UrlConfig {
|
|||||||
|
|
||||||
// 安眼修改密码
|
// 安眼修改密码
|
||||||
const val ANYAN_CHANGE_PASSWORD_H5 = "https://sso.iosp.ydpt.tech/SSOManageClient/userController/changePassword"
|
const val ANYAN_CHANGE_PASSWORD_H5 = "https://sso.iosp.ydpt.tech/SSOManageClient/userController/changePassword"
|
||||||
private const val HOME_BANK_H5 = "https://gstest.superwx.cn/healthbank/index.html"
|
const val HOME_BANK_H5 = "https://gstest.superwx.cn/healthbank/index.html"
|
||||||
|
|
||||||
|
|
||||||
val baseUrlType: BaseUrlType = BaseUrlType.PRODUCT
|
val baseUrlType: BaseUrlType = BaseUrlType.PRODUCT
|
||||||
@@ -100,12 +100,12 @@ object UrlConfig {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 手机银行外链h5
|
* 手机银行外链h5 参数
|
||||||
*/
|
*/
|
||||||
fun getHomeBankH5Url(): String{
|
fun getHomeBankH5Url(): String{
|
||||||
var httpUrl = getDefaultBaseUrl().toHttpUrl()
|
var httpUrl = getDefaultBaseUrl().toHttpUrl()
|
||||||
|
|
||||||
return HOME_BANK_H5+"?scheme=" + httpUrl.scheme +
|
return "scheme=" + httpUrl.scheme +
|
||||||
"&host=" + httpUrl.host +
|
"&host=" + httpUrl.host +
|
||||||
"&tokenF=" + DataStoreManager.getToken()
|
"&tokenF=" + DataStoreManager.getToken()
|
||||||
|
|
||||||
|
|||||||
@@ -23,6 +23,8 @@ class HomeViewModel : BaseViewModel() {
|
|||||||
var homeBannerList = MutableSharedFlow<MutableList<HomeBannerBean>?>()
|
var homeBannerList = MutableSharedFlow<MutableList<HomeBannerBean>?>()
|
||||||
var sessionPicUrl = MutableSharedFlow<String?>()
|
var sessionPicUrl = MutableSharedFlow<String?>()
|
||||||
|
|
||||||
|
var enCryptInfoUrl = MutableStateFlow<String?>(null)
|
||||||
|
|
||||||
//手表
|
//手表
|
||||||
var watchInfo = MutableSharedFlow<WatchInfoBean?>()
|
var watchInfo = MutableSharedFlow<WatchInfoBean?>()
|
||||||
var watchAllData = MutableSharedFlow<MutableList<HomeWatchAllDataBean>?>()
|
var watchAllData = MutableSharedFlow<MutableList<HomeWatchAllDataBean>?>()
|
||||||
@@ -164,5 +166,17 @@ class HomeViewModel : BaseViewModel() {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun getSysEnCryptInfo(str: String?) {
|
||||||
|
launch(showDialog = false,
|
||||||
|
{
|
||||||
|
handleRequest(
|
||||||
|
HomeRepository.getSysEnCryptInfo(str),
|
||||||
|
successBlock = {
|
||||||
|
enCryptInfoUrl.emit(it.result?.encryptData)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user