最近在做微信上传素材,使用tp5做框架,遇到了41005的问题,这里是解决的方法
2017-12-08 17:23
591 查看
//curl_post function curl_post($url,$data = ''){ // 模拟提交数据函数 $curl = curl_init(); // 启动一个CURL会话 if (class_exists ( '\CURLFile' )) {//php5.5跟php5.6中的CURLOPT_SAFE_UPLOAD的默认值不同,php版本>=5.6后,这种写法就会导致文件无法进行上传到微信服务器 curl_setopt ( $curl, CURLOPT_SAFE_UPLOAD, true ); } else { if (defined ( 'CURLOPT_SAFE_UPLOAD' )) { curl_setopt ( $curl, CURLOPT_SAFE_UPLOAD, false ); } } curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址 curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查 curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0); // 从证书中检查SSL加密算法是否存在 curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 模拟用户使用的浏览器 // curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转 // curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自动设置Referer curl_setopt($curl, CURLOPT_POST, 1); // 发送一个常规的Post请求 curl_setopt($curl, CURLOPT_POSTFIELDS, $data); // Post提交的数据包 curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 设置超时限制防止死循环 curl_setopt($curl, CURLOPT_HEADER, 0); // 显示返回的Header区域内容 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回 $tmpInfo['data'] = curl_exec($curl); // 执行操作 $tmpInfo['errno'] = curl_errno($curl);//捕抓异常 curl_close($curl); // 关闭CURL会话 return $tmpInfo; // 返回数据 }
//上传素材private function uploadMediaMaterialQifen($aParam){$sAccessToken = $this->readAcessToken();if($aParam['type'] == 2){ //图片$type = "image";}else if($aParam['type'] == 3){ //语音$type = "voice";}else if($aParam['type'] == 4){ //视频$type = "video";}$url = "https://api.weixin.qq.com/cgi-bin/material/add_material?access_token=".$sAccessToken."&type=".$type;$real_path = "{$_SERVER['DOCUMENT_ROOT']}{$aParam['mediaval']}";if (class_exists ( '\CURLFile' )) {//关键是判断curlfile,官网推荐php5.5或更高的版本使用curlfile来实例文件$real_path = new \CURLFile ( $real_path, $aParam['mediamime'] );} else {$real_path = '@' . $real_path;}$file_info = array('media' => $real_path,'type' => $type,'filename' => $aParam['mediaval'],'filelength' => $aParam['mediasize'],'content-type' => $aParam['mediamime']); //素材$result = curl_post($url,$file_info);if(!empty($result)){$userUnionjson = json_decode($result["data"]);if(isset($userUnionjson->{'errcode'})){$sErrCode = $userUnionjson->{'errcode'};if ($sErrCode == "40001" || $sErrCode == "41001"|| $sErrCode == "42001"){$sAccessToken = $this->getAcessToken();$url = "https://api.weixin.qq.com/cgi-bin/material/add_material?access_token=".$sAccessToken."&type=".$type;$result = curl_post($url,$file_info);}}}return json_decode($result["data"],true);}
相关文章推荐
- 表单包含file上传文件提交,使用ajaxSubmint或者ajaxForm 遇到的问题以及解决方法
- FckEditor使用时遇到的两个问题,未能加载xxxx和上传图片无响应的解决方法
- 在tp3.2.3中使用 FormData 对象实现表单的文件上传功能遇到的一个问题及解决方法
- 最近使用iScroll遇到的一些问题及最后的解决方法
- 微信上传素材 {"errcode":41005,"errmsg":"media data missing"} 解决方法和思路
- 使用pbrt 1.03遇到的问题和解决方法
- 使用GridView时遇到的一些小问题及解决方法
- 转:关于我使用spring mvc框架做文件上传时遇到的问题
- LoadRunner在使用时遇到的问题及解决方法
- 最近遇到的问题 及解决方法
- 使用密匙让putty(或ssh)自动登录Linux遇到几个问题的解决方法
- Eclipse使用遇到的问题解决方法收集
- 最近开发中遇到的DLL问题思考及解决方法
- 最近遇到的几个windows小问题及解决方法
- mysql c++ connector 1.0.5 getString方法 使用过程中遇到汉字产生的乱码问题的解决方法
- VC++中使用ADO访问Oracle遇到的问题及解决方法(待续)
- Infragistics的NetAdvantage控件使用中遇到的问题及解决方法
- 虚拟IP实验,遇到场景启用使用虚拟IP就报错,不启用可以正常运行的问题,解决方法
- 使用fckeditor中遇到的几个问题及其相应解决方法
- J2ME使用WTK模拟器开发时候遇到“OK to use Airtime” 问题的解决方法