コード例 #1
0
        public ActionResult SendToPaymentProvider(
            PaymentProviderConfiguration configuration,
            GeneralisedPaymentTransfer transferObject,
            Action <PaymentProviderConfiguration, GeneralisedPaymentTransfer, string> saveProviderReference)
        {
            var civicaXfer = new CivicaPaymentTransfer()
            {
                ProviderUrl          = Shared.Civica.Default.CivicaPostUrl,
                ReturnUrl            = transferObject.ReturnUrl,
                CallingApplicationId = Shared.Civica.Default.CivicaAppId,
                CallingApplicationTransactionReference = transferObject.TransactionId,
                GeneralLedgerCode = $"{transferObject.GeneralLedgerCode}-{transferObject.ProductId}",
                //PaymentSourceCode = transferObject.PaymentSourceCode,
                PaymentSourceCode = transferObject.IsMediated ? "02" : "01",
                PaymentTotal      = transferObject.Amount,
                PaymentLines      = new List <string>()
            };

            foreach (var item in transferObject.LineItems)
            {
                civicaXfer.PaymentLines.Add(FormatPaymentLine(item));
            }
            var resultView = PaymentFrameworkUtility.CreateView("~/Views/Payment/SendToCivica.cshtml", civicaXfer);

            var sendToPaymentLogMessage = PaymentFrameworkUtility.DescribeActionResultForLogging(resultView, true);

            this.Logger.CreateEntry(typeof(CivicaPaymentProvider), LogLevel.Info, sendToPaymentLogMessage);
            return(resultView);
        }
コード例 #2
0
        public ActionResult ProcessPayment(FormCollection form)
        {
            string requestId = _paymentProvider.GenerateUniqueIdentifier();

            this.Session["RequestId"] = requestId;


            var xfer = new GeneralisedPaymentTransfer()
            {
                Amount        = decimal.Parse(form["Amount"]), // -> "AMOUNT"
                ReturnUrl     = "http://localhost:59412" + Url.Action("ProviderCallback", "Capita"),
                TransactionId = requestId
            };

            PaymentProviderConfiguration providerConfig = new PaymentProviderConfiguration()
            {
                AccountIdentifer = this._capitaMerchantid,
                SharedSecret     = this._capitaSecretKey,
                SubAccountNumber = this._capitaScpid
            };

            xfer.Account           = this._capitaScpid;
            xfer.VariableReference = "164 Wandsworth Borough Council";
            xfer.Comment1          = "Activity : After school club";
            xfer.Comment2          = "PS56789/456";
            xfer.CustomerNumber    = "50939";
            xfer.GeneralLedgerCode = "WE333292049,WE330192071,WE333592049,WE333792049";
            xfer.IsMediated        = false;
            xfer.ProductId         = "56789";
            //xfer.VatCode = CapitaVatCode.StandardRate;
            //xfer.VatRate = 20;
            xfer.VatCode = CapitaVatCode.ZeroRate;
            xfer.VatRate = 0;
            //xfer.SaveCard = new SaveCard()
            //{
            //    PayerReference = "s12u34"
            //};
            xfer.LineItems = new System.Collections.Generic.List <CivicaLineItem>()
            {
                new CivicaLineItem()
                {
                    Amount    = decimal.Parse(form["Amount"]),
                    FundCode  = "16",
                    Narrative = "Play Service booking MULTI_153997_112816_138579",
                    Reference = "56789"
                }
            };

            var result = _paymentProvider.SendToPaymentProvider(providerConfig, xfer, SaveProviderReference);

            string rawHtml = PaymentFrameworkUtility.DescribeActionResultForLogging(result);

            System.Diagnostics.Trace.WriteLine(rawHtml);
            System.Diagnostics.Trace.WriteLine("Provider Reference: " + this.Session["ProviderReference"]);

            return(result);
        }
コード例 #3
0
        public void TestSendToRealexNoSaveCard()
        {
            RealExPaymentProvider realexInstance = new RealExPaymentProvider(new TraceWriterLogAdapter());

            Assert.AreEqual(ProviderType.Realex, realexInstance.ProviderType);

            var scenario = new
            {
                SimulateAt     = new DateTime(2016, 02, 03, 10, 34, 21),
                providerConfig = new PaymentProviderConfiguration()
                {
                    AccountIdentifer = "test-id",
                    SharedSecret     = "test-secret"
                },
                PaymentTransfer = new GeneralisedPaymentTransfer()
                {
                    Account           = "test-account",
                    Amount            = 234.56m,
                    Comment1          = "Hello [World] this is a test!",
                    Comment2          = "** some \"unusual<b>tokens</b>'\\ /etc..",
                    CustomerNumber    = "1x2x345",
                    ProductId         = "PS-a/b\\3",
                    ReturnUrl         = "http://unit.localtest.me/something",
                    SaveCard          = null,
                    TransactionId     = "A453F8F7-E5DD-473F-B555-33839CA44C63",
                    VariableReference = "Another ref"
                }
            };

            var xferResult = realexInstance.SendToPaymentProvider(scenario.providerConfig, scenario.PaymentTransfer, scenario.SimulateAt);

            string generatedHtml = PaymentFrameworkUtility.DescribeActionResultForLogging(xferResult, true);

            string expectedHtml =
                "<form action=\"http://localhost:2437/Realex/epage.cgi.aspx\" method=\"post\" name=\"paymentForm\"> " +
                "<input type=\"hidden\" name=\"MERCHANT_RESPONSE_URL\" value=\"http://unit.localtest.me/something\" /> " +
                "<input type=\"hidden\" name=\"MERCHANT_ID\" value=\"test-id\" /> " +
                "<input type=\"hidden\" name=\"ORDER_ID\" value=\"A453F8F7-E5DD-473F-B555-33839CA44C63\" /> " +
                "<input type=\"hidden\" name=\"AMOUNT\" value=\"23456\" /> " +
                "<input type=\"hidden\" name=\"CURRENCY\" value=\"GBP\" /> " +
                "<input type=\"hidden\" name=\"TIMESTAMP\" value=\"20160203103421\" /> " +
                "<input type=\"hidden\" name=\"SHA1HASH\" value=\"a1134e0c769e30844dd1941c446c9eafe6f78026\" /> " +
                "<input type=\"hidden\" name=\"ACCOUNT\" value=\"test-account\" /> " +
                "<input type=\"hidden\" name=\"AUTO_SETTLE_FLAG\" value=\"1\" /> " +
                "<input type=\"hidden\" name=\"COMMENT1\" value=\"Hello [World] this is a test!\" /> " +
                "<input type=\"hidden\" name=\"COMMENT2\" value=\"** some &quot;unusualbtokens/b&#39;\\ /etc..\" /> " +
                "<input type=\"hidden\" name=\"CUST_NUM\" value=\"1x2x345\" /> " +
                "<input type=\"hidden\" name=\"VAR_REF\" value=\"Anotherref\" /> " +
                "<input type=\"hidden\" name=\"PROD_ID\" value=\"PSab3\" /> " +
                "</form> " +
                "<script type=\"text/javascript\"> document.forms['paymentForm'].submit(); </script>";

            Assert.AreEqual(expectedHtml, generatedHtml);
        }
コード例 #4
0
        public ActionResult SendToPaymentProvider(
            PaymentProviderConfiguration configuration,
            GeneralisedPaymentTransfer transferObject, DateTime nowLocalTime)
        {
            var realExXfer = new RealExPaymentTransfer()
            {
                MerchantId     = configuration.AccountIdentifer,
                OrderId        = transferObject.TransactionId,
                Amount         = (int)(transferObject.Amount * 100),
                ProviderUrl    = Shared.RealEx.Default.RealExPostUrl,
                ReturnUrl      = transferObject.ReturnUrl,
                Currency       = "GBP",
                Timestamp      = nowLocalTime.ToString("yyyyMMddHHmmss"),
                AutoSettleFlag = true
            };

            realExXfer.Account           = transferObject.Account;
            realExXfer.VariableReference = MessageContentUtility.TruncateAndStripDisallowed(transferObject.VariableReference, 50, RealexFields.RealexFieldVarRefDisallowRegex);
            realExXfer.CustomerNumber    = transferObject.CustomerNumber;
            realExXfer.ProductId         = MessageContentUtility.TruncateAndStripDisallowed(transferObject.ProductId, null, RealexFields.RealexFieldProductIdDisallowRegex);
            realExXfer.Comment1          = MessageContentUtility.TruncateAndStripDisallowed(transferObject.Comment1, 255, RealexFields.RealexFieldCommentDisallowRegex);
            realExXfer.Comment2          = MessageContentUtility.TruncateAndStripDisallowed(transferObject.Comment2, 255, RealexFields.RealexFieldCommentDisallowRegex);

            var fieldsForSignature = new List <string>();

            fieldsForSignature.Add(realExXfer.Timestamp);
            fieldsForSignature.Add(realExXfer.MerchantId);
            fieldsForSignature.Add(realExXfer.OrderId);
            fieldsForSignature.Add(realExXfer.Amount.ToString());
            fieldsForSignature.Add(realExXfer.Currency);

            if (transferObject.SaveCard != null)
            {
                realExXfer.HasSavedCard       = true;
                realExXfer.CardStorageEnabled = true;
                realExXfer.OfferSaveCard      = transferObject.SaveCard.OfferSaveCard;
                realExXfer.PaymentReference   = MessageContentUtility.TruncateAndStripDisallowed(transferObject.SaveCard.PaymentReference, 30, RealexFields.RealexFieldPaymentRefDisallowRegex);
                realExXfer.PayerReference     = MessageContentUtility.TruncateAndStripDisallowed(transferObject.SaveCard.PayerReference, 50, RealexFields.RealexFieldPayerRefDisallowRegex);
                realExXfer.PayerExists        = transferObject.SaveCard.PayerExists;
                fieldsForSignature.Add(realExXfer.PayerReference);
                fieldsForSignature.Add(realExXfer.PaymentReference);
            }

            realExXfer.Sha1Hash = CalculateRealexSignature(fieldsForSignature.ToArray(), configuration.SharedSecret);

            var resultView = PaymentFrameworkUtility.CreateView("~/Views/Payment/SendToRealEx.cshtml", realExXfer);

            var sendToPaymentLogMessage = PaymentFrameworkUtility.DescribeActionResultForLogging(resultView, true);

            this.Logger.CreateEntry(typeof(RealExPaymentProvider), LogLevel.Info, sendToPaymentLogMessage);
            return(resultView);
        }
コード例 #5
0
        public ActionResult ProcessPayment(FormCollection form)
        {
            var xfer = new GeneralisedPaymentTransfer()
            {
                Amount            = decimal.Parse(form["Amount"]),               // -> "AMOUNT"
                ReturnUrl         = "http://localhost:59412" + Url.Action("ProviderCallback", "Default"),
                TransactionId     = _paymentProvider.GenerateUniqueIdentifier(), // -> "ORDER_ID"
                GeneralLedgerCode = "SOMECIVICACODE"
            };

            PaymentProviderConfiguration providerConfig = new PaymentProviderConfiguration()
            {
                AccountIdentifer = _realExMerchantid,
                SharedSecret     = _realExSecretKey
            };

            xfer.Account           = "";
            xfer.VariableReference = "";
            xfer.Comment1          = "";
            xfer.Comment2          = "";
            xfer.LineItems.Add(new CivicaLineItem()
            {
                Reference = "LINEREF",
                Amount    = 10.00m,
                Narrative = "Stuff paid for",
                FundCode  = "FUND"
            });

            var result = _paymentProvider.SendToPaymentProvider(providerConfig, xfer, null);

            string rawHtml = PaymentFrameworkUtility.DescribeActionResultForLogging(result);

            System.Diagnostics.Trace.WriteLine(rawHtml);

            return(result);
        }
コード例 #6
0
        public ActionResult SendToPaymentProvider(
            PaymentProviderConfiguration configuration,
            GeneralisedPaymentTransfer transferObject,
            Action <PaymentProviderConfiguration, GeneralisedPaymentTransfer, string> saveProviderReference)
        {
            int siteId;

            int.TryParse(configuration.AccountIdentifer, out siteId);

            int scpId;

            int.TryParse(transferObject.Account, out scpId);

            int    hmacKeyId;
            string hmacSecretKey;

            CapitaApiHelpers.GetHmacIdAndSecretKey(configuration.SharedSecret, out hmacKeyId, out hmacSecretKey);

            string returnUrl = $"{transferObject.ReturnUrl}?{RoundTripTokenKey}={transferObject.TransactionId}";

            CapitaInvokeRequest request = new CapitaInvokeRequest()
            {
                SiteId              = siteId,
                ScpId               = scpId,
                HmacKeyId           = hmacKeyId,
                HmacKey             = hmacSecretKey,
                UniqueReference     = transferObject.TransactionId,
                PurchaseId          = transferObject.ProductId,
                BookingRef          = transferObject.Comment2,
                PurchaseDescription = transferObject.Comment1,
                PaymentTotal        = (int)(transferObject.Amount * 100),
                ReturnUrl           = returnUrl,
                IntegraCode         = transferObject.GeneralLedgerCode,
                IsMediated          = transferObject.IsMediated,
                FundCode            = Shared.Capita.Default.FundCode,
                VatCode             = transferObject.VatCode,
                VatRate             = transferObject.VatRate
            };

            if (transferObject.SaveCard != null)
            {
                request.SaveCard     = true;
                request.CardHolderId = MessageContentUtility.TruncateAndStripDisallowed(transferObject.SaveCard.PayerReference, 50, null);
            }

            //Call Capita web service to set up the payment
            CapitaInvokeResponse response = InvokeRequest(request);

            if (response != null && !response.Error)
            {
                //call this action method to save scpReference into PendingPayment table
                saveProviderReference(configuration, transferObject, response.ScpReference);
                RedirectResult resultView = new RedirectResult(response.RedirectUrl, true);
                var            sendToPaymentLogMessage = PaymentFrameworkUtility.DescribeActionResultForLogging(resultView, true);
                this.Logger.CreateEntry(typeof(CapitaPaymentProvider), LogLevel.Info, sendToPaymentLogMessage);
                return(resultView);
            }
            else
            {
                string errorMessage = "Capita Server returns null response.";
                if (response != null)
                {
                    errorMessage += " " + response.ErrorMessage;
                }

                this.Logger.CreateEntry(typeof(CapitaPaymentProvider), LogLevel.Error, errorMessage);
                return(new HttpStatusCodeResult(HttpStatusCode.InternalServerError));
            }
        }