| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 | 
							- <?php
 
- namespace app\common\library;
 
- /**
 
-  * 阿里大于SMS短信发送
 
-  */
 
- class Alisms
 
- {
 
-     private $_params = [];
 
-     public $error = '';
 
-     protected $config = [];
 
-     protected static $instance;
 
-     public function __construct($options = [])
 
-     {
 
-         if ($config = config('alisms')) {
 
-             $this->config = array_merge($this->config, $config);
 
-         }
 
-         $this->config = array_merge($this->config, is_array($options) ? $options : []);
 
-     }
 
-     /**
 
-      * 单例
 
-      * @param array $options 参数
 
-      * @return Alisms
 
-      */
 
-     public static function instance($options = [])
 
-     {
 
-         if (is_null(self::$instance)) {
 
-             self::$instance = new static($options);
 
-         }
 
-         return self::$instance;
 
-     }
 
-     /**
 
-      * 设置签名
 
-      * @param string $sign
 
-      * @return Alisms
 
-      */
 
-     public function sign($sign = '')
 
-     {
 
-         $this->_params['SignName'] = $sign;
 
-         return $this;
 
-     }
 
-     /**
 
-      * 设置参数
 
-      * @param array $param
 
-      * @return Alisms
 
-      */
 
-     public function param(array $param = [])
 
-     {
 
-         foreach ($param as $k => &$v) {
 
-             $v = (string)$v;
 
-         }
 
-         unset($v);
 
-         $param = array_filter($param);
 
-         $this->_params['TemplateParam'] = $param ? json_encode($param) : '{}';
 
-         return $this;
 
-     }
 
-     /**
 
-      * 设置模板
 
-      * @param string $code 短信模板
 
-      * @return Alisms
 
-      */
 
-     public function template($code = '')
 
-     {
 
-         $this->_params['TemplateCode'] = $code;
 
-         return $this;
 
-     }
 
-     /**
 
-      * 接收手机
 
-      * @param string $mobile 手机号码
 
-      * @return Alisms
 
-      */
 
-     public function mobile($mobile = '')
 
-     {
 
-         $this->_params['PhoneNumbers'] = $mobile;
 
-         return $this;
 
-     }
 
-     /**
 
-      * 立即发送
 
-      * @return boolean
 
-      */
 
-     public function send()
 
-     {
 
-         $this->error = '';
 
-         $params = $this->_params();
 
-         $params['Signature'] = $this->_signed($params);
 
-         $response = $this->_curl($params);
 
-         if ($response !== false) {
 
-             $res = (array)json_decode($response, true);
 
-             if (isset($res['Code']) && $res['Code'] == 'OK') {
 
-                 return true;
 
-             }
 
-             $this->error = isset($res['Message']) ? $res['Message'] : 'InvalidResult';
 
-         } else {
 
-             $this->error = 'InvalidResult';
 
-         }
 
-         return false;
 
-     }
 
-     /**
 
-      * 获取错误信息
 
-      * @return string
 
-      */
 
-     public function getError()
 
-     {
 
-         return $this->error;
 
-     }
 
-     private function _params()
 
-     {
 
-         return array_merge([
 
-             'AccessKeyId'      => $this->config['key'],
 
-             'SignName'         => isset($this->config['sign']) ? $this->config['sign'] : '',
 
-             'Action'           => 'SendSms',
 
-             'Format'           => 'JSON',
 
-             'Version'          => '2017-05-25',
 
-             'SignatureVersion' => '1.0',
 
-             'SignatureMethod'  => 'HMAC-SHA1',
 
-             'SignatureNonce'   => uniqid(),
 
-             'Timestamp'        => gmdate('Y-m-d\TH:i:s\Z'),
 
-         ], $this->_params);
 
-     }
 
-     private function percentEncode($string)
 
-     {
 
-         $string = urlencode($string);
 
-         $string = preg_replace('/\+/', '%20', $string);
 
-         $string = preg_replace('/\*/', '%2A', $string);
 
-         $string = preg_replace('/%7E/', '~', $string);
 
-         return $string;
 
-     }
 
-     private function _signed($params)
 
-     {
 
-         $sign = $this->config['secret'];
 
-         ksort($params);
 
-         $canonicalizedQueryString = '';
 
-         foreach ($params as $key => $value) {
 
-             $canonicalizedQueryString .= '&' . $this->percentEncode($key) . '=' . $this->percentEncode($value);
 
-         }
 
-         $stringToSign = 'GET&%2F&' . $this->percentencode(substr($canonicalizedQueryString, 1));
 
-         $signature = base64_encode(hash_hmac('sha1', $stringToSign, $sign . '&', true));
 
-         return $signature;
 
-     }
 
-     private function _curl($params)
 
-     {
 
-         $uri = 'http://dysmsapi.aliyuncs.com/?' . http_build_query($params);
 
-         $ch = curl_init();
 
-         curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
 
-         curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
 
-         curl_setopt($ch, CURLOPT_URL, $uri);
 
-         curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
 
-         curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
 
-         curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.98 Safari/537.36");
 
-         curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
 
-         curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
 
-         $reponse = curl_exec($ch);
 
-         curl_close($ch);
 
-         return $reponse;
 
-     }
 
- }
 
 
  |