Ich versuche Punchout-Kataloge auf unserer eComm-Site zu implementieren. Ehrlich, die Dokumentation für cXML ist ein Durcheinander und alle Codebeispiele sind in Javascript und / oder VB.Net (ich benutze C # und würde lieber nicht versuchen zu übersetzen). Hat jemand da draußen Beispiele oder Beispiele, wie man die PunchOutSetupRequest-XML empfängt und dann die PunchOutSetupResponse-XML mit C # sendet? Ich konnte nichts in den Interwebs finden (ich habe seit zwei Tagen gesucht) ...
Ich hoffe, ich kann das einfach in einem ActionResult (im Gegensatz zu einer "Start-Seite" wie vorgeschlagen) machen.
Ich bin ein kompletter Anfänger bei Punchouts und könnte hier wirklich Hilfe gebrauchen. Die Chefs sind ziemlich aufdringlich, so dass jede Hilfe sehr geschätzt werden würde. Vorschläge, wie diese Arbeit gemacht werden könnte, würden ebenfalls sehr geschätzt.
Ich entschuldige mich bei allen für die Unbestimmtheit der Frage (Anfrage).
Das ist nicht trivial, aber das sollte Sie beginnen.
Sie benötigen 3 generische Handler (.ashx): Setup, Start und Order ....
Setup und Bestellung erhalten HTTP Post mit dem Inhaltstyp "text / xml". Sehen Sie sich HttpRequest.InputStream an, wenn Sie den XML-Code in eine Zeichenfolge eingeben müssen. Sehen Sie sich LINQ-to-XML an, um die gewünschten Daten auszugraben. Ihre HTTP-Antwort auf diese beiden wird ebenfalls vom Inhaltstyp "text / xml" und UTF8-codiert sein, wobei die CXML-Datei als dokumentiert zurückgegeben wird. Verwenden Sie dazu LINQ-to-XML.
Der Setup-Handler muss Anmeldeinformationen überprüfen und eine URL mit einem eindeutigen QueryString-Token zurückgeben, das auf den Start-Handler verweist. Erwarten Sie keine Sitzungspersistenz zwischen Setup und Start, da sie nicht von demselben Aufrufer stammen. Dieser Handler muss ein Anwendungsobjekt für das Token und die zugehörigen Daten erstellen, die Sie aus der cXML extrahiert haben.
Der Start-Handler wird als einfaches GET aufgerufen und muss das Token im QueryString mit dem entsprechenden Anwendungsobjekt vergleichen, diese Daten in die Sitzung kopieren und dann eine response.redirect-Anweisung auf jede Seite Ihrer Site ausführen Sie möchten, dass der Käufer landet.
Sobald sie ihren Einkaufswagen mit einigen Dingen gefüllt haben und bereit sind, sie auszuprobieren, bringen Sie sie zu einer Seite, die ein eingebettetes Formular enthält (nicht zu verwechseln mit einem ASP.Net-Formular, das zurück an Ihren Server sendet) und eine Senden-Schaltfläche (wiederum keine ASP.Net-Schaltfläche). Von Ihrem Einrichtungs-Handler haben Sie eine URL erfasst, um auf den Post dieses Formulars zu verweisen. Innerhalb des Formulars wird ein versteckter Eingabe-Tag mit dem UTF8-codierten CXML-Punchout-Auftrag als mit LINQ-to-XML erzeugter Wert eingefügt. Ich empfehle Base64, diesen Wert zu codieren, um zu vermeiden, dass ASP.Net mit den Tags, die während des Renderings enthalten sind, unordentlich ist und die versteckte Eingabe "cxml-base64" in der Dokumentation benannt wird. Das Ergebnis ist, dass das Formular clientseitig an den Server Ihres Kunden und nicht an Ihren Kunden gesendet wird. Der Server extrahiert den CXML-Punchout-Auftrag und beendet die Sitzung des Besuchers.
Der Order-Handler erhält einen CXML-OrderRequest und speichert ihn genau wie Setup in einer Zeichenfolge und verwendet dann LINQ-to-XML, um ihn zu parsen und danach zu handeln. Erneut erhalten Sie Zugangsdaten zur Überprüfung, möglicherweise eine zu verarbeitende Kreditkarte und die Bestellartikel, Lieferadresse usw. Beachten Sie, dass die Bestellanfrage möglicherweise nicht alle Artikel enthält, die in der Punchout-Bestellung enthalten waren, da das System auf Ihrem Kunden liegt Seite kann Artikel entfernen oder sogar Artikelmengen ändern, bevor Sie den endgültigen Bestellantrag an Sie senden. Die OrderRequest könnte zu Ihnen zurückkommen, nachdem der Punchout-Auftrag innerhalb von Minuten, Tagen, Wochen oder nie bei Ihnen gepostet wurde ... Sie sollten die Cart-Daten nicht in der Hoffnung speichern, dass sie später zur Bestellung passen.
Letzte Anmerkung ... Der Käufer könnte Ihre Website in einem iFrame erleben, der in die webbasierte Benutzeroberfläche für die Beschaffung eingebettet ist. Entwerfen Sie entsprechend.
Wenn Sie weitere Informationen benötigen, antworten Sie darauf und ich komme zurück.
Update ... Zusätzliche Überlegungen: Besprechen Sie mit dem Käufer, wie die Fehlerbehandlung insbesondere bei Bestellungen fließen soll, da Sie die Wahl haben. 1) erschöpfend alles in der CXML auswerten, die Sie erhalten, und andere Antwortcodes als 200 zurückgeben, wenn etwas falsch ist, oder 2) immer 200 Erfolg zurückgeben und Probleme mit Out-of-Band behandeln oder eine ConfirmationRequest generieren, die den Auftrag ablehnt. Meine Erfahrung ist, dass eine Mischung der beiden am besten funktioniert. Sicherlich sollten Sie eine Nicht-200-Datei werfen, wenn die Anmeldeinformationen fehlschlagen, aber Sie möchten möglicherweise keine Kreditkarte ausführen oder die Verfügbarkeit von Artikeln inline überprüfen. Das System Ihres Käufers ist möglicherweise nicht in der Lage, mit Dutzenden von möglichen Fehlern fertig zu werden, und / oder zeigt dem Benutzer möglicherweise keine Fehlermeldungen an, damit diese Korrekturen vornehmen können. Ich habe Systeme gesehen, die jeden Antwortcode, der nicht 200 ist, einfach wegwerfen und die Einreichung wiederholt in Intervallen für Stunden oder Tage wiederholen müssen, bis sie auf eine Plausibilitätsprüfung verzichten, während andere Antwortcodes in bestimmten Bereichen anders handhaben werden als andere, zum Beispiel ruft ein 4xx einen Wiederholungsversuch auf, während ein 5xx als fatal behandelt wird. Denken Sie daran, dass Setup und Bestellung nicht direkt vom Benutzer kommen ... das Beschaffungssystem erzeugt diese intern.
Update ... Beantworten des Kommentars zum Testen der Dinge ...
Sie verwenden die gleiche Methode wie beim Generieren von ausgehenden Bestätigungsanfragen, ShipNoticeRequest und InvoiceDetailRequest. Diese werden in der Regel auf Ihrer Seite erstellt, nachdem Sie vom Beschaffungssystem Ihres Kunden eine Bestellanforderung erhalten haben.
Beginnen Sie mit Linq-To-XML für ein Beispiel für die Erstellung Ihrer ausgehenden cXML-Datei (Creating Abschnitt XML-Bäume). Kombinieren Sie dieses Beispiel mit diesem Code:
%Vor%An diesem Punkt hat der StringBuilder (Ausgang) Ihr gesamtes cXML und Sie müssen es irgendwo POSTIEREN. Ihr Webanwendungsprojekt, das mit F5 und einem Standard gestartet wurde.aspx-Seite wird auf localhost und einigen Ports (Sie sehen, dass in der URL es öffnet). Unabhängig davon, ob Sie VS Express für Desktop verwenden, haben Sie den obigen Code in einer Konsolenanwendung, die Sie für den Post ausführen können. Verwenden Sie dazu etwa Folgendes:
%Vor%Da Ihr Handler cXML produzieren sollte, sehen Sie, dass das in der Konsole ausgespuckt wurde. Wenn es kotzt, bekommst du einen großen Klecks Debug-Chaos in der Konsole, was dir natürlich hilft, alles zu reparieren, was kaputt ist.