5
回答
那们基友有没有用php curl模拟上传微信素材图片.
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

哪们基友有没有用php  curl模拟登录后,然后模拟上传微信公众平台的素材图片.

本来想用curl  @+文件路径的方法来实现,但是分析下还是不行,必须要用form表单enctype="multipart/form-data" 二进制的形式来上传图片. 所以准备自己组合图片上传的二进制流去上传,结果还是失败了!

现在就卡在了这步,好像微信素材上传的图片加密了, 由于本人技术不精,不能参透,不知道那位成功过,麻烦指点出,下面是微信post过去参数的截图和模拟素材上传的一部分代码.


下面是微信模拟上传素材的一部分代码


public function upMaterial($filepath){
		$send_url = "https://mp.weixin.qq.com/cgi-bin/uploadmaterial?cgi=uploadmaterial&type=2&token=".$GLOBALS['weixin_token']."&t=iframe-uploadfile&lang=zh_CN&formId=1";
		$content_type = "image/gif"; 
		$boundary = "-----------------------------".substr(md5(rand(1000,99999)),0,16);
                $header .= "";
                /* 二进制流 */
                $data = '';
		$data .= "$boundary\r\n";
		$file_arr = explode("/",$filepath);
		$file_name = $file_arr[sizeof($file_arr)-1];
		$content_file = file_get_contents($filepath); 
		$data .= "Content-Disposition: form-data; name=\"uploadfile\"; filename=\"$file_name\"\r\n";
		$data .= "Content-Type: $content_type\r\n\r\n";
		$data .= "$content_file\r\n";
		$data .="$boundary\r\n";
		$data .= "Content-Disposition: form-data; name=\"formId\"\r\r\n";
		$data .="$boundary--\r\n";
		$data .="";
                /* 模拟post上传参数 */
               $send_post = array(
                        'uploadfile' => $data,
			'formId' => ''
		);
                /*模拟微信请求头*/  
              $send_headers = array( 
                        'Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
                        'Accept-Encoding:gzip, deflate',
                        'Accept-Language:en-US,en;q=0.5',
                        'Connection:keep-alive',
                        'Host:mp.weixin.qq.com',
                        'Referer:https://mp.weixin.qq.com/cgi-bin/indexpage?token='.$GLOBALS['weixin_token'].'&t=wxm-upload&lang=zh_CN&type=2&formId=1',
			'User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0',
			'Content-Length:'.strlen($data).'',
			"Content-Type:multipart/form-data; boundary=$boundary"
                );		
                /* 调用curlPost函数 */
		$res = $this -> curlPost($send_url, $send_post, $send_headers);
                /* 取回返回的素材ID */
                preg_match('/formId, \'(\d*)\'/',$res,$imgId);
		return $imgID[1];
	}

举报
钉子2012
发帖于4年前 5回/4K+阅
顶部