2016-05-13 8 views
1

Ich wurde von BC Unterstützung gesagt, dass dies nicht möglich ist, aber ich wäre überrascht, wenn es wirklich keinen Weg gäbe.Automatisch einen Kunden einer bestimmten Kundengruppe bei der Anmeldung zuweisen - BigCommerce

Ich muss in der Lage sein, einen Kunden automatisch einer bestimmten Kundengruppe zuzuordnen, wenn sie ein Konto erstellen. Mein Gedanke:

  • Ich würde ein zusätzliches Feld zum Anmeldeformular
  • Geben Sie einen Benutzer mit einem Code (eine Zeichenfolge oder Zahl)
  • Benutzer gibt Code hinzufügen, wenn neues Konto erstellen
  • Benutzer Treffer einreichen
  • auf Formular ich den Wert des zusätzlichen Feldes greifen würde:
var codeInput = document.getElementById('code-input').value; 

dann würde ich diesen Wert auf eine vordefinierte Zeichenfolge, vergleichen, und wenn es eine Übereinstimmung gibt, würde ich diese Kunden zu GroupX (mit einer Gruppe-ID von 8) zuweisen:

if (codeInput === "codeIGaveToTheUser") { 
    currentUserGroupID = 8; 
} 

Ist es möglich, eine zuweisen Kunde zu einer bestimmten Gruppe bei der Anmeldung wie dieser (oder auf andere Weise)?

Jede Hilfe wird sehr geschätzt.

+0

Um klar zu sein, wenn Support Ihnen sagt, dass etwas nicht getan werden kann, bedeutet es, dass es keine Einstellung gibt. Dies kann durch Anpassung erreicht werden.Es erfordert einen eigenen Webserver, der so konfiguriert ist, dass er nach Webhooks lauscht und den erstellten Kunden basierend auf Ihrer eigenen Geschäfts-/Code-Logik zuweist. – Alyss

+0

Dank Alyssa, können Sie mir eine Vorstellung davon geben, wie kompliziert das ist, oder vielleicht etwas einfacher erklären? Ich bin kein kompletter Anfänger, aber diese Art von Projekt ist mir etwas fremd. Hinweis - Sind die BCs-Servereinstellungen von Nutzen? – Tron

+0

Es gibt einen Tippfehler. Mein Name ist Alyss, nicht Alyssa :). BC-Servereinstellungen sind nicht von Nutzen. Sie müssten einen externen Server oder etwas wie Heroku haben, das könnte. Javascript würde wahrscheinlich nicht ausreichen. – Alyss

Antwort

1

Sie müssten einen Server einrichten, der auf Webhooks wartet, außer Sie wollten einen Cron-Job ausführen. Wir haben einige grundlegende Informationen über die developer portal, aber ich habe mehr Ressourcen unten eingefügt. Von dort aus müssen Sie die Serversprache Ihrer Wahl auswählen, um nach der Erstellung der Webhooks zu horchen, richtig zu reagieren (200 Response wenn sie empfangen werden), Code basierend auf diesen Informationen auszuführen und dann Maßnahmen gegen die BC API zu ergreifen.

Wenn Sie also nach einem Code suchen, müssen Sie nach dem Webhook store/customer/created lauschen und Ihren Code nach einem benutzerdefinierten Feld durchsuchen lassen, das den Code enthält. Wenn es vorhanden war, dann ergreifen Sie Maßnahmen. Sonst nichts tun.

https://developer.github.com/webhooks/configuring/

http://coconut.co/how-to-create-webhooks

How do I receive Github Webhooks in Python

+0

Sorry Alyss! Und vielen Dank dafür. Es fällt mir ziemlich schwer zu verstehen, und ich versuche herauszufinden, was genau auf einen Webhook gehört, aber ich werde diese Links betrachten und lesen und sehen, ob ich ein paar Dinge nicht lernen kann. Ich schätze die Zeit – Tron

2

Obwohl BigCommerce webhooks mit würde die höchste Erfolgsquote der Ausführung Ihrer Kundengruppenzuordnung App gewährleisten, bedarf es einiges an Setup auf BigCommerce (die Schaffung eines Entwurf App, einen oAuth Schlüssel, Hampelmänner, etc.), und kann ein bisschen Overkill für Ihre Anforderungen sein.

Hier ist ein einfacher Weg, in meiner {meist} bescheidenen Meinung, die viel von dem ausnutzt, was Sie in Ihrer ursprünglichen Frage eingeschlossen haben. Jede Lösung erfordert jedoch einen externen Server, der die Kundengruppenzuordnung über die BigCommerce-API übernimmt.

  1. Im BigCommerce Bedienfeld für den Benutzer in dem zusätzlichen Feld hinzufügen Formular anmelden, wie Sie erwähnen. enter image description here

  2. So wie Sie das neue Eingabefeld sehen können, wurde nativ auf die Standardregistrierungsseite hinzugefügt: enter image description here

So, jetzt, wenn ein Benutzer ein Konto auf Ihrer Website erstellt, die Wert für das Signup Code (das benutzerdefinierte Feld erstellt) wird direkt über die API für das Konto dieses Kunden verfügbar sein. Werfen Sie einen Blick auf das, was die JSON-Daten wie folgt aussieht: enter image description here


Okay, das ist schön und alle, aber wie wir es tun automatisieren?
Um dies zu tun, müssen wir unsere externe Anwendung wissen lassen, dass sich ein Kunde gerade registriert hat. Darüber hinaus benötigt unsere externe Anwendung einen Verweis auf diesen neu erstellten Kunden, damit er weiß, für welchen Kunden er die Kundengruppe aktualisieren soll. Normalerweise würde uns ein BigCommerce-Webhook davon in Kenntnis setzen, aber da wir keinen BigCommerce-Webhook verwenden, gibt es hier die alternative Methode, das externe Skript auszulösen.

  1. Wir werden unsere externe Anwendung über die Seite BigCommerce Registrierungsbestätigung auslösen - createaccount_thanks.html. Diese Seite wird sofort geladen, nachdem ein Kunde ein Konto erstellt hat. Daher ist dies der perfekte Ort, um unser Triggerscript einzufügen.
  2. Nachdem der Kunde angemeldet ist, können wir über eine BigCommerce Global-Systemvariable - %%GLOBAL_CurrentCustomerEmail%% - auf die E-Mail-Adresse des Kunden zugreifen.
  3. Wir sollten eine HTTP-Anfrage von dieser Seite an unsere externe Anwendung zusammen mit der E-Mail-Adresse des Kunden senden. Insbesondere können wir eine XMLHttpRequest über JavaScript erstellen, oder um modern zu sein, verwenden wir Ajax über jQuery. Dieses Skript sollte vor dem schließenden </body>-Tag unter createaccount_thanks.html eingefügt werden.

Beispiel für POST-Anforderung (obwohl ein GET als auch ausreichen würde):

<script> 
    $(function() { 
    $('.TitleHeading').text('One moment, we are finalizing your account. Please wait.').next().hide(); // Let the customer know they should wait a second before leaving this page. 
    //** Configure and Execute the HTTP POST Request! **// 
    $.ajax({ 
     url:   'the_url_to_your_script.com/script.php', 
     type:  'POST', 
     contentType: 'application/json', 
     data:   JSON.stringify({email:"%%GLOBAL_CurrentCustomerEmail%%"}), 
     success: function() { 
     // If the customer group assignment goes well, display page and proceed normally. This callback is only called if your script returns a 200 status code. 
     $('.TitleHeading').text('%%LNG_CreateAccountThanks%%').next().show(); 
     }, 
     error: function() { 
     // If the customer group assignment failed, you might want to tell your customer to contact you. This callback is called if your script returns any status except 200. 
     $('.TitleHeading').text('There was a problem creating your account').after('Please contact us at +1-123-456-7890 so that we can look into the matter. Please feel free to continue shopping in the meantime.');    
     }      
    }); 
    }); 
</script> 

Nun endlich, Sie müssen nur verantwortlich Ihre serverseitige Anwendung erstellen, für die Anfrage über Handhabung und Aktualisierung des Kunden Kunden Gruppe. Sie können jede Sprache verwenden, die Sie wünschen, und BigCommerce sogar offers several SDK's können Sie verwenden, um Mega Entwicklungszeit zu speichern. Denken Sie daran, dass Sie es irgendwo online hosten müssen, und fügen Sie dann seine URL in das JS-Skript oben ein.

PHP Beispiel (quick & schmutzig):

git clone https://github.com/bigcommerce/bigcommerce-api-php.git
curl -sS https://getcomposer.org/installer | php && php composer.phar install

<?php 
/** 
* StackOverflow/BigCommerce :: Set Customer Group Example 
* http://stackoverflow.com/questions/37201106/ 
* 
* Automatically assigning a customer group. 
*/ 

//--------------MAIN------------------------// 

// Load Dependencies: 
require ('bigcommerce-api-php/vendor/autoload.php'); 
use Bigcommerce\Api\Client as bc; 

// Define BigCommerce API Credentials: 
define('BC_PATH', 'https://store-abc123.mybigcommerce.com'); 
define('BC_USER', 'user'); 
define('BC_PASS', 'token'); 

// Load & Parse the Email From the Request Body; 
$email = json_decode(file_get_contents('php://input'))->email; 

// Execute Script if API Connection Good & Email Set: 
if ($email && setConnection()) { 
    $customer = bc::getCollection('/customers?email=' .$email)[0];  //Load customer by email 
    $cgid  = determineCustomerGroup($customer->form_fields[0]->value); //Determine the relevant customer group ID, via your own set string comparisons. 
    bc::updateCustomer($customer->id, array('customer_group_id' => $cgid)) ? http_send_status(200) : http_send_status(500); //Update the customer group. 
} else { 
    http_send_status(500); 
    exit; 
} 

//-------------------------------------------------// 

/** 
* Sets & tests the API connection. 
* @return bool true if the connection successful. 
*/ 
function setConnection() { 
    try { 
     bc::configure(array(
     'store_url' => BC_PATH, 
     'username' => BC_USER, 
     'api_key' => BC_PASS 
     )); 
    } catch (Exception $e) { 
     return false; 
    } 
    return bc::getResource('/time') ? true : false; //Test Connection 
} 

/** 
* Hard define the customer group & signup code associations here. 
* @param string The code user used at signup. 
* @return int The associated customergroup ID. 
*/ 
function determineCustomerGroup($signupCode) { 
    switch ($signupCode) { 
     case 'test123': 
      return 1; 
     case 'codeIGaveToTheUser': 
      return 8; 
     default: 
      return 0; 
    } 
} 

Also dann würden Sie Ihre Kundengruppe String-Vergleiche direkt im Serverside-Programm tun. Ich würde empfehlen, dass Sie Ihr eigenes BC-API-Skript neu schreiben, da das oben genannte in der Qualität wirklich etwas in Richtung des funktionalen Pseudo-Codes ist, aber mehr vorhanden, um die allgemeine Idee zu zeigen. HTH