NetSuite HTTP POST 对本地 IP 打印机的请求

NetSuite HTTP POST Request to a Local IP Printer

我一直在尝试使用客户端脚本发送 http post 请求,以将 zpl 字符串发送到我们的本地 ip 打印机。我不断收到 "The host you requested null is unknown or cannot be found." 我究竟做错了什么?我需要使用 RESTlet 吗? 我也可以在 netsuite 之外用这台打印机进行 POST 打印,问题是通过 netsuite。

function print(tag) {
  var zpl = "^XA^CF0,30^FO20,20^FD" + tag.company + "^FS^FO20,50^FDPO # " + tag.poNum + "^FS^FO325,50^FDORD # " + tag.ordNum + "^FS^FO630,50^FDQTY^FS^CF0,50^FO700,40^FD" + tag.quantity + "^FS^BY2,10,100^FO" + calculateBarcodeDistance(tag.item.length) + ",175^BY3^BCN,50,Y,N,N,N^FD" + tag.item + "^FS^XZ";

  var printUrl = "http://192.168.0.0/pstprnt";

  var response = http.request({
    method: http.Method.POST,
    url: printUrl,
    body: zpl
  });
}

根据 SuiteAnswers #44853N/http 模块仅在服务器端脚本中受支持:

因此,您可能必须使用 suitelet 并从您的客户端调用它。不幸的是,这意味着您必须在 public IP 地址上公开一个端口并从那里转发到打印机。

或者,您可以使用 Jon 在评论中建议的提取 API 或 XMLHttpRequest,通过浏览器实现相同的目的。

最简单的方法是 运行 ngrok 在可以访问互联网的盒子上。你会 post 到 public 地址,它会转发给你的打印机。有一种方法可以在上面设置凭证,这样你就不会从端口扫描器那里得到随机的打印作业。

然后您将使用当前示例发送到远程 https 地址,然后发送到您服务器上的 ngrok,然后转发到您的打印机

您需要创建一个使用 N/http 模块的简单 Suitelet。因此,您的客户端脚本将 post 发送到打印机套件,这将使实际的 post 然后 return 数据返回到您的客户端脚本。

您可以在客户端脚本中使用 jQuery.post(...)。

另一种 "easy" 方法是在生成标签的机器上安装 apache/nginx/other 支持 https 的服务器。

你会 map some useful name to one of the loop back addresses

您会 generate 上面主机名的自签名证书,并让您的服务器使用该主机并侦听环回地址。

您将服务器配置为 reverse proxy 以将请求转发到打印机的 IP 地址

然后您可以使用向本地服务器发送打印请求(使用 iframe post hack),虽然它比 ngrok 解决方案更有效,但没有相关的直接成本。

我想说,为了做到这一点,您需要 POST 到具有静态 IP 地址的服务器,而示例中的 IP 地址看起来像是家庭路由器生成的 ip,也就是动态 ip .

http 模块的 Netsuite 帮助中的第一行指出它可以在客户端和服务器脚本中使用。我已经通过 http 模块成功向 http 服务器发送了一个 POST 请求,并得到了成功响应。我不必使用 https。

您可以通过将 url 更改为 http://httpbin.org:80/post 来测试它,他们提供的服务只会将您 post 发送回给您的任何内容。