Prośba o pomoc. Próbuję nawiązać sesję interaktywną tokenem. Z powodzeniem przechodzę wyzwanie autoryzacyjne:
Kopiuj
/api/online/Session/AuthorisationChallenge
W odpowiedzi dostaję:
Kopiuj
{
"timestamp": "2023-10-24T11:30:35.023Z",
"challenge": "20231024-CR-6B65EC2896-2B163671F1-63"
}
Teraz mam 3 próby (w pythonie), z których każda jest nieudana (W KAŻDEJ RÓŻNI SIĘ timestamp, Z KTÓREGO KORZYSTAM):
1 Próba:
Kopiuj
import os
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import serialization, asymmetric
import base64
from datetime import datetime
def encrypt_string_with_rsa_public_key(to_encrypt, relative_or_absolute_path_to_public_key):
absolute_path = os.path.abspath(relative_or_absolute_path_to_public_key)
with open(absolute_path, "rb") as key_file:
public_key = serialization.load_pem_public_key(
key_file.read(),
backend=default_backend()
)
encrypted = public_key.encrypt(
to_encrypt.encode(),
asymmetric.padding.PKCS1v15() # używam PKCS1v15 padding
)
return base64.b64encode(encrypted).decode('utf-8')
token = "(...)B5DAF9EE4C4124B297A4A30FC77"
timestamp = "2023-10-24T11:30:35.023Z" # <-- UŻYWAM TAKIEGO TIMESTAMP
encryptedToken = encrypt_string_with_rsa_public_key(f"{token}|{timestamp}",'publicKey.pem')
print(encryptedToken)
Następnie generuję XML:
Kopiuj
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns3:InitSessionTokenRequest xmlns="http://ksef.mf.gov.pl/schema/gtw/svc/online/types/2021/10/01/0001" xmlns:ns2="http://ksef.mf.gov.pl/schema/gtw/svc/types/2021/10/01/0001" xmlns:ns3="http://ksef.mf.gov.pl/schema/gtw/svc/online/auth/request/2021/10/01/0001">
<ns3:Context>
<Challenge>20231024-CR-6B65EC2896-2B163671F1-63</Challenge>
<Identifier xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns2:SubjectIdentifierByCompanyType">
<ns2:Identifier>1111111111</ns2:Identifier>
</Identifier>
<DocumentType>
<ns2:Service>KSeF</ns2:Service>
<ns2:FormCode>
<ns2:SystemCode>FA (2)</ns2:SystemCode>
<ns2:SchemaVersion>1-0E</ns2:SchemaVersion>
<ns2:TargetNamespace>http://crd.gov.pl/wzor/2023/06/29/12648/</ns2:TargetNamespace>
<ns2:Value>FA</ns2:Value>
</ns2:FormCode>
</DocumentType>
<Token>(...)DuKo2lYhsDc4qIXffVDPGkPlBq5D+4DLzVQ==</Token>
</ns3:Context>
</ns3:InitSessionTokenRequest>
W następnym kroku:
Kopiuj
/api/online/Session/InitToken
Odpowiedź jaką dostaję:
Kopiuj
{
"exception": {
"serviceCtx": "default",
"serviceCode": "20231024-EX-65AE82B089-C2DED48B3E-51",
"serviceName": "online.session.session.token.init",
"timestamp": "2023-10-24T14:44:47.513Z",
"referenceNumber": "20231024-SE-5ADE6D582C-77ACD0DCB5-EE",
"exceptionDetailList": [
{
"exceptionCode": 21116,
"exceptionDescription": "Nieprawidłowy token."
}
]
}
}
2 Próba:
Kopiuj
import os
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import serialization, asymmetric
import base64
from datetime import datetime
def encrypt_string_with_rsa_public_key(to_encrypt, relative_or_absolute_path_to_public_key):
absolute_path = os.path.abspath(relative_or_absolute_path_to_public_key)
with open(absolute_path, "rb") as key_file:
public_key = serialization.load_pem_public_key(
key_file.read(),
backend=default_backend()
)
encrypted = public_key.encrypt(
to_encrypt.encode(),
asymmetric.padding.PKCS1v15() # używam PKCS1v15 padding
)
return base64.b64encode(encrypted).decode('utf-8')
token = "(...)B5DAF9EE4C4124B297A4A30FC77"
timestamp = int(datetime.strptime('2023-10-24T11:23:14.332Z', '%Y-%m-%dT%H:%M:%S.%fZ').timestamp()*1000) # <-- UŻYWAM TAKIEGO TIMESTAMP
encryptedToken = encrypt_string_with_rsa_public_key(f"{token}|{timestamp}",'publicKey.pem')
print(encryptedToken)
Następnie generuję XML:
Kopiuj
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns3:InitSessionTokenRequest xmlns="http://ksef.mf.gov.pl/schema/gtw/svc/online/types/2021/10/01/0001" xmlns:ns2="http://ksef.mf.gov.pl/schema/gtw/svc/types/2021/10/01/0001" xmlns:ns3="http://ksef.mf.gov.pl/schema/gtw/svc/online/auth/request/2021/10/01/0001">
<ns3:Context>
<Challenge>20231024-CR-6B65EC2896-2B163671F1-63</Challenge>
<Identifier xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns2:SubjectIdentifierByCompanyType">
<ns2:Identifier>1111111111</ns2:Identifier>
</Identifier>
<DocumentType>
<ns2:Service>KSeF</ns2:Service>
<ns2:FormCode>
<ns2:SystemCode>FA (2)</ns2:SystemCode>
<ns2:SchemaVersion>1-0E</ns2:SchemaVersion>
<ns2:TargetNamespace>http://crd.gov.pl/wzor/2023/06/29/12648/</ns2:TargetNamespace>
<ns2:Value>FA</ns2:Value>
</ns2:FormCode>
</DocumentType>
<Token>(...)DuKo2lYhsDc4qIXffVDPGkPlBq5D+4DLzVQ==</Token>
</ns3:Context>
</ns3:InitSessionTokenRequest>
W następnym kroku:
Kopiuj
/api/online/Session/InitToken
Odpowiedź jaką dostaję:
Kopiuj
{
"exception": {
"serviceCtx": "default",
"serviceCode": "20231024-EX-2132D8A125-7487D95B0B-A7",
"serviceName": "online.session.session.token.init",
"timestamp": "2023-10-24T14:48:31.811Z",
"referenceNumber": "20231024-SE-3C96C28D13-173D380778-3C",
"exceptionDetailList": [
{
"exceptionCode": 21112,
"exceptionDescription": "Nieprawidłowy czas tokena."
}
]
}
}
3 Próba:
Kopiuj
import os
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import serialization, asymmetric
import base64
from datetime import datetime
def encrypt_string_with_rsa_public_key(to_encrypt, relative_or_absolute_path_to_public_key):
absolute_path = os.path.abspath(relative_or_absolute_path_to_public_key)
with open(absolute_path, "rb") as key_file:
public_key = serialization.load_pem_public_key(
key_file.read(),
backend=default_backend()
)
encrypted = public_key.encrypt(
to_encrypt.encode(),
asymmetric.padding.PKCS1v15() # używam PKCS1v15 padding
)
return base64.b64encode(encrypted).decode('utf-8')
token = "(...)B5DAF9EE4C4124B297A4A30FC77"
timestamp = int(datetime.strptime('2023-10-24T11:23:14.332Z', '%Y-%m-%dT%H:%M:%S.%fZ').timestamp()) # <-- UŻYWAM TAKIEGO TIMESTAMP
encryptedToken = encrypt_string_with_rsa_public_key(f"{token}|{timestamp}",'publicKey.pem')
print(encryptedToken)
Następnie generuję XML:
Kopiuj
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns3:InitSessionTokenRequest xmlns="http://ksef.mf.gov.pl/schema/gtw/svc/online/types/2021/10/01/0001" xmlns:ns2="http://ksef.mf.gov.pl/schema/gtw/svc/types/2021/10/01/0001" xmlns:ns3="http://ksef.mf.gov.pl/schema/gtw/svc/online/auth/request/2021/10/01/0001">
<ns3:Context>
<Challenge>20231024-CR-6B65EC2896-2B163671F1-63</Challenge>
<Identifier xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns2:SubjectIdentifierByCompanyType">
<ns2:Identifier>1111111111</ns2:Identifier>
</Identifier>
<DocumentType>
<ns2:Service>KSeF</ns2:Service>
<ns2:FormCode>
<ns2:SystemCode>FA (2)</ns2:SystemCode>
<ns2:SchemaVersion>1-0E</ns2:SchemaVersion>
<ns2:TargetNamespace>http://crd.gov.pl/wzor/2023/06/29/12648/</ns2:TargetNamespace>
<ns2:Value>FA</ns2:Value>
</ns2:FormCode>
</DocumentType>
<Token>(...)DuKo2lYhsDc4qIXffVDPGkPlBq5D+4DLzVQ==</Token>
</ns3:Context>
</ns3:InitSessionTokenRequest>
W następnym kroku:
/api/online/Session/InitToken
Odpowiedź jaką dostaję:
Kopiuj
{
"exception": {
"serviceCtx": "default",
"serviceCode": "20231024-EX-6FA8374F44-ED28BD4B9D-31",
"serviceName": "online.session.session.token.init",
"timestamp": "2023-10-24T14:51:05.785Z",
"referenceNumber": "20231024-SE-EFDD254BC9-72841AD57F-D8",
"exceptionDetailList": [
{
"exceptionCode": 21112,
"exceptionDescription": "Nieprawidłowy czas tokena."
}
]
}
}