/// <summary> /// 刷新令牌 /// </summary> /// <returns></returns> public async Task <bool> RefreshTokenAsync() { try { var param = $"access_token={_accessToken}&refresh_token={_refreshToken}&appkey={BiliTool.AndroidKey.Appkey}&ts={AppTool.GetNowSeconds()}"; param += "&sign=" + BiliTool.GetSign(param); var content = await BiliTool.PostContentToWebAsync(Api.PASSPORT_REFRESH_TOKEN, param); var obj = JObject.Parse(content); if (Convert.ToInt32(obj["code"]) == 0) { var data = JsonConvert.DeserializeObject <TokenInfo>(obj["data"].ToString()); var package = new TokenPackage(data.access_token, data.refresh_token, AppTool.DateToTimeStamp(DateTime.Now.AddSeconds(data.expires_in))); InitToken(package); TokenChanged?.Invoke(this, package); await SSO(); return(true); } return(false); } catch (Exception) { return(false); } }
private void TokenChanged(object sender, TokenPackage e) { AppTool.WriteLocalSetting(Settings.AccessToken, e.AccessToken); AppTool.WriteLocalSetting(Settings.RefreshToken, e.RefreshToken); AppTool.WriteLocalSetting(Settings.TokenExpiry, e.Expiry.ToString()); AppTool.WriteLocalSetting(Settings.UserId, ""); }
/// <summary> /// 登录 /// </summary> /// <param name="userName">用户名</param> /// <param name="password">密码</param> /// <param name="captcha">验证码</param> /// <returns></returns> public async Task <LoginCallback> LoginAsync(string userName, string password, string captcha = "") { string param = $"appkey={BiliTool.AndroidKey.Appkey}&build={BiliTool.BuildNumber}&mobi_app=android&password={Uri.EscapeDataString(await EncryptedPasswordAsync(password))}&platform=android&ts={AppTool.GetNowSeconds()}&username={Uri.EscapeDataString(userName)}"; if (!string.IsNullOrEmpty(captcha)) { param += "&captcha=" + captcha; } param += "&sign=" + BiliTool.GetSign(param); string response = await BiliTool.PostContentToWebAsync(Api.PASSPORT_LOGIN, param); var result = new LoginCallback(); result.Status = LoginResultType.Error; if (!string.IsNullOrEmpty(response)) { try { var jobj = JObject.Parse(response); int code = Convert.ToInt32(jobj["code"]); if (code == 0) { var data = JsonConvert.DeserializeObject <LoginResult>(jobj["data"].ToString()); var package = new TokenPackage(data.token_info.access_token, data.token_info.refresh_token, AppTool.DateToTimeStamp(DateTime.Now.AddSeconds(data.token_info.expires_in))); InitToken(package); TokenChanged?.Invoke(this, package); result.Status = LoginResultType.Success; await SSO(); } else if (code == -2100) { result.Status = LoginResultType.NeedValidate; result.Url = jobj["url"].ToString(); } else if (code == -105) { result.Status = LoginResultType.NeedCaptcha; } else if (code == -449) { result.Status = LoginResultType.Busy; } else { result.Status = LoginResultType.Fail; } } catch (Exception) { return(new LoginCallback { Status = LoginResultType.Fail, Url = "" }); } } return(result); }
public BiliBiliClient(string accessToken = "", string refreshToken = "", int expiry = 0) { BiliTool._accessToken = accessToken; var package = new TokenPackage(accessToken, refreshToken, expiry); Account = new AccountService(package); Channel = new ChannelService(); Topic = new TopicService(); Video = new VideoService(); Anime = new AnimeService(); }
public BiliBiliClient( TokenPackage tokenPackage, IAccountService accountService, IChannelService channelService, ITopicService topicService, IVideoService videoService, IAnimeService animeService) { BiliTool._accessToken = tokenPackage.AccessToken; Account = accountService; Channel = channelService; Topic = topicService; Video = videoService; Anime = animeService; }
/// <summary> /// 登陆成功后设置令牌状态 /// </summary> /// <param name="accessToken">令牌</param> /// <param name="mid">用户ID</param> /// <returns></returns> public async Task <bool> SetLoginStatusAsync(string accessToken, string refreshToken = "", int expiry = 0) { try { string refe = string.IsNullOrEmpty(refreshToken) ? accessToken : refreshToken; var package = new TokenPackage(accessToken, refe, AppTool.DateToTimeStamp(DateTime.Now.AddSeconds(expiry == 0 ? 7200 : expiry))); InitToken(package); TokenChanged?.Invoke(this, package); await SSO(); return(true); } catch (Exception) { return(false); } }
/// <summary> /// 生成用户令牌数据包 /// </summary> /// <param name="code">Code</param> /// <returns>TokenPackage 令牌数据包</returns> private TokenPackage initPackage(string code) { var accessToken = new AccessToken { id = code, userId = userId, secret = token.secretKey }; var refreshToken = new AccessToken { id = code, userId = userId, secret = token.refreshKey }; var tokenPackage = new TokenPackage { accessToken = Util.base64(accessToken), refreshToken = Util.base64(refreshToken), expiryTime = token.life, failureTime = token.life * 12 }; token.hash = Util.hash(tokenPackage.accessToken); return(tokenPackage); }
private void InitToken(TokenPackage p) { BiliTool._accessToken = _accessToken = p.AccessToken; _refreshToken = p.RefreshToken; _expiry = Convert.ToInt32(p.Expiry); }
public AccountService(TokenPackage p) { InitToken(p); }