Esempio n. 1
0
        internal static CancellationResponse Parse(string xml, ILogger logger)
        {
            try
            {
                var dirRes = AcquirerTrxRes.Deserialize(xml);
                return(new CancellationResponse(dirRes, xml));
            }
            catch (Exception e1)
            {
                logger.Log("error : {0}", e1);

                try
                {
                    var errRes = AcquirerErrorRes.Deserialize(xml);
                    return(new CancellationResponse(errRes, xml));
                }
                catch (Exception e2)
                {
                    logger.Log("error : {0}", e2);

                    return(new CancellationResponse(e1)
                    {
                        RawMessage = xml
                    });
                }
            }
        }
        internal static AmendmentResponse Parse(string xml, ILogger logger)
        {
            try
            {
                var dirRes = AcquirerTrxRes.Deserialize(xml);
                return(new AmendmentResponse(dirRes, xml));
            }
            catch (Exception e1)
            {
                logger.LogError(e1, "error");
                try
                {
                    var errRes = AcquirerErrorRes.Deserialize(xml);
                    return(new AmendmentResponse(errRes, xml));
                }
                catch (Exception e2)
                {
                    logger.LogError(e2, "error");

                    return(new AmendmentResponse(e1)
                    {
                        RawMessage = xml
                    });
                }
            }
        }
        internal static NewMandateResponse Parse(string xml, ILogger logger)
        {
            try
            {
                var dirRes = AcquirerTrxRes.Deserialize(xml);
                return(new NewMandateResponse(dirRes, xml));
            }
            catch (Exception e1)
            {
                logger.LogError(e1, e1.Message);
                try
                {
                    var errRes = AcquirerErrorRes.Deserialize(xml);
                    return(new NewMandateResponse(errRes, xml));
                }
                catch (Exception e2)
                {
                    logger.LogError(e2, e2.Message);

                    return(new NewMandateResponse(e1)
                    {
                        RawMessage = xml
                    });
                }
            }
        }
Esempio n. 4
0
 private CancellationResponse(AcquirerTrxRes trxRes, string xml)
 {
     Error   = null;
     IsError = false;
     IssuerAuthenticationUrl        = trxRes.Issuer.issuerAuthenticationURL;
     TransactionId                  = trxRes.Transaction.transactionID;
     TransactionCreateDateTimestamp = trxRes.Transaction.transactionCreateDateTimestamp;
     RawMessage = xml;
 }
Esempio n. 5
0
        internal static AuthenticationResponse Parse(string xml)
        {
            try
            {
                if (xml.Contains("AcquirerTrxRes"))
                {
                    var dirRes = AcquirerTrxRes.Deserialize(xml);
                    return(new AuthenticationResponse(dirRes, xml));
                }

                var errRes = AcquirerErrorRes.Deserialize(xml);
                return(new AuthenticationResponse(errRes, xml));
            }
            catch (Exception e)
            {
                return(new AuthenticationResponse(e, xml));
            }
        }
Esempio n. 6
0
 private AuthenticationResponse(AcquirerTrxRes trxRes, string xml) : base(xml)
 {
     IssuerAuthenticationUrl        = trxRes.Issuer.issuerAuthenticationURL.ParseAsUri(new CommunicatorException("Invalid AcquirerTrxRes.Issuer.issuerAuthenticationURL format."));
     TransactionId                  = trxRes.Transaction.transactionID;
     TransactionCreateDateTimestamp = trxRes.Transaction.transactionCreateDateTimestamp;
 }
        /// <summary>
        /// Requests a transaction.
        /// </summary>
        /// <param name="transaction"><see cref="Transaction" /> to send.</param>
        /// <returns><see cref="Transaction" /> with added transaction ID and Issuer authentication URL.</returns>
        /// <exception cref="XmlSchemaValidationException">Request Xml does not comply with schema.</exception>
        /// <exception cref="IDealException">Respons from iDEAL contains an error.</exception>
        /// <exception cref="ConfigurationErrorsException">Errors in configuration file.</exception>
        /// <exception cref="UriFormatException">Returned issuer authentication Url is in invalid format.</exception>
        /// <exception cref="WebException">Error getting reply from acquirer.</exception>
        /// <exception cref="CryptographicException">Error using client certificate.</exception>
        public Transaction RequestTransaction(Transaction transaction)
        {
            if (traceSwitch.TraceInfo)
            {
                TraceLine("Start of RequestTransaction()");
            }
            if (traceSwitch.TraceVerbose)
            {
                TraceLine(Format("Parameters: transaction: {0}", transaction == null ? "NULL" : transaction.ToString()));
            }

            // Check input
            CheckMandatory("transaction", transaction);
            CheckMandatory("transaction.Amount", transaction.Amount);
            CheckMandatory("transaction.PurchaseId", transaction.PurchaseId);
            CheckMandatory("transaction.Description", transaction.Description);
            CheckMandatory("transaction.EntranceCode", transaction.EntranceCode);

            // Prepare the transaction request
            AcquirerTrxReq request = CreateRequest <AcquirerTrxReq>();

            request.Merchant = CreateMerchant <AcquirerTrxReqMerchant>();

            request.Transaction = new AcquirerTrxReqTransaction();

            request.Transaction.amount = transaction.Amount;

            request.Transaction.currency         = merchantConfig.currency;
            request.Transaction.description      = transaction.Description;
            request.Transaction.entranceCode     = transaction.EntranceCode;
            request.Transaction.expirationPeriod = merchantConfig.ExpirationPeriod;

            request.Transaction.language = merchantConfig.language;

            request.Transaction.purchaseID = transaction.PurchaseId;

            request.Issuer          = new AcquirerTrxReqIssuer();
            request.Issuer.issuerID = transaction.IssuerId;

            // Serialize the transaction request to an XML string
            string xmlRequest = SerializationHelper.SerializeObject <AcquirerTrxReq>(request);

            var xmlDoc = new XmlDocument();

            xmlDoc.LoadXml(xmlRequest);

            var signatureElement = XmlSignature.XmlSignature.Sign(ref xmlDoc, GetMerchantRSACryptoServiceProvider(), merchantConfig.ClientCertificate.Thumbprint);

            xmlRequest = xmlDoc.OuterXml;

            // Validate the request before sending it to the service
            ValidateXML(xmlRequest);

            // Send request / get respons
            string xmlRespons = GetReplyFromAcquirer(xmlRequest, merchantConfig.acquirerUrlTRA);

            // Validate respons
            ValidateXML(xmlRespons);

            if (!XmlSignature.XmlSignature.CheckSignature(xmlRespons, (RSA)merchantConfig.aquirerCertificate.PublicKey.Key))
            {
                Trace.WriteLine("Xml response was not well signed " + xmlRespons);
                throw new ArgumentException("Response from server is not well signed");
            }

            if (traceSwitch.TraceInfo)
            {
                TraceLine("Response from RequestTransaction() was : " + xmlRespons);
            }

            // Check respons for errors
            CheckError(xmlRespons, Resources.iDealUnavailable);

            AcquirerTrxRes respons = (AcquirerTrxRes)SerializationHelper.DeserializeObject <AcquirerTrxRes>(xmlRespons);

            transaction.Id = respons.Transaction.transactionID;
            // added in v3.3.x
            transaction.TransactionCreateDateTimestamp = respons.Transaction.transactionCreateDateTimestamp;

            string issuerAuthenticationURL = respons.Issuer.issuerAuthenticationURL;

            Uri outUri;

            if (!Uri.TryCreate(issuerAuthenticationURL, UriKind.Absolute, out outUri))
            {
                throw new UriFormatException("IssuerAuthenticationUrl is not in correct format.");
            }
            transaction.IssuerAuthenticationUrl = outUri;

            transaction.AcquirerId = respons.Acquirer.acquirerID;

            if (traceSwitch.TraceInfo)
            {
                TraceLine("End of RequestTransaction()");
            }
            if (traceSwitch.TraceVerbose)
            {
                TraceLine(Format("Returnvalue: {0}", transaction.ToString()));
            }

            return(transaction);
        }