-1, "data" => null, "msg" => "请在php.ini开启extension=sockets", )); exit; } $this->socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); $rs = @socket_connect($this->socket, $ipaddr, $port); if (!$rs) { echo json_encode(array( "code" => -1, "data" => null, "msg" => "连接DedeBiz商业组件服务失败\r\n", )); exit; } } function request(&$req){ // 进行签名 $this->MakeSign($req); $str = json_encode($req); $length = strlen($str); $s = socket_write($this->socket, $str, $length); if (!$s) { echo json_encode(array( "code" => -1, "data" => null, "msg" => "连接DedeBiz商业组件服务失败\r\n", )); exit; } $msg = ""; while(($str = socket_read($this->socket, 1024)) !== FALSE){ $msg .= $str; if (strlen($str) < 1024) { break; } } return $this->CheckSign($msg); } // 用户获取当前服务器状态信息 function SystemInfo(){ $req = array( "method" => "system_info", ); return $this->request($req); } // 检测是否连接 function Ping($i) { $req = array( "method" => "ping", "parms" => array( "name" => "www.dedebiz.com", ) ); return $this->request($req); } // 获取一个管理员信息 function AdminGetOne() { $req = array( "method" => "admin_get_one", "parms" => array( "name" => "admin", ) ); return $this->request($req); } // 拼接规则就是method+ function MakeSign(&$req) { if (empty($req['timestamp'])) { $req['timestamp'] = time(); } if (isset($req['parms']) && count($req['parms']) > 0) { ksort($req['parms']); } $pstr = "appid={$this->appid}method={$req['method']}key={$this->key}"; if (isset($req['parms']) && count($req['parms']) > 0) { foreach ($req['parms'] as $key => $value) { $pstr .= "$key=$value"; } } $pstr .= "timestamp={$req['timestamp']}"; $req['sign'] = hash("sha256", $pstr); } // 校验返回数据是否正确 function CheckSign(&$msg) { $rsp = json_decode($msg); if (!is_object($rsp)) { return null; } $str = sprintf("appid=%skey=%scode=%dmsg=%sdata=%stimestamp=%d", $this->appid, $this->key, $rsp->code, $rsp->msg, $rsp->data, $rsp->timestamp); if (hash("sha256", $str) === $rsp->sign) { return $rsp; } else { return null; } } // 关闭通信接口 // !!!一次页面操作后一定记得要关闭连接,否则会占用系统资源 function Close() { socket_close($this->socket); } }