外卖小程序对接飞鹅小票打印的实现

外卖点餐在流程处理上是争分夺秒的,大多数买家都是临近饭点才点餐,这样下单之后就会盼望着能尽快送到,作为点餐流程环节一部分的小票打印也就要求越便捷越省时间越好。小票云打印因为其小巧便捷、无线联网、自动打印而成为首选的外卖小程序小票打印解决方案。

酷客多外卖小程序的小票打印对接了易联云、飞鹅两家,其中飞鹅小票打印机因为自带接单语音提醒所以更受欢迎。云打印的原理类似,对接方式大同小异。下文以飞鹅云打印为例详细说明。

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>接口返回的业务实体类型</typeparam> 5 /// <typeparam>接口传入的业务实体类型</typeparam> 6 /// <param>接口Url</param> 7 /// <param>商户编号(创建商户账号分配的编号),不需要时传递空字符串</param> 8 /// <param>接口传入的业务实体</param> 9 /// <param>序列化业务实体时是否包含空值属性</param> 10 /// <param>是否需要对参数值进行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 }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpygfs.html