2010-11-22 15 views
1

Hat jemand eine elegante Möglichkeit gefunden, nach Daten zu suchen, die im Customer Information Manager (CIM) von Authorize.net gespeichert sind?Searching Authorize.net CIM Records

Basierend auf ihrem XML Guide scheint es überhaupt keine Suchfunktionen zu geben. Das ist ein riesiger Mangel.

Wie ich es verstehe, ist das Verkaufsargument für CIM, dass der Händler keine Kundendaten speichern muss. Sie speichern lediglich eine eindeutige Kennung für jeden und rufen die Daten nach Bedarf ab. Dies mag aus Sicht der PCI-Compliance großartig sein, aber vom Standpunkt der Flexibilität ist es schrecklich.

Eine einfache Suche wie "Zeig mir alle Bestellungen aus Texas" wird plötzlich sehr kompliziert.

Wie geht der Rest von Ihnen mit diesem Problem um?

Antwort

2

Die kurze Antwort ist, Sie haben Recht: Es gibt keine API-Unterstützung für die Suche nach CIM-Datensätzen. Und aufgrund der Struktur ist es nicht einfach, CIM alleine für die Suche nach allen Datensätzen zu verwenden.

Um sie in der Art und Weise suchen Sie beschreiben:

  1. Verwenden getCustomerProfileIdsRequest alle Kundenprofil-IDs erhalten Sie gespeichert haben.
  2. Verwenden Sie für jede von dieser Anforderung zurückgegebene CustomerProfileId getCustomerProfileRequest, um den spezifischen Datensatz für diesen Client abzurufen.
  3. Untersuchen Sie jeden Datensatz zu diesem Zeitpunkt, suchen Sie nach dem gewünschten Kriterium und speichern Sie die entsprechenden Datensätze in einer anderen Struktur. eine Klasse, ein mehrdimensionales Array, eine ADO DataTable, was auch immer.

Ja, das ist lästig. Aber es ist buchstäblich der einzige Weg, um fortzufahren.

Die zuvor erwähnte Reporting-API gilt nur für Transaktionen, nicht für den Customer Information Manager.

Beachten Sie, dass Sie zum Zeitpunkt der Aufzeichnung einer Transaktion die gewünschten Daten sammeln können. Solange Sie sie nicht persönlich identifizierbar machen, können Sie sie lokal speichern.

Beispielsweise könnten Sie eine Anfrage für alle Ihre CIM-Kundenprofildatensätze ausführen und den Status speichern, aus dem jeder Kunde in einer lokalen Datenbank stammt.

Wenn Sie nur den Status speichern, können Sie mit diesen Datensätzen arbeiten, da nichts den Status mit einem bestimmten Kundendatensatz verknüpft. In Zukunft könnten Sie eine Logik schreiben, um den lokalen Status-Datensatzspeicher zur gleichen Zeit zu aktualisieren, zu der auch Kundenprofilsätze erstellt/aktualisiert werden.

Ich weiß, das ist wahrscheinlich nicht das, was Sie hören wollten, aber sie sind die Pausen.

0

Hauptzweck von CIM ist es, Probleme mit der PCI-Kompatibilität aus den Händen zu nehmen, indem Sie Kundendaten, einschließlich Kreditkarten, auf ihrem Server speichern und dann nur mit einer eindeutigen ID darauf zugreifen können. Wenn Sie Berichte erstellen möchten, müssen Sie diese Art von Informationen selbst verfolgen. Da bei der Speicherung von Kundenadressen keine Probleme mit der PCI-Kompatibilität auftreten, ist es realistisch, dies selbst zu tun. Im Grunde ist dies die Art von Material, das während der Entwurfsphase des Projekts ausgespült werden muss.

Sie haben eine neue reporting API, die Ihnen diese Funktionalität bieten kann. Wenn dies nicht der Fall ist, ist es sehr wahrscheinlich, dass es in naher Zukunft angeboten wird, da Authnet derzeit aktiv viele neue Funktionen für seine APIs bereitstellt.

1

Dies ist wahrscheinlich sehr langsam und ineffizient. Aber hier ist eine Methode. Fordern Sie ein Array aller Kunden-IDs, und überprüfen dann jeder für das Feld, das Sie wollen ... in meinem Fall habe ich eine Suche-by-E-Mail-Funktion in PHP wollte:

$cimData = new AuthorizeNetCIM; 
$profileIds = $cimData->getCustomerProfileIds(); 

$profileIds = $cimData->getCustomerProfileIds(); 
$array = $profileIds->xpath('ids'); 
$authnet_cid = null; 

/* 
this seems ridiculously inefficient... 
gotta be a better way to lookup a customer based on email 
*/ 

    foreach ($array[0]->numericString as $ids) { // put all the id's into an array 
     $response = $cimData->getCustomerProfile($ids); //search an individual id for a match 
    //put the kettle on 

     if ($response->xml->profile->email == $email) { 
      $authnet_cid = $ids; 
      $oldCustomerProfile = $response->xml->profile; 
     } 
    } 

// jetzt, dass der Tee ist fertig, creme, zucker, kekse, du könntest dein Suchergebnis haben!

+0

Ja, ich habe diesen Ansatz Samuel gedacht. Es ist hässlich, aber es würde funktionieren. Zu viel Mühe und Zeit. Hoffentlich wird Authorize.net dies in naher Zukunft für uns bereitstellen. In der Zwischenzeit habe ich keine andere Wahl, als einige Kundendaten lokal zu speichern (Name, Postleitzahl, etc.). – Axeva

+0

Das klappt gut. Ich musste eine Reihe von falsch zugeordneten Daten korrigieren und musste alle CIM-Profile abfragen. Ich habe einfach ein paar DB-Tabellen erstellt, die CIM-Profile durchlaufen und die benötigten Daten bekommen, dann die fehlerhaften Daten korrigiert und die lokalen Tabellen gelöscht. Zugegeben, keine der Tabellen muss gelöscht werden, da nichts, was Sie von CIM erhalten können, das Sie lokal speichern würden, die PCI-Compliance ungültig machen würde. – Ricky