Пример #1
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();
                }
            }
        }
Пример #2
0
        /// <summary>
        /// 此处只需处理RMB支付。Alipay支付的情况,在锁定订单时已经将支付链接返回,客户端可直接链接支付。
        /// </summary>
        /// <param name="buyer"></param>
        /// <param name="orderNumber"></param>
        /// <param name="rmb"></param>
        /// <returns></returns>
        public int PayStoneOrderByRMB(string buyerUserName, string orderNumber, decimal rmb)
        {
            int    result         = OperResult.RESULTCODE_FALSE;
            var    trans          = MyDBHelper.Instance.CreateTrans();
            string sellerUserName = "";

            try
            {
                StoneOrderRunnable runnable = FindOrderByOrderName(orderNumber);
                result = CheckOrderStateBeforePay(runnable, orderNumber, buyerUserName, rmb);
                if (result == OperResult.RESULTCODE_ORDER_BUY_SUCCEED)
                {
                    return(result);
                }
                if (result != OperResult.RESULTCODE_TRUE)
                {
                    LogHelper.Instance.AddInfoLog("玩家[" + buyerUserName + "] 灵币购买矿石失败。原因为:" + OperResult.GetMsg(result) + "。" + (runnable == null ? "" : "LockedByUserName:" + runnable.LockedOrder.LockedByUserName));
                    return(result);
                }

                result = PlayerController.Instance.CheckSellStone_BeforeBuy(buyerUserName, orderNumber, rmb);
                if (result != OperResult.RESULTCODE_TRUE)
                {
                    return(result);
                }

                var buyOrder = runnable.Pay(trans);
                if (buyOrder == null)
                {
                    trans.Rollback();
                    LogHelper.Instance.AddInfoLog("灵币支付矿石订单失败1。原因为:" + OperResult.GetMsg(result) + "。OrderNumber: " + orderNumber + "; buyerUserName:"******"灵币支付矿石订单失败2。原因为:" + OperResult.GetMsg(result) + "。OrderNumber: " + orderNumber + "; buyerUserName:"******"PayStoneTrade Exception. OrderNumber: " + orderNumber, exc);
                return(result);
            }
            finally
            {
                if (trans != null)
                {
                    trans.Dispose();
                }
            }
        }