cloudflare/sdk version: 1.0.8 installed via composer
Code:
$key = new \Cloudflare\API\Auth\APIKey($myEmail, $myKey);
$adapter = new Cloudflare\API\Adapter\Guzzle($key);
$zoneID = $zones->getZoneID($myDomain);
$dns = new \Cloudflare\API\Endpoints\DNS($adapter);
$dns->addRecord($zoneID, "MX", 'testmx', 'mail.mydomain.com', 1, false);
Thrown exception:
Uncaught GuzzleHttp\Exception\ClientException: Client error: POST https://api.cloudflare.com/client/v4/zones/my_zone_id/dns_records
resulted in a 400 Bad Request
response:
{"success":false,"errors":[{"code":1004,"message":"DNS Validation Error","error_chain":[{"code":9008,"message":"Invalid (truncated...)
in /var/www/tests/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php:113
Then I've tried to create TXT record and then update it to MX:
$dns->addRecord($zoneID, "TXT", 'testmx', 'mail.mydomain.com', 1, false);
// ... get record id ...
$dns->updateRecordDetails($zoneID, $recordId, [
'type' => 'MX',
'name' => 'testmx',
'content' => 'mail.mydomain.com',
]);
Thrown exception was like after first try.
And then I've tried to add integer parameter 'priority' to options array, and oh, miracle, it works!
But this parameter is not described at API v4 Documentation.
// ... get record id ...
$dns->updateRecordDetails($zoneID, $recordId, [
'type' => 'MX',
'name' => 'testmx',
'content' => 'mail.mydomain.com',
'priority' => 5,
]);
In that time simple cURL POST request to create DNS-record works to:
$ch = curl_init('https://api.cloudflare.com/client/v4/zones/' . $zoneID . '/dns_records')
$data = json_encode([
'type' => 'MX',
'name' => 'curlmx',
'content' => 'mail.mydomain.com',
'ttl' => 1,
'proxied' => false,
'priority' => 5,
]);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt(
$ch, CURLOPT_HTTPHEADER,
[
'X-Auth-Key: ' . $myKey,
'X-Auth-Email: ' . $myEmail,
'Content-Type: application/json',
]
);
$result = curl_exec($ch);
print_r(json_decode($result, true));
Success result:
Array
(
[result] => Array
(
[id] => .............
[type] => MX
[name] => curlmx.domain.com
[content] => mail.mydomain.com
[proxiable] =>
[proxied] =>
[ttl] => 1
[priority] => 5
[locked] =>
[zone_id] => ..............
[zone_name] => domain.com
[modified_on] => 2017-11-27T11:26:32.936498Z
[created_on] => 2017-11-27T11:26:32.936498Z
[meta] => Array
(
[auto_added] =>
[managed_by_apps] =>
)
)
[success] => 1
[errors] => Array
(
)
[messages] => Array
(
)
)