2023年7月31日发(作者:)

短信(阿⾥云请求接⼝)短信类accessKeyId =$config['accessKeyId ']; $this->accessKeySecret =$config['accessKeySecret ']; $this->signName = $config ['signName']; $this->templateCode = $config ['templateCode']; } function percentEncode($str) { // 使⽤urlencode编码后,将"+","*","%7E"做替换即满⾜ECS API规定的编码规范 $res = urlencode($str); $res = preg_replace('/+/', '%20', $res); $res = preg_replace('/*/', '%2A', $res); $res = preg_replace('/%7E/', '~', $res); return $res; } function https_request($url) { $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $data = curl_exec($curl); if (curl_errno($curl)) {return 'ERROR '.curl_error($curl);} curl_close($curl); return $data; } function xml_to_array($xml){ $reg = "/<(w+)[^>]*>([x00-xFF]*)<1>/"; if(preg_match_all($reg, $xml, $matches)){ if(preg_match_all($reg, $xml, $matches)){ $count = count($matches[0]); for($i = 0; $i < $count; $i++){ $subxml= $matches[2][$i]; $key = $matches[1][$i]; if(preg_match( $reg, $subxml )){ $arr[$key] = $this -> xml_to_array( $subxml ); }else{ $arr[$key] = $subxml; } } } return @$arr; } /** * 签名 * * @param $parameters * @param $accessKeySecret * @return string */ function computeSignature($parameters, $accessKeySecret) { // 将参数Key按字典顺序排序 ksort($parameters); // ⽣成规范化请求字符串 $canonicalizedQueryString = ''; foreach($parameters as $key => $value) { $canonicalizedQueryString .= '&' . $this -> percentEncode($key) . '=' . $this -> percentEncode($value); } // ⽣成⽤于计算签名的字符串 stringToSign $stringToSign = 'GET&%2F&' . $this -> percentencode(substr($canonicalizedQueryString, 1)); //echo "

".$stringToSign."

"; // 计算签名,注意accessKeySecret后⾯要加上字符'&' $signature = base64_encode(hash_hmac('sha1', $stringToSign, $accessKeySecret . '&', true)); return $signature; } /** * 发送验证码 * * @param unknown $mobile * @param unknown $verify_code * */ public function send_verify($mobile,$verify_code) { $target = "/?"; $data = array( 'AccessKeyId' => $this->accessKeyId, 'Action' => 'SendSms', 'Format' => 'XML', 'OutId' => '123', 'PhoneNumbers' =>$mobile, 'RegionId' => 'cn-hangzhou', 'SignName'=>'暖⼼致品', 'SignatureMethod' => 'HMAC-SHA1', 'SignatureNonce'=> uniqid(), 'SignatureVersion' => '1.0', 'TemplateCode' => $this->templateCode, 'TemplateParam' => "{code:$verify_code}", 'Timestamp' => gmdate('Y-m-dTH:i:sZ'), 'Version' => '2017-05-25' 'Version' => '2017-05-25' ); // 计算签名并把签名结果加⼊请求参数 $data['Signature'] = $this -> computeSignature($data, $this->accessKeySecret); $result = $this -> xml_to_array($this -> https_request($_build_query($data))); dd($result); echo $result['Error']['Code']."--->".$result['Error']['Message']; echo "

".$target . http_build_query($data); } /** * 获取详细错误信息 * * @param unknown $status */ public function getErrorMessage($status) { $message = array( 'med' => '账户短信开通状态不正确', 'med' => '短信签名不正确或签名状态不正确', 'med' => '短信模板Code不正确或者模板状态不正确', 'med' => '⽬标⼿机号不正确,单次发送数量不能超过100', 'med' => '短信模板中变量不是json格式', 'med' => '短信模板中变量与模板内容不匹配', 'InvalidSendSms' => '触发业务流控', 'med' => '变量不能是url,可以将变量固化在模板中' ); if (isset ($message [$status])) { return $message [$status]; } return $status; }}控制器调⽤ $config = config('aliyun_sms'); $data = [ 'accessKeyId' => $config ['accessKeyId'], //your appid 'accessKeySecret' => $config ['accessKeySecret'], //your app_secret 'signName' => $config ['signName'], //your 签名 'templateCode' => $config ['templateCode'.$type], //your 模板编号 'templatePara' => $config ['templatePara'.$type] //your 模板中的变量 ]; $sms = new apiAliyunSms($data); $status = $sms->send_verify($mobile, $veryify_code); if(!$status) //短信发送失败 return false; return true;

2023年7月31日发(作者:)

短信(阿⾥云请求接⼝)短信类accessKeyId =$config['accessKeyId ']; $this->accessKeySecret =$config['accessKeySecret ']; $this->signName = $config ['signName']; $this->templateCode = $config ['templateCode']; } function percentEncode($str) { // 使⽤urlencode编码后,将"+","*","%7E"做替换即满⾜ECS API规定的编码规范 $res = urlencode($str); $res = preg_replace('/+/', '%20', $res); $res = preg_replace('/*/', '%2A', $res); $res = preg_replace('/%7E/', '~', $res); return $res; } function https_request($url) { $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $data = curl_exec($curl); if (curl_errno($curl)) {return 'ERROR '.curl_error($curl);} curl_close($curl); return $data; } function xml_to_array($xml){ $reg = "/<(w+)[^>]*>([x00-xFF]*)<1>/"; if(preg_match_all($reg, $xml, $matches)){ if(preg_match_all($reg, $xml, $matches)){ $count = count($matches[0]); for($i = 0; $i < $count; $i++){ $subxml= $matches[2][$i]; $key = $matches[1][$i]; if(preg_match( $reg, $subxml )){ $arr[$key] = $this -> xml_to_array( $subxml ); }else{ $arr[$key] = $subxml; } } } return @$arr; } /** * 签名 * * @param $parameters * @param $accessKeySecret * @return string */ function computeSignature($parameters, $accessKeySecret) { // 将参数Key按字典顺序排序 ksort($parameters); // ⽣成规范化请求字符串 $canonicalizedQueryString = ''; foreach($parameters as $key => $value) { $canonicalizedQueryString .= '&' . $this -> percentEncode($key) . '=' . $this -> percentEncode($value); } // ⽣成⽤于计算签名的字符串 stringToSign $stringToSign = 'GET&%2F&' . $this -> percentencode(substr($canonicalizedQueryString, 1)); //echo "

".$stringToSign."

"; // 计算签名,注意accessKeySecret后⾯要加上字符'&' $signature = base64_encode(hash_hmac('sha1', $stringToSign, $accessKeySecret . '&', true)); return $signature; } /** * 发送验证码 * * @param unknown $mobile * @param unknown $verify_code * */ public function send_verify($mobile,$verify_code) { $target = "/?"; $data = array( 'AccessKeyId' => $this->accessKeyId, 'Action' => 'SendSms', 'Format' => 'XML', 'OutId' => '123', 'PhoneNumbers' =>$mobile, 'RegionId' => 'cn-hangzhou', 'SignName'=>'暖⼼致品', 'SignatureMethod' => 'HMAC-SHA1', 'SignatureNonce'=> uniqid(), 'SignatureVersion' => '1.0', 'TemplateCode' => $this->templateCode, 'TemplateParam' => "{code:$verify_code}", 'Timestamp' => gmdate('Y-m-dTH:i:sZ'), 'Version' => '2017-05-25' 'Version' => '2017-05-25' ); // 计算签名并把签名结果加⼊请求参数 $data['Signature'] = $this -> computeSignature($data, $this->accessKeySecret); $result = $this -> xml_to_array($this -> https_request($_build_query($data))); dd($result); echo $result['Error']['Code']."--->".$result['Error']['Message']; echo "

".$target . http_build_query($data); } /** * 获取详细错误信息 * * @param unknown $status */ public function getErrorMessage($status) { $message = array( 'med' => '账户短信开通状态不正确', 'med' => '短信签名不正确或签名状态不正确', 'med' => '短信模板Code不正确或者模板状态不正确', 'med' => '⽬标⼿机号不正确,单次发送数量不能超过100', 'med' => '短信模板中变量不是json格式', 'med' => '短信模板中变量与模板内容不匹配', 'InvalidSendSms' => '触发业务流控', 'med' => '变量不能是url,可以将变量固化在模板中' ); if (isset ($message [$status])) { return $message [$status]; } return $status; }}控制器调⽤ $config = config('aliyun_sms'); $data = [ 'accessKeyId' => $config ['accessKeyId'], //your appid 'accessKeySecret' => $config ['accessKeySecret'], //your app_secret 'signName' => $config ['signName'], //your 签名 'templateCode' => $config ['templateCode'.$type], //your 模板编号 'templatePara' => $config ['templatePara'.$type] //your 模板中的变量 ]; $sms = new apiAliyunSms($data); $status = $sms->send_verify($mobile, $veryify_code); if(!$status) //短信发送失败 return false; return true;