FM/Assets/Scripts/FUJIFILM/Other/NetworkManager.cs

275 lines
11 KiB
C#
Raw Normal View History

2025-08-21 13:10:17 +08:00
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
2025-08-27 01:05:19 +08:00
using System.Linq;
2025-09-07 11:06:22 +08:00
using System.Net.Http;
2025-08-21 13:10:17 +08:00
using System.Text;
2025-09-07 11:06:22 +08:00
using Cysharp.Threading.Tasks;
2025-08-21 13:10:17 +08:00
using Newtonsoft.Json;
using Runtime;
using UnityEngine;
using UnityEngine.Networking;
namespace HK.FUJIFILM
{
public class NetworkManager : MonoManager<NetworkManager>
{
private string baseURL
{
get { return "http://3.109.226.137/api/createOrder"; }
}
public void Upload(Action<bool> callback)
{
2025-09-07 11:06:22 +08:00
StartCoroutine(StartUpload(callback));
}
IEnumerator StartUpload(Action<bool> callback)
{
// yield return StartCoroutine(UploadPicture(null));
// yield break;
2025-08-21 13:10:17 +08:00
var shoppingCart = ShoppingCartManager.Instance.ShoppingCart;
2025-09-07 11:06:22 +08:00
yield return StartCoroutine(UploadOrder(shoppingCart.datas.Values.ToList(), "", shoppingCart.userName,
2025-08-27 01:05:19 +08:00
shoppingCart.userModie, "fdsa@gmail.com", "dfsa",
2025-08-21 13:10:17 +08:00
shoppingCart.orderID, "", "", "", "Fujifilm", "Fujifilm", "123", "", callback));
}
private IEnumerator UploadOrder(List<ShoppingCartData> cartItems, string date, string name, string phone,
string email, string address, string orderid, string orderStatus, string credit_card_number,
string transaction_id,
string order_location, string location_kiosk, string payment_method, string order_status,
Action<bool> callback)
{
WWWForm form = new WWWForm();
//customer_name = "default name";
//customer_phone = "default phone";
form.AddField("client_name", name);
form.AddField("client_phone", phone);
form.AddField("client_email", email);
form.AddField("payment_method", payment_method);
form.AddField("credit_card", credit_card_number);
form.AddField("transaction_id", transaction_id);
form.AddField("order_location", order_location);
form.AddField("location_kiosk", location_kiosk);
form.AddField("client_delivery_address", address);
form.AddField("member_id", orderid);
form.AddField("eshop_order_created", date);
form.AddField("order_status", order_status);
for (int i = 0; i < cartItems.Count; i++)
{
int price = cartItems[i].bookAmount;
string productName = $"{cartItems[i].bookName}";
//if (cartItems[i].IsLivePrint)
// productName += " live print";
productName = productName.Replace('\n', ' ');
//if (cartItems[i].IsLivePrint)
// productName += " live print**";
form.AddField("product_name[" + i + "]", productName);
if (productName.Length < 45)
form.AddField("product_category[" + i + "]", productName);
else
form.AddField("product_category[" + i + "]", productName.Substring(0, 45));
//form.AddField("product_color[" + i + "]", cartItems[i].typedWords);
form.AddField("product_price[" + i + "]", price);
form.AddField("product_quantity[" + i + "]", cartItems[i].count);
form.AddField("product_total[" + i + "]", cartItems[i].bookAmount.ToString("0.0"));
// form.AddField("product_theme[" + i + "]", "null");
// form.AddField("product_remarks[" + i + "]", "null");
int c = 0;
string base64String;
string base64String1;
2025-08-27 01:05:19 +08:00
2025-09-07 11:06:22 +08:00
// base64String = Convert.ToBase64String(cartItems[i].previewImage);
// base64String1 = Convert.ToBase64String(cartItems[i].designImage[0]);
base64String = cartItems[i].previewImageUrl;
base64String1 = cartItems[i].designImageUrl[0];
2025-09-07 17:17:08 +08:00
// form.AddField("product_upload_media[" + i + "][" + c + "]", base64String1); // base64String1
// c++;
2025-09-07 11:06:22 +08:00
foreach (var bytes in cartItems[i].designImageUrl)
{
2025-09-07 11:06:22 +08:00
// var tmpStr = Convert.ToBase64String(bytes);
form.AddField("product_upload_media[" + i + "][" + c + "]", bytes);
c++;
}
2025-08-21 13:10:17 +08:00
2025-09-07 17:17:08 +08:00
form.AddField("product_preview1_base64[" + i + "]", base64String);
// form.AddField("product_preview2_base64[" + i + "]", base64String);
2025-08-21 13:10:17 +08:00
}
2025-09-07 17:17:08 +08:00
Debug.Log("form.data is : " + Encoding.UTF8.GetString(form.data));
2025-08-21 13:10:17 +08:00
using (UnityWebRequest www = UnityWebRequest.Post(baseURL, form))
{
yield return www.SendWebRequest();
if (www.isNetworkError || www.isHttpError)
{
Debug.Log(www.error);
callback?.Invoke(false);
}
else
{
string data = www.downloadHandler.text;
Debug.Log(data);
Debug.Log("Form upload complete!");
callback?.Invoke(true);
}
}
yield return new WaitForSeconds(5);
}
2025-09-07 11:06:22 +08:00
public void StartUploadPicture(Action<bool, string> callback)
2025-09-07 11:06:22 +08:00
{
StartCoroutine(UploadPicture(callback));
}
private IEnumerator UploadPicture(Action<bool, string> callback)
2025-09-07 11:06:22 +08:00
{
string apiUrl = "https://api.plugcustom.com.cn/kiosk/ImageUpload/api/upload/FujifilmKiosk";
Debug.Log("Start UploadPicture");
2025-09-07 11:06:22 +08:00
// 准备其他文本参数
Dictionary<string, string> fields = new Dictionary<string, string>
{
{ "type", "auto" },
{ "format", "png" },
// {"token", "你的认证令牌"} // 根据接口要求添加参数
};
foreach (var kv in ShoppingCartManager.Instance.ShoppingCart.datas)
{
var data = kv.Value;
bool isRequestFinish = false;
Debug.Log($"for {data.previewImageName} preview start");
2025-09-07 11:06:22 +08:00
yield return StartCoroutine(SendPostRequest(apiUrl, data.previewImage, data.previewImageName,
fields, (b, u, s) =>
2025-09-07 11:06:22 +08:00
{
if (b)
{
data.previewImageUrl = u.oss_url;
Debug.Log($"for {data.previewImageName} preview finished");
}
else
{
callback?.Invoke(false, s);
2025-09-07 11:06:22 +08:00
}
}));
for (var index = 0; index < data.designImage.Count; index++)
{
int num = index;
isRequestFinish = false;
Debug.Log($"for {data.designImageName[num]} printing start");
2025-09-07 11:06:22 +08:00
var bytes = data.designImage[num];
var imageName = data.designImageName[num];
yield return StartCoroutine(SendPostRequest(apiUrl, bytes, imageName, fields, (b, u, s) =>
2025-09-07 11:06:22 +08:00
{
if (b)
{
Debug.Log($"for {data.designImageName[num]} printing finished");
isRequestFinish = true;
2025-09-07 11:06:22 +08:00
data.designImageUrl.Add(u.oss_url);
}
else
{
callback?.Invoke(false, s);
}
2025-09-07 11:06:22 +08:00
}));
while (!isRequestFinish)
{
yield return null;
}
}
2025-09-07 11:06:22 +08:00
}
callback?.Invoke(true, "");
2025-09-07 11:06:22 +08:00
}
async UniTask WaitSendFinish()
{
var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Post,
"https://api.plugcustom.com.cn/kiosk/ImageUpload/api/upload/FujifilmKiosk");
var content = new MultipartFormDataContent();
content.Add(new StreamContent(File.OpenRead("kWktocHNu/d.png")), "file", "kWktocHNu/d.png");
request.Content = content;
var response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
Console.WriteLine(await response.Content.ReadAsStringAsync());
}
// 示例:发送包含文件和其他参数的 POST 请求
public IEnumerator SendPostRequest(string apiUrl, byte[] fileBytes, string fileName,
Dictionary<string, string> formFields, Action<bool, UploadImageResponse, string> callback)
2025-09-07 11:06:22 +08:00
{
// 1. 准备表单数据
List<IMultipartFormSection> formData = new List<IMultipartFormSection>();
// 添加文本参数(键值对)
if (formFields != null)
foreach (var field in formFields)
{
formData.Add(new MultipartFormDataSection(field.Key, field.Value));
}
// // 2. 添加文件参数(确保文件存在)
// if (File.Exists(filePath))
// {
// byte[] fileBytes = File.ReadAllBytes(filePath);
// string fileName = Path.GetFileName(filePath);
// // 参数名:"file"根据接口要求修改文件MIME类型根据实际文件类型修改
// }
// else
// {
// Debug.LogError("文件不存在:" + filePath);
// yield break;
// }
formData.Add(new MultipartFormFileSection("file", fileBytes, fileName, "image/png"));
// 3. 创建 POST 请求
using (UnityWebRequest request = UnityWebRequest.Post(apiUrl, formData))
{
// 设置超时时间(毫秒)
request.timeout = 10000;
// 4. 发送请求并等待响应
yield return request.SendWebRequest();
// 5. 处理响应
if (request.result == UnityWebRequest.Result.Success)
{
Debug.Log("请求成功,响应内容:" + request.downloadHandler.text);
var response = JsonConvert.DeserializeObject<UploadImageResponse>(request.downloadHandler.text);
callback?.Invoke(true, response, "");
2025-09-07 11:06:22 +08:00
// 在这里解析返回的 JSON 数据(可配合 JsonUtility 或 Newtonsoft.Json
}
else
{
Debug.LogError("请求失败:" + request.error + ",状态码:" + request.responseCode);
callback?.Invoke(false, null, "请求失败:" + request.error + ",状态码:" + request.responseCode);
2025-09-07 11:06:22 +08:00
}
}
}
}
[System.Serializable]
public class UploadImageResponse
{
public string object_key { get; set; }
public string oss_url { get; set; }
public bool success { get; set; }
2025-08-21 13:10:17 +08:00
}
}