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;
}
}
}