You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
189 lines
5.1 KiB
PHTML
189 lines
5.1 KiB
PHTML
5 years ago
|
<?php
|
||
|
|
||
|
/**
|
||
|
* 多媒体文件客户端
|
||
|
* @author yikai.hu
|
||
|
* @version $Id: AlipayMobilePublicMultiMediaClient.php, v 0.1 Aug 15, 2014 10:19:01 AM yikai.hu Exp $
|
||
|
*/
|
||
|
|
||
|
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()
|
||
|
{
|
||
|
$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;
|
||
|
|
||
|
$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-----";
|
||
|
|
||
|
//私钥
|
||
|
$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;
|
||
|
|
||
|
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;
|
||
|
}
|
||
|
|
||
|
}
|