Wpis z mikrobloga

Próbował już ktoś tworzyć aplikacje do wysyłania JPK zgodnie ze specyfikacją MF? Przebrnąć przez te wszystkie kompresje, kodowanie, generowanie xml, podpis elektroniczny i podłączenie się do bramki?

#programowanie #sap #erp #jpk
  • 665
  • Odpowiedz
@Gibonowski proszę podziel się swoim kodem do wysyłania. Ja używam poniższej metody do wysłania przykładowego pliku i ciągle dostaję 400. Proszę o jakieś wskazówki bo już nie mam pomysłu.

public string postXMLData(string destinationUrl)
{
try
{


XmlDocument requestXml = new XmlDocument();
requestXml.Load(@"C:\Xml\initupload-enveloping.xades.xml");
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(destinationUrl);
byte[] bytes = System.Text.Encoding.UTF8.GetBytes(requestXml.OuterXml);

request.ContentType = "text/xml; encoding='utf-8'";
request.ContentLength = bytes.Length;
request.Method = "POST";
Stream requestStream = request.GetRequestStream();
requestStream.Write(bytes, 0, bytes.Length);
requestStream.Close();
HttpWebResponse response;
response =
  • Odpowiedz
Ja miałem ten sam problem jak ładowałem jako xml, wyskakiwało mi coś w stylu że plik został zmodyfikowany. Spróbuj wczytać go File.ReadAllText
  • Odpowiedz
@Gibonowski zrobiłem zgodnie z twoją sugestią

string readText = File.ReadAllText(@"C:\Xml\initupload-enveloping.xades.xml");
byte[] bytes = System.Text.Encoding.UTF8.GetBytes(readText);

ale dalej mam 400, proszę jeszcze o jakieś sugestie ...
  • Odpowiedz
public static ResponseInitUploadSigned200OK PostInitUploadSigned2(string xml, out System.Net.HttpStatusCode? httpStatusCode, out string content)
{
httpStatusCode = null;
content = null;

using (var client2 = new HttpClient())
{
client2.BaseAddress = new Uri(URLInitUploadSigned);
var httpContent = new StringContent(xml, Encoding.UTF8, "application/xml");
var result = client2.PostAsync("", httpContent).Result;
string resultContent = result.Content.ReadAsStringAsync().Result;

content = resultContent;
httpStatusCode = result.StatusCode;

if (httpStatusCode == System.Net.HttpStatusCode.OK)
{
return JsonConvert.DeserializeObject(content);
}
}

return null;

}

public static void SetServerCertificateValidationCallback()
{
  • Odpowiedz
@Gibonowski: niby tak używam metody CreateKey

private static byte[] PobierzLosowySalt()
{
var random = new RNGCryptoServiceProvider();

// Maximum length of salt
int max_length = 8;

// Empty salt array
byte[] salt = new byte[max_length];

// Build the random bytes
random.GetNonZeroBytes(salt);

// Return the salt
return salt;
}

private static string GetRandomString()
{
string path = Path.GetRandomFileName();
path = path.Replace(".", ""); // Remove period.
return path;
}

private static byte[] CreateKey(string password,
  • Odpowiedz
Ja mam tak, bo troche to przerobiłem:
konstruktor:
aes = new RijndaelManaged();

aes.KeySize = 256; //32 bytes
aes.GenerateIV();
aes.GenerateKey();

funkcja:
public byte[] EncryptAes(byte[] file)
{
try
{
using (RijndaelManaged myRijndael = new RijndaelManaged())
{
myRijndael.Key = aes.Key;
myRijndael.IV = aes.IV;

using (var stream = new MemoryStream())
{
using (var encryptor = myRijndael.CreateEncryptor())
{
using (var encrypt = new CryptoStream(stream, encryptor, CryptoStreamMode.Write))
{
encrypt.Write(file, 0, file.Length);
encrypt.FlushFinalBlock();

return stream.ToArray();
}
}
}
}
  • Odpowiedz
Witam
Kolejny dzień walki czas zacząć.
Próbuję wysłać plik InitUpload z podpisem i dostaję info od serwera:

{"Message":"Podpis jest w innym formacie niż XAdES-BES","Code":111,"RequestId":"zwOClt/+PpQ="}

Do wygenerowania podpisu używam poniższej metody. Czy ktoś mógłby zerknąc i powiedzieć co robię źle. Albo czy ktoś może podzielić się kodem dodającym poprawny podpis?

public static bool sign(string FileName, string SignedFileName)
{
RSACryptoServiceProvider Key = new RSACryptoServiceProvider();
X509Certificate2 x509 = new X509Certificate2();
x509.Import(@"c:\Xml\test-e-dokumenty.mf.gov.pl_ssl.crt");
// Wczytaj.
XmlDocument doc
  • Odpowiedz
Hej, założyłem konto bo też na tym siedzę :) Męczmy się razem. @rollon tez miałem taki błąd. Po prostu ta biblioteka Microsoft.Xades nie robi takiego Xadesa jak chce JPK. Najlepiej wydrukuj swój pliczek (ja robie enveloping) i ich pliczek i linijka po linijce sobie popatrz na różnice. Niestety nie obejdzie się bez dłubania w libie do xadesa i jego rekompilacji. Najważniejsza zmiana to to że brakuje przedrostków "xades:" od wężła QualifyingProperties w
  • Odpowiedz
W związku z tym że razem siedzimy w tym bagnie to mam kilka pytanek. Wydaje mi się że mam już wszystkie etapy zrobione, ale czuje że jeszcze to nie do końca bedzie grało (działa, ale nie tak jak potrzeba :P ) . Mam w zwiazku z tym pytanka do was:

1. Jak sobie testujecie to wysyłacie to na https://test-e-dokumenty.mf.gov.pl/api/Storage/ czy na https://e-dokumenty.mf.gov.pl/api/Storage/ ? W zależności od tego na które wysyłam - mam
  • Odpowiedz