using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
using ToneTuneToolkit.Common;
using UnityEngine.Events;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
///
/// 对志城综合法宝
///
public class Upload2ZCManager : SingletonMaster
{
// ==================================================
#region 2025.04 Nike ADT
private const string USERINFOREQUESTURL = @"https://nike-adt.studiocapsule.cn/api/device/scanQr";
public static UnityAction OnUserInfoDownloaded;
///
/// 获取用户信息
///
///
public void GetUserInfo(string url) => StartCoroutine(nameof(GetUserInfoAction), url);
private IEnumerator GetUserInfoAction(string url)
{
WWWForm wwwForm = new WWWForm();
wwwForm.AddField("qr_content", url);
using (UnityWebRequest www = UnityWebRequest.Post(USERINFOREQUESTURL, wwwForm))
{
www.downloadHandler = new DownloadHandlerBuffer();
yield return www.SendWebRequest();
if (www.result != UnityWebRequest.Result.Success)
{
Debug.Log($"[U2ZCM] {www.error}");
yield break;
}
Debug.Log($"[U2ZCM] {www.downloadHandler.text}");
try
{
uird = JsonConvert.DeserializeObject(www.downloadHandler.text);
}
catch (Exception)
{
Debug.Log($"[U2ZCM] 解析错误");
yield break;
}
if (uird.code != 0)
{
if (OnUserInfoDownloaded != null)
{
OnUserInfoDownloaded(null);
}
yield break;
}
if (OnUserInfoDownloaded != null)
{
UserInfo ui = new UserInfo();
ui.name = uird.data.name;
ui.code = uird.data.code;
ui.save_car = uird.data.save_car;
ui.can_play = uird.data.can_play;
OnUserInfoDownloaded(ui);
}
}
yield break;
}
[SerializeField] private Respon_UserInfoData uird = new Respon_UserInfoData();
[Serializable]
public class Respon_UserInfoData
{
public int code;
public string message;
public UserInfo data;
}
[Serializable]
public class UserInfo
{
public string name;
public string code;
public string save_car;
public string can_play;
}
// ==================================================
private const string USERIMAGEUPLOADURL = @"https://nike-adt.studiocapsule.cn/api/device/upload";
public static UnityAction OnUserImageUploaded;
[SerializeField] private Upload_UserImageData uUID;
public void UpdateUserImageData(string user_code, Texture2D t2dPhoto)
{
uUID = new Upload_UserImageData();
uUID.user_code = user_code;
byte[] fileBytes = t2dPhoto.EncodeToPNG();
uUID.file = fileBytes;
return;
}
public void UploadUserImage() => StartCoroutine(nameof(UploadUserImageAction));
private IEnumerator UploadUserImageAction()
{
WWWForm wwwForm = new WWWForm();
wwwForm.AddField("user_code", uUID.user_code);
wwwForm.AddBinaryData("file", uUID.file);
using (UnityWebRequest www = UnityWebRequest.Post(USERIMAGEUPLOADURL, wwwForm))
{
www.downloadHandler = new DownloadHandlerBuffer();
yield return www.SendWebRequest();
if (www.result != UnityWebRequest.Result.Success)
{
Debug.Log($"[U2ZCM] {www.error}");
yield break;
}
Debug.Log($"[U2ZCM] {www.downloadHandler.text}");
rUID = JsonConvert.DeserializeObject(www.downloadHandler.text);
if (rUID.code != 0)
{
Debug.Log($"[U2ZCM] Code Error");
yield break;
}
DownloadQRCode(rUID.data.qr_url); // 搞图
}
yield break;
}
public class Upload_UserImageData
{
public string user_code;
public byte[] file;
}
[SerializeField] private Respon_UserImageData rUID = new Respon_UserImageData();
[Serializable]
public class Respon_UserImageData
{
public int code;
public string message;
public Respon_UserImageDataData data;
}
[Serializable]
public class Respon_UserImageDataData
{
public string qr_url;
}
#endregion
// ==================================================
#region 获取QR图片
public static UnityAction OnQRImageDownloaded;
[SerializeField] private Texture2D debug_peekQRCode;
public void DownloadQRCode(string url) => StartCoroutine(nameof(DownloadQRCodeAction), url);
private IEnumerator DownloadQRCodeAction(string url)
{
using (UnityWebRequest www = UnityWebRequestTexture.GetTexture(url))
{
yield return www.SendWebRequest();
if (www.result != UnityWebRequest.Result.Success)
{
Debug.Log($"[U2ZCM] {www.error}");
yield break;
}
debug_peekQRCode = DownloadHandlerTexture.GetContent(www); // DEBUG
if (OnQRImageDownloaded != null)
{
OnQRImageDownloaded(DownloadHandlerTexture.GetContent(www));
}
}
yield break;
}
#endregion
// ==================================================
#region 上传文件流
private const string uploadURL = @"https://vw-aud.studiocapsule.cn/api/device/uploadWall";
public UnityAction OnUploadFinished;
public void UploadData(byte[] fileBytes) => StartCoroutine(nameof(UploadDataAction), fileBytes);
private IEnumerator UploadDataAction(byte[] fileBytes)
{
WWWForm wwwForm = new WWWForm();
wwwForm.AddBinaryData("file", fileBytes);
using (UnityWebRequest www = UnityWebRequest.Post(uploadURL, wwwForm))
{
// www.SetRequestHeader("Content-Type", "multipart/form-data"); // wwwForm不要手动设置避免boundary消失
www.downloadHandler = new DownloadHandlerBuffer();
yield return www.SendWebRequest();
if (www.result != UnityWebRequest.Result.Success)
{
Debug.Log($"[U2ZCM] {www.error}");
yield break;
}
Debug.Log($"[U2ZCM] {www.downloadHandler.text}");
ResponData responData = JsonConvert.DeserializeObject(www.downloadHandler.text);
// // 解析方案A 动态类型
// dynamic data = responData.data;
// string qr = data.qr_url;
// 解析方案B
JObject data = JObject.FromObject(responData.data);
string qr_url = data["qr_url"].ToString();
// Debug.Log(qr_url);
DownloadQRCode(qr_url);
}
yield break;
}
#endregion
// ==================================================
public class ResponData
{
public int code;
public string message;
public object data;
}
}