PHP发短信实现 ***

访客4年前黑客资讯416

1要拼接接收的手机号和短信

public function sendcode()
    {
        $parpm = input();
        $valist = $this->validate($parpm, [
            'phone' => 'require|regex:1[3-9]\d{9}'
        ]);
        if ($valist !== true) {
            $res = [
                'code' => 400,
                'msg' => $valist
            ];
            return Json($res);
            die;
        }
        $timer = cache('register_time_' . $parpm['phone']);
        if (time() - $timer < 60) {
            $rs = [
                'code' => '500',
                'msg' => '发送太过频繁'
            ];
            echo json_encode($rs);
            die;
        }
        $co = mt_rand(1000, 9999);
        $code = '%23code%23%3d' . $co;
        //发送短信验证
//          $resule=sendmsg($parpm['phone'],$code);
        $resule = true;
        if ($resule === true) {
            cache('register_code_' . $parpm['phone'], $co, 180);
            cache('register_time_' . $parpm['phone'], time(), 180);
            $re = [
                'code' => 200,
                'msg' => '短信发送成功',
                'data' => "$code"
            ];
            echo json_encode($re);
            die;
        } else {
            $re = [
                'code' => 400,
                'msg' => $resule
            ];
            echo json_encode($re);
            die;
        }
    }

2拼接要发送短信的要求

if(!function_exists('sendmsg')){
     function sendmsg($phone,$code){
         $gateway=config('msg.gateway');
         $appkey=config('msg.appkey');
         $tpl_id=config('msg.tpl_id');
         $url=$gateway.'?mobile='.$phone.'&tpl_id='.$tpl_id.'&tpl_value='.$code.'&key='.$appkey;
         $res=curl_require($url,false,[],false);
         if(!$res){
            return '请求失败';
         }
         $arr=json_decode($res,true);
         if(isset($arr['code'])&&$arr['code']==10000){
              return true;
         }else{
             return false;
         }
     }
}

3向第三方请求

if(!function_exists('curl_require')){
      function curl_require($url,$post=true,$parpm=[],$https=false){
          $ch=curl_init($url);
          if($post){
                curl_setopt($ch,CURLOPT_PORT,true);
                curl_setopt($ch,CURLOPT_POSTFIELDS,$parpm);
          }
          if($https){
               curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
          }
          curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
          $res=curl_exec($ch);
          curl_close($ch);
          return $res;
      }
}

下面是aliyun的发信deom

// 代码节选,详见dy *** s_php.zip\aliyun-dy *** s-php-sdk\api_demo/SmsDemo.php
...
class SmsDemo
{
    ...
 * 短信服务API产品的DEMO程序,工程中包含了一个SmsDemo类,直接通过
 * 执行此文件即可体验短信服务产品API功能(只需要将AK替换成开通了云通信-短信服务产品功能的AK即可)
 * 备注:Demo工程编码采用UTF-8
 */
/**
     * 发送短信
     * @return stdClass
     */
    public static function sendSms() {
        // 初始化SendSmsRequest实例用于设置发送短信的参数
        $request = new SendSmsRequest();
        // 必填,设置短信接收号码
        $request->setPhoneNumbers("12345678901");
        // 必填,设置签名名称,应严格按"签名名称"填写,请参考: https://dy *** s.console.aliyun.com/dy *** s.htm#/develop/sign
        $request->setSignName("短信签名");
        // 必填,设置模板CODE,应严格按"模板CODE"填写,(如果发送国际/港澳台消息时,请使用国际/港澳台短信模版) 请参考: https://dy *** s.console.aliyun.com/dy *** s.htm#/develop/template
        $request->setTemplateCode(" *** S_0000001");
        // 可选,设置模板参数, 假如模板中存在变量需要替换则为必填项
        $request->setTemplateParam(json_encode(Array(  // 短信模板中字段的值
            "code"=>"12345",
            "product"=>"dsd"
        )));
        // 可选,设置流水号
        $request->setOutId("yourOutId");
        // 选填,上行短信扩展码(扩展码字段控制在7位或以下,无特殊需求用户请忽略此字段)
        $request->setSmsUpExtendCode("1234567");
        // 发起访问请求
        $acsResponse = static::getAcsClient()->getAcsResponse($request);
        return $acsResponse;
    }
// 调用示例:
set_time_limit(0);
header('Content-Type: text/plain; charset=utf-8');
$response = SmsDemo::sendSms();
echo "发送短信(sendSms)接口返回的结果:\n";
print_r($response);

完整版deom下载:https://help.aliyun.com/document_detail/55359.html?spm=a2c4g.11186623.4.2.796351cdoeTnoI


相关文章

浅谈php运用mysql注入问题危害以及预防方法

登录无论get还是post,传过的数据如果不过滤,就可以通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令. 在用户名输入框中输入:' or...

新浪图片外链失效使用远程图片解决方案

这里提供一种临时处理的思路:既然新浪判断了Referer,我们伪造就是了 最后用API方式调用,例如:api.php?url=新浪外链地址 远程图片 <?php/**  * @descri...

PHP检测每一段代码执行时间(加载时间)

<?php // 实例1 /**  * @start time  */ function proStartTime() {     global $startTime;     $mtime1...

PHP CLI模式开发敷衍笔记

PHP CLI模式开发不需要任何一种Web服务器(包括Apache或MS IIS等),这样,CLI可以运行在各种场合。 有两种方法可以运行PHP CLI脚本。 第一种方法是使用php -f /pat...

php获取网站浏览器信息【集合】

获取域名等信息 <? //获取当前的域名: echo $_SERVER['SERVER_NAME']; //获取来源网址,即点击来到本页的上页网址 echo $_SERVER["HTTP_RE...

简单站外跳转页面PHP源码

效果是这样滴~ <meta http-equiv="refresh" content="1;url='<?php echo $url;?>';"> content是跳转时间...