AlipayManager.cs 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. using UnityEngine;
  2. using System.IO;
  3. using System.Collections;
  4. using System.Collections.Generic;
  5. using System.Text.RegularExpressions;
  6. using System.Runtime.InteropServices;
  7. using LitJson;
  8. public class AliplayManager : UnitySingleton<AliplayManager>
  9. {
  10. #if UNITY_ANDROID
  11. private AndroidJavaObject androidUnityTool;
  12. #elif UNITY_IOS
  13. //[DllImport("__Internal")]
  14. //private static extern void aliPay(string orderInfo, string gameObjectName);
  15. #endif
  16. private Dictionary<string, string> PackNameDic = new Dictionary<string, string>();
  17. public void Init()
  18. {
  19. #if UNITY_ANDROID
  20. androidUnityTool = new AndroidJavaObject("com.dashgame.unity.UnityTool");
  21. androidUnityTool.Call("setResponseGameObject", this.name);
  22. #elif UNITY_IOS
  23. #endif
  24. IAPManager.Inited = true;
  25. }
  26. public void Pay(string id, string packName){
  27. int index = id.IndexOf('a');
  28. id = id.Substring(index);
  29. PackNameDic.Add(Regex.Match(WWW.UnEscapeURL(id), "out_trade_no.*total_amount").Value, packName);
  30. #if UNITY_ANDROID
  31. AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
  32. AndroidJavaObject currentActivity = jc.GetStatic<AndroidJavaObject>("currentActivity");
  33. androidUnityTool.Call("pay", WWW.UnEscapeURL(id), currentActivity);
  34. #elif UNITY_IOS
  35. //aliPay(WWW.UnEscapeURL(id), this.name);
  36. #endif
  37. }
  38. public void OnPayResult(string result)
  39. {
  40. //if result=9000 means pay success;
  41. if (int.Parse(result.Split('|')[0]) == 9000)
  42. {
  43. Bubble.Show(null, Language.GetStr(LanguageLabel.IAP__PurchaseSuccess));
  44. JsonData jsonData = JsonMapper.ToObject(result.Split('|')[1]);
  45. string out_trade_no = jsonData["alipay_trade_app_pay_response"]["out_trade_no"].ToString();
  46. string key = "";
  47. string packName = "";
  48. foreach (var kv in PackNameDic)
  49. {
  50. if (kv.Key.Contains(out_trade_no))
  51. {
  52. key = kv.Key;
  53. packName = kv.Value;
  54. }
  55. }
  56. if (!string.IsNullOrEmpty(packName))
  57. {
  58. PackNameDic.Remove(key);
  59. IAPManager.BuyProductCallbackDictionary[packName].Invoke();
  60. }
  61. }
  62. else
  63. {
  64. Bubble.Show(null, Language.GetStr(LanguageLabel.IAP__PurchaseFail));
  65. }
  66. }
  67. }