<?php
namespace addons\dysms\model;
use think\addons\BaseModel as Base;
use think\Db;
use Aliyun\Core\Config;
use Aliyun\Core\Profile\DefaultProfile;
use Aliyun\Core\DefaultAcsClient;
use Aliyun\Api\Sms\Request\V20170525\SendSmsRequest;
/**
 * ============================================================================
 * 阿里云-云通信接口
 */
class Dysms extends Base{
	public function getConfigs(){
		$data = cache('dysms_sms');
		if(!$data){
			$rs = Db::name('addons')->where('name','Dysms')->field('config')->find();
		    $data =  json_decode($rs['config'],true);
		    cache('dysms_sms',$data,31622400);
		}
		return $data;
	}

	public function install(){
		Db::startTrans();
		try{
			$hooks = ['sendSMS'];
			$this->bindHoods("Dysms", $hooks);
			Db::commit();
			return true;
		}catch (\Exception $e) {
	 		Db::rollback();
	  		return false;
	   	}
	}
	public function uninstall(){
		Db::startTrans();
		try{
			$hooks = ['sendSMS'];
			$this->unbindHoods("Dysms", $hooks);
			Db::commit();
			return true;
		}catch (\Exception $e) {
	 		Db::rollback();
	  		return false;
	   	}
	}
	/**
	 * 发送短信接口
	 */
	public function http($params){
		require_once  WST_ADDON_PATH.'dysms/sdk/vendor/autoload.php';
		Config::load();
		$smsConf = $this->getConfigs();
		//此处需要替换成自己的AK信息
	    $accessKeyId = $smsConf['smsKey'];;
	    $accessKeySecret = $smsConf['smsPass'];
	    //短信API产品名(短信产品名固定,无需修改)
	    $product = "Dysmsapi";
	    //短信API产品域名(接口地址固定,无需修改)
	    $domain = "dysmsapi.aliyuncs.com";
	    //暂时不支持多Region(目前仅支持cn-hangzhou请勿修改)
	    $region = "cn-hangzhou";
	    //初始化访问的acsCleint
	    $profile = DefaultProfile::getProfile($region, $accessKeyId, $accessKeySecret);
	    DefaultProfile::addEndpoint("cn-hangzhou", "cn-hangzhou", $product, $domain);
	    $acsClient= new DefaultAcsClient($profile);
	    $request = new SendSmsRequest();
	    //必填-短信接收号码。支持以逗号分隔的形式进行批量调用,批量上限为1000个手机号码,批量调用相对于单条调用及时性稍有延迟,验证码类型的短信推荐使用单条调用的方式
	    $request->setPhoneNumbers($params['phoneNumber']);
	    //必填-短信签名
	    $request->setSignName($smsConf["signature"]);
	    //必填-短信模板Code
	    $request->setTemplateCode($smsConf[$params['params']['tpl']['tplCode']]);
	    //选填-假如模板中存在变量需要替换则为必填(JSON格式),友情提示:如果JSON中需要带换行符,请参照标准的JSON协议对换行符的要求,比如短信内容中包含\r\n的情况在JSON中需要表示成\\r\\n,否则会导致JSON在服务端解析失败
	    $request->setTemplateParam($params['content']);
	    //$request->setTemplateParam(json_encode($params['params']['params']));
	    // $request->setTemplateParam("{\"orderNo\":\"Tom\", \"orderStatue\":\"123\"}");
	    //选填-发送短信流水号
	    $request->setOutId($params['timeId']);
	    //发起访问请求
	    //dump($request);
	    $resp = $acsClient->getAcsResponse($request);
        return $resp;
	}

	public function sendSMS($params){
		$smsConf = $this->getConfigs();
		$code = [];
		$isVerfy = false;
		foreach($params['params']['params'] as $key =>$v){
			//$key = str_replace('_','',$key);
			if($key=='VERFIY_CODE')$isVerfy = true;
		}
		foreach($params['params']['params'] as $key =>$v){
			//$key = str_replace('_','',$key);
			if($isVerfy && $key=='VERFIY_CODE'){
                 $code[] = '"'.$key.'":"'.$v.'"';
			}
		}
		foreach($params['params']['params'] as $key =>$v){
			//$key = str_replace('_','',$key);
			if($isVerfy==false && $key!='VERFIY_CODE'){
                 $code[] = '"'.$key.'":"'.$v.'"';
			}
		}
        $codes = "{".implode(',',$code)."}";
        $params['content'] = $codes;
        $timeId = time().rand(100,999);
        $params['timeId'] = $timeId;
		$code = $this->http($params);
		$log = model('common/logSms')->get($params['smsId']);
		$log->smsReturnCode = json_encode($code);
		$log->smsContent = $codes."||".$params['params']['tpl']['tplCode']."||".$smsConf[$params['params']['tpl']['tplCode']]."||".$timeId;
		$log->save();
		try{
			if(strtolower($code->Message)=='ok'){
	            $params['status']['msg'] = '短信发送成功!';
	            $params['status']['status'] = 1;
			}
		}catch (\Exception $e) {
            $params['status']['msg'] = $code->Message;
	        $params['status']['status'] = -1;
		}
	}
}