/// <summary> /// Reload UserWallet via Credit Card /// </summary> /// <param name="context">DBContext of Model to be used</param> /// <param name="userId">Owner of wallet to be reloaded. Wallet to be used is the one with currency the same as the user's current country.</param> /// <param name="transaction">CreditCardReloadTransaction filled up with the ff properties filled up: Amount, Currency, Date</param> /// <param name="cardInfo">Credit Card information</param> /// <returns></returns> public RespCreateWalletLoad ReloadWalletViaCreditCard(IPTV2Entities context, System.Guid userId, CreditCardReloadTransaction transaction, CreditCardInfo cardInfo) { RespCreateWalletLoad result = null; try { GomsException validationResult = UserValidation(context, userId); if (!(validationResult is GomsSuccess)) { throw validationResult; } var user = context.Users.Find(userId); var wallet = user.UserWallets.FirstOrDefault(w => w.IsActive); if (wallet == null) { throw new GomsInvalidWalletException(); } // Validate Wallet validationResult = WalletValidation(context, user, wallet.WalletId); if (!(validationResult is GomsSuccess)) { throw validationResult; } result = ReloadWalletViaCreditCard(context, wallet, transaction, cardInfo); } catch (GomsException e) { result = new RespCreateWalletLoad { IsSuccess = false, StatusCode = e.StatusCode, StatusMessage = e.StatusMessage }; } return result; }
/// <summary> /// Reload UserWallet via Credit Card /// </summary> /// <param name="context">DBContext of Model to be used</param> /// <param name="wallet">UserWallet to be loaded</param> /// <param name="transaction">CreditCardReloadTransaction filled up with the ff properties filled up: Amount, Date</param> /// <param name="cardInfo">Credit Card information</param> /// <returns></returns> public RespCreateWalletLoad ReloadWalletViaCreditCard(IPTV2Entities context, UserWallet wallet, CreditCardReloadTransaction transaction, CreditCardInfo cardInfo) { RespCreateWalletLoad result = null; InitializeServiceClient(); try { // validate credit card information cardInfo.Validate(); if (!cardInfo.IsValid) { throw new GomsInvalidCreditCardException(); } // validate user GomsException validationResult = UserValidation(context, wallet.UserId); if (!(validationResult is GomsSuccess)) { throw validationResult; } var user = context.Users.Find(wallet.UserId); // validate the wallet validationResult = WalletValidation(context, user, wallet.WalletId); if (!(validationResult is GomsSuccess)) { throw validationResult; } // validate transaction if (transaction == null) { throw new GomsInvalidTransactionException(); } else { if ((transaction.Amount <= 0) || (transaction.Date == null)) throw new GomsInvalidTransactionException(); } // prepare request // set transaction wallet user.Transactions.Add(transaction); transaction.UserWallet = wallet; transaction.Currency = wallet.Currency; var req = new ReqCreateWalletLoad { UID = ServiceUserId, PWD = ServicePassword, Email = user.EMail, CustomerId = (int)user.GomsCustomerId, ServiceId = (int)user.GomsServiceId, SubsidiaryId = (int)user.GomsSubsidiaryId, WalletId = (int)transaction.UserWallet.GomsWalletId, OrderType = 1, // PhoenixId = transaction.TransactionId, PhoenixId = (int)(DateTime.Now.Ticks - int.MaxValue), LoadAmountLocalCurrency = (double)transaction.Amount, //CurrencyId = (int)context.Currencies.Find(user.Country.CurrencyCode).GomsId CCName = cardInfo.Name, CCNumber = cardInfo.Number, CCSecurityCode = cardInfo.CardSecurityCode, CCExpiry = cardInfo.ExpiryDate, CCPostalCode = cardInfo.PostalCode, CCStreet = cardInfo.StreetAddress }; var paymentMethod = context.GomsPaymentMethods.FirstOrDefault(p => (p.GomsSubsidiaryId == user.GomsSubsidiaryId) && (p.Name == cardInfo.CardTypeString)); if (paymentMethod == null) { throw new GomsCreditCardTypeInvalidException(); } req.PaymentMethod = paymentMethod.PaymentMethodId; var log = new GomsLogs() { email = user.EMail, phoenixid = req.PhoenixId }; try { var startTime = DateTime.Now; result = _serviceClient.CreateWalletLoad(req); var endTime = DateTime.Now; var timeDifference = endTime - startTime; if (result.IsSuccess) { transaction.Reference = result.TransactionId.ToString(); transaction.GomsTransactionId = result.TransactionId; transaction.GomsTransactionDate = DateTime.Now; transaction.UserWallet.Balance += transaction.Amount; transaction.UserWallet.LastUpdated = DateTime.Now; context.SaveChanges(); log.gomstransactionid = result.TransactionId; log.message = String.Format("{0} - {1}", result.IsSuccess, result.StatusMessage); log.transactionid = transaction.TransactionId; log.transactiondate = transaction.GomsTransactionDate.Value.ToString("yyyy-MM-dd hh:mm:ss"); } } catch (Exception e) { log.message = e.Message; LogToGigya("glogs", log); throw new GomsServiceCallException(e.Message); } finally { LogToGigya("glogs", log); } } catch (GomsException e) { result = new RespCreateWalletLoad { IsSuccess = false, StatusCode = e.StatusCode, StatusMessage = e.StatusMessage }; } return (result); }
public RespCreateWalletLoad ReloadWallet(IPTV2Entities context, System.Guid userId, int transactionId) { RespCreateWalletLoad result = null; InitializeServiceClient(); try { // Validate User GomsException validationResult = UserValidation(context, userId); if (!(validationResult is GomsSuccess)) { throw validationResult; } var user = context.Users.Find(userId); // Validate Transaction validationResult = TransactionValidation(context, transactionId, false); if (!(validationResult is GomsSuccess)) { throw validationResult; } var reloadTransaction = user.Transactions.OfType<ReloadTransaction>().FirstOrDefault(t => t.TransactionId == transactionId); // Validate Wallet validationResult = WalletValidation(context, user, reloadTransaction.UserWallet.WalletId); if (!(validationResult is GomsSuccess)) { throw validationResult; } var req = new ReqCreateWalletLoad { UID = ServiceUserId, PWD = ServicePassword, Email = user.EMail, CustomerId = (int)user.GomsCustomerId, ServiceId = (int)user.GomsServiceId, SubsidiaryId = (int)user.GomsSubsidiaryId, WalletId = (int)reloadTransaction.UserWallet.GomsWalletId, OrderType = 1, // PhoenixId = reloadTransaction.TransactionId, // TODO: set transactionId series PhoenixId = (int)(DateTime.Now.Ticks - int.MaxValue), LoadAmountLocalCurrency = (double)reloadTransaction.Amount, CurrencyId = (int)reloadTransaction.UserWallet.WalletCurrency.GomsId, ExchangeRate = (double)Forex.Convert(context, user.Country.CurrencyCode, "USD", 1), CCExpiry = String.Empty, CCNumber = String.Empty, CCSecurityCode = String.Empty }; GomsPaymentMethod paymentMethod = null; if (reloadTransaction is PpcReloadTransaction) { paymentMethod = context.GomsPaymentMethods.FirstOrDefault(p => (p.GomsSubsidiaryId == user.GomsSubsidiaryId) && (string.Compare(p.Name, "Prepaid Card") == 0)); if (paymentMethod != null) { req.PPCSerialNumber = ((PpcReloadTransaction)reloadTransaction).ReloadPpc.SerialNumber; req.PPCPin = ((PpcReloadTransaction)reloadTransaction).ReloadPpc.Pin; // consume prepaid card var resultUsePpc = UsePrepaidCard(context, userId, reloadTransaction); if (resultUsePpc.IsSuccess) { result = new RespCreateWalletLoad { IsSuccess = true, StatusCode = resultUsePpc.StatusCode, StatusMessage = resultUsePpc.StatusMessage, TransactionId = resultUsePpc.TransactionId }; } else { throw new GomsException { StatusCode = resultUsePpc.StatusCode, StatusMessage = resultUsePpc.StatusMessage }; } } else { throw new GomsPaymentMethodIdInvalidException(); } } else if (reloadTransaction is CreditCardReloadTransaction) { } else if (reloadTransaction is PaypalReloadTransaction) { req.PaypalReferenceNumber = reloadTransaction.Reference; paymentMethod = context.GomsPaymentMethods.FirstOrDefault(p => (p.GomsSubsidiaryId == user.GomsSubsidiaryId) && (string.Compare(p.Name, "PayPal") == 0)); if (paymentMethod == null) { throw new GomsPaymentMethodIdInvalidException(); } req.PaymentMethod = paymentMethod.PaymentMethodId; try { result = _serviceClient.CreateWalletLoad(req); if (result.IsSuccess) { reloadTransaction.GomsTransactionId = result.TransactionId; reloadTransaction.GomsTransactionDate = DateTime.Now; reloadTransaction.GomsRemarks = null; context.SaveChanges(); } else throw new Exception(result.StatusMessage); } catch (Exception e) { throw new GomsServiceCallException(e.Message); } } else if (reloadTransaction is MopayReloadTransaction) { req.PaypalReferenceNumber = reloadTransaction.Reference; paymentMethod = context.GomsPaymentMethods.FirstOrDefault(p => (p.GomsSubsidiaryId == user.GomsSubsidiaryId) && (string.Compare(p.Name, "MoPay") == 0)); if (paymentMethod == null) { throw new GomsPaymentMethodIdInvalidException(); } req.PaymentMethod = paymentMethod.PaymentMethodId; try { result = _serviceClient.CreateWalletLoad(req); if (result.IsSuccess) { reloadTransaction.GomsTransactionId = result.TransactionId; reloadTransaction.GomsTransactionDate = DateTime.Now; reloadTransaction.GomsRemarks = null; context.SaveChanges(); } else throw new Exception(result.StatusMessage); } catch (Exception e) { throw new GomsServiceCallException(e.Message); } } else { throw new GomsInvalidTransactionTypeException(); } } catch (GomsException e) { result = new RespCreateWalletLoad { IsSuccess = false, StatusCode = e.StatusCode, StatusMessage = e.StatusMessage }; } return (result); }