private void VerifyItemTransaction(object source = null, ElapsedEventArgs e = null) { if (TransactionTemp.Count > 0) { CurrentVerifyTransaction = TransactionTemp[0]; StartTimeoutTimer(); JsonData paramObj = new JsonData(); paramObj["userID"] = CurrentVerifyTransaction.userID; paramObj["receipt"] = CurrentVerifyTransaction.payLoad; paramObj["transactionID"] = CurrentVerifyTransaction.transactionID; paramObj["price"] = CurrentVerifyTransaction.price; IAPRpcProxy.VerifyTransaction(paramObj, VerifyTransactionResultCallback); } else { //!!! 全部漏单处理完毕 string logStr = "全部漏单处理完毕"; //if (Manager) Manager.log(logStr); LogManager.Log(logStr); IsRuning = false; StopRetryTimer(true); } }
/// <summary> /// 本地添加一条订单记录, 防止漏单 /// </summary> /// <param name="userID"></param> /// <param name="payLoad"></param> public void AddItemIAPTransaction(string userID, string transactionID, string payLoad, string price) { string logStr = ""; if (userID == null || userID == "" || transactionID == null || transactionID == "" || payLoad == null || payLoad == "" || price == null || price == "") { logStr = "数据错误,无法添加订单记录: 用户ID:" + userID + ", 订单ID:" + transactionID + ", 收据:" + payLoad + ", 价钱:" + price; //if (Manager) Manager.log(logStr); LogManager.Log(logStr); return; } IAPVerifyTempItem Transaction = new IAPVerifyTempItem(); Transaction.userID = userID; Transaction.transactionID = transactionID; Transaction.payLoad = payLoad; Transaction.price = price; TransactionTemp.Add(Transaction); SaveDataUtils.Save <IAPVerifyProxy>(); logStr = "本地添加一条订单记录, 防止漏单: 用户ID:" + userID + ", 订单ID:" + transactionID + ", 当前有" + TransactionTemp.Count + "条待处理订单(漏单)"; //if (Manager) Manager.log(logStr); LogManager.Log(logStr); }
/// <summary> /// 从本地取出 /// </summary> /// <param name="json"></param> public void LoadFromJson(string json) { if (string.IsNullOrEmpty(json) || IsRuning) { return; } if (TransactionTemp != null) { TransactionTemp.Clear(); } else { TransactionTemp = new List <IAPVerifyTempItem>(); } JsonData data = JsonMapper.ToObject(json); foreach (JsonData tempData in data) { IAPVerifyTempItem item = new IAPVerifyTempItem(); item.userID = tempData.TryGetString("UserID"); item.transactionID = tempData.TryGetString("TransactionID"); item.payLoad = tempData.TryGetString("PayLoad"); item.price = tempData.TryGetString("price"); TransactionTemp.Add(item); } if (TransactionTemp.Count > 0) { string logStr = "开始处理本地" + TransactionTemp.Count + "条漏单:" + json; //if (Manager) Manager.log(logStr); LogManager.Log(logStr); IsRuning = true; StartRetry(false); } }
/// <summary> /// 验证结果 /// </summary> /// <param name="rpcResultObj"></param> private void VerifyTransactionResultCallback(SnapRpcDataVO rpcResultObj) { StopTimeoutTimer(); JsonData data = rpcResultObj.data; if (rpcResultObj.code == RpcDataCode.RequestFinish) { string logStr = "验证完成, 有效交易:" + rpcResultObj.code + "(" + rpcResultObj.message + ")"; if (Manager) { Manager.log(logStr); } LogManager.Log(logStr); if (Manager) { Manager.BuyFinishGoToGameLoic(); } } else { string logStr = "验证失败, 无效交易:" + rpcResultObj.code + "(" + rpcResultObj.message + ")"; if (Manager) { Manager.log(logStr); } LogManager.Log(logStr); } //!!! Item漏单处理完毕 //收据验证完成, 清除本地 RemoveItemIAPTransaction(CurrentVerifyTransaction.userID, CurrentVerifyTransaction.transactionID); CurrentVerifyTransaction = null; //继续巡查 VerifyItemTransaction(); if (Manager) { Manager.clear(); } }