Rechnung Stornieren

Guten Morgen Zusammen,

leider erhalte ich beim stornieren der Rechnungen mit Rechnungs-Status 200/1000 immer wieder den Status-Code 500 mit der unten genannten Fehlerbeschreibung dahinter. Das Abrufen der entsprechenden Rechnungen funktioniert.

Das ist der Code:

invoiceId = "xyz"
headers = {'Authorization': "apikey"}        
r = self.s.post(f'https://my.sevdesk.de/api/v1/Invoice/{invoiceId}/cancelInvoice', headers=headers)
Decoding failed: Syntax error | <?xml version="1.0" encoding="UTF-8" ?><html>
    <head>
        <title>sevApp Error</title>
        
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <link href="css/module/extranet.css" type="text/css" rel="stylesheet" />
        <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700' rel='stylesheet' type='text/css'>
        <script type="text/javascript" src="/js/jquery.min.js"></script>
        <link href="css/smoothness/jquery-ui-1.10.0.custom.min.css"
              rel="stylesheet">
        <script type="text/javascript" src="/js/jquery-ui.min.js"></script>

        <script>
            $(document).ready(function() {
                $('#showError').on("click", function(e) {
                    e.preventDefault();
                    $('#error').slideDown();
                    $(this).hide();
                });
            });
        </script>

    </head>
    <body>

                <h2>Es tut uns leid! Es ist ein sevApp Fehler aufgetreten.</h2>
                <p>Wir werden den Fehler schnellstmöglich beheben.</p>
                <a href="/" class="button">Zurück zum Dashboard</a>

                <h3 style="margin-top:50px;">Fehler: Anwendungsfehler</h3>


                                    
                    <div id="error">
                        <h4>Fehler Information :</h4>
                        <p>
                            <b>Message:</b> PDF not found                        </p>

                        <h4>Stack trace:</h4>
                        <pre>#0 /sevserver/app/sevdoc/library/App/Storage.php(18): App_Storage_Adapter_S3->getJsonById('a52706cf251db3f...', 0)
#1 /sevserver/app/sevdoc/library/App/Doc/Master.php(534): App_Storage->getJsonById('a52706cf251db3f...', 0)
#2 /sevserver/app/sevdoc/application/modules/default/controllers/DocController.php(56): App_Doc_Master->loadDoc('a52706cf251db3f...')
#3 /sevserver/app/sevdoc/vendor/sevzend/zendframework1/library/Zend/Controller/Action.php(516): DocController->metadataAction()
#4 /sevserver/app/sevdoc/vendor/sevzend/zendframework1/library/Zend/Controller/Dispatcher/Standard.php(308): Zend_Controller_Action->dispatch('metadataAction')
#5 /sevserver/app/sevdoc/vendor/sevzend/zendframework1/library/Zend/Controller/Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))
#6 /sevserver/app/sevdoc/vendor/sevzend/zendframework1/library/Zend/Application/Bootstrap/Bootstrap.php(105): Zend_Controller_Front->dispatch()
#7 /sevserver/app/sevdoc/vendor/sevzend/zendframework1/library/Zend/Application.php(384): Zend_Application_Bootstrap_Bootstrap->run()
#8 /sevserver/app/sevdoc/public/index.php(33): Zend_Application->run()
#9 {main}                        </pre>

                        <h4>Request Parameters:</h4>
                        <pre>array (
  'controller' => 'doc',
  'action' => 'metadata',
  'id' => 'a52706cf251db3fbc154cfdd2f0e99a5',
  'module' => 'default',
)                        </pre>
                                    </div>
           

    </body>
</html>```

Ich habe das gerade mal mit Rechnungen in allen Status getestet und erhalte keinen Fehler.

Verwendest du die sevDesk invoiceId (auto-increment id, z.B. 31356847) oder versuchst du deine eigenen Rechnungsnummern zu übergeben?

self.s: Ich gehe davon aus du verwendest die requests Library. Welche Header setzt du für die Session?

Das ist schon seltsam…
Ich verwende die auto-increment id, hier z.B. 31356847 . Dieser Request „https://my.sevdesk.de/api/v1/Invoice/{invoiceId}“ funktioniert auch entsprechend, wenn ich die ID verwende. Bei den Headers setze ich nur die Authorization.

Der selbe Fehler kommt auch ohne eine Session aufzubauen?

eg. requests.post(f'https://my.sevdesk.de/api/v1/Invoice/{invoiceId}/cancelInvoice', headers=headers)

Ist im dem Skript noch anderer Code?

Genau, auch wenn ich direkt mit dem cancel post beginne und diese headers einsetze, kriege ich den status code 500

        headers = {
            'Host': 'my.sevdesk.de',
            'Origin': 'https://my.sevdesk.de',
            'Accept': 'application/json, text/plain, */*',
            'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.1 Safari/605.1.15',
            'Referer': 'https://my.sevdesk.de/',
            'Accept-Language': 'de-de',
            'Authorization': self.api_key
        }

Die API ist etwas stur wenn es um die Header geht. Probiere mal explizit nur folgende Header anzugeben:

headers = {
'Accept': '*/*',
'Content-Type': 'application/json',
'Authorization': 'DEIN_API_TOKEN',
}

Hallo zusammen,

kleine Randnotiz, die Invoice muss gerendert worden sein bevor sie storniert werden kann.

Wenn du also eine Invoice nimmst die du zumindest einmal gerendert hast, sie in der Webapp erstellt oder einmal geöffnet hast (wird dann automatisch gerendert) dann sollte dein Call auch funktionieren.

Viele Grüße,
Eduard

Dann ist das wohl mein Problem. Ich habe tatsächlich die Rechnung noch nie in der Webapp angeschaut. Ich habe diese via request erstellt und wollte sie im Anschluss wieder stornieren. Ich muss also diese vorher immer in der Webapp anschauen bevor ich die auf request Basis stornieren kann oder kann man dieses rendern auch via request auslösen?

Hey @Ingolf_Neudorf1,

ja das rendern ist auch per direktem API Call möglich.

Dazu sendest du einen POST Request an

https://my.sevdesk.de/api/v1/Invoice/{id}/render

Dann wird die PDF generiert und lässt sich dann auch stornieren.

Viele Grüße,
Eduard

Wunderbar! Nun klappt es! Danke :slight_smile:

1 „Gefällt mir“