php与阿里云短信接口接入操作案例分析
本文实例讲述了php与阿里云短信接口接入操作。分享给大家供大家参考,具体如下:
使用阿里云短信API,需要在控制台获取以下必要参数,其中需要自己手机验证+官方审核多次,尤其审核需要保持耐心。
1.accessKeyId 相当于你的个人账户密钥;
2.accessKeySecret与上是成对的;
3.SignName 个人签名,在发出去的短信中,这个签名会显示在开头,类似【签名】亲爱的用户......这种格式,SignName需要通过提交审核;
4.TemplateCode 模板代码,阿里云短信是无法完全自定义短信的,需要通过审核的模板,然后自己再替换掉模板中的变量,如模板:“您的验证码是$[code]”,code就是变量,使用时需设置变量值{"code":"12345"}(设置变量值的过程在demo中实现),短信发出去后变成:“您的验证码是12345”,每个通过审核的模板会提供一个模板代码;
最新的阿里云短信接口,适用于阿里大于搬家以后的情况。
之前一直用阿里大于的短信接口,最近上项目时发现阿里大于悄悄地搬家到了阿里云!阿里云的SDK文件繁多,看得一头雾水!下面代码是最新的可适用于阿里云短信服务的类,亲测成功!
'xxxxxxxxxxx', 'accessKeySecret'=>'xxxxxxxxxx', 'signName'=>'你的签名', 'templateCode'=>'SMS_76510109' ); //配置参数 $this->accessKeyId=$cofig['accessKeyId']; $this->accessKeySecret=$cofig['accessKeySecret']; $this->signName=$cofig['signName']; $this->templateCode=$cofig['templateCode']; } privatefunctionpercentEncode($string){ $string=urlencode($string); $string=preg_replace('/\+/','%20',$string); $string=preg_replace('/\*/','%2A',$string); $string=preg_replace('/%7E/','~',$string); return$string; } /** *签名 * *@paramunknown$parameters *@paramunknown$accessKeySecret *@returnstring */ privatefunctioncomputeSignature($parameters,$accessKeySecret){ ksort($parameters); $canonicalizedQueryString=''; foreach($parametersas$key=>$value){ $canonicalizedQueryString.='&'.$this->percentEncode($key).'='.$this->percentEncode($value); } $stringToSign='GET&%2F&'.$this->percentencode(substr($canonicalizedQueryString,1)); $signature=base64_encode(hash_hmac('sha1',$stringToSign,$accessKeySecret.'&',true)); return$signature; } /** *@paramunknown$mobile *@paramunknown$verify_code * */ publicfunctionsend_verify($mobile,$verify_code){ $params=array(//此处作了修改 'SignName'=>$this->signName, 'Format'=>'JSON', 'Version'=>'2017-05-25', 'AccessKeyId'=>$this->accessKeyId, 'SignatureVersion'=>'1.0', 'SignatureMethod'=>'HMAC-SHA1', 'SignatureNonce'=>uniqid(), 'Timestamp'=>gmdate('Y-m-d\TH:i:s\Z'), 'Action'=>'SendSms', 'TemplateCode'=>$this->templateCode, 'PhoneNumbers'=>$mobile, //'TemplateParam'=>'{"code":"'.$verify_code.'"}' 'TemplateParam'=>'{"time":"1234"}'//更换为自己的实际模版 ); //var_dump($params);die; //计算签名并把签名结果加入请求参数 $params['Signature']=$this->computeSignature($params,$this->accessKeySecret); //发送请求(此处作了修改) //$url='https://sms.aliyuncs.com/?'.http_build_query($params); $url='http://dysmsapi.aliyuncs.com/?'.http_build_query($params); $ch=curl_init(); curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE); curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); curl_setopt($ch,CURLOPT_TIMEOUT,10); $result=curl_exec($ch); curl_close($ch); $result=json_decode($result,true); //var_dump($result);die; if(isset($result['Code'])){ $this->error=$this->getErrorMessage($result['Code']); returnfalse; } returntrue; } /** *获取详细错误信息 * *@paramunknown$status */ publicfunctiongetErrorMessage($status){ //阿里云的短信乱八七糟的(其实是用的阿里大于) //https://api.alidayu.com/doc2/apiDetail?spm=a3142.7629140.1.19.SmdYoA&apiId=25450 $message=array( 'InvalidDayuStatus.Malformed'=>'账户短信开通状态不正确', 'InvalidSignName.Malformed'=>'短信签名不正确或签名状态不正确', 'InvalidTemplateCode.MalFormed'=>'短信模板Code不正确或者模板状态不正确', 'InvalidRecNum.Malformed'=>'目标手机号不正确,单次发送数量不能超过100', 'InvalidParamString.MalFormed'=>'短信模板中变量不是json格式', 'InvalidParamStringTemplate.Malformed'=>'短信模板中变量与模板内容不匹配', 'InvalidSendSms'=>'触发业务流控', 'InvalidDayu.Malformed'=>'变量不能是url,可以将变量固化在模板中' ); if(isset($message[$status])){ return$message[$status]; } return$status; } }
调用方法:
//生成验证码 $mobile='xxxxxxx'; $code=rand(1000,9999); //发送短信 $sms=newSms(); //测试模式 $status=$sms->send_verify($mobile,$code); if(!$status){ echo$sms->error; }
更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP进程与线程操作技巧总结》、《PHP网络编程技巧总结》、《PHP基本语法入门教程》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。