You've already forked qlg.tsgz.moe
							
							
		
			
				
	
	
		
			127 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			127 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
| <?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;
 | |
| 		}
 | |
| 	}
 | |
| }
 |