Example #1
0
        public bool SaveAlipayRechargeRecord(AlipayRechargeRecord alipayRecord, CustomerMySqlTransaction myTrans)
        {
            MySqlCommand mycmd = null;

            try
            {
                mycmd = myTrans.CreateCommand();
                string sqlText = "insert into alipayrechargerecord " +
                                 "(`out_trade_no`, `trade_type`,`alipay_trade_no`,`user_name`,`buyer_email`,`total_fee`,`value_rmb`,`pay_time`) " +
                                 " values (@out_trade_no, @trade_type, @alipay_trade_no,@user_name,@buyer_email,@total_fee,@value_rmb,@pay_time)";
                mycmd.CommandText = sqlText;

                mycmd.Parameters.AddWithValue("@out_trade_no", alipayRecord.out_trade_no);
                mycmd.Parameters.AddWithValue("@trade_type", (int)alipayRecord.trade_type);
                mycmd.Parameters.AddWithValue("@alipay_trade_no", alipayRecord.alipay_trade_no);
                mycmd.Parameters.AddWithValue("@user_name", DESEncrypt.EncryptDES(alipayRecord.user_name));
                mycmd.Parameters.AddWithValue("@buyer_email", alipayRecord.buyer_email);
                mycmd.Parameters.AddWithValue("@total_fee", alipayRecord.total_fee);
                mycmd.Parameters.AddWithValue("@pay_time", alipayRecord.pay_time);
                mycmd.Parameters.AddWithValue("@value_rmb", alipayRecord.value_rmb);
                mycmd.ExecuteNonQuery();
                return(true);
            }
            finally
            {
                if (mycmd != null)
                {
                    mycmd.Dispose();
                }
            }
        }
Example #2
0
        public int CheckAlipayOrderBeHandled(string userName, string out_trade_no, string alipay_trade_no, decimal total_fee, string buyer_email, string pay_time)
        {
            try
            {
                AlipayRechargeRecord record = new AlipayRechargeRecord()
                {
                    alipay_trade_no = alipay_trade_no,
                    buyer_email     = buyer_email,
                    out_trade_no    = out_trade_no,
                    pay_time        = Convert.ToDateTime(pay_time),
                    total_fee       = total_fee,
                    value_rmb       = total_fee * GlobalConfig.GameConfig.Yuan_RMB,
                    user_name       = userName
                };

                bool isOK = OrderController.Instance.CheckAlipayOrderBeHandled(userName, out_trade_no, alipay_trade_no, total_fee, buyer_email, pay_time);
                LogHelper.Instance.AddInfoLog("玩家[" + userName + "] ---- alipay_trade_no: " + alipay_trade_no + "; out_trade_no:" + out_trade_no + "; CheckAlipayOrderBeHandled: " + isOK.ToString());

                return(isOK ? OperResult.RESULTCODE_TRUE : OperResult.RESULTCODE_FALSE);
            }
            catch (Exception exc)
            {
                LogHelper.Instance.AddErrorLog("CheckAlipayOrderBeHandled Exception. " +
                                               " orderNumber: " + out_trade_no + ";" +
                                               " money: " + total_fee.ToString() + ";" +
                                               " payAlipayAccount: " + buyer_email, exc);

                return(OperResult.RESULTCODE_FALSE);
            }
        }
Example #3
0
 public void AsyncHandleExceptionAlipayRechargeRecord(AlipayRechargeRecord alipayrecord)
 {
     if (GlobalData.Client != null)
     {
         App.BusyToken.ShowBusyWindow("正在提交数据...");
         GlobalData.Client.HandleExceptionAlipayRechargeRecord(alipayrecord, alipayrecord.out_trade_no);
     }
 }
Example #4
0
        public int AlipayCallback(AlipayRechargeRecord alipayRecord)
        {
            int result             = OperResult.RESULTCODE_FALSE;
            AlipayTradeInType type = alipayRecord.trade_type;

            switch (type)
            {
            case AlipayTradeInType.BuyGoldCoin:
                result = this.GoldCoinOrderController.AlipayCallback(alipayRecord);
                break;

            case AlipayTradeInType.BuyMine:
                result = this.MineOrderController.AlipayCallback(alipayRecord);
                break;

            case AlipayTradeInType.BuyMiner:
                break;

            case AlipayTradeInType.BuyRMB:
                break;

            case AlipayTradeInType.BuyStone:
                //result = this.StoneOrderController.AlipayCallback(alipayRecord);
                break;

            case AlipayTradeInType.StackStoneBuy:
                result = this.StoneStackController.AlipayCallback(alipayRecord);
                break;

            case AlipayTradeInType.RemoteServerOnce:
                result = UserRemoteServerController.Instance.AlipayCallback(alipayRecord, RemoteServerType.Once);
                break;

            case AlipayTradeInType.RemoteServerOneMonth:
                result = UserRemoteServerController.Instance.AlipayCallback(alipayRecord, RemoteServerType.OneMonth);
                break;

            case AlipayTradeInType.RemoteServerThreeMonth:
                result = UserRemoteServerController.Instance.AlipayCallback(alipayRecord, RemoteServerType.ThreeMonth);
                break;

            case AlipayTradeInType.RemoteServerOneYear:
                result = UserRemoteServerController.Instance.AlipayCallback(alipayRecord, RemoteServerType.OneYear);
                break;

            default:
                break;
            }

            return(result);
        }
Example #5
0
        private void btnOK_Click(object sender, RoutedEventArgs e)
        {
            if (this.txtAlipayTradeNo.Text == "")
            {
                MessageBox.Show("请填写支付宝订单号");
                return;
            }
            if (this.txtMyTradeNo.Text == "")
            {
                MessageBox.Show("请填写交易订单号");
                return;
            }
            if (this.txtAlipayAccount.Text == "")
            {
                MessageBox.Show("请填写支付账户");
                return;
            }
            if (this.numTotalFee.Value == 0)
            {
                MessageBox.Show("请输入支付金额(人民币元)");
                return;
            }
            if (this.dpPayTime.SelectedDate == null)
            {
                MessageBox.Show("请选择支付日期和时间");
                return;
            }
            if (this.numHour.Value == 0 && this.numMinute.Value == 0 && this.numSecond.Value == 0)
            {
                MessageBox.Show("请选择支付日期和时间");
                return;
            }

            DateTime selectedDate = this.dpPayTime.SelectedDate.Value;
            DateTime payTime      = new DateTime(selectedDate.Year, selectedDate.Month, selectedDate.Day,
                                                 (int)this.numHour.Value, (int)this.numMinute.Value, (int)this.numSecond.Value);

            AlipayPayInfo = new AlipayRechargeRecord()
            {
                out_trade_no    = this.txtMyTradeNo.Text,
                alipay_trade_no = this.txtAlipayTradeNo.Text,
                buyer_email     = this.txtAlipayAccount.Text,
                user_name       = this.txtBuyerUserName.Text,
                total_fee       = (decimal)this.numTotalFee.Value,
                value_rmb       = (decimal)this.numValueRMB.Value,
                pay_time        = payTime
            };

            this.DialogResult = true;
        }
Example #6
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="out_trade_no"></param>
        /// <param name="alipay_trade_no"></param>
        /// <param name="total_fee">人民币,需换算为灵币</param>
        /// <param name="buyer_email"></param>
        /// <param name="succeed"></param>
        public int AlipayCallback(string userName, string out_trade_no, string alipay_trade_no, decimal total_fee, string buyer_email, string pay_time)
        {
            try
            {
                var existsAlipayRecord = DBProvider.AlipayRecordDBProvider.GetAlipayRechargeRecordByOrderNumber_OR_Alipay_trade_no(out_trade_no, alipay_trade_no);
                if (existsAlipayRecord != null)
                {
                    if (existsAlipayRecord.buyer_email == buyer_email && existsAlipayRecord.total_fee == total_fee && existsAlipayRecord.user_name == userName)
                    {
                        return(OperResult.RESULTCODE_TRUE);
                    }
                }
                AlipayRechargeRecord record = new AlipayRechargeRecord()
                {
                    alipay_trade_no = alipay_trade_no,
                    buyer_email     = buyer_email,
                    out_trade_no    = out_trade_no,
                    pay_time        = Convert.ToDateTime(pay_time),
                    total_fee       = total_fee,
                    value_rmb       = total_fee * GlobalConfig.GameConfig.Yuan_RMB,
                    user_name       = userName
                };

                if (userName == "WEB" && out_trade_no.StartsWith("0000"))
                {
                    LogHelper.Instance.AddInfoLog("WEB端直接充值 ---- alipay_trade_no: " + alipay_trade_no + "; out_trade_no:" + out_trade_no + "; fee: " + total_fee);
                    return(OperResult.RESULTCODE_TRUE);
                }

                LogHelper.Instance.AddInfoLog("玩家[" + userName + "] ---- alipay_trade_no: " + alipay_trade_no + "; out_trade_no:" + out_trade_no + "; fee: " + total_fee);
                if (record.value_rmb <= 0)
                {
                    return(OperResult.RESULTCODE_FALSE);
                }

                int result = OrderController.Instance.AlipayCallback(record);
                return(result);
            }
            catch (Exception exc)
            {
                LogHelper.Instance.AddErrorLog("AlipayCallback Exception. " +
                                               " orderNumber: " + out_trade_no + ";" +
                                               " money: " + total_fee.ToString() + ";" +
                                               " payAlipayAccount: " + buyer_email, exc);

                return(OperResult.RESULTCODE_FALSE);
            }
        }
        private void btnConfirmOrder_Click(object sender, RoutedEventArgs e)
        {
            MessageBoxResult result = MessageBox.Show("确认订单支付成功,该操作不可恢复!", "确认订单成功", MessageBoxButton.YesNo);

            if (result == MessageBoxResult.Yes)
            {
                FillAlipayInfoWindow win = new FillAlipayInfoWindow(this._order.LockedByUserName, this._order.OrderNumber);
                if (win.ShowDialog() == true)
                {
                    AlipayRechargeRecord alipayInfo = win.AlipayPayInfo;

                    App.BusyToken.ShowBusyWindow("正在提交数据...");
                    GlobalData.Client.AgreeExceptionStoneOrder(alipayInfo);
                }
            }
        }
Example #8
0
        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 AlipayRechargeRecordUIModel(AlipayRechargeRecord parent)
 {
     this.ParentObject   = parent;
     this._tradeTypeText = GetTradeTypeText(parent.out_trade_no);
 }
Example #10
0
        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 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 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);
        }
Example #13
0
        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);
        }
Example #14
0
 public void HandleExceptionAlipayRechargeRecord(AlipayRechargeRecord exceptionRecord, object userState)
 {
     this._invoker.InvokeUserState <int>(this._context, "HandleExceptionAlipayRechargeRecord", this.HandleExceptionAlipayRechargeRecordCompleted, userState, GlobalData.Token, exceptionRecord);
 }