<?PHP
session_start ();
header ("Content-type:text/HTML; charset=UTF-8");
function https_request ($url)
{$curl = curl_init ();
curl_setopt ($curl, CURLOPT_URL, $url);
curl_setopt ($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt ($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt ($curl, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec ($curl);
if (curl_errno ($curl)) {return 'ERROR'.curl_error ($curl);}
curl_close ($curl);
return $data;
}
function xml_to_array ($xml){$reg = "/<(\w+)[^>]*>([\\x00-\\xFF]*)<\\/\\1>/";
if (preg_match_all ($reg, $xml, $matches)){$count = count ($matches [0]);
for ($i = 0; $i < $count; $i++){$subxml= $matches [2][$i];
$key = $matches [1][$i];
if (preg_match ( $reg, $subxml)){$arr [$key] = xml_to_array ($subxml);
}else{$arr [$key] = $subxml;
}
}
}
return @$arr;
}
function percentEncode ($str)
{
// 使用 urlencode 编码后,将 "+","*","%7 E" 做替换即满足 ECS API 规定的编码规范
$res = urlencode ($str);
$res = preg_replace ('/\+/', '%20', $res);
$res = preg_replace ('/\*/', '%2 A', $res);
$res = preg_replace ('/%7 E/', '~', $res);
return $res;
}
function computeSignature ($parameters, $accessKeySecret)
{
// 将参数 Key 按字典顺序排序
ksort ($parameters);
// 生成规范化请求字符串
$canonicalizedQueryString = '';
foreach ($parameters as $key => $value)
{$canonicalizedQueryString .= '&' . percentEncode ($key)
. '=' . percentEncode ($value);
}
// 生成用于计算签名的字符串 stringToSign
$stringToSign = 'GET&%2 F&' . percentencode (substr ($canonicalizedQueryString, 1));
//echo "<br>".$stringToSign."<br>";
// 计算签名,注意 accessKeySecret 后面要加上字符 '&'
$signature = base64_encode (hash_hmac ('sha1', $stringToSign, $accessKeySecret . '&', true));
return $signature;
}
// 注意使用 GMT 时间
date_default_timezone_set ("GMT");
$target = "https://dysmsapi.aliyuncs.com/?";
$dateTimeFormat = 'Y-m-d\TH:i:s\Z'; // ISO8601 规范
$accessKeyId = 'xx'; // 这里填写您的 Access Key ID
$accessKeySecret = 'yy'; // 这里填写您的 Access Key Secret
$ParamString="{\"code\":\"1234\"}";
$data = array ('AccessKeyId' => $accessKeyId,
'Action' => 'SendSms',
'Format' => 'xml',
'OutId' => '123',
'PhoneNumbers' => '18050056050',
'RegionId' => 'cn-hangzhou',
'SignName'=>'签名',
'SignatureMethod' => 'HMAC-SHA1',
'SignatureNonce'=> '45 e25 e9 b-0 a6 f-4070-8 c85-2956 eda1 b466',
'SignatureVersion' => '1.0',
'TemplateCode' => 'SMS_158948234',
'TemplateParam' => $ParamString,
'Timestamp' => date ($dateTimeFormat),
'Version' => '2017-05-25'
);
// 计算签名并把签名结果加入请求参数
//echo $data ['Version']."<br>";
//echo $data ['Timestamp']."<br>";
$data ['Signature'] = computeSignature ($data, $accessKeySecret);
// 发送请求
$result = xml_to_array (https_request ($target.http_build_query ($data)));
var_dump ($result);
//echo $result ['Error']['Code']."--->".$result ['Error']['Message'];
//echo "<br><br>".$target . http_build_query ($data);
?>