|
|
@@ -0,0 +1,168 @@
|
|
|
+<?php
|
|
|
+namespace app\admin\controller;
|
|
|
+use think\Cache;
|
|
|
+
|
|
|
+/**
|
|
|
+ * 阿里云短信验证码发送类
|
|
|
+ * @author Administrator
|
|
|
+ *
|
|
|
+ */
|
|
|
+class Sample {
|
|
|
+ // 保存错误信息
|
|
|
+ public $error;
|
|
|
+ // Access Key ID
|
|
|
+ private $accessKeyId = '';
|
|
|
+ // Access Access Key Secret
|
|
|
+ private $accessKeySecret = '';
|
|
|
+ // 签名
|
|
|
+ private $signName = '';
|
|
|
+ // 模版ID
|
|
|
+ private $templateCode = '';
|
|
|
+ public function __construct($cofig = array()) {
|
|
|
+ $cofig = array (
|
|
|
+ 'accessKeyId' => 'LTAI5tF6b3M2ncWL6z683UTd',
|
|
|
+ 'accessKeySecret' => 'CA5UZhy5EEpIAAlrLtadP6GpxCOJ0y',
|
|
|
+ 'signName' => '美浓党委',
|
|
|
+ 'templateCode' => 'SMS_255300044'
|
|
|
+ );
|
|
|
+ // 配置参数
|
|
|
+ $this->accessKeyId = $cofig ['accessKeyId'];
|
|
|
+ $this->accessKeySecret = $cofig ['accessKeySecret'];
|
|
|
+ $this->signName = $cofig ['signName'];
|
|
|
+ $this->templateCode = $cofig ['templateCode'];
|
|
|
+ }
|
|
|
+ private function percentEncode($string) {
|
|
|
+ $string = urlencode ( $string );
|
|
|
+ $string = preg_replace ( '/\+/', '%20', $string );
|
|
|
+ $string = preg_replace ( '/\*/', '%2A', $string );
|
|
|
+ $string = preg_replace ( '/%7E/', '~', $string );
|
|
|
+ return $string;
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * 签名
|
|
|
+ *
|
|
|
+ * @param unknown $parameters
|
|
|
+ * @param unknown $accessKeySecret
|
|
|
+ * @return string
|
|
|
+ */
|
|
|
+ private function computeSignature($parameters, $accessKeySecret) {
|
|
|
+ ksort ( $parameters );
|
|
|
+ $canonicalizedQueryString = '';
|
|
|
+ foreach ( $parameters as $key => $value ) {
|
|
|
+ $canonicalizedQueryString .= '&' . $this->percentEncode ( $key ) . '=' . $this->percentEncode ( $value );
|
|
|
+ }
|
|
|
+ $stringToSign = 'GET&%2F&' . $this->percentencode ( substr ( $canonicalizedQueryString, 1 ) );
|
|
|
+ $signature = base64_encode ( hash_hmac ( 'sha1', $stringToSign, $accessKeySecret . '&', true ) );
|
|
|
+ return $signature;
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * 调用该发送短信
|
|
|
+ * @param string $mobile
|
|
|
+ * @param int $verify_code
|
|
|
+ */
|
|
|
+ public function send_verify($mobile, $name1,$name2,$time1,$time2,$template) {
|
|
|
+ //设置验证码缓存
|
|
|
+// self::setRegSmsCache(['mobile'=>$mobile,'code'=>$verify_code,'times'=>time()]);
|
|
|
+ $params = array ( //此处作了修改
|
|
|
+ 'SignName' => $this->signName,
|
|
|
+ 'Format' => 'JSON',
|
|
|
+ 'Version' => '2017-05-25',
|
|
|
+ 'AccessKeyId' => $this->accessKeyId,
|
|
|
+ 'SignatureVersion' => '1.0',
|
|
|
+ 'SignatureMethod' => 'HMAC-SHA1',
|
|
|
+ 'SignatureNonce' => uniqid (),
|
|
|
+ 'Timestamp' => gmdate ( 'Y-m-d\TH:i:s\Z' ),
|
|
|
+ 'Action' => 'SendSms',
|
|
|
+ 'TemplateCode' => $template,
|
|
|
+ 'PhoneNumbers' => $mobile,
|
|
|
+ //'TemplateParam' => '{"code":"' . $verify_code . '"}'
|
|
|
+
|
|
|
+ 'TemplateParam' => '{"name1":"'.$name1.'","name2":"'.$name2.'","time1":"'.$time1.'","time2":"'.$time2.'"}' //更换为自己的实际模版
|
|
|
+ );
|
|
|
+// if($template=='SMS_243348221'){
|
|
|
+// $params['SignName'] = '易盒科技';
|
|
|
+// $params['TemplateParam']='{"name":"'.$verify_code.'"}';
|
|
|
+// }
|
|
|
+ // 计算签名并把签名结果加入请求参数
|
|
|
+ $params ['Signature'] = $this->computeSignature ( $params, $this->accessKeySecret );
|
|
|
+ // 发送请求(此处作了修改)
|
|
|
+ //$url = 'https://sms.aliyuncs.com/?' . http_build_query ( $params );
|
|
|
+ $url = 'http://dysmsapi.aliyuncs.com/?' . http_build_query ( $params );
|
|
|
+ $ch = curl_init ();
|
|
|
+ curl_setopt ( $ch, CURLOPT_URL, $url );
|
|
|
+ curl_setopt ( $ch, CURLOPT_SSL_VERIFYPEER, FALSE );
|
|
|
+ curl_setopt ( $ch, CURLOPT_SSL_VERIFYHOST, FALSE );
|
|
|
+ curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 );
|
|
|
+ curl_setopt ( $ch, CURLOPT_TIMEOUT, 10 );
|
|
|
+ $result = curl_exec ( $ch );
|
|
|
+ curl_close ( $ch );
|
|
|
+ $result = json_decode ( $result, true );
|
|
|
+ //var_dump($result);die;
|
|
|
+ if (isset ( $result ['Code'] )) {
|
|
|
+ $this->error = $this->getErrorMessage ( $result ['Code'] );
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * 获取详细错误信息
|
|
|
+ * @param unknown $status
|
|
|
+ */
|
|
|
+ public function getErrorMessage($status) {
|
|
|
+ // 阿里云的短信 乱八七糟的(其实是用的阿里大于)
|
|
|
+ // https://api.alidayu.com/doc2/apiDetail?spm=a3142.7629140.1.19.SmdYoA&apiId=25450
|
|
|
+ $message = array (
|
|
|
+ 'InvalidDayuStatus.Malformed' => '账户短信开通状态不正确',
|
|
|
+ 'InvalidSignName.Malformed' => '短信签名不正确或签名状态不正确',
|
|
|
+ 'InvalidTemplateCode.MalFormed' => '短信模板Code不正确或者模板状态不正确',
|
|
|
+ 'InvalidRecNum.Malformed' => '目标手机号不正确,单次发送数量不能超过100',
|
|
|
+ 'InvalidParamString.MalFormed' => '短信模板中变量不是json格式',
|
|
|
+ 'InvalidParamStringTemplate.Malformed' => '短信模板中变量与模板内容不匹配',
|
|
|
+ 'InvalidSendSms' => '触发业务流控',
|
|
|
+ 'InvalidDayu.Malformed' => '变量不能是url,可以将变量固化在模板中'
|
|
|
+ );
|
|
|
+ if (isset ( $message [$status] )) {
|
|
|
+ return $message [$status];
|
|
|
+ }
|
|
|
+ return $status;
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * 设置手机短息验证码缓存
|
|
|
+ * #User: Mikkle
|
|
|
+ * #Email:776329498@qq.com
|
|
|
+ * #Date:
|
|
|
+ * @param $data_cache
|
|
|
+ */
|
|
|
+ protected function setRegSmsCache($data_cache)
|
|
|
+ {
|
|
|
+ Cache::set('sms_' . $data_cache['mobile'], $data_cache, 300);
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * 检测手机短信验证码
|
|
|
+ * #User: Mikkle
|
|
|
+ * #Email:776329498@qq.com
|
|
|
+ * #Date:
|
|
|
+ * @param $mobile
|
|
|
+ * @param bool|false $code
|
|
|
+ * @return bool
|
|
|
+ */
|
|
|
+ public function checkRegSms($mobile, $code = false)
|
|
|
+ {
|
|
|
+ if (!$mobile) return false;
|
|
|
+ if ($code === false) { //判断60秒以内是否重复发送
|
|
|
+ if (!Cache::has('sms_' . $mobile)) return true;
|
|
|
+ if (Cache::get('sms_' . $mobile)['times'] > time()) {
|
|
|
+ return false;
|
|
|
+ } else {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ } else { //判断验证码是否输入正确
|
|
|
+ if (!Cache::has('sms_' . $mobile)) return false;
|
|
|
+ if (Cache::get('sms_' . $mobile)['code'] == $code) {
|
|
|
+ return true;
|
|
|
+ } else {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|