任何帮助将不胜感激。我们正在尝试连接php系统,以自动将DPD标签打印到Citizen标签打印机。我们正在探索使用安装得很好的php_printer,可以从我们的代码中看到打印机,DPD api调用正在DPD网站上成功生成新的货物。
问题
API示例中的预期数据
\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
我们在输出.txt文件中收到下面的数据样本,因为在file_put_contents之后,文件中没有出现斜杠,而在我们的读者中,它们显示为空格或黑色圆圈。
我们收到的实际数据
M3000c0000eO0220f290naLD11PISIH12
2911A0803340387DPD
2911A0603500375www.dpd.co.uk
1911A1003800095Responsible Delivery - CO Neutral
1911A08037802572
2911A0603780354Sender
2911A0603780346GEOPOSTUK LTD
2911A0603780338ROEBUCK LANE
2911A0603780330SMETHWICK
2911A0603780322BIRMINGHAM
有人可以建议我们需要配置的php标头或输出设置,以确保不会从请求中删除任何内容吗?
将代码示例发送到DPD以获取标签: -
$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);
提前致谢!
答案 0 :(得分:2)
对于那些需要知道如何实际打印此文件的人,数据采用Citizen PRN格式,可以使用Windows COPY
命令直接发送到打印机。
从命令提示符:
COPY /B C:\FILENAME.PRN \\ComputerName\PrinterName
您需要为可在\\ComputerName\PrinterName
如果您在本地运行PHP来实现此目的,那么您可以使用:
file_put_contents("C:\dpd.prn", $data)
exec("COPY /B C:\DPD.PRN \\ComputerName\PrinterName")
如果您发现本地安装PHP太令人生畏或复杂,请考虑使用AutoHotKey等基本脚本语言:https://autohotkey.com/
编辑: 我已经编写了一个nodejs应用程序,您可以使用websocket连接到将发送给它的数据复制到本地公民打印机:https://github.com/MacroMan/DPDLocalPrinter
答案 1 :(得分:0)
更新:这实际上是DPD的API更改,因为它们从返回的输入中删除了\。所以上面的代码都很好,输出就像预期的那样。
答案 2 :(得分:0)
经过几个小时的不工作后,我想我会分享我们的解决方案。上面列出的所有内容都是正确的,我们唯一做错的事情(我现在感到愚蠢!)是从Postman复制API响应,而不是将file_push_contents('data.prn', $response)
复制到新文件中。
复制并粘贴邮递员的回复,或DPD API文档会删除使其工作所需的所有位!