精簡阿里雲簡訊服務官方SDK及DEMO
阿新 • • 發佈:2018-12-16
最近專案用到阿里雲的簡訊服務,下載阿里雲簡訊服務官方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; }