예제 #1
0
        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);
        }
예제 #2
0
        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();
        }