// Returns PaymentTransactionID for this transaction. private CashCloudPurchaseTransactionRequest PersistPaymentRequest(CashCloudPurchaseTransactionRequest purchaseTransactionRequest) { PaymentTransaction paymentTransaction = new PaymentTransaction(); paymentTransaction.Action = purchaseTransactionRequest.action; paymentTransaction.Address = purchaseTransactionRequest.address; paymentTransaction.Amount = Convert.ToDecimal(purchaseTransactionRequest.amount); paymentTransaction.City = purchaseTransactionRequest.city; paymentTransaction.ClientIP = purchaseTransactionRequest.customerip; paymentTransaction.CountryCode = purchaseTransactionRequest.countryCode; paymentTransaction.CurrencyCode = purchaseTransactionRequest.currencyCode; paymentTransaction.email = purchaseTransactionRequest.Email; paymentTransaction.Member = purchaseTransactionRequest.member; paymentTransaction.MemberInGameID = purchaseTransactionRequest.MemberInGameID; paymentTransaction.MerchantIP = purchaseTransactionRequest.merchantip; paymentTransaction.StateCode = purchaseTransactionRequest.stateCode; paymentTransaction.TrackID = purchaseTransactionRequest.trackid; paymentTransaction.TransactionRequestDateTime = purchaseTransactionRequest.transactionDateTime; paymentTransaction.UDF1 = purchaseTransactionRequest.udf1; paymentTransaction.UDF2 = purchaseTransactionRequest.udf2; paymentTransaction.UDF3 = purchaseTransactionRequest.udf3; paymentTransaction.UDF4 = purchaseTransactionRequest.udf4; paymentTransaction.UDF5 = purchaseTransactionRequest.udf5; paymentTransaction.Zip = purchaseTransactionRequest.zip; paymentTransaction.PaymentStatus = "UNPAID"; db.PaymentTransactions.Add(paymentTransaction); try { db.SaveChanges(); } catch (System.Data.Entity.Validation.DbEntityValidationException e) { foreach (var eve in e.EntityValidationErrors) { Console.WriteLine("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:", eve.Entry.Entity.GetType().Name, eve.Entry.State); foreach (var ve in eve.ValidationErrors) { System.Diagnostics.Debug.WriteLine("- Property: \"{0}\", Error: \"{1}\"", ve.PropertyName, ve.ErrorMessage); } } } purchaseTransactionRequest.paymentTransactionID = paymentTransaction.PaymentTransactionID; return(purchaseTransactionRequest); }
/* private string GetTrackingID(PurchaseTransactionRequest purchaseTransactionRequest) * { * // Tracking ID - 50 char - generated by hash(email address + transaction date + transaction time + amount) * string hashTrackingID=""; * string trackingID = purchaseTransactionRequest.Email + purchaseTransactionRequest.transactionDateTime + purchaseTransactionRequest.amount; * * hashTrackingID = Hashing.GetMd5Hash(trackingID); * if (hashTrackingID.Length > 49) * { * hashTrackingID = hashTrackingID.Substring(0, 49); * } * * Console.WriteLine("The MD5 hash of " + trackingID + " is: " + hashTrackingID + "."); * * return hashTrackingID; * } */ private string GetTrackingID(CashCloudPurchaseTransactionRequest purchaseTransactionRequest) { // Tracking ID - 25 char - generated by hash(email address + transaction date + transaction time + amount) string hashTrackingID = ""; string trackingID = purchaseTransactionRequest.Email + purchaseTransactionRequest.transactionDateTime + purchaseTransactionRequest.amount; hashTrackingID = Hashing.GetMd5Hash(trackingID); if (hashTrackingID.Length > 24) { hashTrackingID = hashTrackingID.Substring(0, 24); } Console.WriteLine("The MD5 hash of " + trackingID + " is: " + hashTrackingID + "."); return(hashTrackingID); }
private bool VerifyAndPersistPaymentResponse(CashCloudPurchaseTransactionRequest purchaseTransactionRequest, CashCloudPurchaseTransactionResponse purchaseTransactionResponse) { PaymentTransaction paymentTransaction = db.PaymentTransactions.Find(purchaseTransactionRequest.paymentTransactionID); // Do validation on trackID. if (purchaseTransactionResponse.trackid == purchaseTransactionRequest.trackid) { paymentTransaction.Result = purchaseTransactionResponse.result; paymentTransaction.ResponseCode = purchaseTransactionResponse.responsecode; paymentTransaction.AuthCode = purchaseTransactionResponse.authcode; paymentTransaction.TranID = purchaseTransactionResponse.tranid; paymentTransaction.TransactionResponseDateTime = DateTime.Now; if (paymentTransaction.ResponseCode.Trim() == "000" || paymentTransaction.ResponseCode.Trim() == "001") { paymentTransaction.PaymentStatus = "PAID"; } } /* Remo-2014-10-03-Payment Bug "Payment crashes when register as "Silver"status":: Resolution - This cannot happen here, must happen outside of payment processing. handled in GamesController. * if (paymentTransaction.PaymentStatus == "PAID") * { * MemberInGame memberInGame = db.MemberInGames.Find(paymentTransaction.MemberInGameID); * memberInGame.PaymentIndicator = true; * }*/ try { db.SaveChanges(); } catch (System.Data.Entity.Validation.DbEntityValidationException e) { foreach (var eve in e.EntityValidationErrors) { Console.WriteLine("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:", eve.Entry.Entity.GetType().Name, eve.Entry.State); foreach (var ve in eve.ValidationErrors) { System.Diagnostics.Debug.WriteLine("- Property: \"{0}\", Error: \"{1}\"", ve.PropertyName, ve.ErrorMessage); } } return(false); } return(true); }
public void MockPurchaseRequest() { CashCloudPurchaseTransactionRequest purchaseTransactionRequest = new CashCloudPurchaseTransactionRequest(); // Action should be derived. purchaseTransactionRequest.action = "1"; // user and pass should be from DB - should also be set in the PerformPaymentTransaction method, trackID is derived during paymentTransaction process //purchaseTransactionRequest.terminalid = "CMVAUL1"; //purchaseTransactionRequest.password = "******"; //purchaseTransactionRequest.trackid = "soft1256"; purchaseTransactionRequest.card = "4444444444444444"; purchaseTransactionRequest.cvv2 = "115"; purchaseTransactionRequest.expYear = "2012"; purchaseTransactionRequest.expMonth = "12"; purchaseTransactionRequest.member = "Test User"; purchaseTransactionRequest.MemberInGameID = 1; purchaseTransactionRequest.currencyCode = "USD"; purchaseTransactionRequest.address = "Ebene"; purchaseTransactionRequest.city = "MOKA"; purchaseTransactionRequest.stateCode = "MOKA"; purchaseTransactionRequest.zip = "152458"; purchaseTransactionRequest.countryCode = "Mauritius"; purchaseTransactionRequest.Email = "*****@*****.**"; purchaseTransactionRequest.amount = "0.00"; purchaseTransactionRequest.merchantip = "172.152.43.1"; purchaseTransactionRequest.customerip = "43.78.33.1"; purchaseTransactionRequest.transactionDateTime = DateTime.Now; CashCloudPurchaseTransactionResponse ptRes = this.PerformPaymentTransaction(purchaseTransactionRequest); Console.WriteLine("authcode [" + ptRes.authcode + "]"); Console.WriteLine("responsecode [" + ptRes.responsecode + "]"); Console.WriteLine("result [" + ptRes.result + "]"); Console.WriteLine("terminalid [" + ptRes.terminalid + "]"); Console.WriteLine("trackid [" + ptRes.trackid + "]"); Console.WriteLine("tranid [" + ptRes.tranid + "]"); Console.WriteLine("udf1 [" + ptRes.udf1 + "]"); Console.WriteLine("udf2 [" + ptRes.udf2 + "]"); Console.WriteLine("udf3 [" + ptRes.udf3 + "]"); Console.WriteLine("udf4 [" + ptRes.udf4 + "]"); Console.WriteLine("udf5 [" + ptRes.udf5 + "]"); }
public CashCloudPurchaseTransactionResponse PerformPaymentTransaction(CashCloudPurchaseTransactionRequest requestTx) { // Get URL from Config PaymentConfiguration paymentConfiguration = this.GetPaymentConfiguration(); requestTx.terminalid = paymentConfiguration.TerminalID; requestTx.password = paymentConfiguration.MerchantPassword; requestTx.trackid = this.GetTrackingID(requestTx); // Persist request transaction requestTx = this.PersistPaymentRequest(requestTx); // Do Payment CashCloudPurchase transactionProcessor = new CashCloudPurchase(); CashCloudPurchaseTransactionResponse purchaseTransactionResponse; purchaseTransactionResponse = transactionProcessor.DoPayment(requestTx, paymentConfiguration.PaymentGatewayURL); // persist response bool updateSuccessful = this.VerifyAndPersistPaymentResponse(requestTx, purchaseTransactionResponse); return(purchaseTransactionResponse); }