Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
branch: master
executable file 89 lines (74 sloc) 2.951 kb
<?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);
}
}
Jump to Line
Something went wrong with that request. Please try again.