<?php
namespace app\admin\controller;
use app\Response;
use Aws\AwsClient;
use Aws\Acm\AcmClient;
use Aws\CloudFront\CloudFrontClient;
use Aws\Credentials\CredentialProvider;
use Aws\Exception\AwsException;
class AWSUtil{
public $data =[];
public $cname = [];
public function init($domainName){
$acmClient = new AcmClient([
'region' => 'us-east-1',
'version' => '2015-12-08',
'credentials'=>[
// 'id'=>"851725259723",
'key'=>"AKIA4MTWICPFTJEVQ25E",
"secret"=>"116wUWfw2r4JTSZtlh/sTc46+2gxgsm4A6YWyvrI"
]
]);
$subdomainName = "";
// 使用 mt_rand() 生成随机数
$randomNumber = mt_rand(1000, 99999);
//用*.example.com 这个来申请证书,并且将这个添加到CloudFront的备用域名列表中。这样就可以用这域名,用这个证书访问这个CloudFront。
$cname = "*.".$domainName;
$result = $acmClient->requestCertificate([
'DomainName' =>$cname,
'ValidationMethod' => 'DNS',
]);
//创建证书
$acm_certificate = $result->get("CertificateArn");
// echo $acm_certificate;
//php中递归调用只会返回第一次的结果,获取到证书中返回的用来验证证书的cName(获取data1的数据)
$this->getDomainValidationOptions($acmClient,$acm_certificate);
//创建一个CloudFront并且绑定证书
$this->createCloudFront($acm_certificate);
return Response::success($this->data);
}
private function getDomainValidationOptions($acmClient,$acm_certificate){
//多次获取证书内容,直到返回了ResourceRecord为止。
$certificate_detail = $acmClient->describeCertificate(
[
"CertificateArn"=> $acm_certificate
],
);
//多次获取证书内容,直到返回了ResourceRecord为止。
$DomainValidationOptions = $certificate_detail->get("Certificate")["DomainValidationOptions"][0];
// echo json_encode($DomainValidationOptions);
if(array_key_exists("ResourceRecord",$DomainValidationOptions)){
$ResourceRecord = $DomainValidationOptions['ResourceRecord'];
$name = $ResourceRecord["Name"];
$names = explode(".",$name);
$name1= $names[0];
$value = $ResourceRecord["Value"];
$valueNew = substr($value,0,strlen($value)-1);
$data1["domain"] = $name1;
$data1["CertificateArn"] = $certificate_detail->get('Certificate')["CertificateArn"];
$data1["value"] = $valueNew;
array_push($this->data,$data1);
}else{