diff --git a/ExtraPluginCfgs/Android/flexion/FlexionSDKHelper.java b/ExtraPluginCfgs/Android/flexion/FlexionSDKHelper.java index c96bf3c..dfdaca5 100644 --- a/ExtraPluginCfgs/Android/flexion/FlexionSDKHelper.java +++ b/ExtraPluginCfgs/Android/flexion/FlexionSDKHelper.java @@ -88,8 +88,9 @@ public class FlexionSDKHelper implements SDKManager.ISDKHelper { } @Override - public void pay(Activity activity, String productId, String productName, - String productCount, String prodorderId, String appInfo) { + public void pay(Activity activity, String productId, String productPrice, + String productName, String productCount, String prodorderId, + String appInfo) { Log.i(TAG, "[PAY-FLOW] pay called: productId=" + productId + " billingReady=" + billingConnected); if (billingService == null || !billingConnected) { Log.e(TAG, "[PAY-FLOW] billing not ready"); @@ -101,11 +102,14 @@ public class FlexionSDKHelper implements SDKManager.ISDKHelper { byte[] decoded = Base64.getDecoder().decode(appInfo); JSONObject json = new JSONObject(new String(decoded, "UTF-8")); JSONObject payload = new JSONObject(); - payload.put("playerId", json.optString("playerId", "")); + payload.put("userId", json.optString("userId", "")); + payload.put("pfid", json.optString("pfid", "")); payload.put("customData", json.optString("customData", "")); + payload.put("prodPrice", productPrice); + payload.put("prodCount", productCount); developerPayload = payload.toString(); } catch (Exception e) { - Log.w(TAG, "Failed to extract playerId/customData from appInfo: " + e.getMessage()); + Log.w(TAG, "Failed to extract payload fields from appInfo: " + e.getMessage()); } String finalPayload = developerPayload; activity.runOnUiThread(() -> { diff --git a/sdk-intergration/Assets/Scripts/SDKTest.cs b/sdk-intergration/Assets/Scripts/SDKTest.cs index acfbc82..7f26039 100644 --- a/sdk-intergration/Assets/Scripts/SDKTest.cs +++ b/sdk-intergration/Assets/Scripts/SDKTest.cs @@ -231,7 +231,7 @@ public class SDKTest : MonoBehaviour var purchaseInfo = new JObject(); purchaseInfo["pfid"] = "TestPlayer"; purchaseInfo["customData"] = "{\"test\":\"test\"}"; - purchaseInfo["playerId"] = TYSdkFacade.TYAccountInfo.strUserId; + purchaseInfo["userId"] = TYSdkFacade.TYAccountInfo.strUserId; PaymentInfo payResult = await TYSdkFacade.Instance.Pay(sku, 1, sku.ProdPrice, purchaseInfo); _messageTxt.text = "\n" + $"Success : {payResult.isSuccess}"; diff --git a/sdk-intergration/Packages/tysdk/Plugins/Android/SDKManager.java b/sdk-intergration/Packages/tysdk/Plugins/Android/SDKManager.java index 2cc9cba..601cbab 100644 --- a/sdk-intergration/Packages/tysdk/Plugins/Android/SDKManager.java +++ b/sdk-intergration/Packages/tysdk/Plugins/Android/SDKManager.java @@ -60,8 +60,9 @@ public class SDKManager { // Channel helper public interface ISDKHelper { void init(Activity activity); - void pay(Activity activity, String productId, String productName, - String productCount, String prodorderId, String appInfo); + void pay(Activity activity, String productId, String productPrice, + String productName, String productCount, String prodorderId, + String appInfo); void queryProducts(); void consume(String token); } @@ -72,8 +73,8 @@ public class SDKManager { sdkHelper = helper; } - public static void ConsumeFlexionPurchase(String token) { - Log.i(TAG, "ConsumeFlexionPurchase: token=" + token); + public static void ConsumePurchase(String token) { + Log.i(TAG, "ConsumePurchase: token=" + token); if (sdkHelper != null) { sdkHelper.consume(token); } @@ -395,7 +396,7 @@ public class SDKManager { String productCount, String prodorderId, String appInfo, String ptype) { if (sdkHelper != null) { - sdkHelper.pay(UnityPlayer.currentActivity, productId, productName, productCount, prodorderId, appInfo); + sdkHelper.pay(UnityPlayer.currentActivity, productId, productPrice, productName, productCount, prodorderId, appInfo); return; } PayEventData.PayData payData = new PayEventData.PayData(); diff --git a/sdk-intergration/Packages/tysdk/Runtime/PaymentVerifier.cs b/sdk-intergration/Packages/tysdk/Runtime/PaymentVerifier.cs index a148e49..7f70a88 100644 --- a/sdk-intergration/Packages/tysdk/Runtime/PaymentVerifier.cs +++ b/sdk-intergration/Packages/tysdk/Runtime/PaymentVerifier.cs @@ -1,7 +1,7 @@ using System; -using System.Text; using System.Threading; using System.Threading.Tasks; +using Newtonsoft.Json; using UnityEngine; using UnityEngine.Networking; @@ -90,20 +90,21 @@ namespace tysdk Debug.Log($"[FlexionPaymentVerifier] HTTP retry {attempt}/{MaxRetries}, waiting {delay.TotalSeconds}s"); await Task.Delay(delay); } - lastResult = await SendVerifyRequest(BuildRequestBody(info)); + lastResult = await SendVerifyRequest(info); if (lastResult.success) return lastResult; Debug.LogWarning($"[FlexionPaymentVerifier] HTTP attempt {attempt + 1} failed: {lastResult.msg}"); } return lastResult; } - private async Task SendVerifyRequest(string body) + private async Task SendVerifyRequest(PaymentInfo info) { var cts = new CancellationTokenSource(Timeout); try { Debug.Log("[FlexionPaymentVerifier] Sending verification request"); + var body = JsonConvert.SerializeObject(info); using var req = new UnityWebRequest(VERIFY_URL, "POST"); req.uploadHandler = new UploadHandlerRaw(Encoding.UTF8.GetBytes(body)); req.downloadHandler = new DownloadHandlerBuffer(); @@ -139,35 +140,15 @@ namespace tysdk cts.Dispose(); } } - - private static string BuildRequestBody(PaymentInfo info) - { - var body = new StringBuilder(); - body.Append('{'); - body.Append("\"purchaseJson\":").Append(Escape(info.purchaseJson)).Append(','); - body.Append("\"signature\":").Append(Escape(info.signature)).Append(','); - body.Append("\"orderId\":").Append(Escape(info.orderId)).Append(','); - body.Append("\"productId\":").Append(Escape(info.productId)).Append(','); - body.Append("\"purchaseToken\":").Append(Escape(info.purchaseToken)); - body.Append('}'); - return body.ToString(); - } #endif - private static string Escape(string s) - { - if (s == null) return "null"; - return '"' + s.Replace("\\", "\\\\").Replace("\"", "\\\"") + '"'; - } - #if UNITY_EDITOR public void Consume(string token) { } #elif UNITY_ANDROID public void Consume(string token) { if (string.IsNullOrEmpty(token)) return; - using var sdkManager = new AndroidJavaClass("com.unity3d.player.SDKManager"); - sdkManager.CallStatic("ConsumeFlexionPurchase", token); + UnityBridgeFunc.ConsumePurchase(token); } #endif } diff --git a/sdk-intergration/Packages/tysdk/Runtime/TYSdkFacade_Pay.cs b/sdk-intergration/Packages/tysdk/Runtime/TYSdkFacade_Pay.cs index a791136..2ee3379 100644 --- a/sdk-intergration/Packages/tysdk/Runtime/TYSdkFacade_Pay.cs +++ b/sdk-intergration/Packages/tysdk/Runtime/TYSdkFacade_Pay.cs @@ -30,7 +30,6 @@ namespace tysdk if (purchaseInfo == null) purchaseInfo = new JObject(); - // purchaseInfo["playerId"] = _accountInfo.strUserId; string extraInfo = purchaseInfo.ToString(Newtonsoft.Json.Formatting.None); extraInfo = Convert.ToBase64String(Encoding.UTF8.GetBytes(extraInfo)); diff --git a/sdk-intergration/Packages/tysdk/Runtime/UnityBridgeFunc.cs b/sdk-intergration/Packages/tysdk/Runtime/UnityBridgeFunc.cs index e665a43..6ec331c 100644 --- a/sdk-intergration/Packages/tysdk/Runtime/UnityBridgeFunc.cs +++ b/sdk-intergration/Packages/tysdk/Runtime/UnityBridgeFunc.cs @@ -47,6 +47,8 @@ namespace tysdk public static void Review() { } + public static void ConsumePurchase(string token) { } + public static void FBShareLink(string title, string content, string url) { } public static void MessengerShareLink(string title, string content, string url) { } @@ -168,6 +170,14 @@ namespace tysdk } } + public static void ConsumePurchase(string token) + { + using (var sdkManager = new AndroidJavaClass(SDK_CLASS)) + { + sdkManager.CallStatic("ConsumePurchase", token); + } + } + public static void UnityKnow(String productId, String productName, String productCount, String prodorderId, String appInfo) { using (var sdkManager = new AndroidJavaClass(SDK_CLASS))