Es muss mindestens eine Möglichkeit implementiert werden, einen secucard Kunden bzw. eine secucard Karte einzuchecken. Hierfür werden die folgenden Implementierungswege empfohlen.

Check-in durch Erfassung der Kartennummer

Die Erfassung der Kartennummer durch die Kasse sollte sowohl durch Scannen eines Barcodes, als auch durch die Möglichkeit einer manuellen Eingabe der Kartennummer ermöglicht werden. Eine secucard Kartennummer beginnt mit dem Kartenpräfix 927600442 und enthält immer genau 16 Stellen. Nach Erfassung der Kartennummer durch die Kasse muss diese an das secucard backend übermittelt werden. Dies geschieht wie folgt:

Request

POST /api/v2/Smart/Idents/notused/validate HTTP/1.1
Host: connect.secucard.com
Content-Type: application/json
Authorization: Bearer YOUR_SESSION_TOKEN

[
    {
        "value":"9276004429942845",
        "type": "card"
    }
]

Nach erfolgter Rückgabe der Daten durch das secucard backend, sollte die nun eingecheckte Karte in der Kasse für den Kassierer gut erkennbar dargestellt werden. Wir empfehlen die Darstellung aller gelieferten Daten um möglichst allen individuellen Wünschen der Händler gerecht zu werden und spätere Investitionen für eine Erweiterung der Implementierung zu vermeiden. Im folgenden finden Sie ein Wireframe einer Beispielintegration:

Response

[
  {
    "object":"smart.idents",
    "id":"smi_1",
    "type":"card",
    "prefix":"9276",
    "length":16,
    "name":"secucard Kundenkarte",
    "value":"9276004429942845",
    "valid":true,
    "merchantcard":{
      "object":"loyalty.merchantcards",
      "id":"MCD_2RXTNXPRM2YG9922UMBHHAEWEGN6AJ",
      "merchant":{
        "object":"general.merchants",
        "id":"MRC_35SZ3R5GGQQP4T0U2T5GFAN9P6C4PG"
      },
      "created_for_merchant":{
        "object":"general.merchants",
        "id":"MRC_35SZ3R5GGQQP4T0U2T5GFAN9P6C4PG"
      },
      "created_for_store":{
        "object":"general.stores",
        "id":"STO_3522R8MS2MSHCN7D37UVJYR4P6C4PX"
      },
      "card":{
        "object":"loyalty.cards",
        "id":"CRD_2U7MTNAMM3PMBPAB50C9G2AEHA9GPJ",
        "cardnumber":"9276004429942845",
        "created":"2015-09-28T16:01:20+02:00"
      },
      "is_base_card":true,
      "cardgroup":{
        "object":"loyalty.cardgroups",
        "id":"CRG_2BESGJNETJJRZVVYS8R7JWGVWK4PRZ",
        "display_name":"Punkte",
        "display_name_raw":"Punkte",
        "stock_warn_limit":null,
        "picture":"https://connect.secucard.com/ds_g/8e79737df1e2513db48908b342c3cc436edf501a"
      },
      "customer":{
        "object":"loyalty.customers",
        "id":"CUS_2ZSUWSUJD2MCMG967J8KYDD0NM8UA7",
        "contact":{
          "name":"Test Container",
          "forename":"Test",
          "surname":"Container",
          "salutation":"Mr.",
          "address":[

          ]
        },
        "created":"2017-08-18T05:59:40+00:00"
      },
      "points":31,
      "cash_balance":995,
      "bonus_balance":0,
      "balance":995,
      "last_usage":"2017-08-22T10:00:31+02:00",
      "last_charge":"2017-08-22T09:52:56+02:00",
      "stock_status":"active",
      "lock_status":"unlocked",
      "passcode":1
    },
    "customer":{
      "object":"loyalty.customers",
      "id":"CUS_2ZSUWSUJD2MCMG967J8KYDD0NM8UA7",
      "contact":{
        "name":"Test Container",
        "forename":"Test",
        "surname":"Container",
        "salutation":"Mr.",
        "address":[

        ]
      },
      "created":"2017-08-18T05:59:40+00:00"
    }
  }
]

Check-in von Smartphone-App-Usern

Neben der Erfassung der Kartennummer selbst, sollte ebenso der Check-in von Smartphone-App-Usern ermöglicht werden. Wir empfehlen hierfür die Implementierung eines Buttons im Hauptscreen der Kasse. Im folgenden finden Sie ein Wireframe einer Beispielintegration:

Nach Aufruf des Buttons durch den User muss die Kasse eine entsprechende Anfrage zum Abruf der aktuell für diesen Store eingecheckten App-User an das secucard backend übermitteln. Dies geschieht wie folgt:

JAVA-SDK

// Set up callback to get notified when "Check-In" events happen (customer shows up in store).
// We just print here for demo purposes, you would probably store in global list or so in real world.
// You may trigger such an event by using the secucard app.
client.smart.checkins.onCheckinsChanged(new Callback<List<Checkin>>() {
  @Override
  public void completed(List<Checkin> result) {
    for (Checkin checkin : result) {
      System.out.println("Checked in: " + checkin.getCustomerName());
      // Keep the checkin object id for setting as ident value.
      // At this point all pictures are also downloaded, access binary content to create a image via:
      MediaResource picture = checkin.getPictureObject();
      if (picture != null) {
        InputStream inputStream = picture.getInputStream();
        // further stream processing ...
      } else {
        // You may additionally check if there was an error which caused the picture to be null and handle somehow.
        Exception error = checkin.getError();
      }
    }
  }
 
  @Override
  public void failed(Throwable cause) {
    // Something bad happened, you would probably want to show an error dialog and clear the checkin list.
    System.err.println("Error processing check-in:");
    cause.printStackTrace();
  }
});


// You may obtain a global list of allowed "idents templates" to cross check if current customers ident
// is valid at all, this "manual" pre-validation avoids errors when actually submitting transactions later.
List<Ident> allowedIdents = client.smart.idents.getSimpleList(new QueryParams());
if (allowedIdents == null) {
  throw new RuntimeException("No idents found."); // Should not happen.
}

Nach erfolgter Rückgabe der Daten der eingecheckten App-User durch das secucard backend, sollten die nun verfügbaren Daten in einer neuen Maske der Kasse dargestellt werden. Jeder User sollte wiederum als Button für den Kassierer auswählbar sein. Wir empfehlen die Darstellung von mindestens diesen Daten: User-Picture, Vorname und Name. Im folgenden finden Sie ein Wireframe einer Beispielintegration:

Wählt der Kassierer einen User aus, muss dieser durch die Kasse an das secucard backend übermittelt werden. Dies geschieht wie folgt:

JAVA-SDK

// Select an ident (card) which will be charged for the basket.
// Usually the value is the id of a scanned card or the id of a Checkin object taken from the global Check-In list.
Ident ident = new Ident();
ident.setValue("CUSTOMERS-IDENT-ID");

Nach erfolgter Rückgabe der Daten durch das secucard backend, sollte die nun eingecheckte Karte in der Kasse für den Kassierer gut erkennbar dargestellt werden. Wir empfehlen die Darstellung aller gelieferten Daten um möglichst allen individuellen Wünschen der Händler gerecht zu werden und spätere Investitionen für eine Erweiterung der Implementierung zu vermeiden. Im folgenden finden Sie ein Wireframe einer Beispielintegration: