/// <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);
        }
Exemple #6
0
        /// <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);
        }