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

275 lines
11 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net.Http;
using System.Text;
using Cysharp.Threading.Tasks;
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)
{
StartCoroutine(StartUpload(callback));
}
IEnumerator StartUpload(Action<bool> callback)
{
// yield return StartCoroutine(UploadPicture(null));
// yield break;
var shoppingCart = ShoppingCartManager.Instance.ShoppingCart;
yield return StartCoroutine(UploadOrder(shoppingCart.datas.Values.ToList(), "", shoppingCart.userName,
shoppingCart.userModie, "fdsa@gmail.com", "dfsa",
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;
// base64String = Convert.ToBase64String(cartItems[i].previewImage);
// base64String1 = Convert.ToBase64String(cartItems[i].designImage[0]);
base64String = cartItems[i].previewImageUrl;
base64String1 = cartItems[i].designImageUrl[0];
// form.AddField("product_upload_media[" + i + "][" + c + "]", base64String1); // base64String1
// c++;
foreach (var bytes in cartItems[i].designImageUrl)
{
// var tmpStr = Convert.ToBase64String(bytes);
form.AddField("product_upload_media[" + i + "][" + c + "]", bytes);
c++;
}
form.AddField("product_preview1_base64[" + i + "]", base64String);
// form.AddField("product_preview2_base64[" + i + "]", base64String);
}
Debug.Log("form.data is : " + Encoding.UTF8.GetString(form.data));
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);
}
public void StartUploadPicture(Action<bool, string> callback)
{
StartCoroutine(UploadPicture(callback));
}
private IEnumerator UploadPicture(Action<bool, string> callback)
{
string apiUrl = "https://api.plugcustom.com.cn/kiosk/ImageUpload/api/upload/FujifilmKiosk";
Debug.Log("Start UploadPicture");
// 准备其他文本参数
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");
yield return StartCoroutine(SendPostRequest(apiUrl, data.previewImage, data.previewImageName,
fields, (b, u, s) =>
{
if (b)
{
data.previewImageUrl = u.oss_url;
Debug.Log($"for {data.previewImageName} preview finished");
}
else
{
callback?.Invoke(false, s);
}
}));
for (var index = 0; index < data.designImage.Count; index++)
{
int num = index;
isRequestFinish = false;
Debug.Log($"for {data.designImageName[num]} printing start");
var bytes = data.designImage[num];
var imageName = data.designImageName[num];
yield return StartCoroutine(SendPostRequest(apiUrl, bytes, imageName, fields, (b, u, s) =>
{
if (b)
{
Debug.Log($"for {data.designImageName[num]} printing finished");
isRequestFinish = true;
data.designImageUrl.Add(u.oss_url);
}
else
{
callback?.Invoke(false, s);
}
}));
while (!isRequestFinish)
{
yield return null;
}
}
}
callback?.Invoke(true, "");
}
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)
{
// 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, "");
// 在这里解析返回的 JSON 数据(可配合 JsonUtility 或 Newtonsoft.Json
}
else
{
Debug.LogError("请求失败:" + request.error + ",状态码:" + request.responseCode);
callback?.Invoke(false, null, "请求失败:" + request.error + ",状态码:" + request.responseCode);
}
}
}
}
[System.Serializable]
public class UploadImageResponse
{
public string object_key { get; set; }
public string oss_url { get; set; }
public bool success { get; set; }
}
}