/app/classes/Chat-API/mediauploader.php
https://gitlab.com/jalon/doadoronline · PHP · 88 lines · 67 code · 14 blank · 7 comment · 3 complexity · 36a242eabfaba4e22d326018917f812c MD5 · raw file
- <?php
- /**
- * Media uploader class
- */
- class WhatsMediaUploader
- {
- protected static function sendData($host, $POST, $HEAD, $filepath, $mediafile, $TAIL)
- {
- $sock = fsockopen("ssl://" . $host, 443);
- fwrite($sock, $POST);
- fwrite($sock, $HEAD);
- //write file data
- $buf = 1024;
- $totalread = 0;
- $fp = fopen($filepath, "r");
- while ($totalread < $mediafile['filesize']) {
- $buff = fread($fp, $buf);
- fwrite($sock, $buff, $buf);
- $totalread += $buf;
- }
- //echo $TAIL;
- fwrite($sock, $TAIL);
- sleep(1);
- $data = fgets($sock, 8192);
- $data .= fgets($sock, 8192);
- $data .= fgets($sock, 8192);
- $data .= fgets($sock, 8192);
- $data .= fgets($sock, 8192);
- $data .= fgets($sock, 8192);
- $data .= fgets($sock, 8192);
- fclose($sock);
- list($header, $body) = preg_split("/\R\R/", $data, 2);
- $json = json_decode($body);
- if ( ! is_null($json)) {
- return $json;
- }
- return false;
- }
- public static function pushFile($uploadResponseNode, $messageContainer, $mediafile, $selfJID)
- {
- //get vars
- $url = $uploadResponseNode->getChild("media")->getAttribute("url");
- $filepath = $messageContainer["filePath"];
- $to = $messageContainer["to"];
- return self::getPostString($filepath, $url, $mediafile, $to, $selfJID);
- }
- protected static function getPostString($filepath, $url, $mediafile, $to, $from)
- {
- $host = parse_url($url, PHP_URL_HOST);
- //filename to md5 digest
- $cryptoname = md5($filepath) . "." . $mediafile['fileextension'];
- $boundary = "zzXXzzYYzzXXzzQQ";
- if (is_array($to)) {
- $to = implode(',', $to);
- }
- $hBAOS = "--" . $boundary . "\r\n";
- $hBAOS .= "Content-Disposition: form-data; name=\"to\"\r\n\r\n";
- $hBAOS .= $to . "\r\n";
- $hBAOS .= "--" . $boundary . "\r\n";
- $hBAOS .= "Content-Disposition: form-data; name=\"from\"\r\n\r\n";
- $hBAOS .= $from . "\r\n";
- $hBAOS .= "--" . $boundary . "\r\n";
- $hBAOS .= "Content-Disposition: form-data; name=\"file\"; filename=\"" . $cryptoname . "\"\r\n";
- $hBAOS .= "Content-Type: " . $mediafile['filemimetype'] . "\r\n\r\n";
- $fBAOS = "\r\n--" . $boundary . "--\r\n";
- $contentlength = strlen($hBAOS) + strlen($fBAOS) + $mediafile['filesize'];
- $POST = "POST " . $url . "\r\n";
- $POST .= "Content-Type: multipart/form-data; boundary=" . $boundary . "\r\n";
- $POST .= "Host: " . $host . "\r\n";
- $POST .= "User-Agent: " . Constants::WHATSAPP_USER_AGENT . "\r\n";
- $POST .= "Content-Length: " . $contentlength . "\r\n\r\n";
- return self::sendData($host, $POST, $hBAOS, $filepath, $mediafile, $fBAOS);
- }
- }