275 lines
11 KiB
C#
275 lines
11 KiB
C#
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; }
|
||
}
|
||
} |