Hallo zusammen,
ich versuche seit einigen Tagen die Rechnung über die API zu erzeugen. Leider habe ich hierzu nicht viel in der Dokumentation gefunden weswegen ich die Requests mir angeschaut habe die die Admin Webseite an das Backend sendet. Derzeit sieht mein Code so aus:
import requests, json
from datetime import datetime
base_url = 'https://shop-url.com/api'
username = 'username'
password = 'password'
# Get access token
token_url = base_url + '/oauth/token'
token_headers = {
'Content-Type': 'application/x-www-form-urlencoded',
'Accept': 'application/json'
}
token_data = {
'grant_type': 'password',
'client_id': 'administration',
'scope': 'write',
'username': username,
'password': password
}
token_response = requests.post(token_url, headers=token_headers, data=token_data)
access_token = token_response.json()['access_token']
headers = {
'Authorization': 'Bearer ' + access_token,
'Content-Type': 'application/json',
'Accept': 'application/json'
}
# Reserve invoice number
salesChannelId = 1
reserve_url = base_url + '_action/number-range/reserve/document_invoice/{}preview=true'.format(salesChannelId)
reserve_response = requests.get(reserve_url, headers=headers)
invoice_number = reserve_response.json()['number']
# Create invoice
with open('./templates/create_invoice.json') as new_invoice:
payload = json.load(new_invoice)
document_date = datetime.utcnow().isoformat()[:-3] + 'Z'
payload['config']['custom']['invoiceNumber'] = invoice_number
payload['config']['documentNumber'] = invoice_number
payload['config']['documentComment'] = ""
payload['config']['documentDate'] = document_date
orderId = 5e2d851e441f43a2b2aa2259fd9a9bf9
create_invoice_url = base_url + '_action/order/{}/document/invoice'.format(orderId)
create_invoice_response = requests.post(create_invoice_url, headers=headers, data=json.dumps(payload))
if create_invoice_response.status_code == 200:
print('Invoice created successfully')
else:
print('Error creating invoice:', create_invoice_response.json()['errors'])
Im ersten Schritt benötige ich eine noch nicht benutzte Dokumentnummer. Hierfür gibt es einen Endpunkt den ich per GET Request aufrufen kann. Nun kann ich mit dem Request eine neue Rechnung erstellen.
Der ganze Code läuft ohne Probleme durch. Wenn ich aber ein weiteres mal nun den Endpunkt aufrufe, der mir eine Dokumentnummer geben soll, so erhalte ich die selbe Dokumentnummer wie zuvor, weswegen der zweite Aufruf um die Rechnung zu erstellen fehlschlägt. Auch wenn ich es dann über das Admin Frontend versuche schlägt dieser Fehl mit dem Fehler: „Die Dokumentnummer 1004 ist bereits in Verwendung.“. Anschließend funktioniert wieder alles. Ich denke ich brauche noch einen weiteren Aufruf um dem Backend zu sagen, dass ich diese Dokumentnummer nun auch verwendet habe.
Leider konnte ich diesen Aufruf nicht ausfindig machen.
Hat von euch schon jemand erfolgreich eine Rechnung über die API erstellt oder wisst ihr wo ich hier mehr infos zu bekommen kann?