Skip to content

user · 用户体系

ts
import { UserDomain } from '@hfyidu/api/user'

用户领域覆盖账号登录、用户信息、消费/充值/订单流水、订阅、青少年模式、设备绑定、广告/付费权益、邀请、系统消息等能力,服务前缀 user

用例总览

用例说明请求方式
UserDomain.cases.login登录(支持手机号验证码 / 微信授权 / 外推 / 邀请等多种登录场景)POST user/login
UserDomain.cases.state获取当前登录用户的最新状态信息GET user/state
UserDomain.cases.feedback提交意见反馈POST user/feedback
UserDomain.cases.consumes消费记录(分页)GET user/consumes
UserDomain.cases.recharges充值记录(分页)GET user/recharges
UserDomain.cases.myOrder我的订单(分页)GET user/myOrder
UserDomain.cases.subscribe我的订阅/追更(分页)GET user/subscribe
UserDomain.cases.logout退出登录PUT user/logout
UserDomain.cases.logoff注销账号PUT user/logoff
UserDomain.cases.updateProfile更新用户资料(昵称/头像等)PUT user/info
UserDomain.cases.children开启青少年模式PUT user/children
UserDomain.cases.deleteChildrenPassword关闭青少年模式(校验密码)DELETE user/children
UserDomain.cases.bindPhone绑定手机号PUT user/phone
UserDomain.cases.bindProviderPhone绑定第三方(一键登录)手机号PUT user/phone
UserDomain.cases.install上报"添加到桌面/安装"PUT user/add-desk
UserDomain.cases.adBenefit广告免广告权益记录(分页)GET user/ad/equities
UserDomain.cases.payBenefit付费免广告权益记录(分页)GET user/pay/equities
UserDomain.cases.invite获取邀请信息GET user/invite
UserDomain.cases.removeSubscribe取消订阅/追更DELETE user/subscribe
UserDomain.cases.report行为埋点上报POST user/actionMonitor
UserDomain.cases.systemMessage系统/站内信(分页)GET user/systemMsg
UserDomain.cases.removePhone解绑手机号DELETE user/phone

login · 登录

ts
const { data } = await UserDomain.cases.login.run({
  phone: '13800000000',
  captcha: '1234',
})

console.log(data) // UserLoginDto
console.log(data.token) // 登录凭证,登录成功后请自行写入业务项目的状态管理

登录支持多种场景,参数按需传入即可(详见下表),常见组合:

  • 手机号验证码登录:phone + captcha
  • 微信授权登录:wx_code / wxoa_code / theatre_code
  • 结合外推链接:spread_id + spread_params + source_package_name
  • 结合邀请关系:inviter_uid + inviter_spread_id + inviter_cid + inviter_time
  • 结合设备信息:brand_type / brand_name / app_version / reg_id / device_oaid / device_adid / device_imei

请求参数 UserLoginBodyParams

字段类型必填说明
authorizationstring第三方授权信息
encrypted_datastringAES 加密数据
ivstringAES 加解密初始向量(base64 编码后的字符串)
spread_idstring | number外推 ID
spread_paramsstring外推参数
source_package_namestring外推进入时的场景,或来源包名
phonestring手机号码
captchastring验证码
inviter_uidstring | number邀请人 ID
inviter_spread_idstring | number邀请注册时的外推 ID
inviter_cidstring | number邀请注册的 cid
inviter_timestring邀请时间
brand_typestring移动生产商
brand_namestring设备品牌
app_versionstringApp 版本(版本号),例如 1.0.0(100000)
reg_idstring快应用消息推送 RegID
device_oaidstring设备 OAID
device_adidstring设备 AdId
device_imeistring设备 IMEI
theatre_codestring微信小程序 code
wxoa_codestring微信公众号 code
wx_codestring微信小程序 code

响应 UserLoginDto

字段类型说明
tokenstring登录凭证,必填
userUserInfoDto用户信息,默认新建一个 UserInfoDto 实例

UserInfoDto 用户信息

字段类型后台原始字段说明
idstring | numberid用户 ID,必填
openidstring | nullopenid一键登录/微信/抖音/快手等第三方 openid,默认 null
passwordnumber | string | nullpassword密码,默认 null
nicknamestringnickname昵称,默认 ''
avatarstring | nullheadimg用户头像,默认 null
sexnumbersex性别原始值,默认 0,可通过 UserSexType.find 反查得到 UserSexType 枚举成员
emailstringemail邮箱,默认 ''
phonestring | nullphone手机号,默认 null
isRisknumberis_risk风险标识,默认 0
coinsnumberbalance_coin虚拟币余额,默认 0
couponsnumbertheatre_volume虚拟券余额,默认 0
superExpireDatestring | nullsuper_expire_date会员过期时间,默认 null
superStartDatestring | nullsuper_start_date会员开始时间,默认 null
totalOrderMoneystringtotal_order_amount历史总充值金额,默认 ''
totalOrderNumbernumbertotal_order_num历史总充值订单笔数,默认 0
totalReadTimenumbertotal_read_time历史阅读时长(秒),默认 0
spreadIdnumberspread_id当前所属外推 ID,默认 0
isChildrenbooleanis_children是否开启青少年模式,默认 false
childrenPasswordnumber | stringchildren_password青少年模式密码,默认 ''
adidstringdevice_adid当前绑定的 AdId,默认 ''
imeistringdevice_imei当前绑定的 IMEI,默认 ''
oaidstringdevice_oaid当前绑定的 OAID,默认 ''
deviceUserIdstringdevice_uid当前绑定的设备 userId,默认 ''
regIdnumber | stringreg_id当前绑定的 RegID,默认 0
createdAtstringcreated_at用户创建时间,格式 yy-mm-dd hh-mm-ss,默认 '2999-12-31 23:59:59'
inviterCidnumberinviter_cid邀请注册的 cid,默认 0
inviterSpreadIdnumberinviter_spread_id邀请外推 ID,默认 0
inviterTimenumberinviter_time邀请时间(10 位秒级时间戳),默认 0
inviterUidnumberinviter_uid邀请人的 uid,默认 0
lastActiveTimenumberlast_active_time上次活跃时间(10 位秒级时间戳),默认 0

state · 获取用户状态

ts
const { data } = await UserDomain.cases.state.run({})

console.log(data.user) // UserInfoDto,同 login 返回的用户信息结构

请求参数 UserStateQueryParams

无字段,直接传 {} 即可。

响应 UserStateDto

字段类型说明
userUserInfoDto用户信息,默认新建一个 UserInfoDto 实例,字段同 login 用例

feedback · 提交意见反馈

ts
const { data } = await UserDomain.cases.feedback.run({
  item_id: '1001',
  content: '播放卡顿',
  phone: '13800000000',
  imgs: 'https://xxx/1.jpg,https://xxx/2.jpg',
})

console.log(data.feedback_id)

请求参数 UserFeedbackBodyParams

字段类型必填说明
item_idstring | number反馈关联的内容/条目 ID
contentstring反馈内容
phonestring联系电话
imgsstring反馈截图,多个地址以逗号分隔

响应 UserFeedbackDto(不可变,@Freeze

字段类型说明
feedback_idstring反馈记录 ID,必填

consumes · 消费记录(分页)

这是分页列表用例,返回结构为 { list: UserConsumesDto[] },建议参考快速开始 · 分页列表请求的用法只 new 一次并复用实例:

ts
const consumesCase = UserDomain.cases.consumes

await consumesCase.refresh()

if (consumesCase.hasMore.value) {
  await consumesCase.loadNextPage()
}

console.log(consumesCase.list) // UserConsumesDto[]

请求参数 UserConsumesQueryParams

字段类型必填说明
pagenumber页码(由分页机制自动管理,无需手动传入)
limitnumber每页条数(由分页机制自动管理,无需手动传入)

响应 UserConsumesDto[](不可变,@Freeze

字段类型后台原始字段说明
idnumber | stringid消费记录 ID,必填
remarkstringremark备注,默认 ''
createdAtstringcreated_at消费时间
coinsstringtheatre_coin消耗的虚拟币数量
couponsstringtheatre_volume消耗的虚拟券数量
sourceTypestringsource_type消费来源类型
detailTypestringdetail_type消费明细类型
typestring记录类型标识,默认 'myconsumes'

recharges · 充值记录(分页)

这是分页列表用例,返回结构为 { list: UserRechargesDto[] },建议参考快速开始 · 分页列表请求的用法只 new 一次并复用实例:

ts
const rechargesCase = UserDomain.cases.recharges

await rechargesCase.refresh()

console.log(rechargesCase.list) // UserRechargesDto[]

请求参数 UserRechargesQueryParams

字段类型必填说明
pagenumber页码(由分页机制自动管理,无需手动传入)
limitnumber每页条数(由分页机制自动管理,无需手动传入)

响应 UserRechargesDto[]

字段类型后台原始字段说明
idstring | numberid充值记录 ID,必填
remarkstringremark备注,默认 ''
createdAtstringcreated_at充值时间
dateOnstring | nulldate_on到期时间,默认 null
sourceTypestringsource_type充值来源类型
detailTypestringdetail_type充值明细类型
detailNumbernumberdetail_number充值到账数量,默认 0
typestring记录类型标识,默认 'mycharge'

myOrder · 我的订单(分页)

这是分页列表用例,返回结构为 { list: UserMyOrderDto[] },建议参考快速开始 · 分页列表请求的用法只 new 一次并复用实例:

ts
const myOrderCase = UserDomain.cases.myOrder

await myOrderCase.refresh()

console.log(myOrderCase.list) // UserMyOrderDto[]

请求参数 UserMyOrderQueryParams

字段类型必填说明
currentPagenumber页码(继承自 PagedQueryParams,由分页机制自动管理)
pageSizenumber每页条数(继承自 PagedQueryParams,由分页机制自动管理)
idstring查询条件 ID(按需业务过滤字段)

响应 UserMyOrderDto[](不可变,@Freeze

字段类型后台原始字段说明
idstringid订单 ID,必填
productUserMyOrderProductDtoproduct_info订单关联的商品信息,默认新建一个 UserMyOrderProductDto 实例
createdAtstringcreated_at下单时间
typestring记录类型标识,默认 'myorder'

UserMyOrderProductDto

字段类型后台原始字段说明
namestringproduct_name商品名称,默认 ''
describestringproduct_describe商品描述,默认 ''

subscribe · 我的订阅/追更(分页)

这是分页列表用例,返回结构为 { list: UserSubscribeDto[] },建议参考快速开始 · 分页列表请求的用法只 new 一次并复用实例:

ts
const subscribeCase = UserDomain.cases.subscribe

await subscribeCase.refresh()

console.log(subscribeCase.list) // UserSubscribeDto[]

请求参数 UserSubscribeQueryParams

字段类型必填说明
currentPagenumber页码(继承自 PagedQueryParams,由分页机制自动管理)
pageSizenumber每页条数(继承自 PagedQueryParams,由分页机制自动管理)
idstring查询条件 ID(按需业务过滤字段)

响应 UserSubscribeDto[]

字段类型后台原始字段说明
idnumberid订阅记录 ID,必填
videoIdnumbertheatre_id订阅的短剧 ID,默认 0
bookIdnumberbook_id订阅的小说 ID,默认 0
theatreUserSubscribeTheatreDto关联的短剧信息,默认新建一个 UserSubscribeTheatreDto 实例
bookUserSubscribeBookDto关联的小说信息,默认新建一个 UserSubscribeBookDto 实例

UserSubscribeTheatreDto

字段类型后台原始字段说明
idnumber | stringid短剧 ID
titlestringtitle短剧标题,默认 ''
coverstringcover_url短剧封面,默认 ''
heatnumberheat热度,默认 80
statusnumberupdate_status更新状态,默认 22 表示完结)

UserSubscribeBookDto

字段类型后台原始字段说明
idnumber | stringid小说 ID
titlestringbook_name小说书名,默认 ''
coverstringbook_cover小说封面,默认 ''
heatnumberscore热度,默认 80
statusnumberupdate_status更新状态,默认 22 表示完结)

logout · 退出登录

ts
await UserDomain.cases.logout.run(null)

请求参数 UserLogoutBodyParams

类型为 null,无需传入任何参数(也无请求体)。

响应

无返回值(Promise<void>),仅关注请求是否成功(不抛出异常即成功)。

logoff · 注销账号

ts
await UserDomain.cases.logoff.run(null)

请求参数 UserLogoffBodyParams

类型为 null,无需传入任何参数(也无请求体)。

响应

无返回值(Promise<void>),仅关注请求是否成功。

updateProfile · 更新用户资料

ts
await UserDomain.cases.updateProfile.run({
  nickname: '新昵称',
  headimg: 'https://xxx/avatar.png',
})

请求参数 UserUpdateProfileBodyParams

字段类型必填说明
nicknamestring昵称
headimgstring头像地址
encrypted_datastringAES 加密数据
ivstringAES 加解密初始向量
spread_idnumber | string外推 ID
inviter_uidnumber | string邀请人 ID
inviter_cidnumber | string邀请注册的 cid
inviter_timestring邀请时间

响应

无返回值(Promise<void>),仅关注请求是否成功。

children · 开启青少年模式

ts
await UserDomain.cases.children.run(null)

请求参数 UserChildrenBodyParams

类型为 null,无需传入任何参数(也无请求体)。

响应

无返回值(Promise<void>),仅关注请求是否成功。

deleteChildrenPassword · 关闭青少年模式

ts
await UserDomain.cases.deleteChildrenPassword.run({
  password: '123456',
})

请求参数 UserDeleteChildrenPasswordBodyParams

字段类型必填说明
passwordnumber | string青少年模式密码,用于校验关闭权限

响应

无返回值(Promise<void>),仅关注请求是否成功。

bindPhone · 绑定手机号

ts
await UserDomain.cases.bindPhone.run({
  code: '123456',
})

请求参数 UserBindPhoneBodyParams

字段类型必填说明
codestring手机号验证码

响应

无返回值(Promise<void>),仅关注请求是否成功。

bindProviderPhone · 绑定第三方一键登录手机号

ts
await UserDomain.cases.bindProviderPhone.run({
  code: 'provider_auth_code',
})

请求参数 UserBindProviderPhoneBodyParams

字段类型必填说明
codestring第三方(一键登录厂商)授权 code

响应

无返回值(Promise<void>),仅关注请求是否成功。

install · 上报"添加到桌面"

ts
await UserDomain.cases.install.run(null)

请求参数 UserInstallBodyParams

类型为 null,无需传入任何参数(也无请求体)。

响应

无返回值(Promise<void>),仅关注请求是否成功。

adBenefit · 广告免广告权益记录(分页)

这是分页列表用例,返回结构为 { list: UserAdBenefitDto[] },建议参考快速开始 · 分页列表请求的用法只 new 一次并复用实例:

ts
const adBenefitCase = UserDomain.cases.adBenefit

await adBenefitCase.refresh()

console.log(adBenefitCase.list) // UserAdBenefitDto[]

请求参数 UserAdBenefitQueryParams

字段类型必填说明
currentPagenumber页码(继承自 PagedQueryParams,由分页机制自动管理)
pageSizenumber每页条数(继承自 PagedQueryParams,由分页机制自动管理)
idstring | number查询条件 ID
resource_typeResourceType['value']number资源类型,见 ResourceType

响应 UserAdBenefitDto[]

字段类型后台原始字段说明
idnumberid权益记录 ID,必填
uidnumberuid用户 ID
remarkstringremark备注,默认 ''
expiredAtnumberlimit_time过期时间
surplusnumbersurplus_value剩余数量,默认 0
volumenumbervolume_value券类剩余数量,默认 0
resource_typenumber资源类型原始值,默认 3,对应 ResourceType(可通过 ResourceType.find 反查)
bookIdnumberbook_id关联小说 ID,默认 0
theatreIdnumbertheatre_id关联短剧 ID,默认 0
createdAtstringcreated_at创建时间,默认 '2099-12-31'

payBenefit · 付费免广告权益记录(分页)

这是分页列表用例,返回结构为 { list: UserPayBenefitDto[] },建议参考快速开始 · 分页列表请求的用法只 new 一次并复用实例:

ts
const payBenefitCase = UserDomain.cases.payBenefit

await payBenefitCase.refresh()

console.log(payBenefitCase.list) // UserPayBenefitDto[]

请求参数 UserPayBenefitQueryParams

字段类型必填说明
currentPagenumber页码(继承自 PagedQueryParams,由分页机制自动管理)
pageSizenumber每页条数(继承自 PagedQueryParams,由分页机制自动管理)
idstring | number查询条件 ID
resource_typeResourceType['value']number资源类型,见 ResourceType

响应 UserPayBenefitDto[]

字段类型后台原始字段说明
idnumberid权益记录 ID,必填
uidnumberuid用户 ID
remarkstringremark备注,默认 ''
expiredAtnumberlimit_time过期时间
surplusnumbersurplus_value剩余数量,默认 0
volumenumbervolume_value券类剩余数量,默认 0
resource_typenumber资源类型原始值,默认 3,对应 ResourceType(可通过 ResourceType.find 反查)
bookIdnumberbook_id关联小说 ID,默认 0
theatreIdnumbertheatre_id关联短剧 ID,默认 0
createdAtstringcreated_at创建时间,默认 '2099-12-31'
typestring记录类型标识,默认 'mybenefit'

invite · 获取邀请信息

ts
const { data } = await UserDomain.cases.invite.run(null)

console.log(data.id) // 邀请信息 ID

请求参数 UserInviteQueryParams

类型为 null,无需传入任何参数。

响应 UserInviteDto

字段类型说明
idstring邀请信息 ID,必填

removeSubscribe · 取消订阅/追更

ts
// 取消短剧订阅
await UserDomain.cases.removeSubscribe.run({ theatre_id: '2001' })

// 或取消小说订阅
await UserDomain.cases.removeSubscribe.run({ book_id: '3001' })

请求参数 UserRemoveSubscribeBodyParams

联合类型,theatre_id(短剧)与 book_id(小说)二选一必填:

字段类型必填说明
theatre_idstring | numberbook_id 二选一要取消订阅的短剧 ID
book_idstring | numbertheatre_id 二选一要取消订阅的小说 ID

响应

无返回值(Promise<void>),仅关注请求是否成功。

report · 行为埋点上报

ts
await UserDomain.cases.report.run({
  action: 'read_page_enter',
  ext_json: JSON.stringify({ book_id: '3001', chapter_id: '5001' }),
})

请求参数 UserReportBodyParams

字段类型必填说明
actionstring行为标识
ext_jsonstring扩展参数,JSON 字符串

响应

无返回值(Promise<void>),仅关注请求是否成功。

systemMessage · 系统/站内信(分页)

这是分页列表用例,返回结构为 { list: UserSystemMessageDto[] },建议参考快速开始 · 分页列表请求的用法只 new 一次并复用实例:

ts
const systemMessageCase = UserDomain.cases.systemMessage

await systemMessageCase.refresh()

console.log(systemMessageCase.list) // UserSystemMessageDto[]

请求参数 UserSystemMessageQueryParams

字段类型必填说明
currentPagenumber页码(继承自 PagedQueryParams,由分页机制自动管理)
pageSizenumber每页条数(继承自 PagedQueryParams,由分页机制自动管理)
typeMessageType['value']number消息类型,见 MessageType

响应 UserSystemMessageDto[](不可变,@Freeze

字段类型说明
idstring消息 ID,必填

removePhone · 解绑手机号

ts
await UserDomain.cases.removePhone.run(null)

请求参数 UserRemovePhoneBodyParams

类型为 null,无需传入任何参数(也无请求体)。

响应

无返回值(Promise<void>),仅关注请求是否成功。

枚举

CurrencyType 货币类型

枚举成员valuecode说明
COIN1coin剧币
VOLUME2volume剧券
unlockAll5unlock解锁全集

MessageType 站内信类型

枚举成员valuecode说明
ALL0all所有站内信
POST1post系统推送
FEED2feed回复用户

ResourceType 资源类型

枚举成员valuecode说明
DEFAULT0default未指定是小说还是短剧免广告特权
NOVEL1novel小说阅读免广告特权
VIDEO2video短剧观看免广告特权
ALL3all通用免广告特权

UserSexType 性别

枚举成员valuecode说明
UNKNOWN0unknown保密
MALE1male男性
FEMALE2female女性

内部工具包 · 未开源授权,仅限公司内部授权团队使用