开头好像也没有什么废话的,直接上5.6版本的上传代码:
/**
主要部分
*/
$url = "https://api.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN" ;
$data [ 'media' ] = "@test.jpg" ;
$data [ 'type' ] = "image" ;
$res = httpPost ( $url , $data );
附上httpPost方法代码,获取access_token的方法就不在此说明了,毕竟没有什么难度(:
/**
* 通过curl post来获取信息
* @param string $url 请求信息地址
* @param arr $data 请求携带信息
* return json
*/
function httpPost ( $url , $data ){
$ch = curl_init ();
curl_setopt ( $ch , CURLOPT_URL , $url );
curl_setopt ( $ch , CURLOPT_CUSTOMREQUEST , "POST" );
curl_setopt ( $ch , CURLOPT_SSL_VERIFYPEER , FALSE );
curl_setopt ( $ch , CURLOPT_SSL_VERIFYHOST , FALSE );
curl_setopt ( $ch , CURLOPT_USERAGENT , 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)' );
curl_setopt ( $ch , CURLOPT_FOLLOWLOCATION , 1 );
curl_setopt ( $ch , CURLOPT_AUTOREFERER , 1 );
curl_setopt ( $ch , CURLOPT_POSTFIELDS , $data );
curl_setopt ( $ch , CURLOPT_RETURNTRANSFER , true );
$tmpInfo = curl_exec ( $ch );
if ( curl_errno ( $ch )) {
return ( "curl_error: " . curl_error ( $ch ));
}
curl_close ( $ch );
return $tmpInfo ;
}
之后换用了php7版本的开发环境,还是以上代码,但是发现出现media data missing hint的错误,找不到多媒体文件,文件也确实存在,于是想到可是php版本的问题,去查了一些资料,发现问题果然在这里,在5.6版本之后”@test.jpg”这种方法已经取消,变成了new \CURLFile($path),所以在5.6之后版本的上传文件代码修改为如下:
$url = "https://api.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN" ;
$data [ 'media' ] = new \ CURLFile ( "test.jpg" );
$data [ 'type' ] = "image" ;
$res = httpPost ( $url , $data );
?>
其实就是不同版本中curl中的用法不同,发现之后在此记录下来,方便查阅