小巧便捷配置簡單的發票雲列印是外賣微信小程式列印發票的首選方案,飛鵝雲列印是很受歡迎的雲列印服務商,本文詳細介紹了如何通過開放API與飛鵝雲列印對接。
外賣點餐在流程處理上是争分奪秒的,大多數買家都是臨近飯點才點餐,這樣下單之後就會盼望着能盡快送到,作為點餐流程環節一部分的發票列印也就要求越便捷越省時間越好。發票雲列印因為其小巧便捷、無線聯網、自動列印而成為首選的外賣小程式發票列印解決方案。
酷客多外賣小程式的發票列印對接了易聯雲、飛鵝兩家,其中飛鵝發票列印機因為自帶接單語音提醒是以更受歡迎。雲列印的原理類似,對接方式大同小異。下文以飛鵝雲列印為例詳細說明。
1. 發票雲列印的工作原理
雲列印服務商在網際網路上釋出一套開放API作為發票雲服務,商家(從雲列印服務商)購買發票列印機後将列印機通過Wi-Fi連接配接網際網路,外賣小程式與開放API對接,完成發票列印機遠端注冊、推送待列印資料等工作。發票雲服務通過網際網路将待列印資料推送到對應的發票列印機,發票列印機列印出發票。

圖1 雲列印的工作原理
2. 飛鵝雲列印開放API
- 添加列印機到開發者賬戶(可批量)
- 列印訂單
- 删除列印機(可批量)
- 修改列印機資訊
- 清空待列印隊列
- 查詢訂單是否列印成功
- 查詢某台列印機某日訂單統計數
- 查詢某台列印機狀态
3. 對接開放API的準備工作
(1) 在飛鵝雲服務背景注冊開發者賬戶
(2) 發票列印機接通電源,配置Wi-Fi密碼連接配接網際網路
飛鵝發票列印機接通電源後,會在發票上自動列印聯網配置的二維碼。手機改為Wi-Fi上網,用微信掃描二維碼,即出現填寫Wi-Fi密碼界面,填寫密碼後點選“連接配接”按鈕連接配接網絡,成功後列印機會列印一張發票給出提示。
圖2 微信掃碼配置列印機Wi-Fi密碼
4. 開發對接API的架構(列印架構)
(1) 列印架構類圖
架構支援水準擴充,可适配多家雲列印開放API。對應于開放API裡面的各個方法,一對一地編寫列印架構的方法。
架構方法與開放API的互動封裝在一個通用方法裡面,傳入參數、傳回資料都是泛型,在具體的業務方法裡面傳遞相應的資料類型及實參。
圖3 列印架構類圖
圖4 封裝的對接方法
(2) 通用方法
1 /// <summary>
2 /// 調用飛鵝接口通用方法
3 /// </summary>
4 /// <typeparam name="TOutData">接口傳回的業務實體類型</typeparam>
5 /// <typeparam name="TInData">接口傳入的業務實體類型</typeparam>
6 /// <param name="apiUrl">接口Url</param>
7 /// <param name="cityDistributionAccountOuterId">商戶編号(建立商戶賬号配置設定的編号),不需要時傳遞空字元串</param>
8 /// <param name="inData">接口傳入的業務實體</param>
9 /// <param name="isIncludeNullProperty">序列化業務實體時是否包含空值屬性</param>
10 /// <param name="needEscapeParameterValue">是否需要對參數值進行Url轉義,預設不需要</param>
11 /// <returns></returns>
12 public IApiResult<TOutData> CallFeiEApi<TOutData>(string apiUrl, string method, Dictionary<string, string> methodParameters, bool isIncludeNullProperty = true, bool needEscapeParameterValue = false)
13 {
14 ApiResult<TOutData> apiResult = new ApiResult<TOutData>();
15 ApiParameterContainer apiParameterContainer = null;
16
17 try
18 {
19 string unixTimestamp = HttpAgent.GetUnixTimestamp(DateTime.Now);
20 apiParameterContainer = new ApiParameterContainer(unixTimestamp)
21 {
22 AppId = appId,
23 AppKey = appKey,
24 Signature = ComputeSign(appId, appKey, unixTimestamp),
25 ApiMethod = method
26 };
27
28 if (methodParameters != null && methodParameters.Count > 0)
29 {
30 foreach (var methodParameter in methodParameters)
31 {
32 if (!apiParameterContainer.Parameters.ContainsKey(methodParameter.Key))
33 {
34 apiParameterContainer.Parameters.Add(methodParameter.Key, methodParameter.Value);
35 }
36 }
37 }
38
39 //
40 // 調用接口,擷取傳回值
41 //
42 string responseText = HttpAgent.DoPost(apiUrl, apiParameterContainer.Parameters, needEscapeParameterValue, "application/x-www-form-urlencoded");
43
44 //
45 // 提取傳回資料
46 //
47 apiResult = JsonConvert.DeserializeObject<ApiResult<TOutData>>(responseText);
48 }
49 catch (Exception ex)
50 {
51 Log(string.Format("調用飛鵝接口出錯,Url:{0},傳入資料:{1},錯誤:{2}", apiUrl, JsonConvert.SerializeObject(apiParameterContainer, Formatting.None), ex.ToString()));
52 }
53
54 return apiResult;
55 }
其中,ComputeSign()方法使用開發者Key計算出接口請求的哈希值,具體雜湊演算法由每個雲列印服務商指定。HttpAgent.DoPost()方法将資料轉換為表單鍵值對序列形式發起POST請求,注意必須指定Web請求的ContentType标頭為“application/x-www-form-urlencoded”,否則無法正常使用開放API。
5. 在業務系統裡使用列印架構
(1) 商家填寫并注冊列印機
商家從列印機的機身标簽查找編号、識别碼,填入表單,自定義一個列印機名稱以便于區分多台列印機,如果需要使用GPRS聯網則填入放置在列印機裡面的手機卡号。若要該列印機在接單時自動列印發票則勾選“接單自動發票列印”複選框。
在儲存時,商家背景系統在本地儲存列印機資訊,并調用列印架構在雲端注冊列印機。注冊成功後則會顯示雲端注冊狀态為“已注冊”。
圖5 商家填寫并注冊列印機
(2) 商家手動列印發票
商家在商家背景系統查詢、浏覽所接的訂單,可以根據需要手動列印某個訂單的發票。列印時先選擇需要列印發票的一到多台列印機,點選“列印”按鈕調用列印架構完成列印。
圖6 商家浏覽訂單
圖7 商家選擇列印機
6. 附錄
飛鵝雲列印開發文檔:http://www.feieyun.com/open/index.html
飛鵝雲背景(注冊開發者):http://admin.feieyun.com/
酷客多商家背景:http://kukeduo.cn
酷客多小程式 陳蘇洲
作者:酷客多小程式
出處:
http://www.cnblogs.com/ywqu
如果你認為此文章有用,請點選底端的【推薦】讓其他人也了解此文章,
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。