<?php
/**
 * Created by PhpStorm.
 * User: kung
 * Date: 18-1-26
 * Time: 上午10:41
 */
class Ymsms
{
    private $_sms_addr = 'bjmtn.b2m.cn';
    private $_send_uri = '/simpleinter/sendSMS';
    private $_send_batch = '/simpleinter/sendPersonalitySMS';
    private $_voice_uri = '/voice/sendSMS';
    private $_appid    = '****-***-****-*****';
    private $_aespwd    = '***********';
    private $_template = '您好,您的验证码是:%s【***】';
    public function __construct()
    {
        $this->CI =& get_instance();
    }
    private function http_request($url, $data)
    {
        $data = http_build_query($data);
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_POST, TRUE);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
        $output = curl_exec($curl);
        curl_close($curl);
        return $output;
    }
   
    private function signmd5($timestamp){
        return md5($this->_appid.$this->_aespwd.$timestamp);
    }
//单条短信发送
    public function send_sms($mobile,$vars)
    {
        $result = false;
        $content = sprintf($this->_template, $vars);
        $timestamp = date("YmdHis");
        $sign = $this->signmd5($timestamp);
        $data = array(
            "appId" => $this->_appid,
            "timestamp" => $timestamp,
            "sign" => $sign,
            "mobiles" => $mobile,
            "content" =>  $content,
            "customSmsId" => "10001",
            "timerTime" => "",
            "extendedCode" => "1234"
        );
        $url = $this->_sms_addr.$this->_send_uri;
        $resobj = $this->http_request($url, $data);
        $resArr = json_decode($resobj,true);
        if($resArr['code'] == "SUCCESS")
            $result = true;
        return $result;
    }
//语音短信发送
    public function voice_sms($mobile,$vars)
    {
        $result = false;
        $content = $vars;
        $timestamp = date("YmdHis");
        $sign = $this->signmd5($timestamp);
        $data = array(
            "appId" => $this->_appid,
            "timestamp" => $timestamp,
            "sign" => $sign,
            "mobile" => $mobile,
            "content" =>  "$content",
            "customSmsId" => "10001",
            "timerTime" => "",
            "extendedCode" => "123"
        );
        $url = $this->_sms_addr.$this->_voice_uri;
        $resobj = $this->http_request($url, $data);
        $resArr = json_decode($resobj,true);
        if($resArr['code'] == "SUCCESS")
            $result = true;
        return $result;
    }
//批量发送
    public function send_batch($batch_data)
    {
        $result = false;
        $timestamp = date("YmdHis");
        $sign = $this->signmd5($timestamp);
        $data = array(
            "appId" => $this->_appid,
            "timestamp" => $timestamp,
            "sign" => $sign,
            "customSmsId" => "10001",
            "timerTime" => "",
            "extendedCode" => "1234"
        );
        $msg_count = 0;
        foreach($batch_data as $sms){
            $data[$sms['mobile']] = $sms['content'];
            $msg_per_count = ceil(mb_strlen($sms['content'])/68);
            $msg_count = $msg_count + $msg_per_count;
        }
        $this->log = []; // clear
        $this->log['call_method'] = __METHOD__;
        $this->log['batch_data'] = $batch_data;
        $this->log['batch_count'] = count($batch_data);
        $url = $this->_sms_addr.$this->_send_batch;
        $resobj = $this->http_request($url, $data);
        $this->log['response_body'] = $resobj;
        $resArr = json_decode($resobj,true);
        if($resArr['code'] == "SUCCESS"){
            $result = true;
            $this->log['send_status'] = 'success';
            $this->log['send_credit'] = count($batch_data);
        }
        else{
            $this->log['send_status'] = 'failure';
        }
        $this->save_log();
        return $msg_count;
    }
}