各类知识收集,PHP技术分享与解决方案各类知识收集,PHP技术分享与解决方案各类知识收集,PHP技术分享与解决方案

Str Tom,为分享PHP技术和解决方案,贡献一份自己的力量!
收藏本站(不迷路),每天更新好文章!
当前位置:首页 > CMS教程 > phpcms

phpcms自定义表单实现手机短信验证(阿里大于短信)

管理员 2022-08-28
phpcms
362
phpcms实现短信验证功能,实现这个的前提是先去阿里云上开通短信服务,并申请Access Key秘钥,设置的短信签名和短信模板等,具体流程可以去阿里云官网查看,这里不再描述!

其实phpcms本身也有自己的一套短信接口,开发流程可以参考他的流程!

第一步:创建数据库v9_dysms,(自带是:v9_sms_report表)
创建数据库v9_dysms,用于存放生产的验证码和发送状态


第二步:下载阿里大于短信接口sdk,
下载地址:https://help.aliyun.com/document_detail/55359.html?spm=5176.doc55451.6.569.3psCY5
将其中的api_sdk改名为:dysms,并放到api文件夹下!

第三步:创建对应的model类,用于操作数据库
在phpcms下的model下创建文件:dysms_model.class.php,内容:

  1.  
  2. defined('IN_PHPCMS') or exit('No permission resources.'); 
  3. pc_base::load_sys_class('model''', 0); 
  4. class dysms_model extends model { 
  5.     public function __construct() { 
  6.         $this->db_config = pc_base::load_config('database'); 
  7.         $this->db_setting = 'default'
  8.         $this->table_name = 'dysms'
  9.         parent::__construct(); 
  10.     } 
  11. ?> 
第四步:在phpcms/modules下创建文件夹dysms
(1)首页创建一个控制器index.php,代码为:

  1.  
  2. defined('IN_PHPCMS') or exit('No permission resources.'); 
  3. pc_base::load_app_func('global'); 
  4. pc_base::load_sys_class('form','',0); 
  5. pc_base::load_sys_class('format','',0); 
  6. class index { 
  7.    function __construct() { 
  8.         $this->db = pc_base::load_model('dysms_model'); 
  9.          
  10.         //初始化smsapi 
  11.         pc_base::load_app_class('smsapi''', 0); 
  12.         $this->smsapi = new smsapi(); 
  13.     } 
  14.      
  15.    public function send_message(){ 
  16.        $phone = $_GET['phone']; 
  17.        $this->smsapi->send_phone($phone); 
  18.    }  
  19.     
  20.    /** 
  21.      * 验证短信验证码是否有效,前端用jquery validate的remote 
  22.      * @return [type] [description] 
  23.      */ 
  24.     public function checkSMSCode(){ 
  25.         $phone = $_GET["phone"]; 
  26.         $code =  $_GET["verify"]; 
  27.         $nowTimeStr = time(); 
  28.         $where['phone'] = $phone; 
  29.         $where['code']  = $code; 
  30.         $smscodeObj = $this->db->get_one(array('phone'=>$phone,'code' => $code)); 
  31.         $data = "noa"
  32.         if(count($smscodeObj)){ 
  33.             $smsCodeTimeStr = $smscodeObj['posttime']; 
  34.             $recordCode = $smscodeObj['code']; 
  35.             $flag = $this->smsapi->checkTime($nowTimeStr, $smsCodeTimeStr); 
  36.             if($flag!=true || $code !== $recordCode){ 
  37.                if($flag){ 
  38.                   $data = "no"
  39.                }else
  40.                   $data = "nos"
  41.                } 
  42.                 
  43.             }else
  44.                $data = "ok"
  45.             } 
  46.         } 
  47.         echo($data); 
  48.         //return $data; 
  49.     } 
  50.      
  51. ?> 
(2)然后创建操作类文件夹classes,并创建文件smsapi.class.php,我们在这个文件里边布置生产验证码、发送短信、检测验证码等函数!
可以参考阿里大于给的发送验证码demo:

  1. //此处需要替换成自己的AK信息 
  2.     $accessKeyId = "yourAccessKeyId";//参考本文档步骤2 
  3.     $accessKeySecret = "yourAccessKeySecret";//参考本文档步骤2 
  4.     //短信API产品名(短信产品名固定,无需修改) 
  5.     $product = "Dysmsapi"
  6.     //短信API产品域名(接口地址固定,无需修改) 
  7.     $domain = "dysmsapi.aliyuncs.com"
  8.     //暂时不支持多Region(目前仅支持cn-hangzhou请勿修改) 
  9.     $region = "cn-hangzhou"
  10.     //初始化访问的acsCleint 
  11.     $profile = DefaultProfile::getProfile($region, $accessKeyId, $accessKeySecret); 
  12.     DefaultProfile::addEndpoint("cn-hangzhou""cn-hangzhou", $product, $domain); 
  13.     $acsClient= new DefaultAcsClient($profile); 
  14.     $request = new DysmsapiRequestV20170525SendSmsRequest; 
  15.     //必填-短信接收号码。支持以逗号分隔的形式进行批量调用,批量上限为1000个手机号码,批量调用相对于单条调用及时性稍有延迟,验证码类型的短信推荐使用单条调用的方式 
  16.     $request->setPhoneNumbers("15067126468"); 
  17.     //必填-短信签名 
  18.     $request->setSignName("云通信"); 
  19.     //必填-短信模板Code 
  20.     $request->setTemplateCode("SMS_0001"); 
  21.     //选填-假如模板中存在变量需要替换则为必填(JSON格式),友情提示:如果JSON中需要带换行符,请参照标准的JSON协议对换行符的要求,比如短信内容中包含rn的情况在JSON中需要表示成\r\n,否则会导致JSON在服务端解析失败 
  22.     $request->setTemplateParam("{"code":"12345","product":"云通信服务"}"); 
  23.     //选填-发送短信流水号 
  24.     $request->setOutId("1234"); 
  25.     //发起访问请求 
  26.     $acsResponse = $acsClient->getAcsResponse($request); 
写代码不容易,请加我微信15137100750,赏赐一包烟钱!谢谢了
第五步:创建前端代码
前端代码都足够简单了,不在说明!
看效果:

 请任性给我打赏吧!

相关推荐

扫码关注

qrcode

QQ交谈

回顶部