private static Forretningskvitteringfelter HentForretningskvitteringFelter(IntegrasjonspunktKvittering integrasjonspunktKvittering) { var forretningskvittergFelter = new Forretningskvitteringfelter(); XmlDocument document = new XmlDocument(); document.LoadXml(integrasjonspunktKvittering.rawReceipt); try { var guidNode = GetXmlNodeFromDocument(document, "//ns3:BusinessScope/ns3:Scope/ns3:InstanceIdentifier"); forretningskvittergFelter.KonversasjonsId = new Guid(guidNode.InnerText); forretningskvittergFelter.IntegrasjonsPunktId = integrasjonspunktKvittering.id; var tidspunktNode = GetXmlNodeFromDocument(document, "//ns9:tidspunkt"); forretningskvittergFelter.Generert = Convert.ToDateTime(tidspunktNode.InnerText); var bodyReferenceNode = document.SelectSingleNode("//ns9:kvittering/ns5:Signature/ns5:SignedInfo/ns5:Reference", GetNamespaceManager(document)); forretningskvittergFelter.BodyReferenceUri = bodyReferenceNode.Attributes["URI"].Value; forretningskvittergFelter.DigestValue = bodyReferenceNode.SelectSingleNode("//ds:DigestValue", GetNamespaceManager(document)).InnerText; } catch (Exception e) { throw new XmlParseException($"Feil under bygging av {e.GetType()} (av type Forretningskvittering).", e); } return(forretningskvittergFelter); }
public void ParserReturpostkvittering() { //Arrange var xml = KvitteringsUtility.Forretningskvittering.ReturpostkvitteringXml(); const string konversasjonsId = "2049057a-9b53-41bb-9cc3-d10f55fa0f87"; const string meldingsId = "7142d8ab-9408-4cb5-8b80-dca3618dd722"; const string referanseTilMeldingId = "2049057a-9b53-41bb-9cc3-d10f55fa0f87"; const string tidspunkt = "2015-11-10T08:26:49.797+01:00"; IntegrasjonspunktKvittering kvittering = new IntegrasjonspunktKvittering( 1L, DateTime.Parse(tidspunkt), IntegrasjonspunktKvitteringType.ANNET, "", xml.InnerXml, Guid.Parse(konversasjonsId), Guid.Parse(meldingsId), 1L); //Act var returpostkvittering = Kvitteringsparser.TilReturpostkvittering(kvittering); //Assert Assert.Equal(konversasjonsId, returpostkvittering.KonversasjonsId.ToString()); Assert.Equal(meldingsId, returpostkvittering.MeldingsId); Assert.Equal(referanseTilMeldingId, returpostkvittering.ReferanseTilMeldingId); Assert.Equal(DateTime.Parse(tidspunkt), returpostkvittering.Returnert); Assert.Equal(xml, returpostkvittering.Xml); }
public void ParserÅpningskvittering() { //Arrange var xml = KvitteringsUtility.Forretningskvittering.ÅpningskvitteringXml(); const string konversasjonsId = "1d4aff36-b6d2-4506-bc0b-bd62ae6f8966"; const string meldingsId = "2d476cb1-cf9a-4210-ba74-ee095f41c9f2"; const string referanseTilMeldingId = "1d4aff36-b6d2-4506-bc0b-bd62ae6f8966"; const string tidspunkt = "2015-11-09T16:11:31.171+01:00"; IntegrasjonspunktKvittering kvittering = new IntegrasjonspunktKvittering( 1L, DateTime.Parse(tidspunkt), IntegrasjonspunktKvitteringType.LEST, "", xml.InnerXml, Guid.Parse(konversasjonsId), Guid.Parse(meldingsId), 1L); //Act var åpningskvittering = Kvitteringsparser.TilÅpningskvittering(kvittering); //Assert Assert.Equal(konversasjonsId, åpningskvittering.KonversasjonsId.ToString()); Assert.Equal(meldingsId, åpningskvittering.MeldingsId); Assert.Equal(referanseTilMeldingId, åpningskvittering.ReferanseTilMeldingId); Assert.Equal(DateTime.Parse(tidspunkt), åpningskvittering.Åpnet); Assert.Equal(xml, åpningskvittering.Xml); }
public void ParserFeilmelding() { //Arrange var xml = KvitteringsUtility.Forretningskvittering.FeilmeldingXml(); const string konversasjonsId = "2049057a-9b53-41bb-9cc3-d10f55fa0f87"; const string meldingsId = "7142d8ab-9408-4cb5-8b80-dca3618dd722"; const string referanseTilMeldingId = "2049057a-9b53-41bb-9cc3-d10f55fa0f87"; const string tidspunkt = "2015-11-10T08:26:49.797+01:00"; const string detaljer = "detaljer"; const Feiltype feiltype = Feiltype.Server; IntegrasjonspunktKvittering kvittering = new IntegrasjonspunktKvittering( 1L, DateTime.Parse(tidspunkt), IntegrasjonspunktKvitteringType.FEIL, "", xml.InnerXml, Guid.Parse(konversasjonsId), Guid.Parse(meldingsId), 1L); //Act var feilmelding = Kvitteringsparser.TilFeilmelding(kvittering); //Assert Assert.Equal(konversasjonsId, feilmelding.KonversasjonsId.ToString()); Assert.Equal(meldingsId, feilmelding.MeldingsId); Assert.Equal(referanseTilMeldingId, feilmelding.ReferanseTilMeldingId); Assert.Equal(DateTime.Parse(tidspunkt), feilmelding.Feilet); Assert.Equal(detaljer, feilmelding.Detaljer); Assert.Equal(feiltype, feilmelding.Skyldig); Assert.Equal(xml, feilmelding.Xml); }
public void ParserLeveringskvittering() { //Arrange var xml = KvitteringsUtility.Forretningskvittering.LeveringskvitteringXml(); const string konversasjonsId = "716cffc1-58aa-4198-98df-281f4a1a1384"; const string meldingsId = "5a93d7e9-e9e5-4013-ab19-c32d9eb0f3d0"; const string referanseTilMeldingId = "716cffc1-58aa-4198-98df-281f4a1a1384"; const string tidspunkt = "2015-11-10T08:37:24.695+01:00"; IntegrasjonspunktKvittering kvittering = new IntegrasjonspunktKvittering( 1L, DateTime.Parse(tidspunkt), IntegrasjonspunktKvitteringType.LEVERT, "", xml.InnerXml, Guid.Parse(konversasjonsId), Guid.Parse(meldingsId), 1L); //Act var leveringskvittering = Kvitteringsparser.TilLeveringskvittering(kvittering); //Assert Assert.Equal(konversasjonsId, leveringskvittering.KonversasjonsId.ToString()); Assert.Equal(meldingsId, leveringskvittering.MeldingsId); Assert.Equal(referanseTilMeldingId, leveringskvittering.ReferanseTilMeldingId); Assert.Equal(DateTime.Parse(tidspunkt), leveringskvittering.Levert); }
public void ParserVarslingFeiletKvittering() { //Arrange var xml = KvitteringsUtility.Forretningskvittering.VarslingFeiletKvitteringXml(); const string konversasjonsId = "2049057a-9b53-41bb-9cc3-d10f55fa0f87"; const string meldingsId = "7142d8ab-9408-4cb5-8b80-dca3618dd722"; const string referanseTilMeldingId = "2049057a-9b53-41bb-9cc3-d10f55fa0f87"; const string tidspunkt = "2015-11-10T08:26:49.797+01:00"; const string beskrivelse = "Selvvalgt"; const Varslingskanal varslingskanal = Varslingskanal.Sms; IntegrasjonspunktKvittering kvittering = new IntegrasjonspunktKvittering( 1L, DateTime.Parse(tidspunkt), IntegrasjonspunktKvitteringType.FEIL, beskrivelse, xml.InnerXml, Guid.Parse(konversasjonsId), Guid.Parse(meldingsId), 1L); //Act var varslingfeiletkvittering = Kvitteringsparser.TilVarslingFeiletKvittering(kvittering); //Assert Assert.Equal(konversasjonsId, varslingfeiletkvittering.KonversasjonsId.ToString()); Assert.Equal(meldingsId, varslingfeiletkvittering.MeldingsId); Assert.Equal(referanseTilMeldingId, varslingfeiletkvittering.ReferanseTilMeldingId); Assert.Equal(DateTime.Parse(tidspunkt), varslingfeiletkvittering.Feilet); Assert.Equal(beskrivelse, varslingfeiletkvittering.Beskrivelse); Assert.Equal(varslingskanal, varslingfeiletkvittering.Varslingskanal); Assert.Equal(xml, varslingfeiletkvittering.Xml); }
public void ReturnererReturpostkvittering() { //Arrange var xml = KvitteringsUtility.Forretningskvittering.ReturpostkvitteringXml(); const string konversasjonsId = "2049057a-9b53-41bb-9cc3-d10f55fa0f87"; const string meldingsId = "7142d8ab-9408-4cb5-8b80-dca3618dd722"; const string tidspunkt = "2015-11-10T08:26:49.797+01:00"; IntegrasjonspunktKvittering ipkvittering = new IntegrasjonspunktKvittering( 1L, DateTime.Parse(tidspunkt), IntegrasjonspunktKvitteringType.ANNET, "", xml.InnerXml, Guid.Parse(konversasjonsId), Guid.Parse(meldingsId), 1L); //Act var kvittering = KvitteringFactory.GetKvittering(ipkvittering); //Assert Assert.IsType <Returpostkvittering>(kvittering); }
private static Kvitteringsfelter HentKvitteringsfelter(IntegrasjonspunktKvittering integrasjonspunktKvittering, bool sjekkEtterReferanseTilMeldingsId = true) { try { return(ParseKvitteringsFelter(integrasjonspunktKvittering, sjekkEtterReferanseTilMeldingsId)); } catch (Exception e) { throw new XmlParseException($"Feil under bygging av {e.GetType()} (av type Kvittering).", e); } }
public static Åpningskvittering TilÅpningskvittering(IntegrasjonspunktKvittering integrasjonspunktKvittering) { var kvitteringFelter = HentKvitteringsfelter(integrasjonspunktKvittering); var forretningskvitteringfelter = HentForretningskvitteringFelter(integrasjonspunktKvittering); return(new Åpningskvittering(kvitteringFelter.MeldingsId, forretningskvitteringfelter.KonversasjonsId, forretningskvitteringfelter.BodyReferenceUri, forretningskvitteringfelter.DigestValue) { Generert = forretningskvitteringfelter.Generert, ReferanseTilMeldingId = kvitteringFelter.ReferanseTilMeldingId, Xml = kvitteringFelter.Xml, SendtTidspunkt = kvitteringFelter.SendtTidspunkt }); }
private static Kvitteringsfelter ParseKvitteringsFelter(IntegrasjonspunktKvittering integrasjonspunktKvittering, bool sjekkEtterReferanseTilMeldingsId) { XmlDocument document = new XmlDocument(); document.LoadXml(integrasjonspunktKvittering.rawReceipt); return(new Kvitteringsfelter { SendtTidspunkt = Convert.ToDateTime(GetXmlNodeFromDocument(document, "//ns9:tidspunkt").InnerText), MeldingsId = integrasjonspunktKvittering.messageId.ToString(), Xml = document, ReferanseTilMeldingId = sjekkEtterReferanseTilMeldingsId ? integrasjonspunktKvittering.conversationId.ToString() : null }); }
public static VarslingFeiletKvittering TilVarslingFeiletKvittering(IntegrasjonspunktKvittering integrasjonspunktKvittering) { var kvitteringFelter = HentKvitteringsfelter(integrasjonspunktKvittering); var forretningskvitteringfelter = HentForretningskvitteringFelter(integrasjonspunktKvittering); var varslingfeiletKvitteringsfelter = HentVarslingFeiletKvitteringsfelter(integrasjonspunktKvittering); return(new VarslingFeiletKvittering(kvitteringFelter.MeldingsId, forretningskvitteringfelter.KonversasjonsId, forretningskvitteringfelter.BodyReferenceUri, forretningskvitteringfelter.DigestValue) { Generert = forretningskvitteringfelter.Generert, ReferanseTilMeldingId = kvitteringFelter.ReferanseTilMeldingId, Xml = kvitteringFelter.Xml, SendtTidspunkt = kvitteringFelter.SendtTidspunkt, Beskrivelse = varslingfeiletKvitteringsfelter.Beskrivelse, Varslingskanal = varslingfeiletKvitteringsfelter.Varslingskanal }); }
public static Feilmelding TilFeilmelding(IntegrasjonspunktKvittering integrasjonspunktKvittering) { var kvitteringFelter = HentKvitteringsfelter(integrasjonspunktKvittering); var forretningskvitteringfelter = HentForretningskvitteringFelter(integrasjonspunktKvittering); var feilmeldingfelter = HentFeilmeldingsfelter(integrasjonspunktKvittering); return(new Feilmelding(kvitteringFelter.MeldingsId, forretningskvitteringfelter.KonversasjonsId, forretningskvitteringfelter.BodyReferenceUri, forretningskvitteringfelter.DigestValue) { Generert = forretningskvitteringfelter.Generert, ReferanseTilMeldingId = kvitteringFelter.ReferanseTilMeldingId, Xml = kvitteringFelter.Xml, SendtTidspunkt = kvitteringFelter.SendtTidspunkt, Skyldig = feilmeldingfelter.SkyldigFeiltype, Detaljer = feilmeldingfelter.Detaljer }); }
/// <summary> /// Bekreft mottak av <see cref="Forretningskvittering" /> mottatt gjennom /// <see cref="HentKvittering(Kvitteringsforespørsel)" />. /// <list type="bullet"> /// <listheader> /// <description> /// <para>Dette legger opp til følgende arbeidsflyt:</para> /// </description> /// </listheader> /// <item> /// <description> /// <para> /// <see cref="HentKvittering(Kvitteringsforespørsel)" />. /// </para> /// </description> /// </item> /// <item> /// <description> /// <para>Gjør intern prosessering av <see cref="Kvittering">Kvitteringen</see>.</para> /// </description> /// </item> /// <item> /// <description> /// <para><see cref="BekreftAsync">Bekreft</see> mottak av <see cref="Forretningskvittering" />.</para> /// </description> /// </item> /// </list> /// </summary> /// <param name="kvittering"></param> /// <remarks> /// <see cref="HentKvittering(Kvitteringsforespørsel)" /> kommer ikke til å returnere en ny kvittering før mottak av /// den forrige er bekreftet. /// </remarks> public async Task BekreftAsync(Forretningskvittering kvittering) { if (kvittering == null || kvittering.IntegrasjonsPunktId == -1L) { IntegrasjonspunktKvittering nyKvittering = await RequestHelper.GetReceipt(); await RequestHelper.ConfirmReceipt(nyKvittering.id); _logger.LogDebug($"Bekreftet kvittering, conversationId '{nyKvittering.conversationId}'"); } else { await RequestHelper.ConfirmReceipt(kvittering.IntegrasjonsPunktId); _logger.LogDebug($"Bekreftet kvittering, conversationId '{kvittering.KonversasjonsId}'"); } }
public static Kvittering GetKvittering(IntegrasjonspunktKvittering integrasjonspunktKvittering) { if (integrasjonspunktKvittering.rawReceipt != null) { return(GetKvitteringFromIntegrasjonsPunktKvittering(integrasjonspunktKvittering)); } else if (integrasjonspunktKvittering.status == IntegrasjonspunktKvitteringType.LEVETID_UTLOPT) { return(new Feilmelding(integrasjonspunktKvittering.messageId.ToString(), integrasjonspunktKvittering.conversationId, "", "")); } else if (integrasjonspunktKvittering.status == IntegrasjonspunktKvitteringType.ANNET) { return(new Feilmelding(integrasjonspunktKvittering.messageId.ToString(), integrasjonspunktKvittering.conversationId, "", "")); } else { return(new Feilmelding(integrasjonspunktKvittering.messageId.ToString(), integrasjonspunktKvittering.conversationId, "", "")); } }
/// <summary> /// Forespør <see cref="Kvittering" /> for <see cref="Forsendelse">Forsendelser</see>, med mulighet til å samtidig /// <see cref="BekreftAsync">bekrefte</see> på forrige <see cref="Kvittering" /> for å slippe å /// kjøre eget kall for <see cref="BekreftAsync" />. <see cref="Kvittering">Kvitteringer</see> blir tilgjengeliggjort /// etterhvert som de er klare i Meldingsformidler. Det er ikke mulig å etterspørre /// <see cref="Kvittering" /> for en spesifikk forsendelse. /// </summary> /// <param name="kvitteringsforespørsel"></param> /// <param name="forrigeKvittering"></param> /// <returns></returns> public async Task <Kvittering> HentKvitteringOgBekreftForrigeAsync(Kvitteringsforespørsel kvitteringsforespørsel, Forretningskvittering forrigeKvittering) { if (forrigeKvittering != null) { await BekreftAsync(forrigeKvittering).ConfigureAwait(false); } var guidUtility = new GuidUtility(); _logger.LogDebug($"Utgående kvitteringsforespørsel, messageId '{guidUtility.MessageId}'."); int GUARD = 100; for (int i = 0; i < GUARD; i++) { IntegrasjonspunktKvittering ipKvittering = await RequestHelper.GetReceipt(); if (ipKvittering == null) { return(new TomKøKvittering()); } var shouldFetchKvitteringAgain = ipKvittering.status == IntegrasjonspunktKvitteringType.SENDT || ipKvittering.status == IntegrasjonspunktKvitteringType.OPPRETTET; if (shouldFetchKvitteringAgain) { await RequestHelper.ConfirmReceipt(ipKvittering.id); } else { return(KvitteringFactory.GetKvittering(ipKvittering)); } } _logger.LogWarning( $"Antall forsøk på å hente kvittering overskredet. Det kan komme av det er mange {IntegrasjonspunktKvitteringType.SENDT}- og {IntegrasjonspunktKvitteringType.OPPRETTET}-kvitteringer på integrasjonspunktkøen. Prøv igjen."); return(null); }
private static Kvittering GetKvitteringFromIntegrasjonsPunktKvittering(IntegrasjonspunktKvittering integrasjonspunktKvittering) { var kvittering = LagForretningskvittering(integrasjonspunktKvittering); if (kvittering != null) { return(kvittering); } XmlDocument xmlDocument = new XmlDocument(); xmlDocument.LoadXml(integrasjonspunktKvittering.rawReceipt); var ingenKvitteringstypeFunnetException = new XmlParseException( "Klarte ikke å finne ut hvilken type Kvittering som ble tatt inn. Sjekk rådata for mer informasjon.") { Xml = xmlDocument }; throw ingenKvitteringstypeFunnetException; }
private static Forretningskvittering LagForretningskvittering(IntegrasjonspunktKvittering kvittering) { XmlDocument xmlDocument = new XmlDocument(); xmlDocument.LoadXml(kvittering.rawReceipt); if (IsLeveringskvittering(xmlDocument)) { return(Kvitteringsparser.TilLeveringskvittering(kvittering)); } if (IsVarslingFeiletkvittering(xmlDocument)) { return(Kvitteringsparser.TilVarslingFeiletKvittering(kvittering)); } if (IsFeilmelding(xmlDocument)) { return(Kvitteringsparser.TilFeilmelding(kvittering)); } if (IsÅpningskvittering(xmlDocument)) { return(Kvitteringsparser.TilÅpningskvittering(kvittering)); } if (IsMottaksKvittering(xmlDocument)) { return(Kvitteringsparser.TilMottakskvittering(kvittering)); } if (IsReturpost(xmlDocument)) { return(Kvitteringsparser.TilReturpostkvittering(kvittering)); } throw new SikkerDigitalPostException("Ukjent kvitteringstype basert på XML-input fra ip-kvittering."); }
private static Feilmeldingsfelter HentFeilmeldingsfelter(IntegrasjonspunktKvittering integrasjonspunktKvittering) { var feilmeldingsfelter = new Feilmeldingsfelter(); XmlDocument document = new XmlDocument(); document.LoadXml(integrasjonspunktKvittering.rawReceipt); try { var feiltype = GetXmlNodeFromDocument(document, "//ns9:feiltype").InnerText; feilmeldingsfelter.SkyldigFeiltype = feiltype.ToLower().Equals(Feiltype.Klient.ToString().ToLower()) ? Feiltype.Klient : Feiltype.Server; feilmeldingsfelter.Detaljer = GetXmlNodeFromDocument(document, "//ns9:detaljer").InnerText; } catch (Exception e) { throw new XmlParseException("Feil under bygging av Feilmelding-kvittering.", e); } return(feilmeldingsfelter); }
private static VarslingFeiletKvitteringsfelter HentVarslingFeiletKvitteringsfelter(IntegrasjonspunktKvittering integrasjonspunktKvittering) { var varslingFeiletKvitteringsfelter = new VarslingFeiletKvitteringsfelter(); XmlDocument document = new XmlDocument(); document.LoadXml(integrasjonspunktKvittering.rawReceipt); try { var varslingskanal = GetXmlNodeFromDocument(document, "//ns9:varslingskanal").InnerText; varslingFeiletKvitteringsfelter.Varslingskanal = varslingskanal == Varslingskanal.Epost.ToString() ? Varslingskanal.Epost : Varslingskanal.Sms; var beskrivelseNode = GetXmlNodeFromDocument(document, "//ns9:beskrivelse"); if (beskrivelseNode != null) { varslingFeiletKvitteringsfelter.Beskrivelse = beskrivelseNode.InnerText; } } catch (Exception e) { throw new XmlParseException( "Feil under bygging av VarslingFeilet-kvittering.", e); } return(varslingFeiletKvitteringsfelter); }