2016-05-07 5 views
1

Jede Hilfe wäre willkommen. Wir versuchen, ein PHP-System zu verbinden, um DPD-Etiketten automatisch an einen Citizen-Etikettendrucker zu drucken. Wir untersuchen mit php_printer, der gut installiert ist und den Drucker aus unserem Code sehen kann, und der DPD-API-Aufruf generiert neue Sendungen erfolgreich auf der DPD-Website.DPD Etikettendruck mit der PHP API für einen Citizen Etikettendrucker

Fragen

  1. Zum einen ist dies der beste Weg, um rohe Druckdaten an einen Citizen Etikettendrucker aus einer PHP-Anwendung mit php_printer oder gibt es eine bessere Art und Weise zu senden zu gehen?
  2. Zweitens werden wir in Kürze einige Live-Tests durchführen, aber es scheint ein Formatierungsproblem beim DPD API Label-Aufruf zu bestehen, wo wir die Rohdaten des Bürgers abrufen, die direkt an den Drucker gesendet werden, um den Druck auszulösen.

Erwartete Daten aus dem API Beispiel

\M3000\c0000\e\O0220\f290\n\a\LD11PISIH12 
2911A0803340387DPD 
2911A0603500375www.dpd.co.uk 
1911A1003800095Responsible Delivery - CO Neutral 
1911A08037802572 
2911A0603780354Sender 
2911A0603780346GEOPOSTUK LTD 
2911A0603780338ROEBUCK LANE 
2911A0603780330SMETHWICK 
2911A0603780322BIRMINGHAM 
------ etc 

wir die Daten Probe erhalten unten in unserer Ausgabe, dass die Schrägstriche Datei im .txt nicht nach file_put_contents und in unseren Lesern in der Datei erscheinen sie erscheinen entweder als Leerzeichen oder als schwarze Kreise.

Istdaten wir

M3000c0000eO0220f290naLD11PISIH12 
2911A0803340387DPD 
2911A0603500375www.dpd.co.uk 
1911A1003800095Responsible Delivery - CO Neutral 
1911A08037802572 
2911A0603780354Sender 
2911A0603780346GEOPOSTUK LTD 
2911A0603780338ROEBUCK LANE 
2911A0603780330SMETHWICK 
2911A0603780322BIRMINGHAM 

erhalten Kann jemand PHP-Header oder Ausgabeeinstellungen legen nahe, dass wir nichts konfigurieren müssen, um sicherzustellen, wird von der Anforderung entfernt werden?

PHP-Codebeispiel für das Label DPD gesendet: -

$shipmentId = 123456789; 
$method = '/shipping/shipment/' . $shipmentId . '/label/'; 

$url = 'https://api.dpd.co.uk . $method; 
$options = array(
'http' => array(
    'method' => 'GET', 
    'Host' => 'api.dpd.co.uk', 
    //'header' => "Accept: text/html\r\n" . 
    'header' => "Accept: text/vnd.citizen-clp" . 
    "GEOClient: account/" . $account_number . "\r\n" . 
    "GEOSession: " . $session . "\r\n" 
) 
); 

$context = stream_context_create($options); 
$result = file_get_contents($url, false, $context); 
file_put_contents("dpd_test_citizen_clp.txt", $result); 

Vielen Dank im Voraus!

+0

Sean, wir haben ein ähnliches Problem, außer das Senden des Befehls an den Drucker scheint nicht zu funktionieren. Würde es Ihnen etwas ausmachen, Ihren PHP-Code zu teilen, um den Befehl an den Drucker zu senden? Prost –

Antwort

2

Für diejenigen, die wissen müssen, wie diese Datei tatsächlich gedruckt wird, sind die Daten im Citizen PRN-Format und können direkt mit dem Windows-Befehl COPY an den Drucker gesendet werden.

an der Eingabeaufforderung:

COPY /B C:\FILENAME.PRN \\ComputerName\PrinterName 

Sie eine Druckerfreigabe für den Citizen-Drucker erstellen müssen diese zugänglich \\ComputerName\PrinterName

Wenn Sie PHP laufen lokal zu erreichen, dann können Sie:

file_put_contents("C:\dpd.prn", $data) 
exec("COPY /B C:\DPD.PRN \\ComputerName\PrinterName") 

Wenn Sie PHP lokal zu abschreckend oder komplexe finden installieren, sollten Sie wie AutoHotKey eine grundlegende Skriptsprache: https://autohotkey.com/

EDIT: Ich habe da eine NodeJS Anwendung geschrieben, die Sie mit einem websocket verbinden kann, der die Daten an sie gesendet werden kopiert, auf den lokalen Bürger Drucker: https://github.com/MacroMan/DPDLocalPrinter

0

Update: Dies war eigentlich eine API-Änderung für DPD in dem sie die \ von der zurückgegebenen Eingabe entfernt. So Code oben war alles in Ordnung und die Ausgabe war wie erwartet.

0

Nach vielen Stunden nicht bekommen Ich dachte, ich würde unsere Lösung teilen. Alles oben aufgelistete ist korrekt, das einzige, was wir falsch gemacht haben (ich fühle mich jetzt blöd!), War das Kopieren der API-Antwort von Postman anstatt eine file_push_contents('data.prn', $response) in eine neue Datei zu kopieren.

Kopieren und Einfügen der Antwort vom Postboten, oder die DPD API Docs schneidet alle Bits aus, die benötigt werden, damit es funktioniert!

Verwandte Themen