微信公众号临时文件上传
今天研究了一下微信公众号发送图片消息的方法,发现发送图片并不像腾讯那样可以直接在消息里加入url的而是需要将要发送的文件消息的文件上传到微信的服务器上之后才能发送文件消息。
然后就去看了下开发文档,就用php语言简单实现了一下临时文件的上传。
<?php $appid = '';//第三方用户唯一凭证 $appsecret = ''; //第三方用户唯一凭证密钥 $access_token = getAccessToken($appid,$appsecret); $fileurl ="https://tva2.sinaimg.cn/large/005BYqpgly1frn9a9w33ij31hc0u07wh.jpg";//需要上传文件url /** *类型: *图片=image=image/jpeg(2M,支持PNG\JPEG\JPG\GIF格式) *视频=video=video/mp4(2M,播放长度不超过60s,支持AMR\MP3格式) *语音=voice=audio/mp3(2M,播放长度不超过60s,支持AMR\MP3格式) *缩略图=thumb=image/jpeg(64KB,支持JPG格式) */ $type = array("image","image/jpeg"); echo getMediaId($fileurl,$access_token,$type); /** *上传url文件获取MediaId */ function getMediaId($fileurl,$access_token,$type){ $url = 'https://api.weixin.qq.com/cgi-bin/media/upload?access_token='.$access_token.'&type='.$type[0]; $params = "------WebKitFormBoundaryMVItESFOS8uIYNGL\r\n" . "Content-Disposition: form-data; name=\"media\"; filename=\"test.jpg\"\r\n" . "Content-Type: ".$type[1]."\r\n" . "\r\n" . file_get_contents($fileurl) . "\r\n" . "------WebKitFormBoundaryMVItESFOS8uIYNGL--"; $request_headers = array(); $request_headers[] = 'Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryMVItESFOS8uIYNGL'; $ch = curl_init($url); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $params); curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0); curl_setopt($ch, CURLOPT_HTTPHEADER, $request_headers); $reply = curl_exec($ch); curl_close($ch); $json=json_decode($reply); return $json->media_id; } /** * 获取access_token * access_token的有效期目前为2个小时 * 需要到公众号平台上设置IP白名单才可以正常获取 */ function getAccessToken($appid,$appsecret){ $url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$appid.'&secret='.$appsecret; $ch = curl_init(); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5000); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); $contents = curl_exec($ch); curl_close($ch); $json=json_decode($contents); return $json->access_token; } ?>
发表评论