181 lines
6.1 KiB
C#
181 lines
6.1 KiB
C#
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Threading.Tasks;
|
|
using Newtonsoft.Json.Linq;
|
|
using UnityEngine;
|
|
using System;
|
|
using System.Text;
|
|
|
|
namespace tysdk
|
|
{
|
|
public partial class TYSdkFacade : MonoBehaviour
|
|
{
|
|
/*================================================
|
|
|
|
____ _
|
|
| _ \ __ _ _ _ _ __ ___ ___ _ __ | |_
|
|
| |_) / _` | | | | '_ ` _ \ / _ \ '_ \| __|
|
|
| __/ (_| | |_| | | | | | | __/ | | | |_
|
|
|_| \__,_|\__, |_| |_| |_|\___|_| |_|\__|
|
|
|___/
|
|
=================================================*/
|
|
|
|
private bool _payFirstNegativeHandled;
|
|
|
|
//public async Task<PaymentInfo> Pay(string prodId, string prodPrice, string prodName, int count, string pType, string price_amount_micros =null)
|
|
public async Task<PaymentInfo> Pay(SKUDetail prod, int count, float usdprice, JObject purchaseInfo)
|
|
{
|
|
if (!IsLoggedIn) return new PaymentInfo() { code = "-1", msg = "未登录" };
|
|
|
|
var orderId = System.Guid.NewGuid().ToString();
|
|
|
|
if(purchaseInfo == null)
|
|
purchaseInfo = new JObject();
|
|
|
|
string extraInfo = purchaseInfo.ToString(Newtonsoft.Json.Formatting.None);
|
|
//to base64
|
|
extraInfo = Convert.ToBase64String(Encoding.UTF8.GetBytes(extraInfo));
|
|
Debug.Log("[TYSdk] extraInfo: " + extraInfo);
|
|
var prodId = prod.ProdID;
|
|
var prodPrice = usdprice.ToString();
|
|
var prodName = prod.title;
|
|
|
|
#if UNITY_EDITOR
|
|
|
|
await Task.Yield();
|
|
var result = new PaymentInfo()
|
|
{
|
|
code = "0",
|
|
msg = "success",
|
|
count = count,
|
|
orderId = orderId,
|
|
productId = prodId,
|
|
price = prodPrice
|
|
};
|
|
|
|
|
|
return result;
|
|
#elif UNITY_ANDROID
|
|
|
|
var pType = "googleiab.global.app";
|
|
|
|
var task = TYSDKCallbackManager.Instance.RegisterCallback<PaymentInfo>(TimeSpan.FromSeconds(30));
|
|
|
|
try
|
|
{
|
|
//UnityBridgeFunc.UnityKnow(prodId, prodName, count.ToString(), orderId, extraInfo);
|
|
UnityBridgeFunc.UnityKnowNew(prodId, prodPrice, prodName, count.ToString(), orderId, extraInfo,pType);
|
|
|
|
var result = await task;
|
|
result.count = count;
|
|
result.orderId = orderId;
|
|
result.productId = prodId;
|
|
result.price = prodPrice;
|
|
return result;
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
Debug.LogWarning($"[TYSdkFacade::Pay] Faild {e.Message}");
|
|
return new PaymentInfo(){code = "-1"};
|
|
}
|
|
finally
|
|
{
|
|
_payFirstNegativeHandled = false;
|
|
}
|
|
|
|
|
|
#elif UNITY_IOS
|
|
var task = TYSDKCallbackManager.Instance.RegisterCallback<PaymentInfo>(TimeSpan.FromSeconds(30));
|
|
UnityBridgeFunc.UnityKnow(_accountInfo.strUserId, prodId, prodPrice, prodName, count.ToString(), orderId, extraInfo);
|
|
|
|
try{
|
|
var result = await task;
|
|
result.count = count;
|
|
result.orderId = orderId;
|
|
result.productId = prodId;
|
|
result.price = prodPrice;
|
|
return result;
|
|
}
|
|
catch(Exception e)
|
|
{
|
|
Debug.LogWarning($"[TYSdkFacade::Pay] Faild {e.Message}");
|
|
return new PaymentInfo(){code = "-1"};
|
|
}
|
|
finally
|
|
{
|
|
_payFirstNegativeHandled = false;
|
|
}
|
|
#endif
|
|
}
|
|
|
|
//支付的回调
|
|
public void PayResult(string json)
|
|
{
|
|
Debug.Log("[TYSdkFacade] pay callback:" + json);
|
|
var jresult = JObject.Parse(json);
|
|
var result = new PaymentInfo();
|
|
result.code = jresult["code"].ToString();
|
|
result.msg = jresult["errStr"].ToString();
|
|
if(result.code == "-1")
|
|
{
|
|
if (!_payFirstNegativeHandled)
|
|
{
|
|
_payFirstNegativeHandled = true;
|
|
TYSDKCallbackManager.Instance.ResetCallbackTimeout<PaymentInfo>(TimeSpan.FromSeconds(5));
|
|
Debug.Log("[TYSdkFacade] pay failed (first time): reset timeout to 5s, waiting next pay callback");
|
|
}
|
|
else
|
|
{
|
|
Debug.Log("[TYSdkFacade] pay failed: waiting next pay callback");
|
|
}
|
|
return;
|
|
}
|
|
TYSDKCallbackManager.Instance.TryTriggerCallback(result);
|
|
}
|
|
|
|
// Get Pay list
|
|
public async Task<ProductListInfo> GetSKUList()
|
|
{
|
|
if (!IsLoggedIn) return new ProductListInfo() { code = -1, msg = "未登录" };
|
|
|
|
#if UNITY_EDITOR
|
|
await Task.Yield();
|
|
|
|
var result = new ProductListInfo();
|
|
return result;
|
|
#elif UNITY_ANDROID || UNITY_IOS
|
|
var task = TYSDKCallbackManager.Instance.RegisterCallback<ProductListInfo>();
|
|
UnityBridgeFunc.GetSKUList();
|
|
var result = await task;
|
|
return result;
|
|
#endif
|
|
}
|
|
|
|
//商品列表的回调
|
|
public void SKUListResult(string json)
|
|
{
|
|
Debug.Log("[TYSdkFacade] GetSKUList callback");
|
|
var jresult = JObject.Parse(json);
|
|
int code = int.Parse(jresult["code"].ToString());
|
|
var result = new ProductListInfo();
|
|
if (code == 0)
|
|
{
|
|
string productStr = jresult["respObj"].ToString();
|
|
result.code = code;
|
|
#if UNITY_ANDROID && !UNITY_EDITOR
|
|
var jsonObjList = Newtonsoft.Json.JsonConvert.DeserializeObject<List<SKUDetail>>(productStr);
|
|
result.products = jsonObjList;
|
|
#elif UNITY_IOS && !UNITY_EDITOR
|
|
result.ReadSKUFromJson(productStr);
|
|
#endif
|
|
}
|
|
|
|
TYSDKCallbackManager.Instance.TryTriggerCallback(result);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|