cxhxy/extend/hema/device/engine/Yilianyun.php
2023-11-21 15:14:59 +08:00

202 lines
6.0 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace hema\device\engine;
/**
* 易联云打印机驱动模块
* 测试机型号K4 - K7
*/
class Yilianyun extends Basics
{
/**
* 打印订单接口
* $dev = 设备参数,$content=打印模板
*/
public function print($dev,$content)
{
$content = $this->make_templet($content,$dev['prt_num']);//转换打印模板
$params = $this->params();
$params['machine_code'] = $dev['dev_id'];//打印机终端号
$params['origin_id'] = (string)time();//订单编号
$params['content'] = $content;//打印内容
$result = json_decode($this->http_post_json($params,'/print/index'),true);
sleep(1);//延时1秒
if($result['error']!=0){
$this->error = $result['error_description'];
return false;
}
return $result;
}
/**
* 授权绑定打印机
*/
public function add($data)
{
$params = $this->params();
$params['print_name'] = $data['dev_name'];//自定义打印机名称(可填)
$params['machine_code'] = $data['dev_id'];//打印机终端号
$params['msign'] = $data['dev_key'];//打印机终端密钥
$result = json_decode($this->http_post_json($params,'/printer/addprinter'),true);
if($result['error']!=0){
$this->error = $result['error_description'];
return false;
}
return $result;
}
/**
* 删除授权绑定的打印机
*/
public function delete($dev_id)
{
$params = $this->params();
$params['machine_code'] = $dev_id;//打印机编号
$result = json_decode($this->http_post_json($params,'/printer/deleteprinter'),true);
if($result['error']!=0){
$this->error = $result['error_description'];
return false;
}
return $result;
}
/**
* 获取打印机状态接口
*/
public function status($dev_id)
{
$params = $this->params();
$params['machine_code'] = $dev_id;//打印机编号
$res = json_decode($this->http_post_json($params,'/printer/getprintstatus'),true);
sleep(1);//延时1秒
if($res['error']==0){
$msg = '离线';
if($res['body']['state']==1){
$msg = '正常';
}
if($res['body']['state']==2){
$msg = '缺纸';
}
return $msg;
}
return '未知';
}
/**
* 获取Token
*/
public function getToken($config)
{
$this->config = $config;
$time = time();
$params = [
'client_id' => $this->config['app_key'],
'timestamp' => $time,
'sign' => $this->getSign($time),
'id' => $this->uuid4(),
'scope' => 'all'
];
$params['grant_type'] = 'client_credentials';
$result = json_decode($this->http_post_json($params,'/oauth/oauth'),true);
if($result['error']==0){
return $result['body']['access_token'];
}
return ''; //返回空值
}
/**
* 公共参数
*/
private function params(){
$time = time(); //请求时间
return $params = [
'client_id' => $this->config['app_key'],
'access_token' => $this->config['access_token'],
'timestamp' => $time,
'sign' => $this->getSign($time),
'id' => $this->uuid4(),
];
}
/**
* 生成签名
*/
private function getSign($timestamp)
{
return md5($this->config['app_key'] . $timestamp . $this->config['app_secret']);
}
/**
* 生成uuid4
*/
private function uuid4(){
mt_srand((double)microtime() * 10000);
$charid = strtolower(md5(uniqid(rand(), true)));
$hyphen = '-';
$uuidV4 =
substr($charid, 0, 8) . $hyphen .
substr($charid, 8, 4) . $hyphen .
substr($charid, 12, 4) . $hyphen .
substr($charid, 16, 4) . $hyphen .
substr($charid, 20, 12);
return $uuidV4;
}
//发送post请求
/**
* PHP发送Json对象数据
* @return string
*/
private function http_post_json($data,$url)
{
$url = $this->config['api_url'] . $url;
$data = http_build_query($data);
$ch = curl_init();
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检测
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Expect:'
)); // 解决数据包大不能提交
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转
curl_setopt($ch, CURLOPT_AUTOREFERER, 1); // 自动设置Referer
curl_setopt($ch, CURLOPT_TIMEOUT, 30); // 设置超时限制防止死循
curl_setopt($ch, CURLOPT_HEADER, 0); // 显示返回的Header区域内容
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
return $response;
}
/**
* 制作订单模板
* $data 订单数据
* $n 打印份数
* 58mm的机器,一行打印16个汉字,32个字母;
*/
private function make_templet($data,$n)
{
$content = '<MN>'.$n.'</MN>';
foreach ($data as $item){
$row_arr = explode(',',$item);
$row = $row_arr[0];
for($m=1;$m<sizeof($row_arr);$m++){
//放大
if($row_arr[$m] == '<B>'){
$row = "<FS>" . $row . "</FS>";
}
//居中
if($row_arr[$m] == '<C>'){
$row = "<center>" . $row . "</center>";
}
}
$content .= $row . "\n";
}
$content .= "\n\n";
return $content;
}
}