using UnityEngine; using System.IO; using System.Collections; using System.Collections.Generic; using System.Text.RegularExpressions; using LitJson; public class AliplayManager : UnitySingleton { #if UNITY_ANDROID private AndroidJavaObject androidUnityTool; #elif UNITY_IOS [DllImport("__Internal")] private static extern void aliPay(string orderInfo, string gameObjectName); #endif private AndroidJavaObject androidUnityTool; private Dictionary PackNameDic = new Dictionary(); public void Init() { #if UNITY_ANDROID androidUnityTool = new AndroidJavaObject("com.dashgame.unity.UnityTool"); androidUnityTool.Call("setResponseGameObject", this.name); #elif UNITY_IOS #endif ManaIAP.Complete = true; } public void Pay(string id, string packName){ int index = id.IndexOf('a'); id = id.Substring(index); PackNameDic.Add(Regex.Match(WWW.UnEscapeURL(id), "out_trade_no.*total_amount").Value, packName); #if UNITY_ANDROID AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject currentActivity = jc.GetStatic("currentActivity"); androidUnityTool.Call("pay", WWW.UnEscapeURL(id), currentActivity); #elif UNITY_IOS aliPay(WWW.UnEscapeURL(id), this.name); #endif } public void OnPayResult(string result) { //if result=9000 means pay success; if (int.Parse(result.Split('|')[0]) == 9000) { Bubble.Show(null, Language.GetStr("IAP", "PurchaseSuccess")); JsonData jsonData = JsonMapper.ToObject(result.Split('|')[1]); string out_trade_no = jsonData["alipay_trade_app_pay_response"]["out_trade_no"].ToString(); string key = ""; string packName = ""; foreach (var kv in PackNameDic) { if (kv.Key.Contains(out_trade_no)) { key = kv.Key; packName = kv.Value; } } if (!string.IsNullOrEmpty(packName)) { PackNameDic.Remove(key); ManaIAP.ProductActionDic[packName].Invoke(); } } else { Bubble.Show(null, Language.GetStr("IAP", "PurchaseFail")); } } }