accountid = isset($accountid) ? $accountid : ''; $this->timestamp = date("YmdHis") + 7200; } else { throw new Exception("非法参数"); } } /** * @return string * 包头验证信息,使用Base64编码(账户Id:时间戳) */ private function getAuthorization() { $data = $this->accountid . ":" . $this->timestamp; return trim(base64_encode($data)); } /** * @return string * 验证参数,URL后必须带有sig参数,sig= MD5(账户Id + 时间戳,共32位)(注:转成大写) */ private function getSigParameter() { $sig = $this->accountid . $this->timestamp; return strtoupper(md5($sig)); } /** * @param $url * @param string $type * @return mixed|string */ private function getResult($url, $body = null, $type = 'json',$method) { $data = $this->connection($url,$body,$type,$method); if (isset($data) && !empty($data)) { $result = $data; } else { $result = '没有返回数据'; } return $result; } /** * @param $url * @param $type * @param $body post数据 * @param $method post或get * @return mixed|string */ private function connection($url, $body, $type,$method) { //var_dump($url);exit; if ($type == 'json') { $mine = 'application/json'; } else { $mine = 'application/xml'; } if (function_exists("curl_init")) { $header = array( 'Accept:' . $mine, 'Content-Type:' . $mine . ';charset=utf-8', 'Authorization:' . $this->getAuthorization(), ); $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HTTPHEADER, $header); if($method == 'post'){ curl_setopt($ch,CURLOPT_POST,1); curl_setopt($ch,CURLOPT_POSTFIELDS,$body); } curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); $result = curl_exec($ch); curl_close($ch); } else { $opts = array(); $opts['http'] = array(); $headers = array( "method" => strtoupper($method), ); $headers[]= 'Accept:'.$mine; $headers['header'] = array(); $headers['header'][] = "Authorization: ".$this->getAuthorization(); $headers['header'][]= 'Content-Type:'.$mine.';charset=utf-8'; if(!empty($body)) { $headers['header'][]= 'Content-Length:'.strlen($body); $headers['content']= $body; } $opts['http'] = $headers; $result = file_get_contents($url, false, stream_context_create($opts)); } return $result; } /** * @param $appId * @param $verifyCode * @param $to * @param string $type * @return mixed|string * @throws Exception */ public function voiceCode($appId,$verifyCode,$to,$type = 'json'){ $url = self::BaseUrl . '?s=/SendCode/voice/accountid/' . $this->accountid . '/sig/' . $this->getSigParameter(); if($type == 'json'){ $body_json = array('voiceCode'=>array( 'appId'=>$appId, 'verifyCode'=>$verifyCode, 'to'=>$to )); $body = json_encode($body_json); }elseif($type == 'xml'){ $body_xml = ' '.$verifyCode.' '.$to.' '.$appId.' '; $body = trim($body_xml); }else { throw new Exception("只能json或xml,默认为json"); } $data = $this->getResult($url, $body, $type,'post'); return $data; } /** * @param $appId * @param $to * @param $templateId * @param null $param * @param string $type * @return mixed|string * @throws Exception */ public function sendSM($appId,$to,$templateId,$param=null,$type = 'json'){ $url = self::BaseUrl . '?s=/SendCode/send/accountid/' . $this->accountid . '/sig/' . $this->getSigParameter(); if($type == 'json'){ $url="http://api.vlpush.com/sms/send_sms"; $post_data['appid']=C('sms_set.smtp'); $post_data['apikey']=C('sms_set.smtp_account'); $post_data['templateid']=C('sms_set.smtp_password'); $post_data['phone']=$to; $post_data['param']=$param; $o = ""; foreach ( $post_data as $k => $v ) { $o.= "$k=" . urlencode( $v ). "&" ; } $post_data = substr($o,0,-1); $res = request_post($url, $post_data); $code=json_decode($res,true); if($code['code']==200){ $code['send_status']='000000'; }else{ $res = request_post($url, $post_data); $code=json_decode($res,true); if($code['code']==200){ $code['send_status']='000000'; }else{ $code['send_status']='111111'; } } return json_encode($code); }elseif($type == 'xml'){ $body_xml = ' '.$templateId.' '.$to.' '.$param.' '.$appId.' '; $body = trim($body_xml); }else { throw new Exception("只能json或xml,默认为json"); } $data = $this->getResult($url, $body, $type,'post'); return $data; } /** * @param $appId * @param $to * @param $templateId * @param null $param * @param string $type * @return mixed|string * @throws Exception */ public function sendSMMessage($appId,$to,$templateId,$param=null,$type = 'json'){ $url = self::BaseUrl . '?s=/SendCode/send/accountid/' . $this->accountid . '/sig/' . $this->getSigParameter(); if($type == 'json'){ $url="http://api.vlpush.com/sms/send_sms"; $post_data['appid']=C('sms_set.smtp'); $post_data['apikey']=C('sms_set.smtp_account'); $post_data['templateid']=C('BRUSH_SMS_ID'); $post_data['phone']=$to; $post_data['param']=$param; $o = ""; foreach ( $post_data as $k => $v ) { $o.= "$k=" . urlencode( $v ). "&" ; } $post_data = substr($o,0,-1); $res = request_post($url, $post_data); $code=json_decode($res,true); if($code['code']==200){ $code['send_status']='000000'; }else{ $res = request_post($url, $post_data); $code=json_decode($res,true); if($code['code']==200){ $code['send_status']='000000'; }else{ $code['send_status']='111111'; } } return json_encode($code); }elseif($type == 'xml'){ $body_xml = ' '.$templateId.' '.$to.' '.$param.' '.$appId.' '; $body = trim($body_xml); }else { throw new Exception("只能json或xml,默认为json"); } $data = $this->getResult($url, $body, $type,'post'); return $data; } /** * 阿里大于 * @param $phone 手机号 * @param $code 验证码 * @param int $delay 有效时间 * @return bool * author: xmy 280564871@qq.com */ public function alidayu_send($phone,$code,$delay=10){ $result = $this->alidayu($phone,$code,$delay); if($result->result->success == true){ return true; }else{ return false; } } /** * 阿里大于新 * @param $phone 手机号 * @param $code 验证码 * @param int $delay 有效时间 * @return bool * author: wyr 840186209@qq.com */ public function alidayunew_send($phone,$code,$delay=10){ $result = $this->alidayunew($phone,$code,$delay); if($result['Code'] == 'OK'){ return true; }else{ return false; } } /** * 阿里大于(消息服务) * @param $phone 手机号 * @param $code 验证码 * @param int $delay 有效时间 * @return bool * author: cy 707670631@qq.com */ public function alidayumsg_send($phone,$code,$delay=10){ $result = $this->alidayumsg($phone,$code,$delay); return $result; } /** * 阿里大于 发送短信 * @param $phone * @param $code * @param int $delay * author: xmy 280564871@qq.com */ private function alidayu($phone,$code,$delay=10){ $config = api('Config/lists'); C($config); //添加配置 $temp_code = C("alidayu.template_id"); //模板ID $param = "{'code':'$code'}"; //参数 // $param = "{'code':'$code','delay','$delay'}"; //参数 $sing_name = C("alidayu.sign"); //审核过的签名 vendor('Alidayu.top.TopClient'); vendor('Alidayu.top.ResultSet'); vendor('Alidayu.top.RequestCheckUtil'); vendor('Alidayu.top.TopLogger'); vendor('Alidayu.top.request.AlibabaAliqinFcSmsNumSendRequest'); $dayu = new \TopClient(); $dayu->appkey = C("alidayu.appkey"); $dayu->secretKey = C("alidayu.secretKey"); $req = new \AlibabaAliqinFcSmsNumSendRequest(); $req->setExtend(""); $req->setSmsType("normal");//设置短信类型 $req->setSmsFreeSignName($sing_name);//短信签名 //短信模板变量,传参规则{"key":"value"},key的名字须和申请模板中的变量名一致,多个变量之间以逗号隔开。 //示例:针对模板“验证码${code},您正在进行${product}身份验证,打死不要告诉别人哦!”,传参时需传入{"code":"1234","product":"alidayu"} $req->setSmsParam($param); $req->setRecNum($phone);//发送电话号 $req->setSmsTemplateCode($temp_code);//模板ID $resp = $dayu->execute($req); return $resp; } /** * 阿里大于新 发送短信 * @param $phone * @param $code * @param int $delay * author: wyr 840186209@qq.com */ private function alidayunew($phone,$code,$delay=10){ $config = api('Config/lists'); C($config); //添加配置 $temp_code = C("alidayunew.template_id"); //模板ID $sing_name = C("alidayunew.sign"); //审核过的签名 $region = C("alidayunew.region"); //region(区域) $domain = C("alidayunew.domain"); //短信API产品域名 $accessKeyId = C("alidayunew.appkey"); // $accessKeySecret = C("alidayunew.secretKey"); // $product = C("alidayunew.product"); // // $param = '{\"code\":\"$code"\",\"product\":\"$sing_name\}'; //参数 $param = json_encode(array('code'=>$code)); //参数 //初始化访问的acsCleint vendor('Alidayunew.msg_sdk.aliyun-php-sdk-core.Config'); vendor('Alidayunew.api_sdk.Dysmsapi.Request.V20170525.SendSmsRequest'); vendor('Alidayunew.api_sdk.Dysmsapi.Request.V20170525.QuerySendDetailsRequest'); $profile = \DefaultProfile::getProfile($region, $accessKeyId, $accessKeySecret); \DefaultProfile::addEndpoint("cn-hangzhou", "cn-hangzhou", $product, $domain); $acsClient= new \DefaultAcsClient($profile); $request = new \Dysmsapi\Request\V20170525\SendSmsRequest; //必填-短信接收号码。支持以逗号分隔的形式进行批量调用,批量上限为20个手机号码,批量调用相对于单条调用及时性稍有延迟,验证码类型的短信推荐使用单条调用的方式 // $request->setExtend(""); // $request->setSmsType("normal");//设置短信类型 $request->setPhoneNumbers($phone); //必填-短信签名 $request->setSignName($sing_name); //必填-短信模板Code $request->setTemplateCode($temp_code); //选填-假如模板中存在变量需要替换则为必填(JSON格式) $request->setTemplateParam($param); //选填-发送短信流水号 // $request->setOutId("1234"); $resp = $acsClient->getAcsResponse($request); //var_dump($resp); $resp = json_decode(json_encode($resp),true); return $resp; //发起访问请求 //$acsResponse = $acsClient->getAcsResponse($request); } /** * 阿里大于消息服务 * @param $phone * @param $code * @param int $delay * author: cy 707670631@qq.com */ private function alidayumsg($phone,$code,$delay=10){ include './ThinkPHP/Library/Vendor/Alidayumsg/php_sdk/mns-autoloader.php'; $this->endPoint = C("alidayumsg.domain"); // eg. http://1234567890123456.mns.cn-shenzhen.aliyuncs.com $this->accessId = C("alidayumsg.appkey"); $this->accessKey = C("alidayumsg.secretKey"); $this->client = new Client($this->endPoint, $this->accessId, $this->accessKey); /** * Step 2. 获取主题引用 */ $topicName = C("alidayumsg.topic"); $topic = $this->client->getTopicRef($topicName); /** * Step 3. 生成SMS消息属性 */ // 3.1 设置发送短信的签名(SMSSignName)和模板(SMSTemplateCode) $batchSmsAttributes = new BatchSmsAttributes(C("alidayumsg.sign"), C("alidayumsg.template_id")); // 3.2 (如果在短信模板中定义了参数)指定短信模板中对应参数的值 $batchSmsAttributes->addReceiver($phone, array("code" => (string)$code)); // $batchSmsAttributes->addReceiver("15751006847", array("code" => "123456")); $messageAttributes = new MessageAttributes(array($batchSmsAttributes)); /** * Step 4. 设置SMS消息体(必须) * * 注:目前暂时不支持消息内容为空,需要指定消息内容,不为空即可。 */ $messageBody = "smsmessage"; /** * Step 5. 发布SMS消息 */ $request = new PublishMessageRequest($messageBody, $messageAttributes); try { $res = $topic->publishMessage($request); return $res->isSucceed(); } catch (MnsException $e) { return false; } } /** * 极光 发送短信 * @param $phone * @param $code * @param int $delay */ public function jiguang($phone,$code,$delay){ vendor('Jiguang.JSMS'); $appKey = C("jiguang.appkey"); $masterSecret = C("jiguang.secretKey"); $temp_id = C("jiguang.temp"); $temp_para = ['code' => "$code"]; $client = new JSMS($appKey, $masterSecret); $response = $client->sendMessage($phone, $temp_id, $temp_para); if ($response['http_code'] == '200'){ return true; }else{ return false; } } //极光声音验证码 public function jiguang_voice($phone){ $appKey = C("jiguang.appkey"); $masterSecret = C("jiguang.secretKey"); $phone = $phone; $client = new JSMS($appKey, $masterSecret); $response = $client->sendVoiceCode($phone); if ($response['http_code'] == '200'){ return true; }else{ return false; } } public function jiguang_code($phone){ $appKey = C("jiguang.appkey"); $masterSecret = C("jiguang.secretKey"); $phone = $phone; $client = new JSMS($appKey, $masterSecret); $response = $client->sendCode($phone, 1); if ($response['http_code'] == '200'){ return true; }else{ return false; } } public function jiguang_check($msg_id,$code){ $appKey = C("jiguang.appkey"); $masterSecret = C("jiguang.secretKey"); $msg_id = $msg_id; $code = $code; $client = new JSMS($appKey, $masterSecret); $response = $client->checkCode($msg_id, $code); if ($response['http_code'] == '200'){ return true; }else{ return false; } } }