ich habe nach einer API-Funktion gesucht, die bei einer gegebenen E-Mail-Adresse einen Benutzer zu einer oder zwei Gruppen hinzufügt und ihn zum Forum einlädt, falls er noch kein Konto hat. Ich habe diese Funktion nicht finden können, aber festgestellt, dass genau das die „Massenimport-Einladungs“-Funktion tut. Dies ist zwar nicht in der API dokumentiert, entspricht aber dem Verhalten des Browsers.
Also habe ich dasselbe getan und den folgenden PHP-Code verwendet, um eine CSV-Datei per POST zu senden:
Dies funktionierte einige Monate lang einwandfrei, funktioniert jedoch seit kurzem nicht mehr. In den Discourse-Logs erscheint folgende Fehlermeldung: Can't verify CSRF token authenticity.
Ist dies ein Fehler, da ich doch über den API-Schlüssel authentifiziert sein sollte? Oder versuche ich vergeblich, nicht dokumentierte Teile der API zu nutzen?
Ich wollte nur wissen, ob jemand bestätigen kann, ob dies ein Bug ist, der wahrscheinlich behoben wird oder nicht? Ich werde ohnehin nach einer alternativen Lösung suchen.
Hallo, danke für den Blick darauf. Ich habe mit der dokumentierten API etwas zusammengebastelt (mit Schwerpunkt auf „basteln“, aber vielleicht ist das für andere nützlich):
function tidal_process_order( $order_id ){
$order = new WC_Order($order_id);
$order_email = $order->get_billing_email();
$group_names_arr = [];
// SKU als Gruppennamen abrufen
foreach ( $order->get_items() as $item ) {
if ( $item['product_id'] > 0 ) {
$_product = $item->get_product();
$sku = $_product->get_sku();
array_push($group_names_arr, $sku);
}
}
$group_names = join(",",$group_names_arr);
// Prüfen, ob der Discourse-Benutzer bereits mit der E-Mail-Adresse existiert
$r=wp_remote_get( "https://club.tidalcycles.org/admin/users/list/all.json?email=$order_email", array(
'headers' => array('Api-key' => 'redacted',
'Api-Username' => 'redacted')
)
);
$matches = json_decode($r['body']);
if (count($matches) > 0) {
// Benutzer existiert, ihn den Gruppen hinzufügen
$user_id = $matches[0]->id;
foreach($group_names_arr as $group) {
// Gruppen-ID aus dem Gruppennamen abrufen
$r=wp_remote_get( "https://club.tidalcycles.org/groups/$group.json", array(
'headers' => array('Api-key' => 'redacted',
'Api-Username' => 'redacted')
)
);
$group = json_decode($r['body']);
$body = json_encode(array('group_id' => $group->group->id));
// Benutzer zur Gruppe hinzufügen
$r=wp_remote_post( "https://club.tidalcycles.org/admin/users/$user_id/groups", array(
'headers' => array('Api-key' => 'redacted',
'Api-Username' => 'redacted',
'Content-Type' => 'application/json',
),
'body' => $body
));
}
}
else {
// Benutzer existiert nicht, ihn mit den Gruppennamen einladen
$body = json_encode(array('email' => $order_email, 'group_names' => $group_names, "custom_message" => "Willkommen!"));
$r=wp_remote_post( "https://club.tidalcycles.org/invites", array(
'headers' => array('Api-key' => 'redacted',
'Api-Username' => 'redacted',
'Content-Type' => 'application/json',
),
'body' => $body
));
};
}
add_action( 'woocommerce_order_status_processing', 'tidal_process_order' );