NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/Gameplay/UI/UI_StartGameInterfaceContro...

804 lines
25 KiB
C#
Raw Normal View History

2024-07-16 15:24:41 +08:00
using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.UIElements;
using Button = UnityEngine.UI.Button;
using Image = UnityEngine.UI.Image;
using Toggle = UnityEngine.UI.Toggle;
using ScrollView = PhxhSDK.PhxhScrollView;
using Framework;
2024-07-15 12:20:03 +08:00
using Gameplay.Net;
using NLDPB;
2024-07-24 19:24:11 +08:00
using Cysharp.Threading.Tasks;
2024-07-30 19:07:27 +08:00
using UnityEngine.Networking;
using System.Text;
using System.Linq;
using System.Security.Cryptography;
using System;
using Gameplay;
using Newtonsoft.Json;
public class UI_StartGameInterfaceController : UIWindow
{
2024-07-15 12:20:03 +08:00
enum LoginType
{
Account,
PhoneCode
}
#region UI_obj
//UI GameObj
///Auto Gen Start///
public Image Image_Bg;
public Image Image_BgDark;
public Button Button_StartGame;
public Image Image_LoginBg;
public Button Button_AccountLogin_1;
public Image Image_YellowLine_Account_1;
public Button Button_VerifyCodeLogin_1;
public Image Image_YellowLine_VerifyCode_1;
public TMP_InputField InputField_Account;
public Image Image_AccountIcon;
public TMP_InputField InputField_Password;
public Image Image_PasswordIcon;
public Toggle Toggle_RememberPassword;
public TMP_Text Text_RememberPassword;
public Toggle Toggle_Agreement_1;
public TMP_Text Text_Agreement_1;
public Button Button_UnLogin_1;
public Button Button_Login_1;
public TMP_InputField InputField_PhoneNumber;
public Image Image_PhoneIcon;
public TMP_InputField InputField_VerifyCode;
public Image Image_VerifyCodeIcon;
public Button Button_GetVerifyCode;
public Button Button_GetVerifyCodeCooling;
public Toggle Toggle_Agreement_2;
public TMP_Text Text_Agreement_2;
2024-07-15 12:20:03 +08:00
public Button Button_UnLogin_2;
public Button Button_Login_2;
public Image Image_UpdateBg;
public Button Button_Confirm;
public Button Button_Cancle;
public Image Image_BottomLine;
public Button Button_UserCenter;
public Button Button_Notice;
public TMP_Text Text_UID;
public TMP_Text Text_Version;
public Image Image_DarkSide;
2024-07-15 12:20:03 +08:00
public GameObject AccountLoginPanel;
public GameObject VerifyCodeLoginPanel;
///Auto Gen End///
#endregion
LoginType loginType;
LoginData loginSaveData;
LoginData tempSaveData;
bool loginOK = false;
2024-07-15 12:20:03 +08:00
2024-07-30 19:07:27 +08:00
int serverIndex = 1;
2024-07-17 15:29:10 +08:00
// deal with input data
public override void PreLoad(object data = null)
2024-07-15 12:20:03 +08:00
{
loginSaveData = StorageMgr.Instance.GetStorage<LoginData>("LoginData");
if (loginSaveData == null)
loginSaveData = new();
}
// Use this for initialization
public override void OnInit()
{
//bind UI GameObj
UI_StartGameInterfaceBinder.GetComponents(this);
2024-07-15 12:20:03 +08:00
AccountLoginPanel = FindObj("UI_LoginWindow/Image_LoginBg/LoginPanel/AccountLogin");
VerifyCodeLoginPanel = FindObj("UI_LoginWindow/Image_LoginBg/LoginPanel/VerifyCodeLogin");
2024-07-17 15:29:10 +08:00
#if DEVELOPMENT_BUILD || UNITY_EDITOR
FindObj("UI_LoginWindow/Image_LoginBg/ALDropdown").gameObject.SetActive(true);
TMP_Dropdown dropdown = FindObj("UI_LoginWindow/Image_LoginBg/ALDropdown").GetComponent<TMP_Dropdown>();
dropdown.options.Clear();
var serverInfo = AppConfig.Instance.GetServerInfo();
if (serverInfo.Count <= 0)
{
return;
}
foreach (var item in serverInfo)
{
dropdown.options.Add(new TMP_Dropdown.OptionData() { text = item.name });
}
var index = PlayerPrefs.GetInt("ServerIndex", 1);
serverIndex = index;
if (index >= 0 && index < serverInfo.Count)
{
dropdown.captionText.text = serverInfo[index].name;
dropdown.value = index;
}
else
{
dropdown.captionText.text = serverInfo[0].name;
dropdown.value = 0;
}
AppConfig.Instance.Select(index);
dropdown.onValueChanged.AddListener((int index) =>
{
DebugUtil.Log("选择服务器:" + index);
AppConfig.Instance.Select(index);
serverIndex = index;
});
#endif
2024-07-15 12:20:03 +08:00
BindButton(Button_AccountLogin_1, () => SetLoginType(LoginType.Account));
BindButton(Button_VerifyCodeLogin_1, () => SetLoginType(LoginType.PhoneCode));
BindButton(Button_Login_1, OnButtonLogin);
2024-08-07 15:45:10 +08:00
BindButton(Button_Login_2, OnPhoneCodeLoginClick);//OnButtonLogin
2024-07-30 19:07:27 +08:00
BindButton(Button_GetVerifyCode, SendPhoneCodeRequest);
2024-07-24 19:24:11 +08:00
BindButton(Button_UserCenter, OnCancelCurConnect);
2024-07-16 13:11:18 +08:00
BindButton(Button_Notice, OnNoticeClick);
2024-07-15 12:20:03 +08:00
BindButton(Button_StartGame, OnStartGame);
2024-07-17 15:29:10 +08:00
Toggle_RememberPassword.onValueChanged.AddListener(OnRememberPassword);
2024-07-15 12:20:03 +08:00
Toggle_Agreement_1.onValueChanged.AddListener(OnAgreementAccept);
Toggle_Agreement_2.onValueChanged.AddListener(OnAgreementAccept);
InputField_Account.onValueChanged.AddListener(AccountEdit);
InputField_Password.onValueChanged.AddListener(PasswordEdit);
2024-07-30 19:07:27 +08:00
InputField_PhoneNumber.onValueChanged.AddListener(PhoneEdit);
InputField_VerifyCode.onValueChanged.AddListener(PhoneVerifyCodeEdit);
2024-07-15 12:20:03 +08:00
Text_Version.text = "version:" + Application.version;
2024-07-17 15:29:10 +08:00
Text_UID.gameObject.SetActive(false);
2024-07-15 12:20:03 +08:00
2024-07-17 15:29:10 +08:00
EventManager.Instance.Register(EventManager.EventName.LoginComplete, OnLoginOK);
2024-07-24 19:24:11 +08:00
EventManager.Instance.Register(Framework.EventManager.EventName.NetError, OnCancelCurConnect);
2024-08-07 15:45:10 +08:00
EventManager.Instance.Register(EventManager.EventName.PhoneCodeLoginSuc, OnPhoneCodeLoginSuc);
EventManager.Instance.Register<string>(EventManager.EventName.PhoneCodeLoginFail, OnPhoneCodeLoginFailed);
EventManager.Instance.Register<string>(EventManager.EventName.PhoneCodeRequsetFail, OnPhoneCodeRequestFailed);
2024-07-24 19:24:11 +08:00
if (loginSaveData.LoginByPhone)
2024-07-15 12:20:03 +08:00
{
2024-07-17 15:29:10 +08:00
SetLoginType(LoginType.PhoneCode);
}
2024-07-15 12:20:03 +08:00
else
{
2024-07-17 15:29:10 +08:00
SetLoginType(LoginType.Account);
}
if (loginSaveData.LoginByAccount && loginSaveData.rememberPassword)
{
DebugUtil.Log("已有账号密码,自动登录");
LoginAction();
}
}
2024-07-15 12:20:03 +08:00
/// <summary>
2024-07-16 15:24:41 +08:00
/// 进入账号登录界面
2024-07-15 12:20:03 +08:00
/// </summary>
/// <param name="type"></param>
void SetLoginType(LoginType type)
{
loginType = type;
2024-07-16 13:11:18 +08:00
Text_UID.gameObject.SetActive(false);
Button_StartGame.gameObject.SetActive(false);
Button_UserCenter.gameObject.SetActive(false);
Button_Notice.gameObject.SetActive(false);
2024-07-15 12:20:03 +08:00
switch (loginType)
{
2024-07-16 15:24:41 +08:00
case LoginType.Account://账号密码登录
2024-07-15 12:20:03 +08:00
Image_LoginBg.gameObject.SetActive(true);
Image_UpdateBg.gameObject.SetActive(false);
Image_YellowLine_Account_1.gameObject.SetActive(true);
Image_YellowLine_VerifyCode_1.gameObject.SetActive(false);
Toggle_RememberPassword.isOn = loginSaveData.rememberPassword;
Toggle_Agreement_1.isOn = loginSaveData.agreement;
AccountLoginPanel.SetActive(true);
VerifyCodeLoginPanel.SetActive(false);
if (loginSaveData.account != default)
{
InputField_Account.text = loginSaveData.account;
}
if (loginSaveData.password != default && loginSaveData.rememberPassword)
{
InputField_Password.text = loginSaveData.password;
}
else
{
InputField_Password.text = string.Empty;
}
break;
2024-07-16 15:24:41 +08:00
case LoginType.PhoneCode://手机号验证码登录
2024-07-15 12:20:03 +08:00
Image_LoginBg.gameObject.SetActive(true);
Image_UpdateBg.gameObject.SetActive(false);
Image_YellowLine_Account_1.gameObject.SetActive(false);
Image_YellowLine_VerifyCode_1.gameObject.SetActive(true);
Toggle_Agreement_2.isOn = loginSaveData.agreement;
AccountLoginPanel.SetActive(false);
VerifyCodeLoginPanel.SetActive(true);
2024-07-30 19:07:27 +08:00
CheckPhoneCodeButton();
2024-07-15 12:20:03 +08:00
break;
default:
DebugUtil.LogError("SetLoginType error");
break;
}
CheckLoginButton();
}
void HideLoginPanel()
{
2024-07-15 12:20:03 +08:00
Image_LoginBg.gameObject.SetActive(false);
2024-07-16 13:11:18 +08:00
Button_StartGame.gameObject.SetActive(true);
Button_Notice.gameObject.SetActive(true);
Button_UserCenter.gameObject.SetActive(true);
2024-07-15 12:20:03 +08:00
}
void CheckLoginButton()
{
switch (loginType)
{
case LoginType.Account:
if(InputField_Account.text.Length > 0 && InputField_Password.text.Length > 0 && loginSaveData.agreement)
{
Button_Login_1.gameObject.SetActive(true);
}
else
{
Button_Login_1.gameObject.SetActive(false);
}
2024-07-30 19:07:27 +08:00
break;
case LoginType.PhoneCode:
if (InputField_PhoneNumber.text.Length > 0 && InputField_VerifyCode.text.Length > 0 && loginSaveData.agreement)
{
Button_Login_2.gameObject.SetActive(true);
}
else
{
Button_Login_2.gameObject.SetActive(false);
}
2024-07-15 12:20:03 +08:00
break;
}
}
2024-07-30 19:07:27 +08:00
void CheckPhoneCodeButton()
{
if(InputField_PhoneNumber.text.Length == 11)
{
Button_GetVerifyCode.interactable = true;
}
else
{
Button_GetVerifyCode.interactable = false;
}
}
2024-07-15 12:20:03 +08:00
//invoke when open window
protected override void OnShowWindow(object data = null)
{
2024-07-16 15:24:41 +08:00
DebugUtil.Log("新版登录界面!目前仅支持登录测试服,密码随意\n====如需登录其他服务器,请: ====");
DebugUtil.Log("在运行游戏前修改DebugStart节点内CmpFakeStart组件内选项选择旧版登录界面");
}
//invoke when reload window
protected override void OnReloadWindow(object data = null)
{
}
//invoke when close window
protected override void OnHideWindow()
{
}
//invoke when destroy
public override void OnRelease()
{
base.OnRelease();
2024-08-07 15:45:10 +08:00
EventManager.Instance.Unregister<string>(EventManager.EventName.PhoneCodeLoginFail, OnPhoneCodeLoginFailed);
EventManager.Instance.Unregister<string>(EventManager.EventName.PhoneCodeRequsetFail, OnPhoneCodeRequestFailed);
EventManager.Instance.Unregister(EventManager.EventName.PhoneCodeLoginSuc, OnPhoneCodeLoginSuc);
EventManager.Instance.Unregister(EventManager.EventName.LoginComplete, OnLoginOK);
2024-07-24 19:24:11 +08:00
EventManager.Instance.Unregister(Framework.EventManager.EventName.NetError, OnCancelCurConnect);
}
2024-07-15 12:20:03 +08:00
2024-07-17 15:29:10 +08:00
#region Button_Listener
2024-07-15 12:20:03 +08:00
void OnRememberPassword(bool isOn)
{
loginSaveData.rememberPassword = isOn;
}
void OnAgreementAccept(bool isOn)
{
loginSaveData.agreement = isOn;
CheckLoginButton();
}
void AccountEdit(string text)
2024-07-15 12:20:03 +08:00
{
loginSaveData.account = text;
InputField_Password.text = string.Empty;
CheckLoginButton();
}
void PasswordEdit(string text)
2024-07-15 12:20:03 +08:00
{
loginSaveData.password = text;
CheckLoginButton();
}
2024-07-30 19:07:27 +08:00
void PhoneEdit(string text)
{
loginSaveData.phoneNumber = text;
//CheckLoginButton();
CheckPhoneCodeButton();
}
void PhoneVerifyCodeEdit(string text)
{
//loginSaveData.verifyCode = text;
CheckLoginButton();
}
2024-07-15 12:20:03 +08:00
/// <summary>
2024-07-16 15:24:41 +08:00
/// 尝试登录
/// </summary>
2024-07-15 12:20:03 +08:00
void OnButtonLogin()
{
if (!loginSaveData.rememberPassword)
{
loginSaveData.password = default;
}
2024-07-16 15:24:41 +08:00
tempSaveData = new(loginSaveData);//暂存登录数据
2024-07-15 12:20:03 +08:00
LoginAction();
2024-07-15 12:20:03 +08:00
}
2024-07-30 19:07:27 +08:00
/// <summary>
/// 请求发送验证码
/// </summary>
void SendPhoneCodeRequest()
{
2024-08-07 15:45:10 +08:00
PhoneVerifyTool.Instance.PhoneNumber = loginSaveData.phoneNumber;
PhoneVerifyTool.Instance.PhoneCodeWebRequest();
2024-08-06 19:03:05 +08:00
isTimer = true;
2024-07-30 19:07:27 +08:00
CoolingTimer().Forget();
DebugUtil.Log("发送验证码请求");
}
2024-08-06 19:03:05 +08:00
bool isTimer = false;
2024-07-30 19:07:27 +08:00
/// <summary>
/// 手机验证码登录
/// </summary>
2024-08-07 15:45:10 +08:00
void OnPhoneCodeLoginClick()
2024-07-30 19:07:27 +08:00
{
2024-08-07 15:45:10 +08:00
PhoneVerifyTool.Instance.PhoneNumber = loginSaveData.phoneNumber;
PhoneVerifyTool.Instance.HttpVerifyCode = InputField_VerifyCode.text;
Actor.Instance.StartLogin(NLDPB.LoginType.Phxhphone, loginSaveData.phoneNumber);
DebugUtil.Log("尝试登录");
2024-07-30 19:07:27 +08:00
}
async UniTask CoolingTimer()
{
int duration = 60;
2024-07-30 19:07:27 +08:00
Button_GetVerifyCode.gameObject.SetActive(false);
Button_GetVerifyCodeCooling.gameObject.SetActive(true);
while (duration > 0)
{
2024-08-06 19:03:05 +08:00
if (!isTimer)
{
duration = 0;
break;
}
2024-07-30 19:07:27 +08:00
Button_GetVerifyCodeCooling.GetComponentInChildren<TMP_Text>().text = duration + "s";
await UniTask.WaitForSeconds(1);
duration--;
}
Button_GetVerifyCode.gameObject.SetActive(true);
Button_GetVerifyCodeCooling.gameObject.SetActive(false);
}
2024-07-15 12:20:03 +08:00
/// <summary>
2024-07-16 15:24:41 +08:00
/// 服务器登录
/// </summary>
void LoginAction()
{
2024-07-17 15:29:10 +08:00
#if DEVELOPMENT_BUILD || UNITY_EDITOR
PlayerPrefs.SetInt("ServerIndex", serverIndex);
#else
2024-07-16 15:24:41 +08:00
DebugUtil.Log("尝试登录测试服,在此处修改登录逻辑,连接超时以及登录失败请后续补充");
var serverInfos = AppConfig.Instance.GetServerInfo();
2024-07-16 15:24:41 +08:00
AppConfig.Instance.Select(1);
for (int i = 0; i < serverInfos.Count; i++)
{
2024-07-16 15:24:41 +08:00
if (serverInfos[i].name == "测试服1")
2024-07-30 19:07:27 +08:00
{
AppConfig.Instance.Select(i);
DebugUtil.Log("登录测试服");
break;
}
}
2024-07-17 15:29:10 +08:00
#endif
Gameplay.Net.Actor.Instance.StartLogin(NLDPB.LoginType.Phxh, loginSaveData.account);
}
void OnLoginOK()
{
loginOK = true;
2024-07-24 19:24:11 +08:00
HideLoginPanel();
2024-07-24 19:24:11 +08:00
loginSaveData = StorageMgr.Instance.GetStorage<LoginData>("LoginData");
if (loginSaveData == null)
loginSaveData = new();
2024-07-15 17:07:49 +08:00
if (tempSaveData != null)
loginSaveData.SetData(tempSaveData);
loginSaveData.LoginByAccount = true;
2024-07-24 19:24:11 +08:00
StorageMgr.Instance.SyncForce = true;
2024-07-24 19:24:11 +08:00
Text_UID.gameObject.SetActive(true);
Text_UID.text = "UID: " + Actor.Instance.Base.GetProp(ActorProp.ActorId);
2024-07-25 12:18:07 +08:00
//return;
2024-07-24 19:24:11 +08:00
var adultStatus = (int)Actor.Instance.Logic.GetCount((uint)LogicID.AdultAuthStatus);
if (adultStatus == (int)AAStatus.AasNone)
{
DebugUtil.Log("未实名认证");
2024-07-25 13:29:16 +08:00
//UI_RealNameIdentifyController.Open().Forget();
UI_NoticeWindowController.Open().Forget();
2024-07-24 19:24:11 +08:00
}
}
2024-08-07 15:45:10 +08:00
void OnPhoneCodeRequestFailed(string errorMsg)
{
CommonUtils.ShowMessageTips(errorMsg);
isTimer = false;
}
void OnPhoneCodeLoginSuc()
{
if (tempSaveData != null)
{
tempSaveData.AuthCode = PhoneVerifyTool.Instance.HttpReturnCode;
}
loginSaveData.AuthCode = PhoneVerifyTool.Instance.HttpReturnCode;
DebugUtil.Log("验证码登录成功!保存登录凭证:" + loginSaveData.AuthCode);
}
void OnPhoneCodeLoginFailed(string errorMsg)
{
CommonUtils.ShowMessageTips(errorMsg);
}
/// <summary>
2024-07-16 15:24:41 +08:00
/// 用户中心按钮
/// </summary>
2024-07-24 19:24:11 +08:00
void OnCancelCurConnect()
2024-07-15 12:20:03 +08:00
{
2024-07-16 15:24:41 +08:00
if (loginOK)//TODO 点开用户中心退出原先账号是否需要断开连接
{
2024-07-16 15:24:41 +08:00
DebugUtil.Log("登出!断开连接");
Actor.Instance.OnLogout();
NetManager.Instance.CloseClient();
loginOK = false;
}
2024-07-15 12:20:03 +08:00
if (loginSaveData.LoginByPhone)
{
SetLoginType(LoginType.PhoneCode);
}
else
{
SetLoginType(LoginType.Account);
}
}
2024-07-16 13:11:18 +08:00
async void OnNoticeClick()
{
await UI_NoticeController.Open();
}
2024-07-15 12:20:03 +08:00
void OnStartGame()
{
Actor.Instance.OnEnterGame();
2024-07-15 12:20:03 +08:00
}
2024-07-30 19:07:27 +08:00
#endregion
/// <summary>
/// 手机验证登录工具
/// </summary>
2024-07-31 19:21:20 +08:00
/*class PhoneVerifyTool
2024-07-30 19:07:27 +08:00
{
/// <summary>
/// 加密拼接密钥
/// </summary>
static string key = "OfqCL-_jJa9Sm1Nl-TPXvm3drI9td1RPoWn3eLjTe18=";
#region class
public class WebRequestData
{
public string phone;
public WebRequestData(string phone)
{
this.phone = phone;
}
}
public class CheckPhoneLoginRequestData
{
public string phone;
public int sms_code;
public CheckPhoneLoginRequestData(string phone, string code)
{
this.phone = phone;
this.sms_code = int.Parse(code);
}
}
class EncodeData
{
Dictionary<string, string> data = new Dictionary<string, string>();
public EncodeData(Dictionary<string,string> data)
{
this.data = data;
}
public string GetEncodeData()
{
List<string> key = data.Keys.Where(k => k != "signature").ToList();
key.Sort();
List<string> keyValuePairs = key.Select(k => k + "=" + data[k]).ToList();
string concatenate = string.Join("&", keyValuePairs);
DebugUtil.Log("排序结果:" + concatenate);
return concatenate;
}
public static string GetMd5Hash(string input)
{
using (MD5 md5 = MD5.Create())
{
byte[] inputBytes = Encoding.UTF8.GetBytes(input);
byte[] hashBytes = md5.ComputeHash(inputBytes);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < hashBytes.Length; i++)
{
sb.Append(hashBytes[i].ToString("x2"));
}
return sb.ToString();
}
}
public static string GetSha256Hash(string input)
{
using (SHA256 sha256 = SHA256.Create())
{
byte[] inputBytes = Encoding.UTF8.GetBytes(input);
byte[] hashBytes = sha256.ComputeHash(inputBytes);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < hashBytes.Length; i++)
{
sb.Append(hashBytes[i].ToString("x2"));
}
return sb.ToString();
}
}
}
#endregion
/// <summary>
/// 请求发送手机验证码
/// </summary>
/// <param name="url"></param>
/// <param name="sendData"></param>
public static async void PhoneCodeWebRequest(string url, WebRequestData sendData)
{
DebugUtil.Log("发送验证码请求");
DateTimeOffset now = DateTimeOffset.UtcNow;
string timeStamp = now.ToUnixTimeSeconds().ToString();
var encodeData = new EncodeData(new Dictionary<string, string>
{
{"phone",sendData.phone },
{"timestamp", timeStamp }
});
string encodeStr = encodeData.GetEncodeData();
var md5 = EncodeData.GetMd5Hash(encodeStr);
string linkStr = md5 + key;
string sign = EncodeData.GetSha256Hash(linkStr);
DebugUtil.Log("验证码请求信息:"
+ "\n时间戳" + timeStamp
+ "\nphone" + sendData.phone
+ "\n排序结果" + encodeStr
+ "\nmd5" + md5
+ "\n最终sign" + sign);
//header data
Dictionary<string, string> header = new();
header["signature"] = sign;
header["timestamp"] = timeStamp;
//post data
var jsonData = JsonUtility.ToJson(sendData);
byte[] bytes = Encoding.UTF8.GetBytes(jsonData);
DebugUtil.Log("发送请求内容:" + sendData.ToString());
UnityWebRequest www = new UnityWebRequest(url, UnityWebRequest.kHttpVerbPOST)
{
uploadHandler = new UploadHandlerRaw(bytes),
downloadHandler = new DownloadHandlerBuffer(),
};
www.SetRequestHeader("Content-Type", "application/json;charset=utf-8");//为了保证客户端发送的json格式在后端能解析
www.SetRequestHeader("signature", sign);
www.SetRequestHeader("timestamp", timeStamp);
await www.SendWebRequest();
if (www.result != UnityWebRequest.Result.Success)
{
DebugUtil.LogError(www.error);
}
else
{
DebugUtil.Log("http消息请求成功\n返回内容" + www.downloadHandler.text);
}
}
/// <summary>
/// 注册登录请求
/// </summary>
/// <param name="url"></param>
/// <param name="sendData"></param>
public static async void PhoneCodeWebRequest(string url, CheckPhoneLoginRequestData sendData)
{
//List<IMultipartFormSection> formData = new List<IMultipartFormSection>();
DebugUtil.Log("注册登录请求");
DateTimeOffset now = DateTimeOffset.UtcNow;
string timeStamp = now.ToUnixTimeSeconds().ToString();
var encodeData = new EncodeData(new Dictionary<string, string>
{
{"phone",sendData.phone },
{"timestamp", timeStamp },
{"sms_code",sendData.sms_code.ToString() }
});
string encodeStr = encodeData.GetEncodeData();
var md5 = EncodeData.GetMd5Hash(encodeStr);
string linkStr = md5 + key;
string sign = EncodeData.GetSha256Hash(linkStr);
DebugUtil.Log("手机号登录验证信息:"
+ "\n时间戳" + timeStamp
+ "\nphone" + sendData.phone
+ "\n验证码" + sendData.sms_code
+ "\n排序结果" + encodeStr
+ "\nmd5" + md5
+ "\n最终sign" + sign);
//header data
Dictionary<string, string> header = new();
header["signature"] = sign;
header["timestamp"] = timeStamp;
//post data
var jsonData = JsonUtility.ToJson(sendData);
byte[] bytes = Encoding.UTF8.GetBytes(jsonData);
DebugUtil.Log("发送请求内容:" + sendData.ToString());
UnityWebRequest www = new UnityWebRequest(url, UnityWebRequest.kHttpVerbPOST)
{
uploadHandler = new UploadHandlerRaw(bytes),
downloadHandler = new DownloadHandlerBuffer(),
};
www.SetRequestHeader("Content-Type", "application/json;charset=utf-8");//为了保证客户端发送的json格式在后端能解析
www.SetRequestHeader("signature", sign);
www.SetRequestHeader("timestamp", timeStamp);
try
{
await www.SendWebRequest();
}
catch (UnityWebRequestException e)
{
DebugUtil.LogError(e.Message);
}
if (www.result != UnityWebRequest.Result.Success)
{
DebugUtil.LogError(www.error);
CommonUtils.ShowMessageTips("登录失败!");
}
else
{
//DebugUtil.Log("http消息请求成功\n返回内容" + www.downloadHandler.text);
WebRequestResult result = JsonConvert.DeserializeObject<WebRequestResult>(www.downloadHandler.text);
if (result.code == 0)
{
DebugUtil.Log("登录成功验证code" + result.data.code);
2024-07-31 19:21:20 +08:00
2024-07-30 19:07:27 +08:00
}
else
{
DebugUtil.Log("登录失败!" + www.downloadHandler.text);
}
}
}
/// <summary>
/// http请求返回结果
/// </summary>
class WebRequestResult
{
public int code;
public string message;
public ResultData data;
public class ResultData
{
public string code;
}
}
2024-07-31 19:21:20 +08:00
}*/
2024-07-15 12:20:03 +08:00
class LoginData
{
/// <summary>
2024-07-16 15:24:41 +08:00
/// 用账号密码成功登录
/// </summary>
2024-07-15 12:20:03 +08:00
public bool LoginByAccount = false;
/// <summary>
2024-07-16 15:24:41 +08:00
/// 用手机验证成功登录
/// </summary>
2024-07-15 12:20:03 +08:00
public bool LoginByPhone = false;
public string account;
public string password;
public bool rememberPassword;
public bool agreement;
public string phoneNumber;
2024-08-07 15:45:10 +08:00
public string AuthCode;
public LoginData()
{
}
public LoginData(LoginData loginData)
{
this.LoginByAccount = loginData.LoginByAccount;
this.LoginByPhone = loginData.LoginByPhone;
this.account = loginData.account;
this.password = loginData.password;
this.rememberPassword = loginData.rememberPassword;
this.agreement = loginData.agreement;
this.phoneNumber = loginData.phoneNumber;
}
public void SetData(LoginData loginData)
{
this.LoginByAccount = loginData.LoginByAccount;
this.LoginByPhone = loginData.LoginByPhone;
this.account = loginData.account;
this.password = loginData.password;
this.rememberPassword = loginData.rememberPassword;
this.agreement = loginData.agreement;
this.phoneNumber = loginData.phoneNumber;
}
2024-07-15 12:20:03 +08:00
}
}