/// <summary> 向服务器申请重连补单 </summary> private void RequestPayout() { EB.Debug.Log("【商城】申请重连补单!"); List <Transaction> list = SparxTransactionHelper.GetAllVaildLoacalTrans(); if (list.Count < 0) { return; } for (int i = 0; i < list.Count; i++) { IAP.Transaction trans = list[i]; if (trans == null) { EB.Debug.Log("【商城】本地订单是空的,序号i = {0}", i); continue; } EB.Debug.Log("【商城】添加校验订单:{0}", trans.transactionId); _verify.Add(trans); } EB.Debug.Log("【商城】添加的需要校验的订单数量:{0}", _verify.Count); }
void OnPurchaseCanceled(IAP.Transaction transaction) { EB.Debug.Log("【商城】支付取消"); _config.Listener.OnOfferPurchaseCanceled(); if (transaction != null) { SparxTransactionHelper.DelTransInLocal(transaction); } }
void OnPurchaseFailed(string error, IAP.Transaction transaction) { EB.Debug.Log("【商城】支付失败:{0}" + error); _config.Listener.OnOfferPurchaseFailed(error); if (transaction != null) { SparxTransactionHelper.DelTransInLocal(transaction); } }
public void BuyPayout(IAP.Item item, System.Action <string, IAP.Transaction> callback, object extraInfo = null) { if (!string.IsNullOrEmpty(item.LimitedTimeGiftId))//新增限时礼包的物品关联处理 { if (extraInfo == null) { var ht = Johny.HashtablePool.Claim(); ht["limitedTimeGiftId"] = item.LimitedTimeGiftId; extraInfo = ht; } else { ((Hashtable)extraInfo).Add("limitedTimeGiftId", item.LimitedTimeGiftId); } } _api.BuyPayout(string.Format("{0}{1}", _externalId, _iapManager.ProviderName), item.payoutId, _iapManager.ProviderName, item.value, new ArrayList(), delegate(string error, Hashtable data) { if (!string.IsNullOrEmpty(error)) { callback(error, null); return; } if (data == null || data.Count == 0) { callback("BuyPayout result is empty", null); return; } IAP.Transaction transaction = new IAP.Transaction(); transaction.transactionId = EB.Dot.String("store.info.transactionid", data, null); transaction.productId = item.productId; #if USE_TENCENTSDK || USE_VIVOSDK || USE_HUAWEISDK transaction.payload = EB.Dot.String("store.info.extraInfo", data, null); #else transaction.payload = EB.Dot.String("store.info.extraInfo", data, item.developerPayload.Replace("{platform}", _iapManager.ProviderName)); #endif transaction.signature = EB.Dot.String("store.info.sign", data, transaction.signature); transaction.platform = _iapManager.ProviderName; transaction.serverPayload = _iapManager.GetPayload(transaction); transaction.IAPPlatform = _iapManager.ProviderName;//多渠道支付时用到 callback(null, transaction); //生成订单后把订单存储在本地 SparxTransactionHelper.AddTransInLocal(transaction); }, extraInfo); }
///正常验单回调 private void OnVerifyPayout(IAP.Item item, IAP.Transaction trans, string err, Hashtable data) { if (!string.IsNullOrEmpty(err)) { EB.Debug.Log("【商城】订单校验有错误transactionId:{0}", trans.transactionId); if (EB.Dot.Bool("verify.retry", data, true)) { EB.Debug.Log("【商城】订单再次重新尝试校验transactionId:{0}", trans.transactionId); int delay = (int)EB.Dot.Single("verify.delay", data, 3.0f) * 1000; EB.Coroutines.SetTimeout(delegate() { if (!_verify.Contains(trans)) { _verify.Add(trans); } }, delay); } else { EB.Debug.Log("【商城】订单无效移除,并加进补单列表transactionId:{0};err:{1}", trans.transactionId, err); _config.Listener.OnOfferPurchaseFailed(err); CheckSupplementTransaction(trans.transactionId); RemoveSomeTransaction(); _VerifyAgain.Add(new SupplementTransaction(trans)); SparxTransactionHelper.DelTransInLocal(trans); } FetchOffersDelayed(); return; } _lastFetchTime = 0; Fetch(); FetchOffers(); _iapManager.Complete(trans); _config.Listener.OnOfferPurchaseRedeemer(data); _config.Listener.OnOfferPurchaseSuceeded(item, trans); EB.Debug.Log("【商城】订单成功transactionId:{0}", trans.transactionId); SparxTransactionHelper.DelTransInLocal(trans); CheckSupplementTransaction(trans.transactionId); }
/// <summary> /// //购买成功和恢复成功的回调,可以根据id的不同进行不同的操作 /// </summary> /// <param name="e">回调的商品列表</param> /// <returns></returns> public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs e) { EB.Debug.Log("购买处理成功--------------------Google返回数据"); EB.Debug.Log("receipt:" + e.purchasedProduct.receipt); CrossPlatformValidator validator = new CrossPlatformValidator(GooglePlayTangle.Data(), AppleTangle.Data(), Application.identifier); var result = validator.Validate(e.purchasedProduct.receipt); Dictionary <string, string> data = new Dictionary <string, string>(); List <Transaction> cacheTransactions; foreach (IPurchaseReceipt receipt in result) { EB.Debug.Log("------------IPurchaseReceipt---------------"); GooglePlayReceipt google = receipt as GooglePlayReceipt; if (google != null) { string eProductId = e.purchasedProduct.definition.id; if (currenTransaction == null) { SparxTransactionHelper.GetTranByPayoutId(int.Parse(eProductId), out cacheTransactions); if (cacheTransactions == null || cacheTransactions.Count == 0) { //这个时候就只能去服务器看了,本地的缓存订单已经没了 EB.Debug.Log("------------PurchaseProcessingResult.Complete-----------------" + google.transactionID); return(PurchaseProcessingResult.Complete); } //同一个缓存的Google订单号去遍历所有缓存在本地的APP订单逐一请求发货 for (int i = 0; i < cacheTransactions.Count; i++) { data.Clear(); currenTransaction = cacheTransactions[i]; EB.Debug.Log("------------currentGPProductId---------------:" + eProductId); data.Add("productId", e.purchasedProduct.definition.id); EB.Debug.Log("------------currentGPProductId---------------:"); EB.Debug.Log("------------currentGPTokenId-----------------:" + google.purchaseToken); data.Add("token", google.purchaseToken); EB.Debug.Log("------------currentGPTokenId-----------------"); EB.Debug.Log("------------currentGPTransactionId-----------:" + currenTransaction.transactionId); data.Add("transactionId", currenTransaction.transactionId); EB.Debug.Log("------------currentGPTransactionId-----------:"); data.Add("transactionProId", currenTransaction.productId); if (mPayCallback != null) { //支付成功的向APPServer申请处理 EB.Debug.Log("------------PayCallback---------------:" + e.purchasedProduct.definition.id); mPayCallback(-1000, data); mPayCallback = null; } } } else { data.Clear(); EB.Debug.Log("------------currentGPProductId---------------:" + eProductId); data.Add("productId", e.purchasedProduct.definition.id); EB.Debug.Log("------------currentGPProductId---------------:"); EB.Debug.Log("------------currentGPTokenId-----------------:" + google.purchaseToken); data.Add("token", google.purchaseToken); EB.Debug.Log("------------currentGPTokenId-----------------"); EB.Debug.Log("------------currentGPTransactionId-----------:" + currenTransaction.transactionId); data.Add("transactionId", currenTransaction.transactionId); EB.Debug.Log("------------currentGPTransactionId-----------:"); data.Add("transactionProId", currenTransaction.productId); if (mPayCallback != null) { //支付成功的向APPServer申请处理 EB.Debug.Log("------------PayCallback---------------:" + e.purchasedProduct.definition.id); mPayCallback(-1000, data); mPayCallback = null; } } } EB.Debug.Log("------------for IPurchaseReceipt +1-----------:"); } EB.Debug.Log("------------for IPurchaseReceipt End-----------:"); EB.Debug.Log("购买处理完毕--------------------"); currenTransaction = null; return(PurchaseProcessingResult.Pending); }