关于微信上传素材遇到的坑

  1. <?php  
  2.   
  3.   
  4. header('content-type:text/html;charset=utf-8');  
  5. error_reporting( E_ALL ^ E_NOTICE);  
  6. function CurlPost($url$param = [], $is_Post = 1 ,$timeout = 10)  
  7. {  
  8.   
  9.   
  10.     //初始化curl  
  11.     $curl = curl_init();  
  12.   
  13.   
  14.     curl_setopt($curl, CURLOPT_URL, $url); // 设置请求的路径  
  15.   
  16.   
  17.     curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,false);  
  18.   
  19.   
  20.     curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,false);  
  21.     if$is_Post  ){  
  22.   
  23.   
  24.         curl_setopt($curl, CURLOPT_POST, 1); //设置POST提交  
  25.   
  26.   
  27.         curl_setopt($curl,CURLOPT_SAFE_UPLOAD , true );  
  28.   
  29.   
  30.         //提交数据  
  31.         if (is_array($param)) {  
  32. #不能使用http_bulid_query  
  33.             curl_setopt($curl, CURLOPT_POSTFIELDS, ($param));  
  34. //            @curl_setopt($curl, CURLOPT_POSTFIELDS, ($param));  
  35.         } else {  
  36.             curl_setopt($curl, CURLOPT_POSTFIELDS, $param);  
  37.         }  
  38.     }  
  39.   
  40.   
  41.   
  42.   
  43.     curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); //显示输出结果  
  44.   
  45.   
  46.     curl_setopt($curl, CURLOPT_TIMEOUT, $timeout);  
  47.   
  48.   
  49.   
  50.   
  51.     //执行请求  
  52.     $data = $data_str = curl_exec($curl);  
  53.   
  54.   
  55.     //处理错误  
  56.     if ($error = curl_error($curl)) {  
  57.         $logdata = array(  
  58.             'url' => $url,  
  59.             'param' => $param,  
  60.             'error' => '<span style="color:red;font-weight: bold">' . $error . '</span>',  
  61.         );  
  62.   
  63.   
  64.         var_dump($logdata);  
  65.         exit;  
  66.     }  
  67.   
  68.   
  69.   
  70.   
  71.     curl_close($curl);  
  72.   
  73.   
  74.     //json数据转换为数组  
  75.     $data = json_decode($data, true);  
  76.   
  77.   
  78.     if (!is_array($data)) {  
  79.         $data = $data_str;  
  80.     }  
  81.   
  82.   
  83.     return $data;  
  84.   
  85.   
  86. }  
  87.   
  88. $token = 'L3VWbz5oaUc5LS-3pTmso5Sa3GW4BqPZ3bMiz4Zy0poixY4OYrlF-S_V4jmQ5EYNaJzYXTUuc3fS8KLtPIYfAKplq4AtrAwKFCxlGSwlq2gOVZhAAAJQU';  
  89.   
  90.   
  91. # 临时素材的接口  
  92. $upload_url = 'https://api.weixin.qq.com/cgi-bin/media/upload?access_token='.$token.'&type=image';  
  93.   
  94.   
  95. $cfile = curl_file_create('C:\wamp\www\weixin\a.jpg');  
  96.   
  97.   
  98. $data = array(  
  99. //    'media'=>$cfile,  
  100. //    'media'=>'@'.realpath('a.jpg'),  
  101.     'media'=> new CURLFile('C:\wamp\www\weixin\a.jpg'),  
  102.     'form-data' => [  
  103.         'filename' =>'a.jpg',  
  104.         'filelength'=>1839,  
  105.         'content-type'=>'image/jpeg'  
  106.     ]  
  107.   
  108.   
  109. );  
  110.   
  111. $result = CurlPost( $upload_url , $data );  
  112.   
  113.   
  114. var_dump($result);  
  115. exit;  
 
 
  1. <?php header('content-type:text/html;charset=utf-8'); error_reporting( E_ALL ^ E_NOTICE); function CurlPost($url, $param = [], $is_Post = 1 ,$timeout = 10) { //初始化curl $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); // 设置请求的路径 curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,false); curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,false); if( $is_Post ){ curl_setopt($curl, CURLOPT_POST, 1); //设置POST提交 curl_setopt($curl,CURLOPT_SAFE_UPLOAD , true ); //提交数据 if (is_array($param)) { #不能使用http_bulid_query curl_setopt($curl, CURLOPT_POSTFIELDS, ($param)); // @curl_setopt($curl, CURLOPT_POSTFIELDS, ($param)); } else { curl_setopt($curl, CURLOPT_POSTFIELDS, $param); } } curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); //显示输出结果 curl_setopt($curl, CURLOPT_TIMEOUT, $timeout); //执行请求 $data = $data_str = curl_exec($curl); //处理错误 if ($error = curl_error($curl)) { $logdata = array( 'url' => $url, 'param' => $param, 'error' => '<span style="color:red;font-weight: bold">' . $error . '</span>', ); var_dump($logdata); exit; } curl_close($curl); //json数据转换为数组 $data = json_decode($data, true); if (!is_array($data)) { $data = $data_str; } return $data; } $token = 'L3VWbz5oaUc5LS-3pTmso5Sa3GW4BqPZ3bMiz4Zy0poixY4OYrlF-S_V4jmQ5EYNaJzYXTUuc3fS8KLtPIYfAKplq4AtrAwKFCxlGSwlq2gOVZhAAAJQU'; # 临时素材的接口 $upload_url = 'https://api.weixin.qq.com/cgi-bin/media/upload?access_token='.$token.'&type=image'; $cfile = curl_file_create('C:\wamp\www\weixin\a.jpg'); $data = array( // 'media'=>$cfile, // 'media'=>'@'.realpath('a.jpg'), 'media'=> new CURLFile('C:\wamp\www\weixin\a.jpg'), 'form-data' => [ 'filename' =>'a.jpg', 'filelength'=>1839, 'content-type'=>'image/jpeg' ] ); $result = CurlPost( $upload_url , $data ); var_dump($result); exit;

1、微信接口access_token获取失败

    直接在阿里云服务器上curl可以可以获取到token,在命令行直接php ./test.php也可以。

     问题出在php的curl扩展没有安装

2、关于上传永久素材时,提示40015.

    问题在于php 5.6之后CURL不允许使用 @上传问题,可以使用 new CURLFILE('文件代替')或者 curl_create_file代替

猜你喜欢

转载自blog.csdn.net/echo_hello_world/article/details/80341363
今日推荐