【肥宅捕獲指南】快來給我寫小紙條吧!

  • 2019 年 10 月 3 日
  • 筆記

### 前言

    前段時間把之前買的咕咕機從老姐那裡要了回來(霧),準備對這個單機版印表機做一個擴展,根據官方給出的介面來把它擴展成一個可以讓諸多網友給我發送小紙條的聯機印表機。

 

 

 

    用了一早上把介面實現之後發給了群友,然後今天我收到了這些內容…

 

### 憲法

 

### 發送了三遍的支付寶帳號

 

### 神秘鏈接

 

### 叫我打遊戲(我自己發的)

 

### 敲一天程式碼也很累

 

  這感覺就像是初中偷偷課桌間傳遞紙條一樣溫暖。

 

    但是!

 

    列印憲法真的很浪費紙張,分分鐘一卷熱敏紙就沒了,雖然說熱敏紙很便宜,但長長一條憲法下來還是難定。

    所以,為了防止有人列印憲法、課本、化學元素周期表、弟子規、三字經之類的東西,我…什麼都沒有做,只是把介面的POST請求換成了GET請求。這樣瀏覽器就可以自動幫我把過長的GET請求pass掉了!除非有老六不用瀏覽器,用fidder這種工具來請求。

 

    解決了發文長度,還有一個問題就是關於匿名發送,雖然我提供了一個留下姓名或聯繫方式的框,但這並不是強制性的,所以在沒有接入微博/QQ等第三方登錄之前還暫不能公測。

 

    ​有興趣的可以直接公眾號回復【gugu】來獲得測試地址,但是聲明….不要搞花里胡哨的。

 

    如果你對咕機介面開發感興趣,可以繼續瀏覽下面的​內容了!​

 

### 介面開發文檔

 

    如果要對咕機進行介面開發,需要先在他們官網申請開發者ak。

    http://open.memobird.cn/

    

    申請通過之後就可封裝官方的API來使用了,主要用到的API有兩個。一個是綁定請求,一個是列印請求。

 

1) 綁定請求 /setuserbind

    我們需要發送ak,memobirdID(設備號),useridentifying(用戶Id)。之後會返回與伺服器關聯的userId。我們需要使用這個userId來進行列印。

 

    用fidder請求如下:

   為了用程式碼實現,我們先封裝一個Http請求發起的方法。

 1    private static String sendRequest(String url) {   2         URL u ;   3         HttpURLConnection httpURLConnection ;   4         BufferedReader bf ;   5         String response = "" ;   6         String readLine  ;   7         try{   8             u = new URL(url) ;   9             httpURLConnection = (HttpURLConnection)u.openConnection() ;  10             int responsecode = httpURLConnection.getResponseCode() ;  // 返回碼  11             if(responsecode==200) {  12                 bf = new BufferedReader(new InputStreamReader(httpURLConnection.getInputStream(), "UTF-8"));  13                 while ((readLine = bf.readLine()) != null) {  14                     response += readLine += "rn";  15                 }  16             }else{  17                 System.out.println("NOT  "+responsecode);  18             }  19         }catch(Exception e){  20             System.out.println("Exception->"+e);  21         }  22         return response ;  23     }  24

    這個方法最後返回請求體。

    當我們綁定用戶時,只需要調用這個方法。

1   public static String setUserBind(){  2         String url = BASE_URL + "/setuserbind?ak=" + ak + "&timestamp=2019-08-31%14:22:39&memobirdID=" + memobirdID  + "&useridentifying=" + useridentifying;  3         return sendRequest(url) ;  4     }

2)列印請求 printpaper

    這個請求需要的參數是ak,memobirdID(設備號),需要列印的內容,還有第一步綁定時返回的userId。

1     public static String printPaper(String content,String userId,String time) {  2         String url = BASE_URL + "/printpaper?ak=" + ak + "&timestamp="+time+"&printcontent=T:" + content + "&memobirdID=" + memobirdID + "&userId=" + userId ;  3         return sendRequest(url);  4     }

    fidder請求如下,printcontentid為本次列印的id編號。

    這樣就成功了!

 

    至於是否已經列印的介面,可以去咕機開發者文檔中自行查看學習。

 

### 發送內容編碼

 

    ​有一個問題是,發送列印的數據需要在GBK編碼的基礎上進行base64加密,所以我們自己封裝還要有加密過程。

1    public static String toBase64(String str){  2         try{  3             byte[] encodeBase64 = Base64.encodeBase64(str.getBytes("GBK"));  4             return new String(encodeBase64);  5         } catch(UnsupportedEncodingException e){  6             e.printStackTrace();  7         }  8         return "";  9     }

    完成了這些關鍵的封裝,我們只需要再搭建一個簡單的頁面,就可以了,使用最簡單的servlet+jsp就可以了,用一個表單把內容發送到後台,然後調用後台來調用介面完成列印。

1 <form class="center-block" action="send" method="get">  2     Name:  3     <input type="text" class="form-control" placeholder="您的姓名或聯繫方式" name="name">  4     <br>  5     Content:  6     <textarea class="form-control" rows="6" placeholder="需要發送的內容" name="content"></textarea>  7     <br><br>  8     <input type="submit" style="margin: 0px auto;display: table;" class="btn btn-primary btn-lg btn-block" value="Submit">  9 </form>