我已按照官方链接上的文档进行操作并检索了媒体 URL https://developers.facebook.com/docs/whatsapp/cloud-api/reference/media/#download-media
现在,一旦我有了 URL,我就会使用下面的 PHP 代码来下载保存在 FB 服务器上的文件,该服务器需要发送授权令牌,因此我在 PHP 中使用 CURL。
但是我保存的是空文件。
$ch = curl_init($url);
$file_name = basename($url);
$file_loc = "./download/" . $MediaID . ".jpg" ;
$fp = fopen($file_loc, 'wb');
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_TIMEOUT, 50);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: Bearer ' . $MetaToken) );
$result = curl_exec($ch); curl_close($ch);
$header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
$header = substr($response, 0, $header_size);
$body = substr($response, $header_size);
fwrite($fp, $body);
fclose($fp);
我也试过这样:
$file_loc = "./download/" . $MediaID . ".jpg" ;
$fp = fopen($file_loc, 'wb');
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_USERAGENT => "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)",
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array('Authorization: Bearer ' . $waToken),
));
$response = curl_exec($curl); curl_close($curl);
fwrite($fp, $response); fclose($fp);
唷!通过更改用户代理,它终于起作用了
$file_loc = "./download/" . $MediaID . ".jpg" ;
$fp = fopen($file_loc, 'wb');
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_USERAGENT => "PostmanRuntime/7.34.0",
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array('Authorization: Bearer ' . $waToken),
));
$response = curl_exec($curl); curl_close($curl);
fwrite($fp, $response); fclose($fp);