Ich versuche eine Methode zu erstellen, um eine CSV-Datei zu erstellen, sie in JSON zu analysieren und sie dann mithilfe ihrer REST-API an BigCommerce zu senden. Anfangs wollte ich Javascript verwenden, um alles zu tun, und alles bis zu BigCommerce, um die Daten zu putten. BigCommerce lässt CORS nicht zu, was zu einer 401-Antwort vom Server führt und keine meiner Daten tatsächlich gesendet wird. Aus diesem Grund würde ich es mit PHP machen, aber das spezifische JSON-Objekt zu bekommen ist viel schwieriger als bei Javascript. Die Lösung, die ich mir ausgedacht habe, wäre, die Daten in Javascript zu analysieren, sie Zeile für Zeile an das PHP-Skript zu senden und das PHP-Skript würde sich dann mit BigCommerce verbinden und es mir schicken.JSON über AJAX an PHP-Skript senden
Erstens, ist das möglich?
Hier einige meiner Javascript-Code:
$(document).ready(function() {
$('[type=file]').change(function() {
if (!("files" in this)) {
alert("File reading not supported in this browser");
}
var file = this.files && this.files[0];
if (!file) {
return;
}
i=0;
Papa.parse(file, {
delimiter: ",", // auto-detect
newline: "", // auto-detect
header: true,
dynamicTyping: true,
preview: 0,
encoding: "",
worker: false,
comments: false,
step: function(results, parser) {
console.log("Row data:", results.data);
console.log("Row errors:", results.errors);
currentID = results.data[i]["id"];
currentResult = results.data[i];
sendToBC(currentID, currentResult);
i+1;
},
complete: function(results, file) {
console.log("Parsing complete:", results, file);
$("#parsed_JSON").css("display", "block");
$("#ready_btn").css("display", "block");
$("#select_file").css("display", "none");
$("#retry_btn").css("display", "block");
},
error: function(error, file) {
console.log("Parsing failed:", error, file);
alert("Parsing failed. Check file and refresh to try again.");
},
download: false,
skipEmptyLines: true,
chunk: undefined,
fastMode: undefined,
beforeFirstChunk: undefined,
withCredentials: undefined
})
});
function sendToBC(id,data) {
jQuery.ajax({
type: "PUT",
url: "https://store.mybigcommerce.com/api/v2/products/" + id + "/discountrules.json",
data: data,
xhrFields: {
withCredentials: true
},
headers: {
'Authorization': 'Basic ' + btoa('username:key')
},
dataType:"json",
async: false,
success: function() {
alert("success")
},
error: function(xhr, status, error) {
console.log(error);
}
});
}
Sie werden bemerken, ich mit dem i seltsam = 0 und der i + 1 in der Mitte des Papa-Code etwas zu tun hatte, aber das war, weil Ich konnte in der Step-Funktion keine for-Schleife machen.
Mein PHP ist nur die grundlegenden Funktionen curl:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $api_url);
curl_setopt($ch, CURLOPT_HTTPHEADER, array ('Accept: application/json', 'Content-Length: 0'));
curl_setopt($ch, CURLOPT_VERBOSE, 0);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_USERPWD, "username:key");
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_POSTFIELDS, $complete);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec($ch);
curl_close ($ch)
I dont haben die meiste Erfahrung mit PHP vor allem mit Übergabe von Werten in es durch AJAX, so würde jede mögliche Hilfe groß sein. Ich bin mir nicht sicher, wie das Übergeben von Werten zwischen den Dateien wirklich funktioniert und wie ich diese Daten am besten programmatisch an PHP senden kann.
Danke.
Anstatt die CSV-Datei in Javascript zu lesen, laden Sie sie in PHP hoch. und dann lassen PHP lesen, analysieren und rufen Sie die API über CURL? – Jeet
Die PHP-Funktion json_encode codiert die Daten korrekt, aber ich kann nicht auf ein einzelnes JSON-Objekt zugreifen, um es an die BigCommerce-API zu senden, was wichtig ist, weil sich die ID für jedes Element ändert. – BMitrano825
'json_encode' wird ein Array in einen' JSON' String umwandeln. Wenn Ihre 'json'-Zeichenkette nicht zu einem' json'-Objekt als '{}' wird. Übergeben Sie dann 'JSON_FORCE_OBJECT' als zweiten Parameter an' json_encode'. Vielleicht ist das, wonach Sie suchen? – Jeet