API_PHP_DEMO.php 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403
  1. <?php
  2. header("Content-type: text/html; charset=utf-8");
  3. include 'HttpClient.class.php';
  4. define('USER', 'xxxxxxxxxxxxxxxxx'); //*必填*:飞鹅云后台注册账号
  5. define('UKEY', 'xxxxxxxxxxxxxxxxx'); //*必填*: 飞鹅云后台注册账号后生成的UKEY 【备注:这不是填打印机的KEY】
  6. define('SN', 'xxxxxxxxxxxxxxxxx'); //*必填*:打印机编号,必须要在管理后台里添加打印机或调用API接口添加之后,才能调用API
  7. //以下参数不需要修改
  8. define('IP','api.feieyun.cn'); //接口IP或域名
  9. define('PORT',80); //接口IP端口
  10. define('PATH','/Api/Open/'); //接口路径
  11. //*************************************方法1 批量添加打印机接口*************************************************
  12. //***接口返回值说明***
  13. //正确例子:{"msg":"ok","ret":0,"data":{"ok":["sn#key#remark#carnum","316500011#abcdefgh#快餐前台"],"no":["316500012#abcdefgh#快餐前台#13688889999 (错误:识别码不正确)"]},"serverExecutedTime":3}
  14. //错误:{"msg":"参数错误 : 该帐号未注册.","ret":-2,"data":null,"serverExecutedTime":37}
  15. //提示:
  16. //$printerConten => 打印机编号sn(必填) # 打印机识别码key(必填) # 备注名称(选填) # 流量卡号码(选填),多台打印机请换行(\n)添加新打印机信息,每次最多100台。
  17. //打开注释可测试
  18. //$printerContent = "sn1#key1#remark1#carnum1\nsn2#key2#remark2#carnum2";
  19. //printerAddlist($printerContent);
  20. //****************************************方法2 小票机打印订单接口****************************************************
  21. //***接口返回值说明***
  22. //正确例子:{"msg":"ok","ret":0,"data":"123456789_20160823165104_1853029628","serverExecutedTime":6}
  23. //错误例子:{"msg":"错误信息.","ret":非零错误码,"data":null,"serverExecutedTime":5}
  24. //标签说明:
  25. //单标签:
  26. //"<BR>"为换行,"<CUT>"为切刀指令(主动切纸,仅限切刀打印机使用才有效果)
  27. //"<LOGO>"为打印LOGO指令(前提是预先在机器内置LOGO图片),"<PLUGIN>"为钱箱或者外置音响指令
  28. //成对标签:
  29. //"<CB></CB>"为居中放大一倍,"<B></B>"为放大一倍,"<C></C>"为居中,<L></L>字体变高一倍
  30. //<W></W>字体变宽一倍,"<QR></QR>"为二维码,"<BOLD></BOLD>"为字体加粗,"<RIGHT></RIGHT>"为右对齐
  31. //拼凑订单内容时可参考如下格式
  32. //根据打印纸张的宽度,自行调整内容的格式,可参考下面的样例格式
  33. $content = '<CB>测试打印</CB><BR>';
  34. $content .= '名称      单价 数量 金额<BR>';
  35. $content .= '--------------------------------<BR>';
  36. $content .= '饭       10.0 10 100.0<BR>';
  37. $content .= '炒饭      10.0 10 100.0<BR>';
  38. $content .= '蛋炒饭     10.0 10 100.0<BR>';
  39. $content .= '鸡蛋炒饭    10.0 10 100.0<BR>';
  40. $content .= '西红柿炒饭   10.0 10 100.0<BR>';
  41. $content .= '西红柿蛋炒饭  10.0 10 100.0<BR>';
  42. $content .= '西红柿鸡蛋炒饭 10.0 10 100.0<BR>';
  43. $content .= '--------------------------------<BR>';
  44. $content .= '备注:加辣<BR>';
  45. $content .= '合计:xx.0元<BR>';
  46. $content .= '送货地点:广州市南沙区xx路xx号<BR>';
  47. $content .= '联系电话:13888888888888<BR>';
  48. $content .= '订餐时间:2014-08-08 08:08:08<BR>';
  49. $content .= '<QR>http://www.feieyun.com</QR>';//把二维码字符串用标签套上即可自动生成二维码
  50. //提示:
  51. //SN => 打印机编号
  52. //$content => 打印内容,不能超过5000字节
  53. //$times => 打印次数,默认为1。
  54. //打开注释可测试
  55. // printMsg(SN,$content,1);//该接口只能是小票机使用,如购买的是标签机请使用下面方法3,调用打印
  56. //****************************************方法3 标签机专用打印订单接口****************************************************
  57. //***接口返回值说明***
  58. //正确例子:{"msg":"ok","ret":0,"data":"123456789_20160823165104_1853029628","serverExecutedTime":6}
  59. //错误例子:{"msg":"错误信息.","ret":非零错误码,"data":null,"serverExecutedTime":5}
  60. //标签说明:
  61. $content = "<DIRECTION>1</DIRECTION>";//设定打印时出纸和打印字体的方向,n 0 或 1,每次设备重启后都会初始化为 0 值设置,1:正向出纸,0:反向出纸,
  62. $content .= "<TEXT x='9' y='10' font='12' w='1' h='2' r='0'>#001 五号桌 1/3</TEXT><TEXT x='80' y='80' font='12' w='2' h='2' r='0'>可乐鸡翅</TEXT><TEXT x='9' y='180' font='12' w='1' h='1' r='0'>张三先生 13800138000</TEXT>";//40mm宽度标签纸打印例子,打开注释调用标签打印接口打印
  63. //提示:
  64. //SN => 打印机编号
  65. //$content => 打印内容,不能超过5000字节
  66. //$times => 打印次数,默认为1。
  67. //打开注释可测试
  68. // printLabelMsg(SN,$content,1);//打开注释调用标签机打印接口进行打印,该接口只能是标签机使用,其它型号打印机请勿使用该接口
  69. //**************************************方法4 批量删除打印机**************************************************
  70. //***接口返回值说明***
  71. //成功:{"msg":"ok","ret":0,"data":{"ok":["123456789成功"],"no":[]},"serverExecutedTime":5}
  72. //错误:{"msg":"ok","ret":0,"data":{"ok":[],"no":["12345678打印机不存在"]},"serverExecutedTime":2}
  73. //错误:{"msg":"ok","ret":0,"data":{"ok":[],"no":["123456789用户UID不匹配"]},"serverExecutedTime":3}
  74. //提示:
  75. //$snlist => 打印机编号,多台打印机请用减号"-"连接起来。
  76. //打开注释可测试
  77. // $snlist = "123456789";
  78. // printerDelList($snlist);
  79. //************************************方法5 修改打印机信息接口************************************************
  80. //***接口返回值说明***
  81. //成功:{"msg":"ok","ret":0,"data":true,"serverExecutedTime":5}
  82. //错误:{"msg":"参数错误 : 参数值不能传空字符,\"\"、\"null\"、\"undefined\".","ret":-2,"data":null,"serverExecutedTime":1}
  83. //提示:
  84. //SN => 打印机编号
  85. //$name => 打印机备注名称
  86. //$phonenum => 打印机流量卡号码
  87. //打开注释可测试
  88. //$name = "飞鹅云打印机";
  89. //$phonenum = "01234567891011121314";
  90. // printerEdit(SN,$name,$phonenum);
  91. //************************************方法6 清空待打印订单接口************************************************
  92. //***接口返回值说明***
  93. //成功:{"msg":"ok","ret":0,"data":true,"serverExecutedTime":4}
  94. //错误:{"msg":"验证失败 : 打印机编号和用户不匹配.","ret":1002,"data":null,"serverExecutedTime":3}
  95. //错误:{"msg":"参数错误 : 参数值不能传空字符,\"\"、\"null\"、\"undefined\".","ret":-2,"data":null,"serverExecutedTime":2}
  96. //提示:
  97. //SN => 打印机编号
  98. //打开注释可测试
  99. // delPrinterSqs(SN);
  100. //*********************************方法7 查询订单是否打印成功接口*********************************************
  101. //***接口返回值说明***
  102. //正确例子:
  103. //已打印:{"msg":"ok","ret":0,"data":true,"serverExecutedTime":6}
  104. //未打印:{"msg":"ok","ret":0,"data":false,"serverExecutedTime":6}
  105. //提示:
  106. //$orderid => 订单ID,由方法1接口Open_printMsg返回。
  107. //打开注释可测试
  108. //$orderid = "123456789_20160823165104_1853029628";//订单ID,从方法1返回值中获取
  109. //queryOrderState($orderid);
  110. //*****************************方法8 查询指定打印机某天的订单统计数接口*****************************************
  111. //***接口返回值说明***
  112. //正确例子:
  113. //{"msg":"ok","ret":0,"data":{"print":6,"waiting":1},"serverExecutedTime":9}
  114. //错误:{"msg":"验证失败 : 打印机编号和用户不匹配.","ret":1002,"data":null,"serverExecutedTime":3}
  115. //提示:
  116. //$date => 查询日期,格式YY-MM-DD,如:2016-09-20
  117. //打开注释可测试
  118. // $date = "2016-09-20";
  119. // queryOrderInfoByDate(SN,$date);
  120. //***********************************方法9 获取某台打印机状态接口***********************************************
  121. //***接口返回值说明***
  122. //正确例子:
  123. //{"msg":"ok","ret":0,"data":"离线","serverExecutedTime":9}
  124. //{"msg":"ok","ret":0,"data":"在线,工作状态正常","serverExecutedTime":9}
  125. //{"msg":"ok","ret":0,"data":"在线,工作状态不正常","serverExecutedTime":9}
  126. //提示:
  127. //SN => 填打印机编号
  128. //打开注释可测试
  129. // queryPrinterStatus(SN);
  130. /**
  131. * [批量添加打印机接口 Open_printerAddlist]
  132. * @param [string] $printerContent [打印机的sn#key]
  133. * @return [string] [接口返回值]
  134. */
  135. function printerAddlist($printerContent){
  136. $time = time(); //请求时间
  137. $msgInfo = array(
  138. 'user'=>USER,
  139. 'stime'=>$time,
  140. 'sig'=>signature($time),
  141. 'apiname'=>'Open_printerAddlist',
  142. 'printerContent'=>$printerContent
  143. );
  144. $client = new HttpClient(IP,PORT);
  145. if(!$client->post(PATH,$msgInfo)){
  146. echo 'error';
  147. }else{
  148. $result = $client->getContent();
  149. echo $result;
  150. }
  151. }
  152. /**
  153. * [打印订单接口 Open_printMsg]
  154. * @param [string] $sn [打印机编号sn]
  155. * @param [string] $content [打印内容]
  156. * @param [string] $times [打印联数]
  157. * @return [string] [接口返回值]
  158. */
  159. function printMsg($sn,$content,$times){
  160. $time = time(); //请求时间
  161. $msgInfo = array(
  162. 'user'=>USER,
  163. 'stime'=>$time,
  164. 'sig'=>signature($time),
  165. 'apiname'=>'Open_printMsg',
  166. 'sn'=>$sn,
  167. 'content'=>$content,
  168. 'times'=>$times//打印次数
  169. );
  170. $client = new HttpClient(IP,PORT);
  171. if(!$client->post(PATH,$msgInfo)){
  172. echo 'error';
  173. }else{
  174. //服务器返回的JSON字符串,建议要当做日志记录起来
  175. $result = $client->getContent();
  176. echo $result;
  177. }
  178. }
  179. /**
  180. * [标签机打印订单接口 Open_printLabelMsg]
  181. * @param [string] $sn [打印机编号sn]
  182. * @param [string] $content [打印内容]
  183. * @param [string] $times [打印联数]
  184. * @return [string] [接口返回值]
  185. */
  186. function printLabelMsg($sn,$content,$times){
  187. $time = time(); //请求时间
  188. $msgInfo = array(
  189. 'user'=>USER,
  190. 'stime'=>$time,
  191. 'sig'=>signature($time),
  192. 'apiname'=>'Open_printLabelMsg',
  193. 'sn'=>$sn,
  194. 'content'=>$content,
  195. 'times'=>$times//打印次数
  196. );
  197. $client = new HttpClient(IP,PORT);
  198. if(!$client->post(PATH,$msgInfo)){
  199. echo 'error';
  200. }else{
  201. //服务器返回的JSON字符串,建议要当做日志记录起来
  202. $result = $client->getContent();
  203. echo $result;
  204. }
  205. }
  206. /**
  207. * [批量删除打印机 Open_printerDelList]
  208. * @param [string] $snlist [打印机编号,多台打印机请用减号“-”连接起来]
  209. * @return [string] [接口返回值]
  210. */
  211. function printerDelList($snlist){
  212. $time = time(); //请求时间
  213. $msgInfo = array(
  214. 'user'=>USER,
  215. 'stime'=>$time,
  216. 'sig'=>signature($time),
  217. 'apiname'=>'Open_printerDelList',
  218. 'snlist'=>$snlist
  219. );
  220. $client = new HttpClient(IP,PORT);
  221. if(!$client->post(PATH,$msgInfo)){
  222. echo 'error';
  223. }else{
  224. $result = $client->getContent();
  225. echo $result;
  226. }
  227. }
  228. /**
  229. * [修改打印机信息接口 Open_printerEdit]
  230. * @param [string] $sn [打印机编号]
  231. * @param [string] $name [打印机备注名称]
  232. * @param [string] $phonenum [打印机流量卡号码,可以不传参,但是不能为空字符串]
  233. * @return [string] [接口返回值]
  234. */
  235. function printerEdit($sn,$name,$phonenum){
  236. $time = time(); //请求时间
  237. $msgInfo = array(
  238. 'user'=>USER,
  239. 'stime'=>$time,
  240. 'sig'=>signature($time),
  241. 'apiname'=>'Open_printerEdit',
  242. 'sn'=>$sn,
  243. 'name'=>$name,
  244. 'phonenum'=>$phonenum
  245. );
  246. $client = new HttpClient(IP,PORT);
  247. if(!$client->post(PATH,$msgInfo)){
  248. echo 'error';
  249. }else{
  250. $result = $client->getContent();
  251. echo $result;
  252. }
  253. }
  254. /**
  255. * [清空待打印订单接口 Open_delPrinterSqs]
  256. * @param [string] $sn [打印机编号]
  257. * @return [string] [接口返回值]
  258. */
  259. function delPrinterSqs($sn){
  260. $time = time(); //请求时间
  261. $msgInfo = array(
  262. 'user'=>USER,
  263. 'stime'=>$time,
  264. 'sig'=>signature($time),
  265. 'apiname'=>'Open_delPrinterSqs',
  266. 'sn'=>$sn
  267. );
  268. $client = new HttpClient(IP,PORT);
  269. if(!$client->post(PATH,$msgInfo)){
  270. echo 'error';
  271. }else{
  272. $result = $client->getContent();
  273. echo $result;
  274. }
  275. }
  276. /**
  277. * [查询订单是否打印成功接口 Open_queryOrderState]
  278. * @param [string] $orderid [调用打印机接口成功后,服务器返回的JSON中的编号 例如:123456789_20190919163739_95385649]
  279. * @return [string] [接口返回值]
  280. */
  281. function queryOrderState($orderid){
  282. $time = time(); //请求时间
  283. $msgInfo = array(
  284. 'user'=>USER,
  285. 'stime'=>$time,
  286. 'sig'=>signature($time),
  287. 'apiname'=>'Open_queryOrderState',
  288. 'orderid'=>$orderid
  289. );
  290. $client = new HttpClient(IP,PORT);
  291. if(!$client->post(PATH,$msgInfo)){
  292. echo 'error';
  293. }else{
  294. $result = $client->getContent();
  295. echo $result;
  296. }
  297. }
  298. /**
  299. * [查询指定打印机某天的订单统计数接口 Open_queryOrderInfoByDate]
  300. * @param [string] $sn [打印机的编号]
  301. * @param [string] $date [查询日期,格式YY-MM-DD,如:2019-09-20]
  302. * @return [string] [接口返回值]
  303. */
  304. function queryOrderInfoByDate($sn,$date){
  305. $time = time(); //请求时间
  306. $msgInfo = array(
  307. 'user'=>USER,
  308. 'stime'=>$time,
  309. 'sig'=>signature($time),
  310. 'apiname'=>'Open_queryOrderInfoByDate',
  311. 'sn'=>$sn,
  312. 'date'=>$date
  313. );
  314. $client = new HttpClient(IP,PORT);
  315. if(!$client->post(PATH,$msgInfo)){
  316. echo 'error';
  317. }else{
  318. $result = $client->getContent();
  319. echo $result;
  320. }
  321. }
  322. /**
  323. * [获取某台打印机状态接口 Open_queryPrinterStatus]
  324. * @param [string] $sn [打印机编号]
  325. * @return [string] [接口返回值]
  326. */
  327. function queryPrinterStatus($sn){
  328. $time = time(); //请求时间
  329. $msgInfo = array(
  330. 'user'=>USER,
  331. 'stime'=>$time,
  332. 'sig'=>signature($time),
  333. 'apiname'=>'Open_queryPrinterStatus',
  334. 'sn'=>$sn
  335. );
  336. $client = new HttpClient(IP,PORT);
  337. if(!$client->post(PATH,$msgInfo)){
  338. echo 'error';
  339. }else{
  340. $result = $client->getContent();
  341. echo $result;
  342. }
  343. }
  344. /**
  345. * [signature 生成签名]
  346. * @param [string] $time [当前UNIX时间戳,10位,精确到秒]
  347. * @return [string] [接口返回值]
  348. */
  349. function signature($time){
  350. return sha1(USER.UKEY.$time);//公共参数,请求公钥
  351. }
  352. ?>