zoukankan      html  css  js  c++  java
  • PHP SDK短信接口

    一、代码

    class Sdkmessage
    {
        private $config;
    
        /**
         * sdk 短信接口
         * @param $tel 手机号
         * @param $content  短信内容
         * @return bool
         */
        public function send($tel, $content)
        {
            $content = "【给力餐饮】您的短信验证码为:".$content;
            $flag         = 0;
            $params       = '';
            $this->config = config('sdk_sms');
            //要post的数据
            $argv = array(
                'sn'      => $this->config['sn'], ////替换成您自己的序列号
                'pwd'     => strtoupper(md5($this->config['sn'] . $this->config['pwd'])), //此处密码需要加密 加密方式为 md5(sn+password) 32位大写
                'mobile'  => $tel,//手机号 多个用英文的逗号隔开 post理论没有长度限制.推荐群发一次小于等于10000个手机号
                'content' => iconv("UTF-8", "gb2312//IGNORE", $content),//短信内容
                'ext'     => '',
                'stime'   => '',//定时时间 格式为2011-6-29 11:09:21
                'rrid'    => ''
            );
            //构造要post的字符串
            foreach ($argv as $key => $value) {
                if ($flag != 0) {
                    $params .= "&";
                    $flag   = 1;
                }
                $params .= $key . "=";
                $params .= urlencode($value);
                $flag   = 1;
            }
            $length = strlen($params);
            //创建socket连接
            $fp = fsockopen("sdk.entinfo.cn", 8060, $errno, $errstr, 10) or exit($errstr . "--->" . $errno);
            //构造post请求的头
            $header = "POST /webservice.asmx/mt HTTP/1.1
    ";
            $header .= "Host:sdk.entinfo.cn
    ";
            $header .= "Content-Type: application/x-www-form-urlencoded
    ";
            $header .= "Content-Length: " . $length . "
    ";
            $header .= "Connection: Close
    
    ";
            //添加post的字符串
            $header .= $params . "
    ";
            //发送post的数据
            fputs($fp, $header);
            $inheader = 1;
            while (!feof($fp)) {
                $line = fgets($fp, 1024); //去除请求包的头只显示页面的返回数据
                if ($inheader && ($line == "
    " || $line == "
    ")) {
                    $inheader = 0;
                }
                if ($inheader == 0) {
                    // echo $line;
                }
            }
    //        dump($line);
            //<string xmlns="http://tempuri.org/">-5</string>
            $line   = str_replace("<string xmlns="http://tempuri.org/">", "", $line);
            $line   = str_replace("</string>", "", $line);
            $result = explode("-", $line);
    //        dump($result);
            // echo $line."-------------";
            if (count($result) > 1)
                return ['code'=>'ERROR','message'=>'发送失败'];
            else
                return ['code'=>'OK','message'=>'发送成功'];
        }
    
    }

    二、调用

    class Message extends Controller
    {
        const TYPE = 'Sdkmessage';//Alimessage
        public $obj;
    
        /**
         * @api {post} /mobile/message/send 发送短信
         * @apiName  /message/send
         * @apiGroup 短信验证
         * @apiParam {string} mobile 手机号
         * @apiSuccess {String} status 状态值:{'ok':成功,'error':失败,'msg':提示信息}
         **/
        public function send()
        {
            try {
                if (!request()->isPost()) {
                    return tips('非法请求');
                }
                $mobile = input('mobile', '', 'trim');
                if (empty($mobile)) return tips('手机号不能为空');
                $cust = db('customer')->where('tel', $mobile)->where('status', 1)->find();
                if (empty($cust)) {
                    return tips('手机号不存在,请重新输入');
                }
    
                $class     = "\message\" . self::TYPE;
                $this->obj = new $class();
    
                $code = rand(100000, 999999);
                $data = [
                    'content'  => $code,
                    'mobile'   => $mobile,
                    'type'     => 0,
                    'status'   => 1,
                    'create_time' => time()
                ];
    
                $id = db('mobile_apply')->insert($data);
    
                //发送短信
                $res = $this->obj->send($mobile, $code);
                if ($res['code'] == 'OK') {
                    db('mobile_apply')->where('status', $id)
                        ->update(['status' => 2, 'msg' => json($res['message'])]);
                    return tips('发送成功', 1, $res);
                } else {
                    return tips($res['message']);
                }
            }catch(Exception $e)
            {
                return tips($e->getMessage());
            }
    
        }
    
        /**
         * @api {post} /mobile/message/valid 验证
         * @apiName  /message/valid
         * @apiGroup 短信验证
         * @apiParam {string} mobile 手机号
         * @apiParam {string} code 验证码
         * @apiSuccess {String} status 状态值:{'ok':成功,'error':失败,'msg':提示信息}
         **/
        public function valid()
        {
            Session::prefix('index_auth');
            if (request()->isPost()) {
                try {
                    $mobile = input('mobile', '', 'trim');
                    $code   = input('code', '', 'trim');
    
                    $sms          = db('mobile_apply')
                        ->where(['mobile' => $mobile, 'type' => ['eq', 0], 'status' => 2])
                        ->order('create_time desc')
                        ->find();
    
                    if (!$sms) {
                        throw new Exception('短信验证码已过期');
                    }
    //                dump($sms);
                    if ((time() - $sms['create_time']) > $this->config['expireTime']) {
                        throw new Exception('短信验证码已经过期');
                    }
    
                    if ($code == $sms['content']) {
                        db('mobile_apply')->where(['mobile' => $mobile, 'type' => ['eq', 0]])->delete();
                        //查询用户的信息
                        $info = db('cust_account')->where(array('tel' => $mobile, 'status' => 1))->order('create_time desc')->find();
                        session('tel', $mobile);
                        session('name', $info['account']);
                        session('user_id', $info['cust_id']);//
                        session('cid', $info['id']);
                        return tips('验证成功', 1);
                    } else {
                        return tips('验证失败');
                    }
                } catch (Exception $e) {
                    return tips($e->getMessage());
                }
            } else {
                return tips('非法请求');
            }
        }
    
    
    }
  • 相关阅读:
    路由器实验之配置实验、直连路由验证、静态路由
    RIP路由选择实验
    多线程编程核心技术(十五)CountDownLatch和CyclicBarrier
    maven新建项目时的Run配置
    archetypeCatalog=internal
    Archetype插件的介绍和使用
    maven POM中的source和target编译参数是什么意思
    什么是IOC?
    什么是POJO?
    @SpringBootConfiguration注解
  • 原文地址:https://www.cnblogs.com/ivy-zheng/p/12457553.html
Copyright © 2011-2022 走看看