php 阿里云 批量 单个 发送短信 (拿来即用)
·
官方:
短信文档:https://help.aliyun.com/document_detail/102364.html?spm=a2c4g.11186623.6.623.5e107535L4cPef
/*阿里云短信*/
/*单个发送短信*/
public function sendMessageOne(){
$AccessKeyId = '';
$accessKeySecret = '';
$Timestamp = gmdate ('Y-m-d\TH:i:s\Z' );
$TemplateCode = '模版CODE';
$SignName = '签名名称';
$PhoneNumbers = '手机号';
$TemplateParam = ['code'=>'随机验证码'];
$TemplateParam = json_encode($TemplateParam);
$parameters = [
'AccessKeyId'=>$AccessKeyId,
'Action'=>'SendSms',
'Format'=>'josn',
'RegionId'=>'cn-hangzhou',
'SignatureMethod'=>'HMAC-SHA1',
'SignatureNonce'=>'45e25e9b-0a6f-4070-8cda--5-29'.$this->createMyCode(),//随机字符串
'SignatureVersion'=>'1.0',
'Timestamp'=>$Timestamp,
'Version'=>'2017-05-25',
'TemplateCode'=>$TemplateCode,
'PhoneNumbers'=>$PhoneNumbers,
'SignName'=>$SignName,
'TemplateParam'=>$TemplateParam,
];
$parameters['Signature'] = $this->computeSignature($parameters,$accessKeySecret);
// 发送请求
$target = "https://dysmsapi.aliyuncs.com/?";
$result = $this->xml_to_array($this->https_request($target.http_build_query($parameters)));
dump($result);die;
}
/*批量发送短信*/
public function sendMessageAll(){
$AccessKeyId = '';
$accessKeySecret = '';
$Timestamp = gmdate ('Y-m-d\TH:i:s\Z' );
$TemplateCode = '模板code';
$sign_name = '签名名称';
$PhoneNumberJson = ['手机号'];
$SignNameJson = [];
$templateParamJson = [];
foreach ($PhoneNumberJson as $k=>$v){
$SignNameJson[] = $sign_name;
$templateParamJson[] = ['name'=>$TemplateCode];
}
$PhoneNumberJson = json_encode($PhoneNumberJson);
$SignNameJson = json_encode($SignNameJson);
$templateParamJson = json_encode($templateParamJson);
$parameters = [
'AccessKeyId'=>$AccessKeyId,
'Action'=>'SendBatchSms',
'Format'=>'josn',
'RegionId'=>'cn-hangzhou',
'SignatureMethod'=>'HMAC-SHA1',
'SignatureNonce'=>'45e25e9b-0a6f-4070-8cda--5-29'.$this->createMyCode(),//随机字符串
'SignatureVersion'=>'1.0',
'Timestamp'=>$Timestamp,
'Version'=>'2017-05-25',
'PhoneNumberJson'=>$PhoneNumberJson,
'SignNameJson'=>$SignNameJson,
'TemplateCode'=>$TemplateCode,
'templateParamJson'=>$templateParamJson,
];
$parameters['Signature'] = $this->computeSignature($parameters,$accessKeySecret);
// 发送请求
$target = "https://dysmsapi.aliyuncs.com/?";
$result = $this->xml_to_array($this->https_request($target.http_build_query($parameters)));
dump($result);die;
}
public 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));
// 计算签名,注意accessKeySecret后面要加上字符'&'
$signature = base64_encode(hash_hmac('sha1', $stringToSign, $accessKeySecret . '&', true));
return $signature;
}
public 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;
}
public 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;
}
public function xml_to_array($xml){
$reg = "/<(\w+)[^>]*>([\\x00-\\xFF]*)<\\/\\1>/";
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;
}
/*随机邀请码*/
public function createMyCode()
{
$count = 0;
do {
$code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
$rand = $code[rand(0,25)]
.strtoupper(dechex(date('m')))
.date('d').substr(time(),-5)
.substr(microtime(),2,5)
.sprintf('%02d',rand(0,99));
for(
$a = md5( $rand, true ),
$s = '0123456789ABCDEFGHIJKLMNOPQRSTUV',
$d = '',
$f = 0;
$f < 8;
$g = ord( $a[ $f ] ),
$d .= $s[ ( $g ^ ord( $a[ $f + 8 ] ) ) - $g & 0x1F ],
$f++
);
$count = $d; //保证生成的邀请码不会重复,查询表是否存在此邀请码
} while ($count > 0);
return $d;
}
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)