diff --git a/BiliAccount.Geetest.Controls/BiliAccount.Geetest.Controls.csproj b/BiliAccount.Geetest.Controls/BiliAccount.Geetest.Controls.csproj index 7b3606c..cad9ff7 100644 --- a/BiliAccount.Geetest.Controls/BiliAccount.Geetest.Controls.csproj +++ b/BiliAccount.Geetest.Controls/BiliAccount.Geetest.Controls.csproj @@ -105,8 +105,8 @@ - none - false + portable + true Auto diff --git a/BiliAccount/BiliAccount.csproj b/BiliAccount/BiliAccount.csproj index cc7ed15..072531e 100644 --- a/BiliAccount/BiliAccount.csproj +++ b/BiliAccount/BiliAccount.csproj @@ -6,12 +6,12 @@ BiliAccount true BiliAccount - 2.5.4.26 + 2.5.5.27 LeoChen zhangbudademao.com BiliAccount 用于处理B站账号类的操作 - Copyright © 2020 zhangbudademao.com, all rights reserved. + Copyright © 2022 zhangbudademao.com, all rights reserved. MIT https://github.com/LeoChen98/BiliAccount https://github.com/LeoChen98/BiliAccount @@ -19,8 +19,10 @@ bilibili bililive bililogin biliaccount favicon_4.png - fixes: - 1. 修复了由于破站改接口导致无法通过密码登录的问题。 + adds: + 1. 新增 `Linq.ByQRCode.LoginByQrCodeUrl`。 + enhancements: + 1. 更新引用库版本。 true snupkg @@ -114,9 +116,9 @@ - + - + diff --git a/BiliAccount/Core/ByPassword.cs b/BiliAccount/Core/ByPassword.cs index 9d43e66..d4e23d6 100644 --- a/BiliAccount/Core/ByPassword.cs +++ b/BiliAccount/Core/ByPassword.cs @@ -395,7 +395,8 @@ private static void LoginSuccess(DoLogin_DataTemplete obj, ref Account account) account.LoginStatus = Account.LoginStatusEnum.NeedTelVerify; break; - case 3://设备登录验证 + case 2://设备登录验证 + case 3: account.Url = obj.data.url; account.LoginStatus = Account.LoginStatusEnum.NeedSafeVerify; break; diff --git a/BiliAccount/Core/ByQRCode.cs b/BiliAccount/Core/ByQRCode.cs index 56ba52a..d78b01f 100644 --- a/BiliAccount/Core/ByQRCode.cs +++ b/BiliAccount/Core/ByQRCode.cs @@ -49,6 +49,42 @@ public static void CancelLogin() Refresher.Dispose(); } + /// + /// 获取二维码要包含的登录url + /// + /// 二维码要包含的登录url + public static string GetQrcodeUrl() + { + return Http.GetBody("https://passport.bilibili.com/qrcode/getLoginUrl", null, "https://passport.bilibili.com/login", $"BiliAccount/{Config.Dll_Version}"); + } + + /// + /// 获取二维码(只返回登录url) + /// + /// 登录url + public static string GetQrcode() + { + re: + string str = GetQrcodeUrl(); + if (!string.IsNullOrEmpty(str)) + { +#if NETSTANDARD2_0 || NETCORE3_0 + GetQrcode_DataTemplete obj = JsonConvert.DeserializeObject(str); +#else + GetQrcode_DataTemplete obj = (new JavaScriptSerializer()).Deserialize(str); +#endif + + if (obj.code == 0) + { + Monitor = new Timer(MonitorCallback, obj.data.oauthKey, 1000, 1000); + Refresher = new Timer(RefresherCallback, null, 180000, Timeout.Infinite); + } + } + else goto re; + + return str; + } + /// /// 获取二维码 /// @@ -60,8 +96,7 @@ public static Bitmap GetQrcode(Color Foreground,Color Background,bool IsBorderVi { Bitmap qrCodeImage = null; re: - //获取二维码要包含的url - string str = Http.GetBody("https://passport.bilibili.com/qrcode/getLoginUrl", null, "https://passport.bilibili.com/login",$"BiliAccount/{Config.Dll_Version}"); + string str = GetQrcodeUrl(); if (!string.IsNullOrEmpty(str)) { #if NETSTANDARD2_0 || NETCORE3_0 @@ -201,7 +236,10 @@ private static void MonitorCallback(object o) /// private static void RefresherCallback(object state) { - Linq.ByQRCode.RaiseQrCodeRefresh(GetQrcode((Color)((List)state)[0], (Color)((List)state)[1], (bool)((List)state)[2])); + if (state == null) + Linq.ByQRCode.RaiseQrCodeRefresh(GetQrcode()); + else + Linq.ByQRCode.RaiseQrCodeRefresh(GetQrcode((Color)((List)state)[0], (Color)((List)state)[1], (bool)((List)state)[2])); } #endregion Private Methods diff --git a/BiliAccount/Linq/ByQRCode.cs b/BiliAccount/Linq/ByQRCode.cs index 392dd31..8c8a157 100644 --- a/BiliAccount/Linq/ByQRCode.cs +++ b/BiliAccount/Linq/ByQRCode.cs @@ -30,6 +30,12 @@ public class ByQRCode /// 新二维码 public delegate void QrCodeRefresh_Handle(Bitmap newQrCode); + /// + /// 二维码刷新处理程序(仅登录url) + /// + /// 新二维码 + public delegate void QrCodeUrlRefresh_Handle(string newQrCodeUrl); + /// /// 二维码登录状态变更处理程序 /// @@ -46,6 +52,11 @@ public class ByQRCode /// public static event QrCodeRefresh_Handle QrCodeRefresh; + /// + /// 登录Url刷新事件 + /// + public static event QrCodeUrlRefresh_Handle QrCodeUrlRefresh; + /// /// 二维码登录状态变更事件 /// @@ -120,6 +131,16 @@ public static ImageSource GetQrCodeImageSource(Bitmap qrCodeImage) #endif + /// + /// 获取登录Url + /// + /// 登录Url + /// 传入了错误的颜色值 + public static string LoginByQrCodeUrl() + { + return Core.ByQRCode.GetQrcode(); + } + /// /// 获取二维码 /// @@ -168,6 +189,15 @@ internal static void RaiseQrCodeRefresh(Bitmap newQrCode) QrCodeRefresh?.Invoke(newQrCode); } + /// + /// 调起二维码刷新 + /// + /// 新二维码 + internal static void RaiseQrCodeRefresh(string newQrCodeUrl) + { + QrCodeUrlRefresh?.Invoke(newQrCodeUrl); + } + /// /// 调起二维码登录状态变更 ///