AlipayManager.cs 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  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 AndroidJavaObject androidUnityTool;
  17. private Dictionary<string, string> PackNameDic = new Dictionary<string, string>();
  18. public void Init()
  19. {
  20. #if UNITY_ANDROID
  21. androidUnityTool = new AndroidJavaObject("com.dashgame.unity.UnityTool");
  22. androidUnityTool.Call("setResponseGameObject", this.name);
  23. #elif UNITY_IOS
  24. #endif
  25. ManaIAP.Complete = true;
  26. }
  27. public void Pay(string id, string packName){
  28. int index = id.IndexOf('a');
  29. id = id.Substring(index);
  30. PackNameDic.Add(Regex.Match(WWW.UnEscapeURL(id), "out_trade_no.*total_amount").Value, packName);
  31. #if UNITY_ANDROID
  32. AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
  33. AndroidJavaObject currentActivity = jc.GetStatic<AndroidJavaObject>("currentActivity");
  34. androidUnityTool.Call("pay", WWW.UnEscapeURL(id), currentActivity);
  35. #elif UNITY_IOS
  36. aliPay(WWW.UnEscapeURL(id), this.name);
  37. #endif
  38. }
  39. public void OnPayResult(string result)
  40. {
  41. //if result=9000 means pay success;
  42. if (int.Parse(result.Split('|')[0]) == 9000)
  43. {
  44. Bubble.Show(null, Language.GetStr("IAP", "PurchaseSuccess"));
  45. JsonData jsonData = JsonMapper.ToObject(result.Split('|')[1]);
  46. string out_trade_no = jsonData["alipay_trade_app_pay_response"]["out_trade_no"].ToString();
  47. string key = "";
  48. string packName = "";
  49. foreach (var kv in PackNameDic)
  50. {
  51. if (kv.Key.Contains(out_trade_no))
  52. {
  53. key = kv.Key;
  54. packName = kv.Value;
  55. }
  56. }
  57. if (!string.IsNullOrEmpty(packName))
  58. {
  59. PackNameDic.Remove(key);
  60. ManaIAP.ProductActionDic[packName].Invoke();
  61. }
  62. }
  63. else
  64. {
  65. Bubble.Show(null, Language.GetStr("IAP", "PurchaseFail"));
  66. }
  67. }
  68. }