天天看点

阿里云短信接口

第一种方式: http://bbs.csdn.net/topics/392054241                          public function phoneCode($phone,$mobile_code=null,$template_code=null){         if (!$mobile_code){$mobile_code = $this->random(6,1);}         if(!$template_code){$template_code='SMS_37650042';}         $target = "https://sms.aliyuncs.com/?";         // 注意使用GMT时间         date_default_timezone_set("GMT");         $dateTimeFormat = 'Y-m-d\TH:i:s\Z'; // ISO8601规范         $accessKeyId = 'LTAIGsgBVt8MDTyf';      // 这里填写您的Access Key ID         $accessKeySecret = '5koNqwSpKi0SfjfyHUWqF0lCLIwuoS';  // 这里填写您的Access Key Secret         $ParamString="{\"code\":\"".strval($mobile_code)."\",\"time\":\"15\"}";         $data = array(             // 公共参数             'SignName'=>'代码派',             'Format' => 'XML',             'Version' => '2016-09-27',             'AccessKeyId' => $accessKeyId,             'SignatureVersion' => '1.0',             'SignatureMethod' => 'HMAC-SHA1',             'SignatureNonce'=> uniqid(),             'Timestamp' => date($dateTimeFormat),             // 接口参数             'Action' => 'SingleSendSms',             'TemplateCode' => $template_code,             'RecNum' => $phone,             'ParamString' => $ParamString         );         // 计算签名并把签名结果加入请求参数         //echo $data['Version']."<br>";         //echo $data['Timestamp']."<br>";         $data['Signature'] = $this->computeSignature($data, $accessKeySecret);         // 发送请求         $result = $this->xml_to_array($this->https_request($target.http_build_query($data)));         print_r($result);     }     public function https_request($url)     {         $curl = curl_init();         curl_setopt($curl, CURLOPT_URL, $url);         curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);         curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);         curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);         $data = curl_exec($curl);         if (curl_errno($curl)) {return 'ERROR '.curl_error($curl);}         curl_close($curl);         return $data;     }     public function xml_to_array($xml){         $reg = "/<(\w+)[^>]*>([\\x00-\\xFF]*)<\\/\\1>/";         if(preg_match_all($reg, $xml, $matches)){             $count = count($matches[0]);             for($i = 0; $i < $count; $i++){                 $subxml= $matches[2][$i];                 $key = $matches[1][$i];                 if(preg_match( $reg, $subxml )){                     $arr[$key] = $this->xml_to_array( $subxml );                 }else{                     $arr[$key] = $subxml;                 }             }         }         return @$arr;     }     public function random($length = 6 , $numeric = 0) {         PHP_VERSION < '4.2.0' && mt_srand((double)microtime() * 1000000);         if($numeric) {             $hash = sprintf('%0'.$length.'d', mt_rand(0, pow(10, $length) - 1));         } else {             $hash = '';                          $chars = '0123456789';             $max = strlen($chars) - 1;             for($i = 0; $i < $length; $i++) {                 $hash .= $chars[mt_rand(0, $max)];             }         }         return $hash;     }     public function percentEncode($str)     {         // 使用urlencode编码后,将"+","*","%7E"做替换即满足ECS API规定的编码规范         $res = urlencode($str);         $res = preg_replace('/\+/', '%20', $res);         $res = preg_replace('/\*/', '%2A', $res);         $res = preg_replace('/%7E/', '~', $res);         return $res;     }

    public function computeSignature($parameters, $accessKeySecret)     {         // 将参数Key按字典顺序排序         ksort($parameters);         // 生成规范化请求字符串         $canonicalizedQueryString = '';         foreach($parameters as $key => $value)         {             $canonicalizedQueryString .= '&' . $this->percentEncode($key)                 . '=' . $this->percentEncode($value);         }         // 生成用于计算签名的字符串 stringToSign         $stringToSign = 'GET&%2F&' . $this->percentencode(substr($canonicalizedQueryString, 1));         //echo "<br>".$stringToSign."<br>";         // 计算签名,注意accessKeySecret后面要加上字符'&'         $signature = base64_encode(hash_hmac('sha1', $stringToSign, $accessKeySecret . '&', true));         return $signature;     }

第二种方式:                      

去阿里官网下载sdk  

                    导入项目中  如图                     

阿里云短信接口

                      源码如下                      <?php

ini_set("display_errors", "on");

require_once dirname(__DIR__) . '/sms/vendor/autoload.php';

use Aliyun\Core\Config; use Aliyun\Core\Profile\DefaultProfile; use Aliyun\Core\DefaultAcsClient; use Aliyun\Api\Sms\Request\V20170525\SendSmsRequest; use Aliyun\Api\Sms\Request\V20170525\QuerySendDetailsRequest;

// 加载区域结点配置 Config::load();

class Sms {

    static $acsClient = null;         public static function getAcsClient() {         //产品名称:云通信流量服务API产品,开发者无需替换         $product = "Dysmsapi";

        //产品域名,开发者无需替换         $domain = "dysmsapi.aliyuncs.com";

        // TODO 此处需要替换成开发者自己的AK (https://ak-console.aliyun.com/)         $accessKeyId = "LTAISVqnlWld4er1"; // AccessKeyId

        $accessKeySecret = "MEuXuWz3kN5uN5J0qi7OEk4DFDEPWO"; // AccessKeySecret

        // 暂时不支持多Region         $region = "cn-hangzhou";

        // 服务结点         $endPointName = "cn-hangzhou";

        if(static::$acsClient == null) {

            //初始化acsClient,暂不支持region化             $profile = DefaultProfile::getProfile($region, $accessKeyId, $accessKeySecret);

            // 增加服务结点             DefaultProfile::addEndpoint($endPointName, $region, $product, $domain);

            // 初始化AcsClient用于发起请求             static::$acsClient = new DefaultAcsClient($profile);         }         return static::$acsClient;     }

        public static function sendSms($signName,$templateCode, $phoneNumbers, $templateParam = null, $outId = null, $smsUpExtendCode = null) {

        // 初始化SendSmsRequest实例用于设置发送短信的参数         $request = new SendSmsRequest();

        // 必填,设置雉短信接收号码         $request->setPhoneNumbers($phoneNumbers);

        // 必填,设置签名名称         $request->setSignName($signName);

        // 必填,设置模板CODE         $request->setTemplateCode($templateCode);

        // 可选,设置模板参数         if($templateParam) {             $request->setTemplateParam(json_encode($templateParam));         }

        // 可选,设置流水号         if($outId) {             $request->setOutId($outId);         }

        // 选填,上行短信扩展码         if($smsUpExtendCode) {             $request->setSmsUpExtendCode($smsUpExtendCode);         }

        // 发起访问请求         $acsResponse = static::getAcsClient()->getAcsResponse($request);

        // 打印请求结果         var_dump($acsResponse);

        return $acsResponse;

    }

} // header('Content-Type: text/plain; charset=utf-8');

// $response = Sms::sendSms( //    "阿里云短信测试专用", //签名 //    "SMS_104910077", // 短信模板编号 //    "13972235112", // 短信接收者 //    Array(  // 短信模板中字段的值 //        "code"=>"12345", //        "product"=>"dsd" //    ), //    "123"   // 流水号,选填 // );