davko
22. Januar 2024 um 14:55
1
kurz und knapp wie nutze ich die API um Produkte hinzuzufügen oder preise bzw Lagerbestand zu aktualisieren?
Welche Sprache am besten fürs Skript? JS oder Shell oder vielleicht sogar eine einfache .bat?
bitte kein developer docs link habe da jetzt 2 tage rumprobiert und es wird trotzdem nichts
gaxweb
22. Januar 2024 um 15:15
2
Also wenn dir die Doku so gar nichts sagt, dann solltest du vielleicht jemanden damit beauftragen.
Du authentifizierst dich und schickst dann HTTP Anfragen an bestimmte URLs mit gewissem Inhalt im Body. Wie so ziemlich jede andere Web-API auch.
Für PHP gibt’s ein SDK: GitHub - vienthuong/shopware-php-sdk: A PHP SDK for Shopware 6 Admin API
1 „Gefällt mir“
davko
22. Januar 2024 um 15:23
3
Ich habe schon das ein oder andere Script geschrieben und auch alles beachtet aber dann kommt zb sowas
Fehler beim Hinzufügen des Produkts: {
errors: [
{
code: ‚1452‘,
status: ‚500‘,
title: ‚Internal Server Error‘,
detail: ‚An exception occurred while executing a query: SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (db_XXXXXXX
.product
, CONSTRAINT fk.product.tax_id
FOREIGN KEY (tax_id
) REFERENCES tax
(id
) ON DELETE RESTRICT ON UPDATE CASCADE)‘
}
]
}
gaxweb
22. Januar 2024 um 15:26
4
Das bedeutet, dass die Anfrage an die DB eine Fremdschlüssel-Bedingung verletzen würde und daher abgelehnt wurde.
Die HTTP-Anfrage war also prinzipiell korrekt, aber die Daten, die enthalten waren, können so nicht verarbeitet werden.
Jetzt gilt es herauszufinden was SW da nicht gefällt. Ist immer ein Gefummel, wenn das passiert. In dem Fall hat’s wohl irgendwas mit der ID der Steuer zu tun.
davko
22. Januar 2024 um 15:47
5
das produkt was er einfügen soll ist ein beispiel aus dem admin api doc
const axios = require('axios');
const apiUrl = 'https://BEISPIEL.de';
const clientId = 'administration';
const clientSecret = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
const username = 'XXXXXXXXXXXXX';
const password = 'XXXXXXXXXXXXX';
// Funktion, um Access Token zu erhalten
async function getAccessToken() {
try {
const response = await axios.post(`${apiUrl}/api/oauth/token`, {
grant_type: 'password',
client_id: clientId,
client_secret: clientSecret,
username: username,
password: password,
});
return response.data.access_token;
} catch (error) {
console.error('Fehler beim Erhalten des Access Tokens:', error.response ? error.response.data : error.message);
throw error;
}
}
async function addProduct(accessToken) {
const productData = {
name: 'Testprodukt',
productNumber: 'random',
stock: 10,
taxId: 'a5da76b447db4d0aba62e6512dadf45b',
price: [
{
currencyId: 'b7d2554b0ce847cd82f3ac9bd1c0dfca',
gross: 15,
net: 10,
linked: false,
},
],
};
try {
const response = await axios.post(`${apiUrl}/api/product`, productData, {
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${accessToken}`,
},
});
console.log('Produkt erfolgreich hinzugefügt:', response.data.data);
} catch (error) {
console.error('Fehler beim Hinzufügen des Produkts:', error.response ? error.response.data : error.message);
}
}
async function main() {
try {
const accessToken = await getAccessToken();
await addProduct(accessToken);
} catch (error) {
console.error('Allgemeiner Fehler:', error);
}
}
main();
gaxweb
23. Januar 2024 um 08:18
6
Gibt’s denn einen Steuersatz mit der ID?
davko
23. Januar 2024 um 12:52
7
hallo ja die gibt es habe auch produkt export gemacht und andere ausprobiert trotzdem keine chance, hast du vielleicht einen code snippet egal in welcher sprache wo man drauf aufbauen könnte?