1. 程式人生 > >【肥宅捕獲指南】快來給我寫小紙條吧!

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

### 前言

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

 

 

 

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

 

### 憲法

 

### 傳送了三遍的支付寶賬號

 

### 神祕連結

 

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

 

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

 

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

 

    但是!

 

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

    所以,為了防止有人列印憲法、課本、化學元素週期表、弟子規、三字經之類的東西,我...什麼都沒有做,只是把介面的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 += "\r\n";
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>

&n