-
Notifications
You must be signed in to change notification settings - Fork 1.6k
小票打印
系统当前的打印服务是集成的易联云打印服务接口,下面我们就以易联云打印为例讲解,如何添加一个打印机服务。
首先我们讲解一下打印服务的相关逻辑。
一,服务所在目录:crmeb/services/printer
1,printer.php : 打印驱动类
2,AccessToken.php : 获取易联云授权信息类
3,YiLianYun.php : 易联云具体接口业务类
二,驱动配置
驱动配置文件目录:config/printer.php
此处说明一点,系统默认也只集成了易联云,调取易联云授权接口的相关配置都是做成功能配置到数据库中,并不在config/printer.php文件中配置,开发者可以自行选择,可以和系统一样做成功能,将配置从数据库调用,也可以,配置到配置文件中,从配置文件获取。
系统数据表调用方法:sys_config('printing_client_id', '')
配置文件调用方法:config('printing_client_id')
三,下面就从这三个文件介绍
第一,printer.php : 打印驱动类
printer::class继承BaseManager::class抽象类,实现BaseManager类中getDefaultDriver获取驱动的抽象方法,重写invokeClass反射方法,在此方法中会调用接下要讲解的AccessToken::class,并将配置信息注入其中,将具体的打印服务和配置信息注入。BaseManager中通过————call实现动态调用具体的打印服务。 在需要打印业务的地方调用驱动,并注入驱动名称和配置信息。例如: 调用服务业务:app/services/order/StoreOrderServices.php
第二,AccessToken.php : 获取易联云授权信息类
此类中主要是拿驱动注入进来的驱动类型和配置信息,请求易联云接口,获得token,供YiLianYun::class去调用具体的打印服务接口。此类中 共有两个方法:
/**
* 获取token
* @return mixed|null|string
* @throws \Exception
*/
public function getAccessToken()
getAccessToken根据驱动名称调用具体驱动获取token的方法,比如我们传入了的驱动名称是“yi_lian_yun”,就会根据驱动名+固定格式获取到易联云的获取token的方法,规则: $action = 'get' . Str::studly($this->name) . 'AccessToken';
/**
* 获取易联云token
* @return mixed|null|string
* @throws \Exception
*/
protected function getYiLianYunAccessToken()
如果想要用其他家的打印服务,那就自己在此类中开发其他家获取token的接口,根据驱动类传入的驱动名称调取就行。
第三,YiLianYun.php : 易联云具体接口业务类
这个类中继承了一个抽象的打印基类crmeb/basic/BasePrinter::class,这个基类有两个抽象方法:
/**
* 开始打印
* @param array|null $systemConfig
* @return mixed
*/
abstract public function startPrinter();
/**
* 设置打印内容
* @param array $config
* @return mixed
*/
abstract public function setPrinterContent(array $config);
具体的打印业务类YiLianYun::class要去继承这个基类,并且实现这两个抽象方法。如果接入其他打印服务也就需要创建具体服务的业务接口类和对应的基类去实现它。