public object ToDictionary(credit_transaction credit, string creditTypeString_identifier, string packageString_identifier)
 {
     return new
     {
         transaction_id = this.order_id,
         gtoken_value = this.amount,
         goplay_token_value = this.amount,
         quantity = credit.amount,
         is_free = true,
         exchange_option_type = credit.credit_type_id.HasValue
             ? "CreditType" : credit.package_id.HasValue ? "Package" : string.Empty,
         exchange_option_identifier = credit.credit_type_id.HasValue
             ? creditTypeString_identifier : credit.package_id.HasValue ? packageString_identifier : string.Empty,
     };
 }
Ejemplo n.º 2
0
 public int CreateCreditTransaction(IDbConnection db, credit_transaction creditTrans)
 {
     string sql = @"INSERT INTO credit_transaction (
                   customer_account_id,
                   coin_transaction_id,
                   amount,
                   game_id,
                   credit_type_id,
                   package_id,
                   created_at,
                   description,
                   status,
                   free_coin_transaction_id) 
                 VALUES(
                   @customer_account_id,
                   @coin_transaction_id,
                   @amount,
                   @game_id,
                   @credit_type_id,
                   @package_id,
                   @created_at,
                   @description,
                   @status,
                   @free_coin_transaction_id) 
      RETURNING id";
     return db.Query<int>(sql, creditTrans).FirstOrDefault();
 }
        public object FulfillExchanges(FulfilledExchangeModel param)
        {
            var request = HttpContext.Current.Request;

            GoPlayApi api = GoPlayApi.Instance;
            string gameUid = param.game_id;
            Game game = api.GetGame(gameUid).Data;

            string session = !string.IsNullOrEmpty(request.Form["session"])
                ? UrlHelperExtensions.GetSession(request.Form["session"])
                : request.Params["session"];
            customer_account user = api.LoadFromAccessToken(session).Data;
            string transactionID = string.IsNullOrEmpty(param.transaction_id)
                ? string.Empty
                : param.transaction_id;

            dynamic transaction;
            transaction = api.GetCoinTransactionByOderId(transactionID).Data;
            bool isPlayToken = true;
            if (transaction == null)
            {
                isPlayToken = false;
                transaction = api.GetFreeCoinTransactionByOderId(transactionID).Data;
            }

            ErrorCodes? error = null;
            credit_transaction credit = new credit_transaction();
            if (game == null)
                error = ErrorCodes.INVALID_GAME_ID;
            else if (user == null)
                error = ErrorCodes.INVALID_SESSION;
            else if (transaction == null)
                error = ErrorCodes.INVALID_TRANSACTION_ID;
            else if (string.Compare(transaction.status, ConstantValues.S_PENDING, StringComparison.OrdinalIgnoreCase) != 0)
                error = ErrorCodes.TRANSACTION_ALREADY_PROCESSED;
            else
            {
                //Call api record transaction of Gtoken
                var result = api.GTokenAPITransaction(new GtokenModelTransactionAction
                    {
                        token_transaction = new TokenTransactionJson
                        {
                            token_type = isPlayToken
                                ? GoPlayConstantValues.S_PLAY_TOKEN
                                : GoPlayConstantValues.S_FREE_PLAY_TOKEN,
                            username = user.username,
                            description = transaction.description,
                            order_id = transaction.order_id,
                            transaction_type = ConstantValues.S_TRANSACTION_TYPE_CONSUMPTION,
                            amount = transaction.amount
                        }
                    });

                if (!result.Succeeded)
                {
                    error = result.Error.HasValue ? result.Error.Value : ErrorCodes.ServerError;
                }
                else
                {
                    bool isUpdate = false;
                    if (isPlayToken)
                        isUpdate = api.UpdateCoinTransactionStatus(transaction.id, ConstantValues.S_SUCCESS);
                    else
                        isUpdate = api.UpdateFreeCoinTransactionStatus(transaction.id, ConstantValues.S_SUCCESS);

                    int creditPrimaryKey = (int)transaction.id;
                    credit = api.GetCreditTransaction(creditPrimaryKey).Data;
                    if (credit == null)
                        credit = api.GetCreditTransactionByFreeCoinTransactionId(creditPrimaryKey).Data;

                    if (!isUpdate || !api.UpdateCreditTransactionStatus(credit.id, ConstantValues.S_SUCCESS))
                        error = ErrorCodes.ServerError;
                }
            }

            api.LogApi("1", request.Url.LocalPath, error == null,
                request.UserAgent != null ? request.UserAgent.ToString() : string.Empty,
                game == null ? 0 : game.id, user == null ? 0 : user.id,
                request.UserHostAddress,
                error.ToErrorCode(), request.Params.ToString());

            string creditTypeStringIdentifier = string.Empty;
            string packageStringIdentifier = string.Empty;
            if (error == null)
            {
                if (credit.credit_type_id.HasValue)
                {
                    var creditType = api.GetCreditType(credit.credit_type_id.Value).Data;
                    if (creditType != null)
                        creditTypeStringIdentifier = creditType.string_identifier;
                }
                else if (credit.package_id.HasValue)
                {
                    var package = api.GetPackage(credit.package_id.Value).Data;
                    if (package != null)
                        packageStringIdentifier = package.string_identifier;
                }
            }
            if (error == null)
            {
                return Json(new
                {
                    success = true,
                    exchange = transaction.ToDictionary(credit, creditTypeStringIdentifier, packageStringIdentifier)
                });
            }
            return Json(new
            {
                success = false,
                message = error.ToErrorMessage(),
                error_code = error.ToErrorCode(),
            });
        }
Ejemplo n.º 4
0
        public InitTransactionModel initTransaction(decimal playTokenAmount, string balanceType)
        {
            var api = GoPlayApi.Instance;
            var creditTransaction = new credit_transaction();
            dynamic coinTransaction = new ExpandoObject();
            if (balanceType == "free_play_token")
            {
                coinTransaction = CreateFreeCoinTrans(playTokenAmount);
                creditTransaction.amount = this.inGameAmount;
            }
            else
            {
                coinTransaction = CreateCoinTrans(playTokenAmount);
                creditTransaction.amount = this.inGameAmount;
            }
            if (this.exchangeOption is CreditType)
            {
                creditTransaction.credit_type_id = this.exchangeOption.id;
            }
            else if (this.exchangeOption is Package)
            {
                creditTransaction.package_id = exchangeOption.id;
            }

            creditTransaction.customer_account_id = user.id;
            creditTransaction.game_id = game.id;
            creditTransaction.status = "payment_created";
            creditTransaction.description = String.Format("Exchange for{0} in {1}", exchangeOption.name, game.name);

            if (balanceType == "free_play_token")
                creditTransaction.free_coin_transaction_id = coinTransaction.id;
            else if (balanceType == "play_token")
                creditTransaction.coin_transaction_id = coinTransaction.id;

            creditTransaction = api.CreateCreditTransaction(creditTransaction).Data;

            return new InitTransactionModel()
            {
                coinTransaction = coinTransaction,
                creditTransaction = creditTransaction
            };
        }
Ejemplo n.º 5
0
        public Result<credit_transaction> CreateCreditTransaction(credit_transaction creditTrans)
        {

            var repo = Repo.Instance;
            creditTrans.created_at = DateTime.UtcNow;
            using (var db = repo.OpenConnectionFromPool())
            {
                return repo.GetCreditTransactionById(db, repo.CreateCreditTransaction(db, creditTrans));
            }
        }