官方:

          错误码解析文档:https://help.aliyun.com/knowledge_detail/57717.html?spm=5176.11065259.1996646101.searchclickresult.2b5c60d4XBpIKC&aly_as=ytfSoeY-

          短信文档: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;
    }

 

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐