那们基友有没有用php curl模拟上传微信素材图片.

钉子2012 发布于 2013/09/13 17:42
阅读 4K+
收藏 0

哪们基友有没有用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];
	}

加载中
0
专治不孕不育的老司机
专治不孕不育的老司机
其实我很想知道,你是怎么登录成功的。。。一直卡在 "Ret": 400这个错误上
离开江湖
离开江湖
我也想知道是怎么登录成功的
0
钉子2012
钉子2012
你们加上这个 curl_setopt ( $ch, CURLOPT_REFERER, 'https://mp.weixin.qq.com/' ); ,模拟请求源,应该可以的 , 我的问题解决了,谢谢大家 !
专治不孕不育的老司机
专治不孕不育的老司机
什么都加过。。一直返回ret400,求私信登录代码,以借鉴。 试过很多模拟的程序了,自己也写了N多遍。一直怀疑其中某个JS来做了验证。但不不清楚是哪个,。
0
梦程
梦程

QQ联系 我有看到别人用nodejs 跟c#实现了这个功能 我也一直是卡在这了

305612992

0
冷三叔
冷三叔
我也是一值在模拟,一直都没成功,真的感觉到纳闷,想不通
0
ccav5
ccav5
请问现在 模拟上传素材的功能有实现吗?我最近也在尝试中
返回顶部
顶部