国内流行的内容管理系统(CMS)多端全媒体解决方案 https://www.dedebiz.com
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

251 lines
6.7KB

  1. <?php
  2. if (!defined('DEDEINC')) exit('dedebiz');
  3. //用于DedeBIZ商业组件通信
  4. define("DEDEBIZ", true);
  5. class DedeBizClient
  6. {
  7. var $socket;
  8. var $appid;
  9. var $key;
  10. var $err;
  11. function __construct($ipaddr, $port)
  12. {
  13. $this->err = "";
  14. if (!function_exists("socket_create")) {
  15. $this->err = (object)array(
  16. "code" => -1,
  17. "data" => null,
  18. "msg" => "请在php.ini开启extension=sockets",
  19. );
  20. return;
  21. }
  22. $this->socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
  23. $rs = @socket_connect($this->socket, $ipaddr, $port);
  24. if (!$rs) {
  25. $this->err = (object)array(
  26. "code" => -1,
  27. "data" => null,
  28. "msg" => "连接DedeBiz商业组件服务失败\r\n",
  29. );
  30. return;
  31. }
  32. }
  33. function request(&$req)
  34. {
  35. //进行签名
  36. $this->MakeSign($req);
  37. $str = json_encode($req);
  38. $length = strlen($str);
  39. $s = @socket_write($this->socket, $str, $length);
  40. if (!$s) {
  41. return (object)array(
  42. "code" => -1,
  43. "data" => null,
  44. "msg" => "请求DedeBiz商业组件服务失败\r\n",
  45. );
  46. }
  47. if (!empty($this->err)) {
  48. return $this->err;
  49. }
  50. $msg = "";
  51. while (($str = socket_read($this->socket, 1024)) !== FALSE) {
  52. $msg .= $str;
  53. if (strlen($str) < 1024) {
  54. break;
  55. }
  56. }
  57. return $this->CheckSign($msg);
  58. }
  59. //用户获取当前服务器状态信息
  60. function SystemInfo()
  61. {
  62. $req = array(
  63. "method" => "system_info",
  64. );
  65. return $this->request($req);
  66. }
  67. //检测是否连接
  68. function Ping($i)
  69. {
  70. $req = array(
  71. "method" => "ping",
  72. "parms" => array(
  73. "name" => "www.dedebiz.com",
  74. )
  75. );
  76. return $this->request($req);
  77. }
  78. //发送邮件
  79. function MailSend($to, $subject, $title, $content="", $quote="", $link_url="", $link_title="")
  80. {
  81. $req = array(
  82. "method" => "main_send",
  83. "parms" => array(
  84. "to" => $to,
  85. "subject" => $subject,
  86. "title" => $title,
  87. "content" => $content,
  88. "quote" => $quote,
  89. "link_url" => $link_url,
  90. "link_title" => $link_title,
  91. )
  92. );
  93. return $this->request($req);
  94. }
  95. //获取一个管理员信息
  96. function AdminGetOne()
  97. {
  98. $req = array(
  99. "method" => "admin_get_one",
  100. "parms" => array(
  101. "name" => "admin",
  102. )
  103. );
  104. return $this->request($req);
  105. }
  106. //检查管理员密码是否存在
  107. function AdminPWDExists()
  108. {
  109. $req = array(
  110. "method" => "admin_pwd_exists",
  111. "parms" => array(
  112. "name" => "admin",
  113. )
  114. );
  115. return $this->request($req);
  116. }
  117. //创建DedeBIZ授权密码
  118. function AdminPWDCreate($pwd)
  119. {
  120. $req = array(
  121. "method" => "admin_pwd_create",
  122. "parms" => array(
  123. "pwd" => $pwd,
  124. )
  125. );
  126. return $this->request($req);
  127. }
  128. //设置首页锁定状态
  129. function AdminSetIndexLockState($pwd, $state)
  130. {
  131. $req = array(
  132. "method" => "admin_set_index_lock_state",
  133. "parms" => array(
  134. "pwd" => $pwd,
  135. "lock_state" => $state,
  136. )
  137. );
  138. return $this->request($req);
  139. }
  140. //缓存:$key键 $val值 $d缓存时间
  141. function CacheSet($key, $val, $duration)
  142. {
  143. $req = array(
  144. "method" => "cache_set",
  145. "parms" => array(
  146. "k" => $key,
  147. "v" => $val,
  148. "d" => (string)$duration,
  149. )
  150. );
  151. return $this->request($req);
  152. }
  153. //获取缓存文档:$key键
  154. function CacheGet($key)
  155. {
  156. $req = array(
  157. "method" => "cache_get",
  158. "parms" => array(
  159. "k" => $key,
  160. )
  161. );
  162. return $this->request($req);
  163. }
  164. //删除缓存文档:$key键
  165. function CacheDel($key)
  166. {
  167. $req = array(
  168. "method" => "cache_del",
  169. "parms" => array(
  170. "k" => $key,
  171. )
  172. );
  173. return $this->request($req);
  174. }
  175. //获取分词结果:$key键
  176. function Spliteword($body)
  177. {
  178. $req = array(
  179. "method" => "spliteword",
  180. "parms" => array(
  181. "body" => $body,
  182. )
  183. );
  184. return $this->request($req);
  185. }
  186. //获取分词结果:$body文档 $sep分隔符
  187. function Pinyin($body, $sep)
  188. {
  189. $req = array(
  190. "method" => "pinyin",
  191. "parms" => array(
  192. "body" => $body,
  193. "sep" => $sep,
  194. )
  195. );
  196. return $this->request($req);
  197. }
  198. //拼接规则就是method+
  199. function MakeSign(&$req)
  200. {
  201. if (empty($req['timestamp'])) {
  202. $req['timestamp'] = time();
  203. }
  204. if (isset($req['parms']) && count($req['parms']) > 0) {
  205. ksort($req['parms']);
  206. }
  207. $pstr = "appid={$this->appid}method={$req['method']}key={$this->key}";
  208. if (isset($req['parms']) && count($req['parms']) > 0) {
  209. foreach ($req['parms'] as $key => $value) {
  210. $pstr .= "$key=$value";
  211. }
  212. }
  213. $pstr .= "timestamp={$req['timestamp']}";
  214. $req['sign'] = hash("sha256", $pstr);
  215. }
  216. //校验返回数据是否正确
  217. function CheckSign(&$msg)
  218. {
  219. $rsp = json_decode($msg);
  220. if (!is_object($rsp)) {
  221. return null;
  222. }
  223. $str = sprintf("appid=%skey=%scode=%dmsg=%sdata=%stimestamp=%d", $this->appid, $this->key, $rsp->code, $rsp->msg, $rsp->data, $rsp->timestamp);
  224. if (hash("sha256", $str) === $rsp->sign) {
  225. return $rsp;
  226. } else {
  227. return null;
  228. }
  229. }
  230. //关闭通信接口,一次页面操作后一定记得要关闭连接,否则会占用系统资源
  231. function Close()
  232. {
  233. //这里避免重复释放
  234. try {
  235. if (strtolower(get_resource_type($this->socket)) === "socket") {
  236. socket_close($this->socket);
  237. }
  238. return true;
  239. } catch (TypeError $e) {
  240. return false;
  241. } catch (Exception $e) {
  242. return false;
  243. }
  244. }
  245. function __destruct()
  246. {
  247. $this->Close();
  248. }
  249. }
  250. ?>