using System.Collections; using System.Collections.Generic; using UnityEngine; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System; using System.Text.RegularExpressions; using System.Security.Cryptography; using System.Text; using UnityEngine.Networking; public class Login : SingletonBaseMono { public GameObject loginGameObject; public GameObject tj1; public GameObject tj2; public string id; public string key; private static long Jan1st1970Ms = new DateTime(1970, 1, 1, 0, 0, 0, System.DateTimeKind.Utc).Ticks; private string phoneNumber; /// /// 推荐课程 /// private string firseState; private Action sendListCallBack; void Start() { } // Update is called once per frame void Update() { } /// /// 发送成绩 /// public void SendList(ArrayData arrayData, Action sendListCallBack) { this.sendListCallBack = sendListCallBack; List arrays = new List(); arrays.Add(arrayData); string jsonValue = JsonConvert.SerializeObject(arrays); StartCoroutine(SendListCoroutine(jsonValue)); } public IEnumerator SendListCoroutine(string jsonValue) { WWWForm form = new WWWForm(); form.AddField("terminal-token", GetToken()); form.AddField("phoneNumber", phoneNumber); form.AddField("array", jsonValue); UnityWebRequest unityWebRequest = UnityWebRequest.Post("http://gdsyzxlwxx.dds-ai.cn/jxpc-server/third-api/vr/api/save-train-result", form); yield return unityWebRequest.SendWebRequest(); Debug.Log(unityWebRequest.downloadHandler.text); sendListCallBack?.Invoke(unityWebRequest.downloadHandler.text); } public void InputPhoneNumber(string phoneNumber) { this.phoneNumber = phoneNumber; } public void GetList() { StartCoroutine(GetListCoroutine()); } public IEnumerator GetListCoroutine() { WWWForm form = new WWWForm(); form.AddField("terminal-token", GetToken()); form.AddField("phoneNumber", phoneNumber); UnityWebRequest unityWebRequest = UnityWebRequest.Post("http://gdsyzxlwxx.dds-ai.cn/jxpc-server/third-api/vr/api/get-train-state", form); yield return unityWebRequest.SendWebRequest(); loginGameObject.SetActive(false); JObject keyValuePairs = JObject.Parse(unityWebRequest.downloadHandler.text); string code = keyValuePairs["code"].ToString(); Debug.Log(unityWebRequest.downloadHandler.text); if (code != "200") { } else { firseState = keyValuePairs["data"]["state"].ToString(); switch (firseState) { case "0": tj1.SetActive(false); tj2.SetActive(false); break; case "1": tj1.SetActive(true); tj2.SetActive(false); break; default: tj1.SetActive(false); tj2.SetActive(true); break; } } } private string GetToken() { Dictionary keyValuePairs = new Dictionary(); keyValuePairs.Add("clientId", id); keyValuePairs.Add("expiresTime", (DateTime.UtcNow.Ticks - Jan1st1970Ms) / 10000 + 200000); Debug.Log(keyValuePairs["expiresTime"]); string jsonString = JsonConvert.SerializeObject(keyValuePairs); string base64 = Convert.ToBase64String(Encoding.UTF8.GetBytes(jsonString)); string token = System.Web.HttpUtility.UrlEncode(base64 + "." + ComputeHmacSha256(base64, key)); token = Regex.Replace(token, "%3d", "%3D"); return token; } private string ComputeHmacSha256(string message, string secret) { var keyBytes = Encoding.UTF8.GetBytes(secret); var messageBytes = Encoding.UTF8.GetBytes(message); using (var hmac = new HMACSHA256(keyBytes)) { var hash = hmac.ComputeHash(messageBytes); return Convert.ToBase64String(hash); } } } public class ArrayData { /// /// 错误数量 /// public int wrongCount; /// /// 正确数量 /// public int correctCount; /// /// 错误选择情况 /// public List wrongQuestions; } public class WrongQuestionsItem { /// /// 错误题号 /// public string questionId; /// /// 错误选项 /// public string userWrongOption; }