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

摘要:
小票云打印因为其小巧便捷、无线联网、自动打印而成为首选的外卖小程序小票打印解决方案。酷客多外卖小程序的小票打印对接了易联云、飞鹅两家,其中飞鹅小票打印机因为自带接单语音提醒所以更受欢迎。

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

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

1. 小票云打印的工作原理

云打印服务商在互联网上发布一套开放API作为小票云服务,商家(从云打印服务商)购买小票打印机后将打印机通过Wi-Fi连接互联网,外卖小程序与开放API对接,完成小票打印机远程注册、推送待打印数据等工作。小票云服务通过互联网将待打印数据推送到对应的小票打印机,小票打印机打印出小票。

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

图1 云打印的工作原理

2. 飞鹅云打印开放API

  • 添加打印机到开发者账户(可批量)
  • 打印订单
  • 删除打印机(可批量)
  • 修改打印机信息
  • 清空待打印队列
  • 查询订单是否打印成功
  • 查询某台打印机某日订单统计数
  • 查询某台打印机状态

3. 对接开放API的准备工作

(1) 在飞鹅云服务后台注册开发者账户

(2) 小票打印机接通电源,配置Wi-Fi密码连接互联网

飞鹅小票打印机接通电源后,会在小票上自动打印联网配置的二维码。手机改为Wi-Fi上网,用微信扫描二维码,即出现填写Wi-Fi密码界面,填写密码后点击“连接”按钮连接网络,成功后打印机会打印一张小票给出提示。

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

图2 微信扫码配置打印机Wi-Fi密码

4. 开发对接API的框架(打印框架)

(1) 打印框架类图

框架支持水平扩展,可适配多家云打印开放API。对应于开放API里面的各个方法,一对一地编写打印框架的方法。

框架方法与开放API的交互封装在一个通用方法里面,传入参数、返回数据都是泛型,在具体的业务方法里面传递相应的数据类型及实参。

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

图3 打印框架类图

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

图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 = newApiParameterContainer(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 inmethodParameters)
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     returnapiResult;
55 }

其中,ComputeSign()方法使用开发者Key计算出接口请求的哈希值,具体哈希算法由每个云打印服务商指定。HttpAgent.DoPost()方法将数据转换为表单键值对序列形式发起POST请求,注意必须指定Web请求的ContentType标头为“application/x-www-form-urlencoded”,否则无法正常使用开放API。

5. 在业务系统里使用打印框架

(1) 商家填写并注册打印机

商家从打印机的机身标签查找编号、识别码,填入表单,自定义一个打印机名称以便于区分多台打印机,如果需要使用GPRS联网则填入放置在打印机里面的手机卡号。若要该打印机在接单时自动打印小票则勾选“接单自动小票打印”复选框。

在保存时,商家后台系统在本地保存打印机信息,并调用打印框架在云端注册打印机。注册成功后则会显示云端注册状态为“已注册”。

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

图5 商家填写并注册打印机

(2) 商家手动打印小票

商家在商家后台系统查询、浏览所接的订单,可以根据需要手动打印某个订单的小票。打印时先选择需要打印小票的一到多台打印机,点击“打印”按钮调用打印框架完成打印。

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

图6 商家浏览订单

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

图7 商家选择打印机

6. 附录

飞鹅云打印开发文档:http://www.feieyun.com/open/index.html

飞鹅云后台(注册开发者):http://admin.feieyun.com/

酷客多商家后台:http://kukeduo.cn

酷客多小程序 陈苏洲

免责声明:文章转载自《外卖小程序对接飞鹅小票打印的实现》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇AD账号创建日期、最近一次登录时间、最近一次重置密码时间查询C# 正则表达式下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

微服务概述

微服务架构4个核心问题: 服务很多,客户端怎么访问? 这么多服务,服务之间如何通信? (一般使用RPC或Http) 这么多服务,如何治理? 服务挂了怎么办? 问题原因:网络不可靠!! 解决方案: 1)spring cloud 生态! Spring Cloud NetFlix 一站式解决方案 解决访问:api网关,zuul组件 解决通信:Feign —...

移动端可视化框架antv f2出现两个legend选项

前天遇到个坑,把我给坑死了 ,在帮朋友做一个微信公众号的项目,使用的vue全家桶,有个模块需要用到数据可视化展现,之前做项目的时候用过antv,比较熟悉,因为是移动端的项目,所以用的是antv f2这个可视化框架,按照之前写的方式都做完之后,最后发现下面出现了两个相同的legend,找了半天也没发现问题出在哪,百思不得其解 watch:{ sta...

使用composer搭建自己的框架 noahbuscher/macaw Twig/Twig catfan/Medoo slince/upload

代码地址  https://github.com/guainttt/ttttest 1 使用noahbuscher/macaw 构建路由 1.1 创建网站目录 mkdir ttttest 在根目录下新建一个文件composer.json { "require":{ "noahbuscher/macaw":"dev-master" } }  执行命...

Django REST framework 中文文档

Django REST framework介绍 现在前后端分离的架构设计越来越流行,业界甚至出现了API优先的趋势。 显然API开发已经成为后端程序员的必备技能了,那作为Python程序员特别是把Django作为自己主要的开发框架的程序员,我十分推荐Django REST framework(DRF)这个API框架。   Django REST frame...

WordPress版微信小程序开发系列(一):WordPress REST API

自动我发布开源程序WordPress版微信小程序以来,很多WordPress站长在搭建微信小程序的过程中会碰到各种问题来咨询我,有些问题其实很简单,只要仔细看看我写的文章,就可以自己解决。不过这些文章里无法涵盖所有的技术点,因为涉及Wordpress和微信小程序两套程序系统,有些技术点对于小白用户来说确实有些难度,因此我考虑写一个系列文章介绍WordPre...

PowerShell调用jira rest api实现对个人提交bug数的统计

通过PowerShell的invoke-webrequest和net.client联合实现个人指定项目jira提交数的统计,其中涉及到了JSON对象的提交,代码如下: $content = @{username='用户名';password='密码'} $JSON = $content|convertto-JSON -Compress $jiraUri...