前端现状 — android(roovault)+ h5(wp_h5)
静态盘点:技术栈、模块构成、功能域、接口面、第三方 SDK、后端依赖。动态业务交互时序见 16-前端交互时序。
核实日期 2026-06-03,基于frontend-cashloan当前快照逐项重核(settings.gradle / MappedApi.java / basePath.js / build.gradle)。权威以本文 + 代码为准。
架构概览
| 项 | 现状 |
|---|---|
| 形态 | 原生 Android(roovault)承载登录/KYC/绑卡/人脸/采集/人脸提额;内嵌 WebView 加载 H5 业务页(提现/还款/复借/重授信/提额/合同)。非 Flutter |
| 原生构建 | minSdk 21 / target 35,dev 包 com.mini.dev(APP_NAME=Common),versionName 2.7.31,flavor 维度 credit_channel |
| H5 技术栈 | Vue 2.7.16 + Vant 2.11.2 + vue-router 3.6.5 + vuex 3.6.2 + axios 0.21.4 + core-js |
| 主后端 | blc-service(= bns-gateway,业务网关/BFF)——原生与 H5 共用主入口。登录也走此(user/ 模块 + token,无 TGT/ST) |
| 直连例外 | 还款支付结果轮询直连 cfk-service(fcs)(cfk-service/inner/v1/activeQueryPlutusPaymentResult) |
| 接口路径 | 当前快照为混淆前明文(MappedApi/basePath 真实路径,Retrofit/请求层直接用) |
| 多包 | credit_channel flavor 维度(common/dev + 品牌包,配置含 newcredit URL);接口有 4nc/4merge 包专属变体(4=for,nc=NewCredit 包) |
一、模块构成(android roovault)
Gradle 模块(settings.gradle 实测 12 个)
| 模块 | 包 | 用途(据包名/代码) |
|---|---|---|
| app | com.foo.cash | 主应用,承载全部业务(登录/KYC/绑卡/提现壳/采集…) |
| commonbase | com.common.* | 公共基础:网络(http)、数据库、日志、工具、API 常量(MappedApi) |
| facedetectlib | com.pbank.facedetectlib | 人脸活体检测 |
| CameraLib | com.cash.cameralib | 相机 |
| idcamera | com.finiloan.idcamera | 证件拍照 |
| operator | com.foo.cashoperator | 运营活动 |
| acp | com.mylhyl.acp | 运行时权限申请(第三方) |
| android-pickers | — | 选择器控件 |
| calendarreminder | com.aftcfaca | 还款日历提醒 |
| calendarview | com.foo.calendarview | 日历控件 |
| lottie | com.airbnb.lottie | 动画(第三方) |
| luban | — | 图片压缩(第三方) |
⚠ 早期版本文档曾列「30+ Gradle 模块」(loginLib/datacollect/deviceLib/s3operate 等)——当前快照不存在,那是更早/不同快照。当前 gradle 模块就是上表 12 个;登录、采集、上传等已收进 app 子包(见下)。
app 内功能域(com.foo.cash.ui 子包,17 个)
| 子包 | 功能 |
|---|---|
| login | 登录注册(手机号/OTP/人脸登录) |
| applycredit | 授信(NIN 核验/审批结果/等待审核) |
| applyinfo | 进件资料(BVN 核验/建客/人脸/工作/联系人/补件) |
| applylimit | 提额(人脸提额/调额/增信补充) |
| bank / bankacount | 银行卡/绑卡 |
| businessh5web | H5 WebView 容器(H5JsInterface 桥) |
| withdraw | 提现(原生壳,主体在 H5) |
| loanlist | 借据列表 |
| usercenter | 用户中心 |
| main | 主页 |
| messagecenter | 消息中心 |
| discountcoupons | 优惠券 |
| operator | 运营活动 |
| evaluate | 评价 |
| launch | 启动 |
| network | 网络 |
设备数据采集:
DataCollectUtil(com.foo.cash.util,app 内)→sdk-service/upload/*(短信/通讯录/applist/device/wifi/gps 等,上报大数据 SDK 平台)。非独立模块。
二、接口面
原生(MappedApi.java,实测 128 个常量,全明文)
按前缀分组(每组列代表接口,全集见 MappedApi):
| 前缀 | 用途 | 代表接口 |
|---|---|---|
user/ | 登录/验证码/建客/绑卡/调额/设备/推送 | login、sendCaptcha、verifyCaptcha、logout、verifyToCreateNewCust4nc、adjustLimit4nc、bindFirebaseToken4nc |
apply/ | 进件/人脸/还款/提额/签约/补件 | faceDetection、saveBaseInfo、verifyPersonalInfo、loanApply、activeRepayment4nc、applyRiskPrice4nc、applySettleVoucher、saveSupplyInfo4nc |
bank/ | 绑卡/银行/BVN-NIN/流水增信 | queryBankList、bvnMatch(死接口)、ninMatch、paystackCharge、flutterwaveCharge、plutusBindCard*、statement、uploadStream |
query/ | 查询/额度/借据/还款计划/字典/配置 | queryStageInfo4nc、queryLoanList4nc、queryLoanDetils4nc、loanAPPConfig、weeklyAdjustLimitList4nc、faceRaiseResult4nc、queryAllowWithdraw4nc |
cust/ | 客户/产品/借据信息 | queryCustProductInfo、queryCustCardInfo、queryCustLoanInfo |
coupon/ | 优惠券 | queryCouponList4nc、queryIsUsedCoupon4nc |
inner/v1/ | 内嵌(核验方式/评分弹窗/Google reviewer) | liveDetectionWay、starsPopup、queryGoogleReviewer |
file-upload-service/ | 文件/图片上传(大数据平台) | upload/file、upload/image、v2/upload/file |
tudcAux/ | 注册检查 | user/exists |
H5(basePath.js / fooloan.js,实测 68 项,8 分组)
| 分组 | 用途 |
|---|---|
| commonBlc | 通用(试算/路由/字典/配置/设备检测等) |
| withdraw | 提现(loanApply4merge、routeRedirect、loanApplyNoBindCardInit…) |
| repayment | 还款(generatePlutusWebOrder4nc、queryRepayPlanDetailList、submitRepayRequestion…) |
| bankAccount | 银行账户(verifyBankAccount4nc、addBankAccount4nc) |
| coupon | 优惠券 |
| profileInfo | 资料(saveContactList 等) |
| recredit | 重授信(trigger / report / recreditResult) |
| bigDataUrl | 大数据平台(埋点 dc/、客诉增信 ccs/、S3、sdk-adapter/credit) |
三、第三方 SDK 与采集
| SDK | 用途 |
|---|---|
| firebase-messaging / config / analytics | 推送 / 远程配置 / 分析 |
| appsflyer (af-android-sdk 6.10.0) | 归因 |
| stringfog:xor 3.0.0 | 字符串 XOR 加密(发布构建防逆向) |
| lottie / luban / acp | 动画 / 图片压缩 / 权限 |
早期文档提到的 facebook SDK(社交登录/归因)当前已无依赖;社交登录字段在但未启用(见 01-注册登录)。
设备行为采集:DataCollectUtil → sdk-service/upload/*(短信/通讯录/applist/device/wifi/gps/电量/亮度/陀螺仪等,喂大数据风控)。
四、后端依赖(前端实证)
| 后端 | 角色 | 在后端仓库? |
|---|---|---|
| blc-service(= bns-gateway 业务网关) | 原生 + H5 主入口(含登录 user/)。模块前缀 user/apply/query/cust/bank/coupon/inner/plutus/recredit/tudcAux/config | 否(项目改造中,未推送) |
| cfk-service(= fcs 账务) | 直连例外:还款支付结果轮询 | 在后端仓库(fcs) |
| 大数据 / SDK 平台 | sdk-service/(采集)、dc/(埋点)、ccs/(客诉/增信/S3)、file-upload-service/、sdk-adapter/credit(大数据授信) | 否(未推送) |
关键结论:前端实证主要依赖 blc-service(BFF)+ 大数据 SDK 平台;登录已并入 blc-service(当前快照无独立 auth 服务/TGT/ST,与早期不同)。后端能力层(fcs/pmt/pfs/fds)原则上经 blc-service,唯还款支付结果直连 cfk-service。
五、接口路径事实(两层混淆)
- 当前快照为混淆前明文:MappedApi/basePath 均真实路径,无运行时映射,梳理无需去混淆。
- 两层混淆区分:① 前端源码字符串加密(发布构建 StringFog xor + proguard,防逆向,源码仍明文)② 后端网关路径↔token 映射(在 Apollo,前端查不到)。
- 早期文档的
MainApi.java(token 版)已不存在;duro/hexokinase现仅出现在JsonStreetXX.java(街道地址 mock),与接口无关。
六、与口述现状的偏差(客观标注)
| 项 | 口述 | 前端实证 |
|---|---|---|
| 现金贷 App 技术栈 | Flutter | 原生 Android(roovault) + H5(wp_h5 Vue2) 混合 |
| 登录认证 | 独立认证服务(TGT/ST) | 当前并入 blc-service user/ + token(早期独立 auth 已不在) |
| 注册验证码通道 | SMS + 语音 | 登录 OTP 为 SMS + 语音(无 WhatsApp 登录通道;WhatsApp 仅用于 BVN 核验) |
| 设备数据采集 | — | 已采集短信/通讯录/applist/wifi/GPS/陀螺仪等(风控) |
七、与 16 的关系
本篇=静态盘点(构成/接口面/SDK/依赖);16=动态交互时序(业务流程怎么调、分支怎么走)。两者互补:查”前端有什么”看 12,查”流程怎么跑”看 16。