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;
- }
- }
|