Files
QYZH.InteractiveMagazine/QYZH.InteractiveMagazine.Models/Dto/WeChat/WeChatDto.cs
glz 903ccd3073 feat: 新增签到、宠物、期刊绑定、补偿任务等业务模块,优化微信登录流程
本次提交完成了多个核心业务模块的开发与优化:
1.  宠物模块:新增宠物实体、服务接口与实现,支持创建默认宠物、激活、喂养、进化以及喂养记录查询
2.  签到模块:新增签到实体、服务接口、控制器以及相关DTO,支持用户签到和签到信息查询,新增成长值奖励字段
3.  期刊绑定模块:新增用户期刊关联实体、服务接口与控制器,支持扫码绑定期刊、解绑和查询绑定列表
4.  补偿任务模块:新增补偿任务实体、服务接口与实现,用于处理业务失败后的异步重试补偿
5.  优化微信登录流程:拆分登录与快捷登录接口,支持手机号获取,新增首次登录自动创建默认宠物逻辑
6.  调整基础路由与实体状态:修改微信控制器路由前缀,更新宠物状态枚举与默认值
2026-06-04 15:54:30 +08:00

349 lines
7.3 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using QYZH.InteractiveMagazine.Models.Dto;
using Newtonsoft.Json;
namespace QYZH.InteractiveMagazine.IService.Dto;
/// <summary>
/// 微信小程序初次登录输入
/// </summary>
public class WeChatLoginInput
{
/// <summary>
/// 微信登录凭证wx.login 获取的 code
/// </summary>
public string Code { get; set; } = string.Empty;
/// <summary>
/// 手机号获取凭证getPhoneNumber 按钮回调中的 code可选
/// </summary>
public string? PhoneCode { get; set; }
}
/// <summary>
/// 微信小程序快捷登录输入(通过 OpenId 登录)
/// </summary>
public class WeChatQuickLoginInput
{
/// <summary>
/// 微信OpenId初次登录后客户端缓存的 OpenId
/// </summary>
public string OpenId { get; set; } = string.Empty;
}
/// <summary>
/// 微信登录输出
/// </summary>
public class WeChatLoginOutput
{
/// <summary>
/// 访问令牌
/// </summary>
public string Token { get; set; } = string.Empty;
/// <summary>
/// 微信OpenId
/// </summary>
public string OpenId { get; set; } = string.Empty;
/// <summary>
/// 该 OpenId 下的用户列表
/// </summary>
public List<WxUserOutput> Users { get; set; } = [];
}
/// <summary>
/// 微信用户创建/更新输入
/// </summary>
public class WxUserInput
{
/// <summary>
/// 微信OpenId
/// </summary>
public string OpenId { get; set; } = string.Empty;
/// <summary>
/// 微信UnionId
/// </summary>
public string? UnionId { get; set; }
/// <summary>
/// 昵称
/// </summary>
public string? NickName { get; set; }
/// <summary>
/// 头像地址
/// </summary>
public string? AvatarUrl { get; set; }
/// <summary>
/// 手机号
/// </summary>
public string? Phone { get; set; }
/// <summary>
/// 积分余额
/// </summary>
public int Points { get; set; } = 0;
/// <summary>
/// 用户类型: Normal, VIP
/// </summary>
public string Type { get; set; } = "Normal";
/// <summary>
/// 状态: Active, Disabled
/// </summary>
public string Status { get; set; } = "Active";
/// <summary>
/// 密码默认手机后4位
/// </summary>
public string? Pwd { get; set; }
/// <summary>
/// 当前成长值
/// </summary>
public int GrowthPoints { get; set; } = 0;
}
/// <summary>
/// 微信用户输出
/// </summary>
public class WxUserOutput
{
/// <summary>
/// 主键ID
/// </summary>
public long Id { get; set; }
/// <summary>
/// 微信OpenId
/// </summary>
public string OpenId { get; set; } = string.Empty;
/// <summary>
/// 微信UnionId
/// </summary>
public string? UnionId { get; set; }
/// <summary>
/// 昵称
/// </summary>
public string? NickName { get; set; }
/// <summary>
/// 头像地址
/// </summary>
public string? AvatarUrl { get; set; }
/// <summary>
/// 手机号
/// </summary>
public string? Phone { get; set; }
/// <summary>
/// 积分余额
/// </summary>
public int Points { get; set; }
/// <summary>
/// 用户类型
/// </summary>
public string Type { get; set; } = string.Empty;
/// <summary>
/// 状态
/// </summary>
public string Status { get; set; } = string.Empty;
/// <summary>
/// 当前成长值
/// </summary>
public int GrowthPoints { get; set; }
/// <summary>
/// 是否上次在线用户
/// </summary>
public bool IsLastOnline { get; set; }
/// <summary>
/// 创建人
/// </summary>
public string? CreatedBy { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime CreatedAt { get; set; }
/// <summary>
/// 更新人
/// </summary>
public string? UpdatedBy { get; set; }
/// <summary>
/// 更新时间
/// </summary>
public DateTime? UpdatedAt { get; set; }
}
/// <summary>
/// 微信用户分页查询输入
/// </summary>
public class WxUserQueryInput : PageQueryModel
{
/// <summary>
/// 昵称(模糊查询)
/// </summary>
public string? NickName { get; set; }
/// <summary>
/// 手机号(模糊查询)
/// </summary>
public string? Phone { get; set; }
}
/// <summary>
/// 微信 code2session 接口响应
/// </summary>
public class WxCode2SessionResponse
{
/// <summary>
/// 用户唯一标识
/// </summary>
[JsonProperty("openid")]
public string? OpenId { get; set; }
/// <summary>
/// 会话密钥
/// </summary>
[JsonProperty("session_key")]
public string? SessionKey { get; set; }
/// <summary>
/// 用户统一标识(在开放平台绑定了多个应用时使用)
/// </summary>
[JsonProperty("unionid")]
public string? UnionId { get; set; }
/// <summary>
/// 错误码
/// </summary>
[JsonProperty("errcode")]
public int ErrCode { get; set; }
/// <summary>
/// 错误信息
/// </summary>
[JsonProperty("errmsg")]
public string? ErrMsg { get; set; }
}
/// <summary>
/// 微信获取手机号接口响应
/// </summary>
public class WxPhoneNumberResponse
{
/// <summary>
/// 错误码
/// </summary>
[JsonProperty("errcode")]
public int ErrCode { get; set; }
/// <summary>
/// 错误信息
/// </summary>
[JsonProperty("errmsg")]
public string? ErrMsg { get; set; }
/// <summary>
/// 手机号信息
/// </summary>
[JsonProperty("phone_info")]
public WxPhoneInfo? PhoneInfo { get; set; }
}
/// <summary>
/// 微信手机号信息
/// </summary>
public class WxPhoneInfo
{
/// <summary>
/// 用户绑定的手机号(国外手机号会有区号)
/// </summary>
[JsonProperty("phoneNumber")]
public string? PhoneNumber { get; set; }
/// <summary>
/// 没有区号的手机号
/// </summary>
[JsonProperty("purePhoneNumber")]
public string? PurePhoneNumber { get; set; }
/// <summary>
/// 区号
/// </summary>
[JsonProperty("countryCode")]
public string? CountryCode { get; set; }
}
/// <summary>
/// 微信 access_token 接口响应
/// </summary>
public class WxAccessTokenResponse
{
/// <summary>
/// 获取到的凭证
/// </summary>
[JsonProperty("access_token")]
public string? AccessToken { get; set; }
/// <summary>
/// 凭证有效时间(秒)
/// </summary>
[JsonProperty("expires_in")]
public int ExpiresIn { get; set; }
/// <summary>
/// 错误码
/// </summary>
[JsonProperty("errcode")]
public int ErrCode { get; set; }
/// <summary>
/// 错误信息
/// </summary>
[JsonProperty("errmsg")]
public string? ErrMsg { get; set; }
}
/// <summary>
/// 微信切换用户输入
/// </summary>
public class WeChatSwitchUserInput
{
/// <summary>
/// 目标用户ID
/// </summary>
public long UserId { get; set; }
}
/// <summary>
/// 微信切换用户输出
/// </summary>
public class WeChatSwitchUserOutput
{
/// <summary>
/// 新的访问令牌
/// </summary>
public string Token { get; set; } = string.Empty;
/// <summary>
/// 当前切换的用户详情
/// </summary>
public WxUserOutput User { get; set; } = new();
}