1. 程式人生 > >精簡阿里雲簡訊服務官方SDK及DEMO

精簡阿里雲簡訊服務官方SDK及DEMO

    最近專案用到阿里雲的簡訊服務,下載阿里雲簡訊服務官方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;
	}