网易云信短信验证php,网易云 短信验证码+验证+tp5

* Created by PhpStorm.

* User: Administrator

* Date: 2018/4/8

* Time: 15:15*/namespace app\api\controller;classServerApi

{private $AppKey;private $AppSecret;private $Nonce; //随机数(最大长度128个字符)

private $CurTime; //当前UTC时间戳,从1970年1月1日0点0 分0 秒开始到现在的秒数(String)

private $CheckSum;//SHA1(AppSecret + Nonce + CurTime),三个参数拼接的字符串,进行SHA1哈希计算,转化成16进制字符(String,小写)

const HEX_DIGITS = "0123456789abcdef";/**

* 参数初始化

* @param $AppKey

* @param $AppSecret

* @param $RequestType [选择php请求方式,fsockopen或curl,若为curl方式,请检查php配置是否开启]*/

public function __construct($AppKey,$AppSecret,$RequestType=‘curl‘){$this->AppKey = $AppKey;$this->AppSecret = $AppSecret;$this->RequestType = $RequestType;

}/**

* API checksum校验生成

* @param void

* @return $CheckSum(对象私有属性)*/

public functioncheckSumBuilder(){//此部分生成随机字符串

$hex_digits = self::HEX_DIGITS;$this->Nonce;for($i=0;$i<128;$i++){ //随机字符串最大128个字符,也可以小于该数

$this->Nonce.= $hex_digits[rand(0,15)];

}$this->CurTime = time(); //当前时间戳,以秒为单位

$join_string = $this->AppSecret.$this->Nonce.$this->CurTime;$this->CheckSum = sha1($join_string);

}/**

* 将json字符串转化成php数组

* @param $json_str

* @return $json_arr*/

public function json_to_array($json_str){if(is_null(json_decode($json_str))){$json_str = $json_str;

}else{$json_str = json_decode($json_str);

}$json_arr=array();foreach($json_str as $k=>$w){if(is_object($w)){$json_arr[$k]= $this->json_to_array($w); //判断类型是不是object

}else if(is_array($w)){$json_arr[$k]= $this->json_to_array($w);

}else{$json_arr[$k]= $w;

}

}return $json_arr;

}/**

* 使用CURL方式发送post请求

* @param $url [请求地址]

* @param $data [array格式数据]

* @return $请求返回结果(array)*/

public function postDataCurl($url,$data){$this->checkSumBuilder();//发送请求前需先生成checkSum

$timeout = 5000;$http_header = array(‘AppKey:‘.$this->AppKey,

‘Nonce:‘.$this->Nonce,

‘CurTime:‘.$this->CurTime,

‘CheckSum:‘.$this->CheckSum,

‘Content-Type:application/x-www-form-urlencoded;charset=utf-8‘);$postdata = ‘‘;foreach ($data as $key=>$value){$postdata.= ($key.‘=‘.$value.‘&‘);

}$ch =curl_init();

curl_setopt ($ch, CURLOPT_URL, $url);

curl_setopt ($ch, CURLOPT_POST, 1);

curl_setopt ($ch, CURLOPT_POSTFIELDS, $postdata);

curl_setopt ($ch, CURLOPT_HEADER, false);

curl_setopt ($ch, CURLOPT_HTTPHEADER,$http_header);

curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER,false); //处理http证书问题

curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);

curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);$result = curl_exec($ch);if (false === $result) {$result = curl_errno($ch);

}

curl_close($ch);return $this->json_to_array($result) ;

}/**

* 使用FSOCKOPEN方式发送post请求

* @param $url [请求地址]

* @param $data [array格式数据]

* @return $请求返回结果(array)*/

public function postDataFsockopen($url,$data){$this->checkSumBuilder();//发送请求前需先生成checkSum

$postdata = ‘‘;foreach ($data as $key=>$value){$postdata.= ($key.‘=‘.urlencode($value).‘&‘);

}//building POST-request:

$URL_Info=parse_url($url);if(!isset($URL_Info["port"])){$URL_Info["port"]=80;

}$request = ‘‘;$request.="POST ".$URL_Info["path"]." HTTP/1.1\r\n";$request.="Host:".$URL_Info["host"]."\r\n";$request.="Content-type: application/x-www-form-urlencoded;charset=utf-8\r\n";$request.="Content-length: ".strlen($postdata)."\r\n";$request.="Connection: close\r\n";$request.="AppKey: ".$this->AppKey."\r\n";$request.="Nonce: ".$this->Nonce."\r\n";$request.="CurTime: ".$this->CurTime."\r\n";$request.="CheckSum: ".$this->CheckSum."\r\n";$request.="\r\n";$request.=$postdata."\r\n";print_r($request);$fp = fsockopen($URL_Info["host"],$URL_Info["port"]);fputs($fp, $request);$result = ‘‘;while(!feof($fp)) {$result .= fgets($fp, 128);

}fclose($fp);$str_s = strpos($result,‘{‘);$str_e = strrpos($result,‘}‘);$str = substr($result, $str_s,$str_e-$str_s+1);print_r($result);return $this->json_to_array($str);

}/**

* 发送短信验证码

* @param $templateid [模板编号(由客服配置之后告知开发者)]

* @param $mobile [目标手机号]

* @param $deviceId [目标设备号,可选参数]

* @return $codeLen [验证码长度,范围4~10,默认为4]*/

public function sendSmsCode($templateid,$mobile,$deviceId=‘‘,$codeLen){$url = ‘https://api.netease.im/sms/sendcode.action‘;$data= array(‘templateid‘ => $templateid,

‘mobile‘ => $mobile,

‘deviceId‘ => $deviceId,

‘codeLen‘ => $codeLen);if($this->RequestType==‘curl‘){$result = $this->postDataCurl($url,$data);

}else{$result = $this->postDataFsockopen($url,$data);

}return $result;

}/**

* 发送模板短信

* @param $templateid [模板编号(由客服配置之后告知开发者)]

* @param $mobiles [验证码]

* @param $params [短信参数列表,用于依次填充模板,JSONArray格式,如["xxx","yyy"];对于不包含变量的模板,不填此参数表示模板即短信全文内容]

* @return $result [返回array数组对象]*/

public function sendSMSTemplate($templateid,$mobiles=array(),$params=‘‘){$url = ‘https://api.netease.im/sms/sendtemplate.action‘;$data= array(‘templateid‘ => $templateid,

‘mobiles‘ => json_encode($mobiles),

‘params‘ => json_encode($params)

);if($this->RequestType==‘curl‘){$result = $this->postDataCurl($url,$data);

}else{$result = $this->postDataFsockopen($url,$data);

}return $result;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值