212 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			212 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| 
								 | 
							
								<?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;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |