使用php和阿里云云解析api对域名解析的示例

作者

阿里云提供了各种api接口,通过接口,可以实现非交互式的操作云资源 。 有个解析域名的小需求,这里记录一下操作的过程。签名的字符串中的 : (分号需要)改变成 %253A ,而不是 %3A


file : test.php


date_default_timezone_set('UTC'); define("ACCESSKEYID", '*****************'); define("ACCESSKEYSECRET", '************************'); define("MY_DOMAIN", 'liuhaolin.com'); function uget($url) { $ch = curl_init(); curl_setopt_array( $ch , array( CURLOPT_URL => $url, # 返回结果,而不是输出结果 CURLOPT_RETURNTRANSFER =>1, # 不要头部信息 CURLOPT_HEADER => false )); $data = curl_exec($ch); return $data; } # 获取签名 function make_signatrue( $url) { $str = rawurlencode( implode($url, "&")); $str = str_replace("%3A", "%253A", $str); $str = "GET&%2F&" . $str; $hmac = hash_hmac("sha1", $str, ACCESSKEYSECRET . '&', TRUE); $signature = base64_encode($hmac); return $signature; } /* * @info [] * DomainName, RR - 主机记录, Type, Value, TTL, Priority */ function add_record($info = null) { //echo MY_DOMAIN; die(); $url = "http://alidns.aliyuncs.com/?Action=AddDomainRecord". "&DomainName=" . MY_DOMAIN . "&RR=test". "&Type=A". "&Value=127.0.0.1". "&TTL=1000". "&Line=default". "&Format=JSON". "&Version=2015-01-09". "&AccessKeyId=" . ACCESSKEYID . "&SignatureMethod=HMAC-SHA1" . "&Timestamp=" . date("Y-m-d\TH:i:s\Z"). "&SignatureVersion=1.0". "&SignatureNonce=" . microtime(true); $arr_url = preg_split("#[\&\?]#", $url); array_shift($arr_url); asort($arr_url); $url .= "&Signature=" . make_signatrue($arr_url); return uget($url); } var_dump (json_decode(add_record()));

输出的结果

首页运行成功的输出

:php add.php
object(stdClass)#1 (2) {
  ["RecordId"]=>
  string(16) "4001912792253440"
  ["RequestId"]=>
  string(36) "9B4EBCC2-0FE7-4F59-AA1C-7386DF031D41"
}

再次运行提示记录已经存在

php   test.php
object(stdClass)#1 (4) {
  ["RequestId"]=>
  string(36) "3CE2D815-44DC-48EB-AE62-C0947E31755C"
  ["HostId"]=>
  string(19) "alidns.aliyuncs.com"
  ["Code"]=>
  string(21) "DomainRecordDuplicate"
  ["Message"]=>
  string(30) "The DNS record already exists."
}

2 评论

  1. 感谢up主的分享。
    我试了下,阿里的云解析接口我调用不了,返回的数据是:InvalidVersion.Unpaid;You need to upgrade VIPDNS;CAA记录仅支持云解析DNS收费版。
    请问博主有遇到这个问题吗?感恩~

    1. 我测试时候,是添加了一个 A记录测试下,是正常的。 CAA记录没测试,如果有问题可能是 CAA记录中一个空格处理不当。不过你的提示,说的是CAA记录只能用收费版的DNS。

回复

电子邮件地址不会被公开。 必填项已用*标注