<?php
/**
 * 腾讯云短信发送
 */
namespace app\modules\third\sms;

use yii;
use Qcloud\Sms\SmsSingleSender;
use app\modules\common\Helper;
class Sms
{
    public $appid  = '1400288762';
    public $appkey  = 'bc5487bfc8eb0fea03ccbe5c898db4e4';
    public $cacheMobile = "cacheMobile:";
    public function getTemplate($tp_key = ''){
        $ret = 0;
        switch ($tp_key ) {
            case 'reg'://注册短信验证
                $ret = 481683;
                break;
            case 'modmobile'://修改手机号
                $ret = 482643;
                break;
            case 'login'://登录验证码
                $ret = 482645;
                break;   
            case 'resetpwd'://重置密码
                $ret = 482667;
                break;         
            default:
                $ret = 0;
        }
        return $ret;
    }
    /**
     * [send 发送短信验证码]
     * @method POST
     * @param  tp_code:模板 mobile:手机号
     * @return [type]                 [description]
     */
    public function send($param=[]){
        try {
            $phoneNumbers = $param['mobile'];
            $redis = Yii::$app->redis;
            //校验是否重复发送
            if($redis->exists($this->cacheMobile.$param['mobile'])){
                return true;
            }
            $templateId = $this->getTemplate($param['tp_code']);  // NOTE: 这里的模板 ID`7839`只是示例，真实的模板 ID 需要在短信控制台中申请
            if(empty($templateId)) return false;
            $smsSign = "誉通科技"; // NOTE: 签名参数使用的是`签名内容`，而不是`签名ID`。这里的签名"腾讯云"只是示例，真实的签名需要在短信控制台申请
            $ssender = new SmsSingleSender($this->appid, $this->appkey);
            $code = Helper::random_string('numeric',4);
            $params = [$code];
            $result = $ssender->sendWithParam("86", $phoneNumbers, $templateId,
            $params, $smsSign, "", "");
            $rsp = json_decode($result,true);
            if(isset($rsp['result']) && $rsp['result']==0){
                
                $redis->set($this->cacheMobile.$param['mobile'], $code, "EX", '300');
                return true;
            }else{
                return false;
            }
        } catch(\Exception $e) {
           return false;
        }
    }
    /**
     * [verifyCode 短信校验]
     * @method POST
     * @param mobile sms_code
     * @return [type]          [description]
     */
    public function verifyCode($param = []){
        $redis = Yii::$app->redis; 
        if(!$redis->exists($this->cacheMobile.$param['mobile'])){
            return false;
        }
        $real_code = $redis->get($this->cacheMobile.$param['mobile']);
        if($real_code==$param['sms_code']){
            return true;
        }else{
            return false;
        }
    }


}
