国内流行的内容管理系统(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.

139 lines
3.8KB

  1. <?php if(!defined('DEDEINC')) exit('Request Error!');
  2. // Copyright 2020 The DedeBiz Authors. All rights reserved.
  3. // license that can be found in the LICENSE file.
  4. // 本文件为DedeCMS商业组件(www.dedebiz.com)PHP SDK
  5. // 目的是弥补织梦内容管理系统(DedeCMS)性能和安全方面的不足,提供更多功能
  6. define("DEDEBIZ", true);
  7. // 本文件用于和DedeBiz商业组件进行通信,以获取更多额外的扩展功能
  8. class DedeBizClient
  9. {
  10. var $socket;
  11. var $appid;
  12. var $key;
  13. function __construct($ipaddr, $port)
  14. {
  15. if (!function_exists("socket_create")) {
  16. echo json_encode(array(
  17. "code" => -1,
  18. "data" => null,
  19. "msg" => "请在php.ini开启extension=sockets",
  20. ));
  21. exit;
  22. }
  23. $this->socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
  24. $rs = @socket_connect($this->socket, $ipaddr, $port);
  25. if (!$rs) {
  26. echo json_encode(array(
  27. "code" => -1,
  28. "data" => null,
  29. "msg" => "连接DedeBiz商业组件服务失败\r\n",
  30. ));
  31. exit;
  32. }
  33. }
  34. function request(&$req){
  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. echo json_encode(array(
  42. "code" => -1,
  43. "data" => null,
  44. "msg" => "连接DedeBiz商业组件服务失败\r\n",
  45. ));
  46. exit;
  47. }
  48. $msg = "";
  49. while(($str = socket_read($this->socket, 1024)) !== FALSE){
  50. $msg .= $str;
  51. if (strlen($str) < 1024) {
  52. break;
  53. }
  54. }
  55. return $this->CheckSign($msg);
  56. }
  57. // 用户获取当前服务器状态信息
  58. function SystemInfo(){
  59. $req = array(
  60. "method" => "system_info",
  61. );
  62. return $this->request($req);
  63. }
  64. // 检测是否连接
  65. function Ping($i)
  66. {
  67. $req = array(
  68. "method" => "ping",
  69. "parms" => array(
  70. "name" => "www.dedebiz.com",
  71. )
  72. );
  73. return $this->request($req);
  74. }
  75. // 获取一个管理员信息
  76. function AdminGetOne()
  77. {
  78. $req = array(
  79. "method" => "admin_get_one",
  80. "parms" => array(
  81. "name" => "admin",
  82. )
  83. );
  84. return $this->request($req);
  85. }
  86. // 拼接规则就是method+
  87. function MakeSign(&$req)
  88. {
  89. if (empty($req['timestamp'])) {
  90. $req['timestamp'] = time();
  91. }
  92. if (isset($req['parms']) && count($req['parms']) > 0) {
  93. ksort($req['parms']);
  94. }
  95. $pstr = "appid={$this->appid}method={$req['method']}key={$this->key}";
  96. if (isset($req['parms']) && count($req['parms']) > 0) {
  97. foreach ($req['parms'] as $key => $value) {
  98. $pstr .= "$key=$value";
  99. }
  100. }
  101. $pstr .= "timestamp={$req['timestamp']}";
  102. $req['sign'] = hash("sha256", $pstr);
  103. }
  104. // 校验返回数据是否正确
  105. function CheckSign(&$msg)
  106. {
  107. $rsp = json_decode($msg);
  108. if (!is_object($rsp)) {
  109. return null;
  110. }
  111. $str = sprintf("appid=%skey=%scode=%dmsg=%sdata=%stimestamp=%d", $this->appid, $this->key, $rsp->code, $rsp->msg, $rsp->data, $rsp->timestamp);
  112. if (hash("sha256", $str) === $rsp->sign) {
  113. return $rsp;
  114. } else {
  115. return null;
  116. }
  117. }
  118. // 关闭通信接口
  119. // !!!一次页面操作后一定记得要关闭连接,否则会占用系统资源
  120. function Close()
  121. {
  122. socket_close($this->socket);
  123. }
  124. }