商家自動打印訂單小票,原來可以這樣做


如何借助雲開發讓小程序自動打印小票?

很多商家,尤其是餐飲/超市行業的商家,他們的小程序在收到新訂單的時候,無法像美團那樣自動打印訂單小票,這給他們配貨、送貨帶來很大的不便。所以他們非常希望小程序能夠對接小票打印機自動打印小票,我們今天就介紹一下如何通過雲開發實現這個功能。

1、 准備一台網絡小票打印機

我們以飛鵝這個牌子為例。首先購買一台飛鵝打印機,然后在飛鵝網站上注冊成為開發者,添加這台打印機,USER和UKEY會用在雲開發后台來調用打印機。

2、雲開發后台調用打印機

在打印機所有接口中,最重要是“小票機打印訂單”這個接口。在這個接口中,我們看到只需要將打印參數組裝好,然后通過POST請求發送給URL即可。

代碼非常簡單,如下:

request('http://api.feieyun.cn/Api/Open/', qs.stringify(postData))

postData是要發送的數據,因為打印機要求請求頭是:
application/x-www-form-urlencoded,所以請注意請求頭而且請求數據需要進行qs.stringify()拼接操作。至於postData的具體內容將在第3步中介紹。

3、postData組成

根據文檔,數據由用戶名、時間戳、簽名、接口名、打印機編號、打印內容、打印次數等組合而成。我們按照要求將數據進行組合就行了。

代碼非常簡單,如下:

  const postData = {
      user: USER,   //用戶名 
      stime:timeStamp, //時間戳
      sig: crypto.createHash('sha1').update(USER + UKEY + timeStamp).digest('hex'),//簽名
      apiname: "Open_printMsg",
      sn: printer, //打印機編號
      content: util.formatOrderInfo (orderInfo), //打印內容
      times: times,//打印份數
    };

4、打印效果如下

5、打印格式參考代碼

打印內容處理:

const formatOrderInfo = function (cloudOrder, name = '') {
var orderInfo = '<CB>' + name + ' 新訂單</CB><BR>';
orderInfo = '<B>' + cloudOrder.startDate + '</B><BR><BR>';
orderInfo += '名稱  數量  單價  總價<BR>';
orderInfo += '--------------------------------<BR>';
for (var i = 0; i < cloudOrder.products.length; i++) {
  let price = cloudOrder.products[i].price
  orderInfo += cloudOrder.products[i].name + ' ' + cloudOrder.products[i].label + hanleSpace(cloudOrder.products[i].name + ' ' + cloudOrder.products[i].label, 16) + cloudOrder.products[i].number + hanleSpace(cloudOrder.products[i].number.toString(), 4) + price + hanleSpace(price.toString(), 6) + parseFloat(parseFloat(cloudOrder.products[i].number * price).toFixed(2)) + '<BR><BR>';
}
if (cloudOrder.coupon) orderInfo += "優惠券抵扣: -" + cloudOrder.coupon.disCount + "<BR>";
if (cloudOrder.remark) orderInfo += "<B>備注:" + cloudOrder.remark + "</B><BR>";
orderInfo += '--------------------------------<BR>';
orderInfo += '<B>總計:' + cloudOrder.amount + '元</B><BR>';
orderInfo += '<B>' + cloudOrder.linkMan + ' ' + cloudOrder.mobile + "</B><BR>";
if (cloudOrder.city || cloudOrder.address) orderInfo += '<B>' + cloudOrder.city + cloudOrder.address + "</B><BR>";

orderInfo += '支付方式:' + cloudOrder.payWay + "<BR>";
orderInfo += '下單時間:' + cloudOrder.dateTime + "<BR>";
orderInfo += "訂單編號:" + cloudOrder.orderId + "<BR>";
orderInfo += "下單手機:" + cloudOrder.phoneNumber + "<BR>";
orderInfo += "會員卡號:" + cloudOrder.cardNumber + "<BR>";

//orderInfo += '<QR>http://www.pcloud.ac.cn</QR>'; 
return orderInfo
  }

空格處理:

const hanleSpace = function (item, widht) {
  var len = 0;
  for (var j = 0; j < item.length; j++) {
var c = item.charCodeAt(j);
//單字節加1 
if ((c >= 0x0001 && c <= 0x007e) || (0xff60 <= c && c <= 0xff9f)) {
  len++;
} else {
  len += 2;
}
  }
  let tmp = widht - len % 32
  len = tmp > 0 ? tmp : 32 + tmp;
  var kong = '';
  for (var a = 0; a < len; a++) {
kong += ' ';
  }
  return kong
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM