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 }); } } }
private CancellationResponse(AcquirerTrxRes trxRes, string xml) { Error = null; IsError = false; IssuerAuthenticationUrl = trxRes.Issuer.issuerAuthenticationURL; TransactionId = trxRes.Transaction.transactionID; TransactionCreateDateTimestamp = trxRes.Transaction.transactionCreateDateTimestamp; RawMessage = xml; }
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)); } }
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); }