網(wǎng)建短信通接口

網(wǎng)建短信通相比較阿里云要方便很多,不需要企業(yè)認證县恕,簽名和模板也不需要審核峰搪,注冊完成之后就可以使用了。

官網(wǎng)地址

http://www.smschinese.cn/

短信類
<?php
/**
 * 手機短信類
 */

namespace sendmsg;
use think\Db;

class Sms
{
    /*
     * 發(fā)送手機短信
     * @param unknown $mobile 手機號
     * @param unknown $content 短信內(nèi)容
    */
    public function send($mobile, $content)
    {
        return $this->mysend_sms($mobile, $content);
    }

    /*
    您于{$send_time}綁定手機號个榕,驗證碼是:{$verify_code}篡石。【{$site_name}】
    -1  沒有該用戶賬戶
    -2  接口密鑰不正確 [查看密鑰]不是賬戶登陸密碼
    -21 MD5接口密鑰加密不正確
    -3  短信數(shù)量不足
    -11 該用戶被禁用
    -14 短信內(nèi)容出現(xiàn)非法字符
    -4  手機號格式不正確
    -41 手機號碼為空
    -42 短信內(nèi)容為空
    -51 短信簽名格式不正確接口簽名格式為:【簽名內(nèi)容】
    -6  IP限制
   大于0 短信發(fā)送數(shù)量
    http://utf8.api.smschinese.cn/?Uid=本站用戶名&Key=接口安全秘鑰&smsMob=手機號碼&smsText=驗證碼:8888
    */
    private function mysend_sms($mobile, $content)
    {
        $user_id = urlencode(config('smscf_wj_username')); // 這里填寫用戶名
        $key = urlencode(config('smscf_wj_key')); // 這里填接口安全密鑰
        if (!$mobile || !$content || !$user_id || !$key)
            return false;
        if (is_array($mobile)) {
            $mobile = implode(",", $mobile);
        }
        $mobile=urlencode($mobile);
        $content=urlencode($content);
        $url = "http://utf8.api.smschinese.cn/?Uid=" . $user_id . "&Key=" . $key . "&smsMob=" . $mobile . "&smsText=" . $content;
        if (function_exists('file_get_contents')) {
            $res = file_get_contents($url);
        }
        else {
            $ch = curl_init();
            $timeout = 5;
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
            $res = curl_exec($ch);
            curl_close($ch);
        }
        if ($res >0) {
            return true;
        }
        return false;
    }
}
獲取短信驗證碼
   /**
     * 獲取短信驗證碼
     * @param $input
     * @return mixed
     */
    public static function getCheckSms($input)
    {
        header("Content-Type: text/html;charset=utf-8");
        $sms_mobile = $input['mobile'];
        $sms_captcha = rand(100000, 999999);
        $log_msg = '您好西采!您的驗證碼是'.$sms_captcha.'凰萨,若非本人操作,請忽略苛让。';

        $recordData['mobile']       = $input["mobile"];
        $recordData['type']         = 1;
        $recordData['message']      = $log_msg;
        $recordData['create_time']  = date('Y-m-d H:i:s');
        $sms_id = Db::table('sms_record')->insertGetId($recordData);

        $result = self::sendSms($sms_mobile,$log_msg,1,$sms_captcha);
        if($result){
            // 短信記錄更新
            $recordDataUpdate['result_status'] = $result['state'] ? 0 : 1;
            $recordDataUpdate['result_info']  = '';
            $recordDataUpdate['result']  = json_encode($result);
            $recordDataUpdate['update_time']  = date('Y-m-d H:i:s');
            Db::table('sms_record')->where('id', $sms_id)->update($recordDataUpdate);
            if($result['state']){
                cache($sms_mobile."_code",$sms_captcha,600);
                $res['msg'] = '短信發(fā)送成功';
                return $res;
            }else{
                $res['error'] = $result['message'];
                return $res;
            }
        }
    }
驗證短信是否可以發(fā)送
    /**
     * 發(fā)送驗證碼
     * @author csdeshang
     * @param type $smslog_phone 手機號
     * @param type $smslog_msg 短信
     * @param type $smslog_type 類型
     * @param type $smslog_captcha 驗證碼
     * @param type $member_id 會員ID
     * @param type $member_name 會員名
     * @return type
     */
    public static function sendSms($smslog_phone,$smslog_msg,$smslog_type='',$smslog_captcha='')
    {

        //通過手機號判斷是否允許發(fā)送短信
        $begin_add_time = strtotime(date('Y-m-d'));
        $end_add_time = strtotime(date('Y-m-d')) + 24 * 3600;

        //同一IP 每天只能發(fā)送20條短信
        $condition = array();
        $condition['smslog_ip'] = request()->ip();
        $condition['create_time'] = array('between', array($begin_add_time, $end_add_time));
        if (self::getSmsCount($condition) > 20) {
            return array('state'=>FALSE,'code'=>10001,'message'=>'同一IP地址一天內(nèi)只能發(fā)送20條短信沟蔑,請勿多次獲取動態(tài)碼!');
        }

        //同一手機號,60秒才能提交發(fā)送一次
        $condition = array();
        $condition['mobile'] = $smslog_phone;
        $condition['create_time'] = array('between', array(TIMESTAMP-30, TIMESTAMP));
        if (self::getSmsCount($condition) > 0) {
            return array('state'=>FALSE,'code'=>10001,'message'=>'同一手機30秒后才能再次發(fā)送短信狱杰,請勿多次獲取動態(tài)碼瘦材!');
        }

        //同一手機號,每天只能發(fā)送5條短信
        $condition = array();
        $condition['mobile'] = $smslog_phone;
        $condition['create_time'] = array('between', array($begin_add_time, $end_add_time));
        if (self::getSmsCount($condition) > 5) {
            return array('state'=>FALSE,'code'=>10001,'message'=>'同一手機一天內(nèi)只能發(fā)送5條短信,請勿多次獲取動態(tài)碼仿畸!');
        }

        $sms = new \sendmsg\Sms();
        $result = $sms->send($smslog_phone, $smslog_msg);

        if ($result) {

            $data["mobile"] = $smslog_phone;
            $data["create_time"] = time();
            $data['smslog_ip'] = request()->ip();
            $data["status"] = 1;
            $data["remark"] = $smslog_captcha;

            $return = Db::table("sms_code")->insert($data);

            if($result>=0){
                return array('state'=>TRUE,'code'=>10000,'message'=>'');
            }else{
                return array('state'=>FALSE,'code'=>10001,'message'=>'手機短信發(fā)送失敗');
            }
        }else{
            return array('state'=>FALSE,'code'=>10001,'message'=>'手機短信發(fā)送失敗');
        }
    }
獲取短信條數(shù)
    /**
     * 獲取數(shù)據(jù)條數(shù)
     * @access public
     * @author csdeshang
     * @param type $condition 條件
     * @return type
     */
    public static function getSmsCount($condition) {
        return Db::table('sms_code')->where($condition)->count();
    }
短信記錄數(shù)據(jù)庫表

sms_code


1559023549(1).png
短信驗證
配置
    'sms_overtime'      => 600,
    'sms_overcount'     => 5,
驗證
    /**
     * 驗證短信驗證碼
     * @param $mobile 手機號
     * @param $code 驗證碼
     */
    public static function checkSmsCode($mobile, $code)
    {
        $map["mobile"] = $mobile;

        $arrSms = Db::table('sms_code')->field("id, create_time, status, remark, count")
            ->where($map)->order("id DESC")->find();

        if ($arrSms) {
            Db::table('sms_code')->where("id", $arrSms["id"])->setInc("count");

            if ($arrSms["remark"] == $code) {
                if (time() < ($arrSms["create_time"]+config("sms_overtime"))) {
                    if ($arrSms["count"] > config("sms_overcount")) {
                        return array('state'=>FALSE,'code'=>10001,'message'=>'驗證碼已失效');
                    }
                } else {
                    return array('state'=>FALSE,'code'=>10001,'message'=>'驗證碼已超時');
                }
            } else {
                return array('state'=>FALSE,'code'=>10001,'message'=>'短信驗證碼錯誤');
            }
        } else {
            return array('state'=>FALSE,'code'=>10001,'message'=>'短信驗證碼錯誤');
        }

        return array('state'=>TRUE,'code'=>10000,'message'=>'');
    }
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末食棕,一起剝皮案震驚了整個濱河市朗和,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌簿晓,老刑警劉巖眶拉,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異憔儿,居然都是意外死亡忆植,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門谒臼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來朝刊,“玉大人,你說我怎么就攤上這事蜈缤∈懊ィ” “怎么了?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵底哥,是天一觀的道長咙鞍。 經(jīng)常有香客問我,道長趾徽,這世上最難降的妖魔是什么续滋? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮附较,結果婚禮上吃粒,老公的妹妹穿的比我還像新娘。我一直安慰自己拒课,他們只是感情好徐勃,可當我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著早像,像睡著了一般僻肖。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上卢鹦,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天臀脏,我揣著相機與錄音,去河邊找鬼冀自。 笑死揉稚,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的熬粗。 我是一名探鬼主播搀玖,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼驻呐!你這毒婦竟也來了灌诅?” 一聲冷哼從身側響起芳来,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎猜拾,沒想到半個月后即舌,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡挎袜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年顽聂,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片盯仪。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡芜飘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出磨总,到底是詐尸還是另有隱情,我是刑警寧澤笼沥,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布蚪燕,位于F島的核電站,受9級特大地震影響奔浅,放射性物質(zhì)發(fā)生泄漏馆纳。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一汹桦、第九天 我趴在偏房一處隱蔽的房頂上張望鲁驶。 院中可真熱鬧,春花似錦舞骆、人聲如沸钥弯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽脆霎。三九已至,卻和暖如春狈惫,著一層夾襖步出監(jiān)牢的瞬間睛蛛,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工胧谈, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留忆肾,地道東北人。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓菱肖,卻偏偏與公主長得像客冈,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子蔑滓,可洞房花燭夜當晚...
    茶點故事閱讀 43,465評論 2 348