Yprint.php 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. <?php
  2. /**
  3. * 重庆赤晓店信息科技有限公司
  4. * https://www.chixiaodian.com
  5. * Copyright (c) 2023 赤店商城 All rights reserved.
  6. */
  7. namespace app\utils;
  8. class Yprint
  9. {
  10. /**
  11. * 生成签名sign
  12. * @param array $params 参数
  13. * @param string $apiKey API密钥
  14. * @param string $msign 打印机密钥
  15. * @return string sign
  16. */
  17. public function generateSign($params, $apiKey, $msign)
  18. {
  19. //所有请求参数按照字母先后顺序排
  20. ksort($params);
  21. //定义字符串开始所包括的字符串
  22. $stringToBeSigned = $apiKey;
  23. //把所有参数名和参数值串在一起
  24. foreach ($params as $k => $v) {
  25. $stringToBeSigned .= urldecode($k.$v);
  26. }
  27. unset($k, $v);
  28. //定义字符串结尾所包括的字符串
  29. $stringToBeSigned .= $msign;
  30. //使用MD5进行加密,再转化成大写
  31. return strtoupper(md5($stringToBeSigned));
  32. }
  33. /**
  34. * 生成字符串参数
  35. * @param array $param 参数
  36. * @return string 参数字符串
  37. */
  38. public function getStr($param)
  39. {
  40. $str = '';
  41. foreach ($param as $key => $value) {
  42. $str=$str.$key.'='.$value.'&';
  43. }
  44. $str = rtrim($str, '&');
  45. return $str;
  46. }
  47. /**
  48. * 打印接口
  49. * @param int $partner 用户ID
  50. * @param string $machine_code 打印机终端号
  51. * @param string $content 打印内容
  52. * @param string $apiKey API密钥
  53. * @param string $msign 打印机密钥
  54. */
  55. public function action_print($partner, $machine_code, $content, $apiKey, $msign)
  56. {
  57. $param = array(
  58. "partner"=>$partner,
  59. 'machine_code'=>$machine_code,
  60. 'time'=>time(),
  61. );
  62. //获取签名
  63. $param['sign'] = $this->generateSign($param, $apiKey, $msign);
  64. $param['content'] = urlencode($content);
  65. $str = $this->getStr($param);
  66. return $this->sendCmd('http://open.10ss.net:8888', $str);
  67. }
  68. /**
  69. * 添加打印机
  70. * @param int $partner 用户ID1
  71. * @param string $machine_code 打印机终端号
  72. * @param string $username 用户名
  73. * @param string $printname 打印机名称
  74. * @param string $mobilephone 打印机卡号
  75. * @param string $apiKey API密钥
  76. * @param string $msign 打印机密钥
  77. */
  78. public function action_addprint($partner, $machine_code, $username, $printname, $mobilephone, $apiKey, $msign)
  79. {
  80. $param = array(
  81. 'partner'=>$partner,
  82. 'machine_code'=>$machine_code,
  83. 'username'=>$username,
  84. 'printname'=>$printname,
  85. 'mobilephone'=>$mobilephone,
  86. );
  87. $param['sign'] = $this->generateSign($param, $apiKey, $msign);
  88. $param['msign'] = $msign;
  89. $str = $this->getStr($param);
  90. return $this->sendCmd('http://open.10ss.net:8888/addprint.php', $str);
  91. }
  92. /**
  93. * 删除打印机
  94. * @param int $partner 用户ID
  95. * @param string $machine_code 打印机终端号
  96. * @param string $apiKey API密钥
  97. * @param string $msign 打印机密钥
  98. */
  99. public function action_removeprinter($partner, $machine_code, $apiKey, $msign)
  100. {
  101. $param = array(
  102. 'partner'=>$partner,
  103. 'machine_code'=>$machine_code,
  104. );
  105. $param['sign'] = $this->generateSign($param, $apiKey, $msign);
  106. $str = $this->getStr($param);
  107. return $this->sendCmd('http://open.10ss.net:8888/removeprint.php', $str);
  108. }
  109. /**
  110. * 发起请求
  111. * @param string $url 请求地址
  112. * @param string $data 请求数据包
  113. * @return string 请求返回数据
  114. */
  115. public function sendCmd($url, $data)
  116. {
  117. $curl = curl_init(); // 启动一个CURL会话
  118. curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址
  119. curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检测
  120. curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2); // 从证书中检查SSL加密算法是否存在
  121. curl_setopt($curl, CURLOPT_HTTPHEADER, array('Expect:')); //解决数据包大不能提交
  122. curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转
  123. curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自动设置Referer
  124. curl_setopt($curl, CURLOPT_POST, 1); // 发送一个常规的Post请求
  125. curl_setopt($curl, CURLOPT_POSTFIELDS, $data); // Post提交的数据包
  126. curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 设置超时限制防止死循
  127. curl_setopt($curl, CURLOPT_HEADER, 0); // 显示返回的Header区域内容
  128. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回
  129. $tmpInfo = curl_exec($curl); // 执行操作
  130. if (curl_errno($curl)) {
  131. \Yii::trace('打印出错:'.curl_error($curl));
  132. // echo 'Errno'.curl_error($curl);
  133. }
  134. curl_close($curl); // 关键CURL会话
  135. return $tmpInfo; // 返回数据
  136. }
  137. }