public async Task <BillPaymentResponse> PostBillPaymentRequest(BillPaymentRequest billPaymentRequest) { string responseString = string.Empty; BillPaymentResponse billPaymentResponse = new BillPaymentResponse(); Guid fiId = Guid.Parse(fiIdString); switch (billPaymentRequest.BillerID.ToLower()) { case "869cd85f-c155-429e-8ded-b92f41b61ec1": responseString = await OzoneBillPaymentProxy.PayBill(new Helpers.OzoneBillPaymentRequest() { MobileNumber = billPaymentRequest.BillerAccountNumber, Amount = billPaymentRequest.Amount }); responseString = Regex.Unescape(responseString); responseString = responseString.Substring(1, responseString.LastIndexOf("\"") - 1); byte[] encodedString = Encoding.UTF8.GetBytes(responseString); MemoryStream ms = new MemoryStream(encodedString); ms.Flush(); ms.Position = 0; XmlDocument doc = new XmlDocument(); doc.Load(ms); ms.Close(); XmlNamespaceManager namespaceManager = new XmlNamespaceManager(doc.NameTable); namespaceManager.AddNamespace("soapenv", "http://schemas.xmlsoap.org/soap/envelope/"); namespaceManager.AddNamespace("ns1", "http://api.csr.mind.com"); namespaceManager.AddNamespace("ns9", "http://api.csr.mind.com/addPayment"); XmlNodeList paymentNodes = doc.SelectNodes("/soapenv:Envelope/soapenv:Body/ns1:addPaymentReturn/ns9:response/ns9:payment", namespaceManager); if (paymentNodes.Count > 0) { billPaymentResponse.Successful = true; billPaymentResponse.Message = "Payment to mobile number " + billPaymentRequest.BillerAccountNumber + " successful."; billPaymentResponse.TransactionID = paymentNodes[0].Attributes["id"].Value; } else { billPaymentResponse.Successful = false; billPaymentResponse.Message = "There was an error. Please ensure the mobile number is correct."; } var sourceAccount = db.AssociatedAccounts.Where(p => p.AssociatedAccountID == billPaymentRequest.AssociatedAccountID).First(); db.Transfers.Add(new Transfer { SourceInstitutionID = fiId, SourceAccountID = billPaymentRequest.AssociatedAccountID, SourceAccountNumber = sourceAccount.AccountNumber, SourceTransactionID = "", BillerID = Guid.Parse(fiIdString), BillerAccountNumber = billPaymentRequest.BillerAccountNumber, BillerTransactionID = billPaymentResponse.TransactionID, TransferAmount = (decimal)billPaymentRequest.Amount, TransferDescription = "Ozone Bill Payment", Status = paymentNodes.Count > 0 ? "Successful" : "Error", StatusDescription = billPaymentResponse.Message, Created = DateTime.Now }); db.SaveChanges(); break; } return(billPaymentResponse); }
public async Task <IHttpActionResult> PostTopUpRequest(TopUpRequest topUpRequest) { //return NotFound(); Guid fiId = Guid.Parse(fiIdString); TopUpResponse topUpResponse = new TopUpResponse(); Helpers.Transfer_Light transfer = new Helpers.Transfer_Light(); switch (topUpRequest.CarrierID) { case "Digicel": string userId = User.Identity.GetUserId(); var userAccounts = db.AssociatedAccounts.Where(p => p.UserID.Equals(userId)); var fromAcct = userAccounts.Where(p => p.AssociatedAccountID == topUpRequest.AssociatedAccountID).FirstOrDefault(); var minorAcct = userAccounts.Where(p => p.Description2.Equals("EPAY DIGICEL TOPUP")).FirstOrDefault(); if (fromAcct == null) { topUpResponse.Message = "Invalid source account specified."; topUpResponse.Successful = false; } //if(minorAcct != null) //{ ////################################################### //// Set maximum TopUps to a single number ////################################################### //int totalTopUps = db.Transfers.Where(p => p.BillerAccountNumber.Equals(topUpRequest.MobileNumber)).Count(); //if (totalTopUps > 2) //{ // topUpResponse.Message = "Test credit has been depleted."; // topUpResponse.Successful = false; //} //else //{ // topUpRequest.Amount = 5; // //return Ok(DigicelTopUp.TopUp(topUpRequest.MobileNumber, topUpRequest.Amount)); // DigicelTopUpResponse digicelTopUpResponse = DigicelTopUp.TopUp(topUpRequest.Territory, topUpRequest.MobileNumber, topUpRequest.Amount); // topUpResponse.Successful = digicelTopUpResponse.Code == "0"; // topUpResponse.Message = digicelTopUpResponse.Message; // topUpResponse.TransactionID = digicelTopUpResponse.TransactionID; //} ////############################################## //################################################ // LIVE CODE //################################################ //DigicelTopUpResponse digicelTopUpResponse = DigicelTopUp.TopUp(topUpRequest.Territory, topUpRequest.MobileNumber, topUpRequest.Amount); //topUpResponse.Successful = digicelTopUpResponse.Code == "0"; //topUpResponse.Message = digicelTopUpResponse.Message; //topUpResponse.TransactionID = digicelTopUpResponse.TransactionID; //################################################ //################################################ // TEST CODE //################################################ DigicelTopUpResponse digicelTopUpResponse = new DigicelTopUpResponse { Code = "0", Message = "TopUp to " + topUpRequest.MobileNumber + " Successful", TransactionID = Guid.NewGuid().ToString() }; topUpResponse.Successful = digicelTopUpResponse.Code == "0"; topUpResponse.Message = digicelTopUpResponse.Message; topUpResponse.TransactionID = digicelTopUpResponse.TransactionID; //################################################ //} //else //{ // topUpResponse.Message = "Your account has not been provisioned for this transaction."; // topUpResponse.Successful = false; //} if (!topUpResponse.Successful) { return(Ok(topUpResponse.Message)); } //################################################ // LIVE CODE //################################################ //string encryptedPin = db.PINs.Where(p => p.FinancialInstitutionID == fiId && p.UserID == userId).Select(p => p.Pin).First(); //string decryptedPin = Helpers.StringCipher.Decrypt(encryptedPin, userId); //transfer.fromAcct = fromAcct.AccountNumber; //transfer.amount = (double)topUpRequest.Amount; //transfer.toAccountNumber = minorAcct.AccountNumber; //transfer.memid = fromAcct.MemberID; //transfer.pin = decryptedPin; //string transferResponse = await COB.TransferFunds(transfer); //string[] transferResponseArray = transferResponse.Split(new string[] { "ITC" }, StringSplitOptions.RemoveEmptyEntries)[0].Split(new char[] { '\t' }, StringSplitOptions.RemoveEmptyEntries); //if (transferResponseArray[1][0] != '1') //{ // //topUpResponse.Successful = false; // topUpResponse.Message = transferResponseArray[1]; // //return Ok(topUpResponse); //} //################################################ break; case "Ozone": BillPaymentResponse response = await MiddleWare.Ozone.OzoneBillPaymentProxy.PayBill(new BillPaymentRequest { Amount = topUpRequest.Amount, AssociatedAccountID = topUpRequest.AssociatedAccountID, BillerAccountNumber = topUpRequest.MobileNumber, BillerID = "869cd85f-c155-429e-8ded-b92f41b61ec1" }); topUpResponse.Successful = response.Successful; topUpResponse.Message = response.Message; topUpResponse.TransactionID = response.TransactionID; break; default: topUpResponse.Successful = false; topUpResponse.Message = "Invalid Mobile Provider"; break; } AssociatedAccount account = db.AssociatedAccounts.Where(p => p.AssociatedAccountID == topUpRequest.AssociatedAccountID).First(); Guid billerId = db.Billers.Where(p => p.Name.Equals(topUpRequest.CarrierID)).Select(p => p.BillerID).First(); db.Transfers.Add(new E_Pay_Web_API.Models.Transfer { SourceTransactionID = DateTime.Now.ToString("yyyyMMdd-mmss"), SourceAccountNumber = account.AccountNumber, SourceAccountID = account.AssociatedAccountID, SourceInstitutionID = account.FinancialInstitutionID, MinorAccountNumber = transfer.toAccountNumber, BillerID = billerId, //BillerID = Guid.Parse(topUpRequest.CarrierID), BillerAccountNumber = topUpRequest.MobileNumber, BillerTransactionID = topUpResponse.TransactionID, TransferAmount = topUpRequest.Amount, TransferDescription = topUpRequest.CarrierID + " - TopUp", Status = topUpResponse.Successful ? "Successful" : "Error", StatusDescription = topUpResponse.Message, Created = DateTime.Now }); db.SaveChanges(); if (topUpResponse.Successful) { MailSender.SendMessage( User.Identity.GetUserName(), "E-Pay Top Up Confirmation and Receipt of Mobile Top Up Sent", "Congratulations your order has been completed successfully.\r\n\r\n" + "1 successful\r\n\r\n" + "Order ID: " + topUpResponse.TransactionID + "\r\n" + "Product: Mobile Top Up\r\n" + "Number: " + topUpRequest.MobileNumber + "\r\n" + "Country: Barbados\r\n" + "Top-up Amount: BBD $" + topUpRequest.Amount.ToString() + "\r\n" + "Receive Amount: BBD $" + topUpRequest.Amount.ToString() + "\r\n\r\n\r\n" + "Date & Time: " + DateTime.Now.ToString() + "\r\n\r\n" + "Amount Paid: BBD $" + topUpRequest.Amount.ToString() + "\r\n\r\n" + "From Account: " + account.Description + ": " + account.Description3 + " - " + account.AccountNumber + "\r\n\r\n" + "If you have any queries, please contact our customer care team.\r\n" + "Thanks,\r\n" + "The E-Pay Team" ); } return(Ok(topUpResponse)); //return NotFound(); }