中国网建发送验证码

泄露秘密 提交于 2019-12-05 05:03:48

首先要设置中国网建的签名(没设置是不能用的):

 

 

 

 

之后拿发送时需要的   uid  和  key

 

 

 

 

 

 

接下来就可以开始写代码了

 

把这两个方法写到common.php文件中,我用的是 fastadmin 框架(thinkphp框架都可以写到common里),可以在其他地方直接调用

if (!function_exists('sendSms')) {    /**     * 发短信     * @param $mobile int 手机号码     * @param $content string 短信内容     * @return array      */    function sendSms($mobile,$content){        $uid = '******';    //上面拿到的 uid        $pwd = '*********';   //上面拿到的 key        $url='http://utf8.sms.webchinese.cn/?Uid='.$uid.'&Key='.$pwd.'&smsMob='.$mobile.'&smsText='.$content;        $string = smsCURL($url);        if ($string>0) {  //发送成功            $data=array(                'code'=>1,                'msg'=>"短信发送成功",            );        }else{            $data=array(                'code'=>0,                'msg'=>"短信发送失败",            );        }        return $data;    }}
if (!function_exists('smsCURL')) {    /**     * curl     * @param $url string 请求地址     */    function smsCURL($url=''){        $ch = curl_init();        $timeout = 5;        curl_setopt ($ch, CURLOPT_URL, $url);        curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);        curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);        $file_contents = curl_exec($ch);        curl_close($ch);        return $file_contents;    }}

 

在common里写完两个方法后,找到   application/common/library文件夹下,找到  Sms.php,对里面的  send 方法进行改写。

/** * 发送验证码 * * @param   int    $mobile 手机号 * @param   int    $code   验证码,为空时将自动生成4位数字 * @param   string $event  事件 * @return  boolean */public static function send($mobile, $code = null, $event = 'default'){    $code = is_null($code) ? mt_rand(1000, 9999) : $code;      $content='本次短信验证码为【'.$code.'】,5分钟内有效';    $res = sendSms($mobile,$content); //调用刚写在 common 里的方法    if ($res['code'] == 1) {  //发送成功        $time = time();        $ip = request()->ip();        $sms = \app\common\model\Sms::create(['event' => $event, 'mobile' => $mobile, 'code' => $code, 'ip' => $ip, 'createtime' => $time]);        if (!$sms) {            return false;        }else{            return true;        }    }else{        return false;    }}

 

其他地方调用:

Sms::send($mobile, mt_rand(1000, 9999), "register");

调用示例:

/** * 发送验证码 * * @param string $mobile 手机号 * @param string $type 类型 */public function sendMsg(){    $mobile = $this->request->param('mobile');    if (!$mobile) {        $this->error(__('Invalid parameters'));    }   //进行正则校验    if (!Validate::regex($mobile, "^1\d{10}$")) {        $this->error(__('Mobile is incorrect'));    }   //判断是否已被绑定或注册    $user = Db::name("user")->field("id")->where("mobile", $mobile)->find();    if (!empty($user)) {        $this->error("该手机号已被绑定");    }   //调用发送验证码    if (Sms::send($mobile, mt_rand(1000, 9999), "register")) {        $this->success("发送成功");    } else {        $this->error("发送失败");    }}
   /**     * 校验验证码     *     * @param string $mobile 手机号     * @param string $captcha 验证码     */    public function checkCaptcha()    {        $mobile = $this->request->param("mobile");        $captcha = $this->request->param("captcha");        $type = "register";        if (!$captcha) {            $this->error(__('Invalid parameters'));        }        if (!Validate::regex($mobile, "^1\d{10}$")) {            $this->error(__('Mobile is incorrect'));        }        $ret = Sms::check($mobile, $captcha, $type);        if (!$ret) {            $this->error(__('验证码错误或已过期'));        }        Sms::flush($mobile, $type);        $user = Db::name("user")->field("id")->where("mobile", $mobile)->find();        if (!empty($user)) {            $this->error("该手机号已被绑定");        }        if(Db::name("user")->where("id", $this->_user["id"])->setField("mobile",$mobile)){            $this->success("绑定成功");        }else{            $this->error("绑定失败");        }    }

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!