| 
					
				 | 
			
			
				@@ -0,0 +1,211 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+<?php 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+namespace addons\qcloudsms\library; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * 发送Util类 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+class SmsSenderUtil 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 生成随机数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @return int 随机数结果 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public function getRandom() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return rand(100000, 999999); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 生成签名 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param string $appkey        sdkappid对应的appkey 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param string $random        随机正整数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param string $curTime       当前时间 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param array  $phoneNumbers  手机号码 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @return string  签名结果 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public function calculateSig($appkey, $random, $curTime, $phoneNumbers) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $phoneNumbersString = $phoneNumbers[0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for ($i = 1; $i < count($phoneNumbers); $i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $phoneNumbersString .= ("," . $phoneNumbers[$i]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return hash("sha256", "appkey=".$appkey."&random=".$random 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            ."&time=".$curTime."&mobile=".$phoneNumbersString); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 生成签名 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param string $appkey        sdkappid对应的appkey 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param string $random        随机正整数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param string $curTime       当前时间 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param array  $phoneNumbers  手机号码 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @return string  签名结果 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public function calculateSigForTemplAndPhoneNumbers($appkey, $random, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $curTime, $phoneNumbers) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $phoneNumbersString = $phoneNumbers[0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for ($i = 1; $i < count($phoneNumbers); $i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $phoneNumbersString .= ("," . $phoneNumbers[$i]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return hash("sha256", "appkey=".$appkey."&random=".$random 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            ."&time=".$curTime."&mobile=".$phoneNumbersString); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public function phoneNumbersToArray($nationCode, $phoneNumbers) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $i = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $tel = array(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        do { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $telElement = new \stdClass(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $telElement->nationcode = $nationCode; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $telElement->mobile = $phoneNumbers[$i]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            array_push($tel, $telElement); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } while (++$i < count($phoneNumbers)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return $tel; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 生成签名 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param string $appkey        sdkappid对应的appkey 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param string $random        随机正整数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param string $curTime       当前时间 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param array  $phoneNumber   手机号码 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @return string  签名结果 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public function calculateSigForTempl($appkey, $random, $curTime, $phoneNumber) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $phoneNumbers = array($phoneNumber); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return $this->calculateSigForTemplAndPhoneNumbers($appkey, $random, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $curTime, $phoneNumbers); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 生成签名 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param string $appkey        sdkappid对应的appkey 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param string $random        随机正整数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param string $curTime       当前时间 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @return string 签名结果 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public function calculateSigForPuller($appkey, $random, $curTime) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return hash("sha256", "appkey=".$appkey."&random=".$random 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            ."&time=".$curTime); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 生成上传文件授权 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param string $appkey        sdkappid对应的appkey 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param string $random        随机正整数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param string $curTime       当前时间 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param array  $fileSha1Sum   文件sha1sum 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @return string  授权结果 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public function calculateAuth($appkey, $random, $curTime, $fileSha1Sum) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return hash("sha256", "appkey=".$appkey."&random=".$random 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            ."&time=".$curTime."&content-sha1=".$fileSha1Sum); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 生成sha1sum 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param string $content  内容 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @return string  内容sha1散列值 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public function sha1sum($content) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return hash("sha1", $content); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 发送请求 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param string $url      请求地址 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param array  $dataObj  请求内容 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @return string 应答json字符串 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public function sendCurlPost($url, $dataObj) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $curl = curl_init(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        curl_setopt($curl, CURLOPT_URL, $url); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        curl_setopt($curl, CURLOPT_HEADER, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        curl_setopt($curl, CURLOPT_POST, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 60); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($dataObj)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        curl_setopt($curl, CURLOPT_HTTPHEADER, array( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        'Content-Type: application/json; charset=utf-8', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        'Content-Length: ' . strlen(json_encode($dataObj))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $ret = curl_exec($curl); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (false == $ret) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // curl_exec failed 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $result = "{ \"result\":" . -2 . ",\"errmsg\":\"" . curl_error($curl) . "\"}"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $rsp = curl_getinfo($curl, CURLINFO_HTTP_CODE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (200 != $rsp) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                $result = "{ \"result\":" . -1 . ",\"errmsg\":\"". $rsp 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        . " " . curl_error($curl) ."\"}"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                $result = $ret; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        curl_close($curl); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return $result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 发送请求 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param string $req  请求对象 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @return string 应答json字符串 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public function fetch($req) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $curl = curl_init(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        curl_setopt($curl, CURLOPT_URL, $req->url); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        curl_setopt($curl, CURLOPT_HTTPHEADER, $req->headers); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        curl_setopt($curl, CURLOPT_POSTFIELDS, $req->body); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        curl_setopt($curl, CURLOPT_HEADER, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        curl_setopt($curl, CURLOPT_POST, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 60); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $result = curl_exec($curl); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (false == $result) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // curl_exec failed 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $result = "{ \"result\":" . -2 . ",\"errmsg\":\"" . curl_error($curl) . "\"}"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $code = curl_getinfo($curl, CURLINFO_HTTP_CODE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (200 != $code) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                $result = "{ \"result\":" . -1 . ",\"errmsg\":\"". $rsp 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    . " " . curl_error($curl) ."\"}"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        curl_close($curl); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return $result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 |