开头好像也没有什么废话的,直接上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中的用法不同,发现之后在此记录下来,方便查阅