| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231 | <?php/** * 多媒体文件客户端 * @author yikai.hu * @version $Id: AlipayMobilePublicMultiMediaClient.php, v 0.1 Aug 15, 2014 10:19:01 AM yikai.hu Exp $ *///namespace alipay\api ;include("AlipayMobilePublicMultiMediaExecute.php");class AlipayMobilePublicMultiMediaClient{    private				$DEFAULT_CHARSET = 'UTF-8';    private				$METHOD_POST     = "POST";    private				$METHOD_GET      = "GET";	private				$SIGN			= 'sign'; //get name	private				$timeout = 10 ;// 超时时间    private				$serverUrl;    private				$appId;    private				$privateKey;    private				$prodCode;    private				$format          = 'json'; //todo    private				$sign_type       = 'RSA'; //todo	private				$charset;	private				$apiVersion    = "1.0";	private				$apiMethodName = "alipay.mobile.public.multimedia.download";	private				$media_id = "L21pZnMvVDFQV3hYWGJKWFhYYUNucHJYP3Q9YW13ZiZ4c2lnPTU0MzRhYjg1ZTZjNWJmZTMxZGJiNjIzNDdjMzFkNzkw575";	//此处写死的,实际开发中,请传入    private				$connectTimeout  = 3000;    private				$readTimeout     = 15000;	function __construct($serverUrl = '', $appId = '', $partner_private_key = '', $format = '', $charset = 'GBK'){		$this -> serverUrl = $serverUrl;		$this -> appId = $appId;		$this -> privateKey = $partner_private_key;		$this -> format = $format;		$this -> charset = $charset;	}	/**	 * getContents 获取网址内容	 * @param $request	 * @return text | bin	 */	public function getContents(){		//自己的服务器如果没有 curl,可用:fsockopen() 等		//1:		//2: 私钥格式		$datas = array(			"app_id" 		=> $this -> appId,			"method" 		=> $this -> METHOD_POST,			"sign_type" 	=> $this -> sign_type,			"version" 		=> $this -> apiVersion,			"timestamp" 	=> date('Y-m-d H:i:s')  ,//yyyy-MM-dd HH:mm:ss			"biz_content" 	=> '{"mediaId":"'. $this -> media_id  .'"}',			"charset" 		=> $this -> charset		);		//要提交的数据		$data_sign = $this -> buildGetUrl( $datas );		$post_data = $data_sign;		//初始化 curl		$ch = curl_init();		//设置目标服务器		curl_setopt($ch, CURLOPT_URL, $this -> serverUrl );		curl_setopt($ch, CURLOPT_HEADER, TRUE);		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);		//超时时间		curl_setopt($ch, CURLOPT_TIMEOUT, $this-> timeout);		if( $this-> METHOD_POST == 'POST'){			// post数据			curl_setopt($ch, CURLOPT_POST, 1);			// post的变量			curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);		}		$output = curl_exec($ch);		$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);		curl_close($ch);		echo $output;		//分离头部		//list($header, $body) = explode("\r\n\r\n", $output, 2);		$datas = explode("\r\n\r\n", $output, 2);		$header = $datas[0];		if( $httpCode == '200'){			$body = $datas[1];		}else{			$body = '';		}		return $this -> execute( $header, $body, $httpCode );	}	/**	 *	 * @param $request	 * @return text | bin	 */	public function execute( $header = '', $body = '', $httpCode = '' ){		$exe = new AlipayMobilePublicMultiMediaExecute( $header, $body, $httpCode );		return $exe;	}	public function buildGetUrl( $query = array() ){		if( ! is_array( $query ) ){			//exit;		}		//排序参数,		$data = $this -> buildQuery( $query );		// 私钥密码		$passphrase = '';		$key_width = 64;		//私钥		$privateKey = $this -> privateKey;		$p_key = array();		//如果私钥是 1行		if( ! stripos( $privateKey, "\n" )  ){			$i = 0;			while( $key_str = substr( $privateKey , $i * $key_width , $key_width) ){				$p_key[] = $key_str;				$i ++ ;			}		}else{			//echo '一行?';		}		$privateKey = "-----BEGIN RSA PRIVATE KEY-----\n" . implode("\n", $p_key) ;		$privateKey = $privateKey ."\n-----END RSA PRIVATE KEY-----";//		echo "\n\n私钥:\n";//		echo( $privateKey );//		echo "\n\n\n";		//私钥		$private_id = openssl_pkey_get_private( $privateKey , $passphrase);		// 签名		$signature = '';		if("RSA2"==$this->sign_type){			openssl_sign($data, $signature, $private_id, OPENSSL_ALGO_SHA256 );		}else{			openssl_sign($data, $signature, $private_id, OPENSSL_ALGO_SHA1 );		}		openssl_free_key( $private_id );		//加密后的内容通常含有特殊字符,需要编码转换下		$signature = base64_encode($signature);		$signature = urlencode( $signature );		//$signature = 'XjUN6YM1Mc9HXebKMv7GTLy7gmyhktyOgKk2/Jf+cz4DtP6udkzTdpkjW2j/Z4ZSD7xD6CNYI1Spz4yS93HPT0a5X9LgFWYY8SaADqe+ArXg+FBSiTwUz49SE//Xd9+LEiIRsSFkbpkuiGoO6mqJmB7vXjlD5lx6qCM3nb41wb8=';		$out = $data .'&'. $this -> SIGN .'='. $signature;//		echo "\n\n 加密后:\n";//		echo( $out );//		echo "\n\n\n";		return $out ;	}	/*	 * 查询参数排序 a-z	 * */	public function buildQuery( $query ){		if ( !$query ) {			return null;		}//将要 参数 排序		ksort( $query );		//重新组装参数		$params = array();		foreach($query as $key => $value){			$params[] = $key .'='. $value ;		}		$data = implode('&', $params);		return $data;	}}
 |