public void ReceiptInResponseSuccess() { string rawRealexResponse = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<response timestamp=\"20160701060517\">" + " <merchantid>unittest</merchantid>" + " <account>theheightsrec</account>" + " <orderid>f20c8e3d-31b9-4164-a7a5-f1685665b574</orderid>" + " <authcode>005804</authcode>" + " <result>00</result>" + " <cvnresult>U</cvnresult>" + " <avspostcoderesponse>U</avspostcoderesponse>" + " <avsaddressresponse>U</avsaddressresponse>" + " <batchid>2126483</batchid>" + " <message>AUTH CODE:005804</message>" + " <pasref>14673495159568662</pasref>" + " <timetaken>1</timetaken>" + " <authtimetaken>0</authtimetaken>" + " <cardissuer>" + " <bank>HSBC</bank>" + " <country>UNITED KINGDOM</country>" + " <countrycode>GB</countrycode>" + " <region>EUR</region>" + " </cardissuer>" + " <sha1hash>d2bd3d3f6bd4736d03f285e11f1728cd722fae99</sha1hash>" + " </response>"; ReceiptInResponse parsedResponse = RealAuthResponseParser <ReceiptInResponse> .DeserializeFromString(rawRealexResponse, System.Net.HttpStatusCode.OK, null); Assert.IsNotNull(parsedResponse); Assert.AreEqual("20160701060517", parsedResponse.Timestamp); Assert.AreEqual("unittest", parsedResponse.MerchantId); Assert.AreEqual("theheightsrec", parsedResponse.Account); Assert.AreEqual("f20c8e3d-31b9-4164-a7a5-f1685665b574", parsedResponse.OrderId); Assert.AreEqual("005804", parsedResponse.AuthCode); Assert.AreEqual("00", parsedResponse.ResultString); Assert.AreEqual(0, parsedResponse.Result); Assert.AreEqual("U", parsedResponse.CvnResult); Assert.AreEqual("U", parsedResponse.AvsPostcodeResponse); Assert.AreEqual("U", parsedResponse.AvsAddressResponse); Assert.AreEqual("2126483", parsedResponse.BatchId); Assert.AreEqual("AUTH CODE:005804", parsedResponse.Message); Assert.AreEqual("14673495159568662", parsedResponse.PasRef); Assert.AreEqual("1", parsedResponse.TimeTaken); Assert.AreEqual("0", parsedResponse.AuthTimeTaken); // Assert.IsNotNull(parsedResponse.CardIssuer, "CardIssuer"); // Assert.AreEqual("HSBC", parsedResponse.CardIssuer.Bank); // Assert.AreEqual("UNITED KINGDOM", parsedResponse.CardIssuer.Country); // Assert.AreEqual("GBC", parsedResponse.CardIssuer.CountryCode); // Assert.AreEqual("EUR", parsedResponse.CardIssuer.Region); Assert.AreEqual("d2bd3d3f6bd4736d03f285e11f1728cd722fae99", parsedResponse.Sha1Hash); string secretKey = "test1234"; string correctExpectedHash = parsedResponse.CalculateExpectedSha1Hash(secretKey); Assert.AreEqual(correctExpectedHash, parsedResponse.Sha1Hash, "SHA signature"); Assert.IsTrue(parsedResponse.IsSha1HashCorrect(secretKey)); Assert.IsFalse(parsedResponse.IsSha1HashCorrect("wrongkey"), "expected mismatch Sha1Hash if the wrong key is used"); }
public async Task <TResponse> PostXmlToRealex <TResponse, TRequest>( TRequest request, string secretKey, LogLevel logLevelForSuccess) where TRequest : RealAuthRequest where TResponse : RealAuthResponse, new() { request.SetSha1Hash(secretKey); string postUrl = RealEx.Default.RealVaultRemoteUrl; var client = LoggingHttpHandler.CreateLoggingClient( this.Logger, typeof(RealexApiProvider), logLevelRequest: LogLevel.Info, logLevelResponse: LogLevel.Debug); // MUST use the XmlSerializer instead of default DataContractSerializer to honour the XmlAttribute and XmlRoot attributes XmlMediaTypeFormatter formatter = new XmlMediaTypeFormatter() { UseXmlSerializer = true }; HttpResponseMessage response = await client.PostAsync <TRequest>( postUrl, request, formatter, System.Threading.CancellationToken.None); string responseFromServer = await response.Content.ReadAsStringAsync(); TResponse parsedResponse = RealAuthResponseParser <TResponse> .DeserializeFromString( responseFromServer, response.StatusCode, request); LogLevel levelToLog = parsedResponse.IsSuccess ? logLevelForSuccess : LogLevel.Error; this.Logger.CreateEntry(typeof(RealexApiProvider), levelToLog, $"StatusCode {(int) response.StatusCode} content {responseFromServer}"); if (!parsedResponse.IsSha1HashCorrect(secretKey)) { this.Logger.CreateEntry(typeof(RealexApiProvider), LogLevel.Warn, $"Incorrect Sha1Hash {responseFromServer}"); } return(parsedResponse); }
public void BadQuery() { string rawRealexResponse = "<response timestamp=\"20160701151619\">" + " <result>505</result>" + " <message>You are not allowed to access this service from there! (212.36.61.2)</message>" + " <orderid>216e5f63-6f70-4c56-bea5-43c52441a567</orderid>" + "</response>"; QueryPaymentResponse parsedResponse = RealAuthResponseParser <QueryPaymentResponse> .DeserializeFromString(rawRealexResponse, System.Net.HttpStatusCode.OK, null); Assert.IsNotNull(parsedResponse); Assert.AreEqual("20160701151619", parsedResponse.Timestamp); Assert.AreEqual("505", parsedResponse.ResultString); Assert.AreEqual(505, parsedResponse.Result); Assert.AreEqual("You are not allowed to access this service from there! (212.36.61.2)", parsedResponse.Message); Assert.AreEqual("216e5f63-6f70-4c56-bea5-43c52441a567", parsedResponse.OrderId); Assert.IsTrue(parsedResponse.IsSha1HashCorrect("na")); Assert.IsFalse(parsedResponse.IsSuccess); }
public void QueryPaymentSuccess() { string rawRealexResponse = "<response timestamp=\"20160704143954\">" + " <merchantid>energykidzltd</merchantid>" + " <account>alfredsutton</account>" + " <orderid>216e5f63-6f70-4c56-bea5-43c52441a567</orderid>" + " <authcode>094613</authcode>" + " <result>00</result>" + " <cvnresult>M</cvnresult>" + " <avspostcoderesponse>U</avspostcoderesponse>" + " <avsaddressresponse>U</avsaddressresponse>" + " <batchid>2120757</batchid>" + " <message>AUTH CODE:094613</message>" + " <pasref>14667825736645877</pasref>" + " <timetaken>0</timetaken>" + " <authtimetaken>0</authtimetaken>" + " <cardnumber>465858XXXXXX1226</cardnumber>" + " <cardissuer>" + " <bank>BARCLAYS BANK PLC</bank>" + " <country>UNITED KINGDOM</country>" + " <countrycode>GB</countrycode>" + " <region>EUR</region>" + " </cardissuer>" + " <tss>" + " <result></result>" + " </tss>" + " <threedsecure>" + " <cavv></cavv>" + " <eci></eci>" + " <xid></xid>" + " </threedsecure>" + " <sha1hash>99d787a351cd441c6453733ed65c0c52db2885cb</sha1hash>" + "</response>"; QueryPaymentResponse parsedResponse = RealAuthResponseParser <QueryPaymentResponse> .DeserializeFromString(rawRealexResponse, System.Net.HttpStatusCode.OK, null); Assert.IsNotNull(parsedResponse); Assert.AreEqual("20160704143954", parsedResponse.Timestamp); Assert.AreEqual("energykidzltd", parsedResponse.MerchantId); Assert.AreEqual("alfredsutton", parsedResponse.Account); Assert.AreEqual("216e5f63-6f70-4c56-bea5-43c52441a567", parsedResponse.OrderId); Assert.AreEqual("094613", parsedResponse.AuthCode); Assert.AreEqual("00", parsedResponse.ResultString); Assert.AreEqual(0, parsedResponse.Result); Assert.AreEqual("M", parsedResponse.CvnResult); Assert.AreEqual("U", parsedResponse.AvsPostcodeResponse); Assert.AreEqual("U", parsedResponse.AvsAddressResponse); Assert.AreEqual("2120757", parsedResponse.BatchId); Assert.AreEqual("AUTH CODE:094613", parsedResponse.Message); Assert.AreEqual("14667825736645877", parsedResponse.PasRef); Assert.AreEqual("0", parsedResponse.TimeTaken); Assert.AreEqual("0", parsedResponse.AuthTimeTaken); Assert.AreEqual("465858XXXXXX1226", parsedResponse.CardNumberMasked); // Assert.IsNotNull(parsedResponse.CardIssuer, "CardIssuer"); // Assert.AreEqual("HSBC", parsedResponse.CardIssuer.Bank); // Assert.AreEqual("UNITED KINGDOM", parsedResponse.CardIssuer.Country); // Assert.AreEqual("GBC", parsedResponse.CardIssuer.CountryCode); // Assert.AreEqual("EUR", parsedResponse.CardIssuer.Region); Assert.AreEqual("99d787a351cd441c6453733ed65c0c52db2885cb", parsedResponse.Sha1Hash); string secretKey = "test1234"; string correctExpectedHash = parsedResponse.CalculateExpectedSha1Hash(secretKey); Assert.AreEqual(correctExpectedHash, parsedResponse.Sha1Hash, "SHA signature"); Assert.IsTrue(parsedResponse.IsSha1HashCorrect(secretKey)); Assert.IsFalse(parsedResponse.IsSha1HashCorrect("wrongkey"), "expected mismatch Sha1Hash if the wrong key is used"); }