任何帮助都将不胜感激。我们正在尝试连接一个php系统来自动打印DPD标签到公民标签打印机。我们正在探索使用php_printer,它安装得很好,可以从我们的代码中看到打印机,DPD调用正在成功地在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头或输出设置,以确保没有从请求中删除任何内容吗?
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);提前感谢!
发布于 2017-08-17 16:05:21
对于那些需要知道如何实际打印该文件的人来说,数据是公民PRN格式的,可以使用Windows命令直接发送到打印机。
在命令提示符中:
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。
发布于 2016-05-12 04:46:59
Update:这实际上是DPD的API更改,因为它们从返回的输入中删除了\。所以上面的代码都很好,输出也和预期的一样。
发布于 2018-02-22 17:51:33
在经历了许多个小时的失败之后,我想我可以分享我们的解决方案。上面列出的一切都是正确的,唯一我们做错了的事情(我现在觉得很蠢!)是从邮递员复制API响应,而不是将file_push_contents('data.prn', $response)复制到新文件中。
复制并粘贴来自postman的响应,或者DPD文档将减少所有需要的位数以使其工作!
https://stackoverflow.com/questions/37086021
复制相似问题