public int AlipayCallback(AlipayRechargeRecord alipayRecord) { StoneOrderRunnable runnable = FindOrderByOrderName(alipayRecord.out_trade_no); int result = CheckOrderStateBeforePay(runnable, alipayRecord.out_trade_no, alipayRecord.user_name, alipayRecord.value_rmb); if (result == OperResult.RESULTCODE_ORDER_BUY_SUCCEED) { return(result); } if (result != OperResult.RESULTCODE_TRUE) { LogHelper.Instance.AddInfoLog("玩家[" + alipayRecord.user_name + "] 支付宝购买矿石失败。原因为:" + OperResult.GetMsg(result) + "。支付宝信息:" + alipayRecord.ToString() + (runnable == null ? "" : "LockedByUserName:" + runnable.LockedOrder.LockedByUserName)); return(result); } string sellerUserName = ""; var trans = MyDBHelper.Instance.CreateTrans(); try { DBProvider.AlipayRecordDBProvider.SaveAlipayRechargeRecord(alipayRecord, trans); //订单处理 var buyOrder = runnable.Pay(trans); if (buyOrder == null) { trans.Rollback(); LogHelper.Instance.AddInfoLog("支付宝支付矿石订单失败1。原因为:订单支付失败。alipayRecord: " + alipayRecord.ToString()); //如果支付失败,先将订单设为异常。 this.SetStoneOrderPayException(alipayRecord.user_name, alipayRecord.out_trade_no); return(OperResult.RESULTCODE_FALSE); } sellerUserName = buyOrder.StonesOrder.SellerUserName; //更新用户信息 result = PlayerController.Instance.PayStoneOrder(true, alipayRecord.user_name, buyOrder, trans); if (result != OperResult.RESULTCODE_TRUE) { trans.Rollback(); PlayerController.Instance.RefreshFortune(alipayRecord.user_name); PlayerController.Instance.RefreshFortune(sellerUserName); LogHelper.Instance.AddInfoLog("支付宝支付矿石订单失败2。原因为:" + OperResult.GetMsg(result) + "。alipayRecord: " + alipayRecord.ToString()); //如果支付失败,先将订单设为异常。 this.SetStoneOrderPayException(alipayRecord.user_name, alipayRecord.out_trade_no); return(result); } this.RemoveRecord(buyOrder.StonesOrder.OrderNumber); trans.Commit(); LogHelper.Instance.AddInfoLog("玩家[" + alipayRecord.user_name + "] 用支付宝成功购买了,玩家[" + runnable.SellOrder.SellerUserName + "] 出售的矿石" + runnable.SellOrder.SellStonesCount + ", no: " + runnable.SellOrder.OrderNumber); AddLogNotifyPlayer(alipayRecord.user_name, runnable.OrderNumber, buyOrder); return(OperResult.RESULTCODE_TRUE); } catch (Exception exc) { result = OperResult.RESULTCODE_EXCEPTION; trans.Rollback(); PlayerController.Instance.RefreshFortune(alipayRecord.user_name); if (!string.IsNullOrEmpty(sellerUserName)) { PlayerController.Instance.RefreshFortune(sellerUserName); } //如果支付失败,先将订单设为异常。 this.SetStoneOrderPayException(alipayRecord.user_name, alipayRecord.out_trade_no); LogHelper.Instance.AddErrorLog("玩家[" + alipayRecord.user_name + "] 支付宝购买矿石回调异常. 支付宝信息: " + alipayRecord.ToString(), exc); return(result); } finally { if (trans != null) { trans.Dispose(); } } }
public int AlipayCallback(AlipayRechargeRecord alipayRecord) { GoldCoinRechargeRecord rechargeRecord = FindRecordByOrderNumber(alipayRecord.out_trade_no); if (rechargeRecord == null) { rechargeRecord = DBProvider.GoldCoinRecordDBProvider.GetGoldCoinRechargeRecord(alipayRecord.user_name, alipayRecord.out_trade_no); if (rechargeRecord != null) { return(OperResult.RESULTCODE_ORDER_BUY_SUCCEED); } LogHelper.Instance.AddInfoLog("玩家[" + alipayRecord.user_name + "] 支付宝购买金币回调,找不到订单。支付宝信息:" + alipayRecord.ToString()); return(OperResult.RESULTCODE_ORDER_NOT_EXIST); } CustomerMySqlTransaction myTrans = null; try { int value = OperResult.RESULTCODE_FALSE; myTrans = MyDBHelper.Instance.CreateTrans(); alipayRecord.user_name = rechargeRecord.UserName; if (alipayRecord.out_trade_no == rechargeRecord.OrderNumber && alipayRecord.value_rmb >= rechargeRecord.SpendRMB) { rechargeRecord.PayTime = DateTime.Now; value = PlayerController.Instance.RechargeGoldCoinByAlipay(rechargeRecord.UserName, alipayRecord.total_fee, (int)rechargeRecord.SpendRMB, (int)(rechargeRecord.SpendRMB * GlobalConfig.GameConfig.RMB_GoldCoin), myTrans); if (value == OperResult.RESULTCODE_TRUE) { DBProvider.GoldCoinRecordDBProvider.SaveFinalGoldCoinRechargeRecord(rechargeRecord, myTrans); DBProvider.GoldCoinRecordDBProvider.DeleteTempGoldCoinRechargeTradeRecord(rechargeRecord.OrderNumber, myTrans); this.RemoveRecord(alipayRecord.out_trade_no); string tokenBuyer = ClientManager.GetToken(rechargeRecord.UserName); if (GoldCoinOrderPaySucceedNotify != null) { GoldCoinOrderPaySucceedNotify(tokenBuyer, rechargeRecord.OrderNumber); } LogHelper.Instance.AddInfoLog("玩家[" + alipayRecord.user_name + "] 成功充值" + rechargeRecord.GainGoldCoin + "金币。ano: " + alipayRecord.alipay_trade_no); } else { LogHelper.Instance.AddInfoLog("玩家[" + alipayRecord.user_name + "] 金币充值失败,原因为:" + OperResult.GetMsg(value) + "。ano: " + alipayRecord.alipay_trade_no); } } DBProvider.AlipayRecordDBProvider.SaveAlipayRechargeRecord(alipayRecord, myTrans); myTrans.Commit(); return(value); } catch (Exception exc) { myTrans.Rollback(); PlayerController.Instance.RefreshFortune(alipayRecord.user_name); LogHelper.Instance.AddErrorLog("玩家[" + alipayRecord.user_name + "] 支付宝金币充值,回调异常。AlipayInfo : " + alipayRecord.ToString(), exc); return(OperResult.RESULTCODE_EXCEPTION); } finally { if (myTrans != null) { myTrans.Dispose(); } } }
public int AlipayCallback(AlipayRechargeRecord alipay, RemoteServerType serverType) { int result = OperResult.RESULTCODE_FALSE; MyDBHelper.Instance.TransactionDataBaseOper(myTrans => { DBProvider.AlipayRecordDBProvider.SaveAlipayRechargeRecord(alipay, myTrans); LogHelper.Instance.AddInfoLog("玩家 [" + alipay.user_name + "] 支付宝充值购买远程协助服务," + serverType.ToString() + ", Alipay:" + alipay.ToString()); result = OperResult.RESULTCODE_TRUE; return(result); }, exc => { if (exc != null) { LogHelper.Instance.AddErrorLog("远程协助1服务付款回调异常,AlipayInfo: " + alipay.ToString() + "; serverType: " + serverType.ToString(), exc); } result = OperResult.RESULTCODE_EXCEPTION; }); if (result != OperResult.RESULTCODE_TRUE) { return(result); } var serverItem = this.GetUserRemoteServerItem(serverType); if (serverItem == null) { LogHelper.Instance.AddInfoLog("玩家 [" + alipay.user_name + "] 支付宝充值购买远程协助服务失败1,原因为:" + OperResult.GetMsg(OperResult.RESULTCODE_BUYREMOTESERVER_FAILED_SERVERTYPEERROR)); return(OperResult.RESULTCODE_BUYREMOTESERVER_FAILED_SERVERTYPEERROR); } if (alipay.total_fee != serverItem.PayMoneyYuan) { LogHelper.Instance.AddInfoLog("玩家 [" + alipay.user_name + "] 支付宝充值购买远程协助服务失败2,原因为:" + OperResult.GetMsg(OperResult.RESULTCODE_BUYREMOTESERVER_FAILED_PAYEDMONEYERROR)); return(OperResult.RESULTCODE_BUYREMOTESERVER_FAILED_PAYEDMONEYERROR); } var playerRunner = PlayerController.Instance.GetRunnable(alipay.user_name); if (playerRunner == null) { LogHelper.Instance.AddInfoLog("玩家 [" + alipay.user_name + "] 支付宝充值购买远程协助服务失败3,原因为:" + OperResult.GetMsg(OperResult.RESULTCODE_USER_NOT_EXIST)); return(OperResult.RESULTCODE_USER_NOT_EXIST); } int getShoppingCredits = (int)alipay.total_fee * GlobalConfig.GameConfig.RemoteServerRechargeReturnShoppingCreditsTimes; MyDBHelper.Instance.TransactionDataBaseOper(myTrans => { result = playerRunner.BuyRemoteServer(alipay, serverType, myTrans); if (result != OperResult.RESULTCODE_TRUE) { LogHelper.Instance.AddInfoLog("玩家 [" + alipay.user_name + "] 支付宝充值购买远程协助服务失败4,原因为:" + OperResult.GetMsg(result)); return(result); } //玩家购买远程服务充值三层返利, if (!string.IsNullOrEmpty(playerRunner.BasePlayer.SimpleInfo.ReferrerUserName)) { //上一级 var parent1PlayerRunner = PlayerController.Instance.GetRunnable(playerRunner.BasePlayer.SimpleInfo.ReferrerUserName); if (parent1PlayerRunner != null) { parent1PlayerRunner.BuyShoppingCreditAwardParent(getShoppingCredits * GlobalConfig.GameConfig.BuyRemoteServiceAwardRMBConfig[0], myTrans); //上二级 if (!string.IsNullOrEmpty(parent1PlayerRunner.BasePlayer.SimpleInfo.ReferrerUserName)) { var parent2PlayerRunner = PlayerController.Instance.GetRunnable(parent1PlayerRunner.BasePlayer.SimpleInfo.ReferrerUserName); if (parent2PlayerRunner != null) { parent2PlayerRunner.BuyShoppingCreditAwardParent(getShoppingCredits * GlobalConfig.GameConfig.BuyRemoteServiceAwardRMBConfig[1], myTrans); //上三级 if (!string.IsNullOrEmpty(parent2PlayerRunner.BasePlayer.SimpleInfo.ReferrerUserName)) { var parent3PlayerRunner = PlayerController.Instance.GetRunnable(parent2PlayerRunner.BasePlayer.SimpleInfo.ReferrerUserName); if (parent3PlayerRunner != null) { parent3PlayerRunner.BuyShoppingCreditAwardParent(getShoppingCredits * GlobalConfig.GameConfig.BuyRemoteServiceAwardRMBConfig[2], myTrans); } } } } } } UserRemoteServerBuyRecord buyRecord = new UserRemoteServerBuyRecord() { UserID = playerRunner.BasePlayer.SimpleInfo.UserID, UserName = playerRunner.BasePlayer.SimpleInfo.UserLoginName, OrderNumber = alipay.out_trade_no, BuyRemoteServerTime = new MyDateTime(DateTime.Now), ServerType = serverType, PayMoneyYuan = (int)alipay.total_fee, GetShoppingCredits = getShoppingCredits }; DBProvider.UserRemoteServerDBProvider.SaveUserRemoteServerBuyRecord(buyRecord, myTrans); LogHelper.Instance.AddInfoLog("玩家 [" + alipay.user_name + "] 成功购买远程协助服务," + serverType.ToString() + ", Alipay:" + alipay.ToString()); result = OperResult.RESULTCODE_TRUE; return(result); }, exc => { if (exc != null) { LogHelper.Instance.AddErrorLog("远程协助服务付款回调异常,AlipayInfo: " + alipay.ToString() + "; serverType: " + serverType.ToString(), exc); } result = OperResult.RESULTCODE_EXCEPTION; }); return(result); }
public int AlipayCallback(AlipayRechargeRecord alipayRecord) { MinesBuyRecord buyRecord = FindRecordByOrderNumber(alipayRecord.out_trade_no); if (buyRecord == null) { buyRecord = DBProvider.MineRecordDBProvider.GetMineTradeRecord(alipayRecord.user_name, alipayRecord.out_trade_no); if (buyRecord != null) { return(OperResult.RESULTCODE_ORDER_BUY_SUCCEED); } LogHelper.Instance.AddInfoLog("玩家[" + alipayRecord.user_name + "] 支付宝购买矿山回调,找不到订单。支付宝信息:" + alipayRecord.ToString()); return(OperResult.RESULTCODE_ORDER_NOT_EXIST); } CustomerMySqlTransaction myTrans = null; try { int result = OperResult.RESULTCODE_FALSE; myTrans = MyDBHelper.Instance.CreateTrans(); //alipayRecord.user_name = buyRecord.UserName; if (alipayRecord.value_rmb >= buyRecord.SpendRMB) { result = PlayerController.Instance.BuyMineByAlipay(buyRecord, alipayRecord.total_fee, myTrans); if (result == OperResult.RESULTCODE_TRUE) { buyRecord.PayTime = DateTime.Now; DBProvider.MineRecordDBProvider.SaveFinalMineTradeRecord(buyRecord, myTrans); DBProvider.MineRecordDBProvider.DeleteTempMineTradeRecord(buyRecord.OrderNumber, myTrans); this.RemoveRecord(alipayRecord.out_trade_no); string tokenBuyer = ClientManager.GetToken(buyRecord.UserName); if (!string.IsNullOrEmpty(tokenBuyer) && MineOrderPaySucceedNotify != null) { MineOrderPaySucceedNotify(tokenBuyer, buyRecord.OrderNumber); } LogHelper.Instance.AddInfoLog("玩家[" + alipayRecord.user_name + "] 成功购买" + buyRecord.GainMinesCount + "座矿山。ano: " + alipayRecord.alipay_trade_no); } else { LogHelper.Instance.AddInfoLog("玩家[" + alipayRecord.user_name + "] 购买矿山失败,原因为:" + OperResult.GetMsg(result) + "。ano: " + alipayRecord.alipay_trade_no); } } DBProvider.AlipayRecordDBProvider.SaveAlipayRechargeRecord(alipayRecord, myTrans); myTrans.Commit(); PlayerActionController.Instance.AddLog(buyRecord.UserName, MetaData.ActionLog.ActionType.BuyMine, buyRecord.GainMinesCount, "增加了 " + buyRecord.GainStonesReserves.ToString() + " 的矿石储量"); return(result); } catch (Exception exc) { myTrans.Rollback(); PlayerController.Instance.RefreshFortune(alipayRecord.user_name); LogHelper.Instance.AddErrorLog("玩家[" + alipayRecord.user_name + "] 支付宝金币充值,回调异常。AlipayInfo : " + alipayRecord.ToString(), exc); return(OperResult.RESULTCODE_EXCEPTION); } finally { if (myTrans != null) { myTrans.Dispose(); } } }
public int AlipayCallback(AlipayRechargeRecord alipayRecord) { int result = OperResult.RESULTCODE_FALSE; var alipayRecordFromDB = DBProvider.AlipayRecordDBProvider.GetAlipayRechargeRecordByOrderNumber_OR_Alipay_trade_no(alipayRecord.out_trade_no, alipayRecord.alipay_trade_no); if (alipayRecordFromDB != null) { return(OperResult.RESULTCODE_ORDER_BUY_SUCCEED); } StoneDelegateBuyOrderInfo buyOrder = null; lock (_lockTempAlipayList) { for (int i = 0; i < _listTempAlipayBuyOrders.Count; i++) { if (_listTempAlipayBuyOrders[i].OrderNumber == alipayRecord.out_trade_no) { buyOrder = _listTempAlipayBuyOrders[i]; decimal valueRMB = buyOrder.BuyUnit.Price * buyOrder.BuyUnit.TradeStoneHandCount; if (alipayRecord.value_rmb < valueRMB) { buyOrder.BuyState = StoneDelegateBuyState.Exception; LogHelper.Instance.AddErrorLog(alipayRecord.ToString() + " 充值的灵币小于需要的灵币:" + valueRMB, null); } else { buyOrder.BuyState = StoneDelegateBuyState.Waiting; } this._listTempAlipayBuyOrders.RemoveAt(i); break; } } } if (buyOrder == null) { LogHelper.Instance.AddErrorLog("委托挂单购买矿石,支付宝回调,没有找到订单。" + alipayRecord.ToString(), null); } CustomerMySqlTransaction myTrans = MyDBHelper.Instance.CreateTrans(); try { DBProvider.AlipayRecordDBProvider.SaveAlipayRechargeRecord(alipayRecord, myTrans); if (buyOrder != null) { DBProvider.StoneStackDBProvider.UpdateWaitingStoneDelegateBuyOrderState(buyOrder.OrderNumber, buyOrder.BuyState, myTrans); } myTrans.Commit(); result = OperResult.RESULTCODE_TRUE; } catch (Exception exc) { myTrans.Rollback(); LogHelper.Instance.AddErrorLog("StoneStackControl.AlipayCallback.SaveAlipayRechargeRecord Exception. " + alipayRecord.ToString() + ". buyOrder: " + (buyOrder == null ? "NULL" : buyOrder.ToString()), exc); } finally { myTrans.Dispose(); } if (result == OperResult.RESULTCODE_TRUE) { if (buyOrder != null) { this.InsertToBuyQueue(buyOrder, null); } //PlayerActionController.Instance.AddLog(alipayRecord.user_name, MetaData.ActionLog.ActionType.DelegateBuyStone, buyOrder.BuyUnit.TradeStoneHandCount, ""); BuyOrderAlipayPaySucceedNotify(alipayRecord.user_name, alipayRecord.out_trade_no); } return(result); }