精简阿里云短信服务官方SDK及DEMO

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ygc123189/article/details/75103251

    最近项目用到阿里云的短信服务,下载阿里云短信服务官方SDK及DEMO,包含众多的文件夹及文件,一大堆的类,类引用地址也是乱的,没法直接运行。

    里面包含多个接口(短信发送API,短信查询API,短信消息API),项目只需要短信发送接口即可。

    只好研究下官方的文档,精简代码。(研究的过程中发现官方的文档就是个坑,缺少很多字段)

    精简后的代码如下:(精简采用POST方式JSON格式SHA1加密)

		$url = 'http://dysmsapi.aliyuncs.com/';
		$accessKeyId = "yourAccessKeyId";
		$accessKeySecret = "yourAccessKeySecret";
		date_default_timezone_set("GMT");
		$Timestamp = date('Y-m-d\TH:i:s\Z');

		$parameters = [
			'PhoneNumbers' => '15000000000',
			'SignName' => '短信签名',
			'TemplateCode' => '短信模板Code',
			'TemplateParam' => '{"code":"123456"}',
			'OutId' => '1234',
			'RegionId' => 'cn-hangzhou',
			'AccessKeyId' => $accessKeyId,
			'Format' => 'JSON',
			'SignatureMethod' => 'HMAC-SHA1',
			'SignatureVersion' => '1.0',
			'SignatureNonce' => uniqid(),
			'Timestamp' => $Timestamp,
			'Action' => 'SendSms',
			'Version' => '2017-05-25',
		];
		$Signature = $this->computeSignature($parameters, $accessKeySecret);
		$parameters['Signature'] = $Signature;
		echo curl_post($url,$parameters);
		exit;


	public function computeSignature($parameters, $accessKeySecret)
	{
	    ksort($parameters);
	    $canonicalizedQueryString = '';
	    foreach($parameters as $key => $value)
	    {
			$canonicalizedQueryString .= '&' . $this->percentEncode($key). '=' . $this->percentEncode($value);
	    }	
	    $stringToSign = 'POST'.'&%2F&' . $this->percentencode(substr($canonicalizedQueryString, 1));
		$signature = base64_encode(hash_hmac('sha1', $stringToSign, $accessKeySecret."&", true));
	    return $signature;
	}
	
	protected function percentEncode($str)
	{
	    $res = urlencode($str);
	    $res = preg_replace('/\+/', '%20', $res);
	    $res = preg_replace('/\*/', '%2A', $res);
	    $res = preg_replace('/%7E/', '~', $res);
	    return $res;
	}

    

猜你喜欢

转载自blog.csdn.net/ygc123189/article/details/75103251