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, }; }
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(), }); }
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 }; }
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)); } }