user = OPENPROVIDER['username']; $this->pass = OPENPROVIDER['password']; $this->ip = OPENPROVIDER['ip']; $this->cache = new Cache($this->cacheDir); } /** * トークンの受け取り。 * このライブリリーを使ったら、一回「login()」を実行する事が必須となります。 * * @return Result 結果 */ public function login(): Result { if (!OPENPROVIDER_ENABLED) return Result::error('エラー:OpenProviderは無効です。'); $cacheName = 'login'; $cache = $this->cache->get($cacheName); if (time() < ($this->lastAuth + $this->tokenDuration)) { $this->token = $cache['data']['token']; $this->lastAuth = $cache['last_auth']; return Result::Success('', $cache); } $curl = new Curl("{$this->BASEURL}/auth/login"); $payload = [ 'username' => $this->user, 'password' => $this->pass, 'ip' => $this->ip ?: '0.0.0.0', ]; $curl->setMethod("POST"); $curl->setPostRaw(json_encode($payload)); $curl->addHeader("Content-Type", "application/json"); $curl->addHeader("Accept", "application/json"); $res = $curl->execute(); if (!$res->isSuccess) { $err = "CURLの実行に失敗: ".$curl->message; assert_unless_success($res, $err); return Result::Error($err); } $body = $curl->getResponseBody(); if ($curl->getResponseCode() != 200) { $err = json_decode($body, true); assert_not_null($err, "エラーの受け取りに失敗。"); assert($curl->getResponseCode() == 200, $err['desc']); return Result::Error(); } assert_not_null($body, "返事ボディーは空です。"); $res = json_decode($body, true); if (isset($res['data']['token'])) { $this->token = $res['data']['token']; $this->lastAuth = time(); $res['last_auth'] = $this->lastAuth; $this->cache->set($cacheName, $res); return Result::Success('', $res); } return Result::Error('ログインに失敗。'); } /** * SpanExpert向けログインURLの生成 * @todo テスト * * @param array $payload フォームデータ * @return Result */ public function generateLoginUrlSpamExpert(array $payload = []): Result { if (!OPENPROVIDER_ENABLED) return Result::error('エラー:OpenProviderは無効です。'); $uri = '/spam-expert-generate-login-url'; $curl = $this->setupCurl($uri, 'POST', $payload); $res = $this->curlResult($curl); if (isset($res->data['data'])) { return Result::Success('DNSテンプレートの追加に成功。', $res->data); } return Result::Error('DNSテンプレートの追加に失敗。'); } // ドメイン //// ドメイン /** * ドメイン一覧。 * @todo テスト * * @return Result 結果。 */ public function listDomains(array $query = []): Result { if (!OPENPROVIDER_ENABLED) return Result::error('エラー:OpenProviderは無効です。'); $cacheName = 'listdomains'; $cache = $this->cache->get($cacheName); if ($this->cache->validate($cache, $query)) return Result::Success('', $cache); $curl = $this->setupCurl('/domains'); $res = $this->curlResult($curl); if (isset($res['data']['results'])) { $this->cache->set($cacheName, $res->data); return Result::Success('', $res['data']['results']); } return Result::Error('ドメインの確認に失敗。'); } /** * ドメイン名の登録。 * @todo テスト * * @param string $name 登録したいドメイン名(例:"076studio.jp") * @param array $info カスタマー情報等 * @param int $period 年間(デフォルト=1年) * @return Result 結果。配列の場合:'activation_date'(リアルタイムで成功したのみ), 'auth_code'(TLDが対応している場合のみ), 'expiration_date', 'id', 'renewal_date', 'status'(ACT又はREQ) */ public function createDomain(string $name, array $info, int $period = 1): Result { if (!OPENPROVIDER_ENABLED) return Result::error('エラー:OpenProviderは無効です。'); if (!isset($info['owner_handle']) || $info['owner_handle'] === '') $info['owner_handle'] = OPENPROVIDER['owner_handle']; if (!isset($info['admin_handle']) || $info['admin_handle'] === '') $info['admin_handle'] = OPENPROVIDER['owner_handle']; if (!isset($info['tech_handle']) || $info['tech_handle'] === '') $info['tech_handle'] = OPENPROVIDER['owner_handle']; if (!isset($info['billing_handle']) || $info['billing_handle'] === '') $info['billing_handle'] = OPENPROVIDER['owner_handle']; if (!isset($info['reseller_handle']) || $info['reseller_handle'] === '') $info['reseller_handle'] = OPENPROVIDER['owner_handle']; if (!isset($info['name_servers']) || empty($info['name_servers'])) $info['name_servers'] = ['ns1.openprovider.nl', 'ns2.openprovider.be', 'ns3.openprovider.eu']; if (!isset($info['autorenew']) || $info['autorenew'] === '') $info['autorenew'] = 'default'; // 新しい顧客の場合 $parts = explode('.', $name, 2); assert_exists($parts[0]); assert_exists($parts[1]); $domain = [ 'name' => $parts[0], 'extension' => $parts[1], ]; $ns = []; foreach ($info['name_servers'] as $n) { $ns[] = ['name' => $n]; } $payload = [ 'name' => $domain, 'period' => $period, 'owner_handle' => $owner_handle, 'admin_handle' => $admin_handle, 'tech_handle' => $tech_handle, 'billing_handle' => $billing_handle, 'reseller_handle' => $reseller_handle, 'name_servers' => $ns, 'autorenew' => $autorenew, ]; $curl = $this->setupCurl('/domains/', 'POST', $payload); kys('TODO'); $res = $this->curlResult($curl); if (isset($res['data'])) return Result::Success('', $res); return Result::Error('ドメインの確認に失敗。'); } /** * ドメインを登録可能かどうかの確認。 * * @param array $domains ドメイン名リスト。例:['076.moe', '076.co.jp', '076.com'] * @param bool $with_price 値段を表示するかどうか。デフォルトは「false」 * @return Result 結果。配列の場合:'domain'と'status'はいつでもあり、'reason', 'premium', 'is_premium'が多分あり、そして'price'が「with_price」が「true」の場合のみ。 */ public function checkDomainAvailable(array $domains, bool $with_price = false): Result { if (!OPENPROVIDER_ENABLED) return Result::error('エラー:OpenProviderは無効です。'); $domainList = []; foreach ($domains as $d) { $domain = explode('.', $d); assert_exists($domain[0]); assert_exists($domain[1]); if (count($domain) !== 2) { return Result::Error("不正なドメイン形: {$d}"); } $domainList[] = [ 'name' => $domain[0], 'extension' => $domain[1], ]; } $payload = [ 'domains' => $domainList, 'with_price' => $with_price, ]; $curl = $this->setupCurl('/domains/check', 'POST', $payload); $res = $this->curlResult($curl); if (isset($res->data['data']['results'])) return Result::Success('', $res->data['data']['results']); return Result::Error('ドメインの確認に失敗。'); } //// 追加データ /** * 追加データの受け取り * @todo テスト * * @param array $query 検索クエリー * @return Result */ public function getDomainAdditionalData(array $query): Result { if (!OPENPROVIDER_ENABLED) return Result::error('エラー:OpenProviderは無効です。'); $name = ''; $ext = ''; if (isset($query['domain.name'])) $name = $query['domain.name']; if (isset($query['domain.extension'])) $ext = $query['domain.extension']; $cacheName = $name && $ext ? "domainadditionaldata-{$name}.{$ext}" : 'domainadditionaldata'; $cache = $this->cache->get($cacheName); if ($this->cache->validate($cache)) return Result::Success('', $cache); $uri = "/domains/additional-data?".http_build_query($query, '', '&', PHP_QUERY_RFC3986); $curl = $this->setupCurl($uri); $res = $this->curlResult($curl); if (isset($res->data['data'])) { $this->cache->set($cacheName, $res->data); return Result::Success('', $res->data); } return Result::Error('ドメインの追加データの受け取りに失敗。'); } //// 顧客様の追加データ /** * 顧客様の追加データの受け取り * @todo テスト * * @param array $query 検索クエリー * @return Result */ public function getDomainCustomerAdditionalData(array $query): Result { if (!OPENPROVIDER_ENABLED) return Result::error('エラー:OpenProviderは無効です。'); $name = ''; $ext = ''; if (isset($query['domain.name'])) $name = $query['domain.name']; if (isset($query['domain.extension'])) $ext = $query['domain.extension']; $cacheName = $name && $ext ? "domainadditionaldata-{$name}.{$ext}" : 'domainadditionaldata'; $cache = $this->cache->get($cacheName); if ($this->cache->validate($cache)) return Result::Success('', $cache); $uri = "/domains/additional-data/customers?".http_build_query($query, '', '&', PHP_QUERY_RFC3986); $curl = $this->setupCurl($uri); $res = $this->curlResult($curl); if (isset($res->data['data'])) { $this->cache->set($cacheName, $res->data); return Result::Success('', $res->data); } return Result::Error('ドメインの顧客様の追加データの受け取りに失敗。'); } //// ドメイン値段 /** * ドメイン値段一覧 * * @param array $query 検索クエリー * @return Result */ public function getDomainPrices(array $query): Result { if (!OPENPROVIDER_ENABLED) return Result::error('エラー:OpenProviderは無効です。'); $name = ''; $ext = ''; if (isset($query['domain.name'])) $name = $query['domain.name']; if (isset($query['domain.extension'])) $ext = $query['domain.extension']; $cacheName = $name && $ext ? "domainprices-{$name}.{$ext}" : 'domainprices'; $cache = $this->cache->get($cacheName); if ($this->cache->validate($cache)) return Result::Success('', $cache); $uri = "/domains/prices?".http_build_query($query, '', '&', PHP_QUERY_RFC3986); $curl = $this->setupCurl($uri); $res = $this->curlResult($curl); if (isset($res->data['data'])) { $this->cache->set($cacheName, $res->data); return Result::Success('', $res->data); } return Result::Error('TLD一覧の受け取りに失敗。'); } //// 認証コード /** * 認証コードの受け取り * @todo テスト * * @param int $id ドメイン名ID * @param array $query 検索クエリー * @return Result */ public function getAuthCode(int $id, array $query = []): Result { if (!OPENPROVIDER_ENABLED) return Result::error('エラー:OpenProviderは無効です。'); $uri = "/domains/{$id}/authcode?".http_build_query($query, '', '&', PHP_QUERY_RFC3986); $curl = $this->setupCurl($uri); $res = $this->curlResult($curl); if (isset($res->data['data'])) { return Result::Success('', $res->data); } return Result::Error('認証コードの受け取りに失敗。'); } /** * 認証コードの再設定 * @todo テスト * * @param int $id ドメイン名ID * @param array $payload フォームデータ * @return Result */ public function resetAuthCode(int $id, array $payload = []): Result { if (!OPENPROVIDER_ENABLED) return Result::error('エラー:OpenProviderは無効です。'); $uri = "/domains/{$id}/authcode/reset"; $curl->setupCurl($uri, 'POST', $payload); $res = $this->curlResult($curl); kys($res); if (isset($res)) { return Result::Success('', $res->data); } return Result::Error("認証コードの再設定に失敗。"); } //// TLD /** * TLD一覧 * * @param array $query 検索クエリー * @return Result */ public function listTlds(array $query = []): Result { if (!OPENPROVIDER_ENABLED) return Result::error('エラー:OpenProviderは無効です。'); $cacheName = 'listtlds'; $cache = $this->cache->get($cacheName); if ($this->cache->validate($cache)) return Result::Success('', $cache); if (empty($query)) $query = [ 'limit' => 10, 'offset' => 0, 'order' => 'ASC' ]; foreach ($query as $k => $v) if (is_bool($v)) $query[$k] = $v ? 'true' : 'false'; $uri = '/tlds?'.http_build_query($query, '', '&', PHP_QUERY_RFC3986); $curl = $this->setupCurl($uri); $res = $this->curlResult($curl); if (isset($res->data['data'])) { $this->cache->set($cacheName, $res->data); return Result::Success('', $res->data); } return Result::Error('TLD一覧の受け取りに失敗。'); } /** * TLDの表示 * * @param string $tld TLD * @param array $query 検索クエリー * @return Result */ public function getTld(string $tld, array $query = []): Result { if (!OPENPROVIDER_ENABLED) return Result::error('エラー:OpenProviderは無効です。'); $cacheName = "gettld-{$tld}"; $cache = $this->cache->get($cacheName); if ($this->cache->validate($cache)) return Result::Success('', $cache); if (empty($query)) $query = [ 'limit' => 10, 'offset' => 0 ]; foreach ($query as $k => $v) if (is_bool($v)) $query[$k] = $v ? 'true' : 'false'; $uri = "/tlds/{$tld}?".http_build_query($query, '', '&', PHP_QUERY_RFC3986); $curl = $this->setupCurl($uri); $res = $this->curlResult($curl); if (isset($res->data['data'])) { $this->cache->set($cacheName, $res->data); return Result::Success('', $res->data); } return Result::Error('TLD一覧の受け取りに失敗。'); } // 請求 //// 請求書 /** * 請求書一覧 * @todo テスト * * @param array $query 検索クエリー * @return Result */ public function listInvoices(array $query = []): Result { if (!OPENPROVIDER_ENABLED) return Result::error('エラー:OpenProviderは無効です。'); $cacheName = 'listinvoices'; $cache = $this->cache->get($cacheName); if ($this->cache->validate($cache)) return Result::Success('', $cache); if (empty($query)) $query = [ 'limit' => 10, 'offset' => 0 ]; foreach ($query as $k => $v) if (is_bool($v)) $query[$k] = $v ? 'true' : 'false'; $uri = "/invoices?".http_build_query($query, '', '&', PHP_QUERY_RFC3986); $curl = $this->setupCurl($uri); $res = $this->curlResult($curl); if (isset($res->data['data'])) { $this->cache->set($cacheName, $res->data); return Result::Success('', $res->data); } return Result::Error('請求書一覧の受け取りに請求書'); } //// 支払 /** * 支払一覧 * @todo テスト * * @param array $query 検索クエリー * @return Result */ public function listPayments(array $query = []): Result { if (!OPENPROVIDER_ENABLED) return Result::error('エラー:OpenProviderは無効です。'); $cacheName = 'listpayments'; $cache = $this->cache->get($cacheName); if ($this->cache->validate($cache)) return Result::Success('', $cache); if (empty($query)) $query = [ 'limit' => 10, 'offset' => 0 ]; foreach ($query as $k => $v) if (is_bool($v)) $query[$k] = $v ? 'true' : 'false'; $uri = "/payments?".http_build_query($query, '', '&', PHP_QUERY_RFC3986); $curl = $this->setupCurl($uri); $res = $this->curlResult($curl); if (isset($res->data['data'])) { $this->cache->set($cacheName, $res->data); return Result::Success('', $res->data); } return Result::Error('支払一覧の受け取りに失敗。'); } //// トランザクション /** * トランザクション一覧 * @todo テスト * * @param array $query 検索クエリー * @return Result */ public function listTransactions(array $query = []): Result { if (!OPENPROVIDER_ENABLED) return Result::error('エラー:OpenProviderは無効です。'); $cacheName = 'listtransactions'; $cache = $this->cache->get($cacheName); if ($this->cache->validate($cache)) return Result::Success('', $cache); if (empty($query)) $query = [ 'limit' => 10, 'offset' => 0 ]; foreach ($query as $k => $v) if (is_bool($v)) $query[$k] = $v ? 'true' : 'false'; $uri = "/transactions?".http_build_query($query, '', '&', PHP_QUERY_RFC3986); $curl = $this->setupCurl($uri); $res = $this->curlResult($curl); if (isset($res->data['data'])) { $this->cache->set($cacheName, $res->data); return Result::Success('', $res->data); } return Result::Error('トランザクション一覧の受け取りに失敗。'); } // DNS //// DomainToken /** * ドメイントークンの作成 * @todo テスト * * @param array $payload フォームデータ * @return Result */ public function createDomainToken(array $payload = []): Result { if (!OPENPROVIDER_ENABLED) return Result::error('エラー:OpenProviderは無効です。'); $uri = '/dns/domain-token'; $curl = $this->setupCurl($uri, 'POST', $payload); $res = $this->curlResult($curl); if (isset($res->data['data'])) { return Result::Success('DNSテンプレートの追加に成功。', $res->data); } return Result::Error('DNSテンプレートの追加に失敗。'); } //// ネームサーバー /** * ネームサーバー一覧 * @todo テスト * * @param array $query * @return Result */ public function listNameservers(array $query = []): Result { if (!OPENPROVIDER_ENABLED) return Result::error('エラー:OpenProviderは無効です。'); $cacheName = 'listnameservers'; $cache = $this->cache->get($cacheName); if ($this->cache->validate($cache, $query)) return Result::Success('', $cache); if (empty($query)) $query = [ 'limit' => 25, 'offset' => 0, 'order_by.name' => 'asc' ]; foreach ($query as $k => $v) if (is_bool($v)) $query[$k] = $v ? 'true' : 'false'; $uri = "/dns/nameservers?".http_build_query($query, '', '&', PHP_QUERY_RFC3986); $curl = $this->setupCurl($uri); $res = $this->curlResult($curl); if (isset($res->data['data'])) { $this->cache->set($cacheName, $res->data); return Result::Success('', $res->data); } return Result::Error('ネームサーバー一覧の受け取りに失敗。'); } /** * ネームサーバーの作成 * @todo テスト * * @param array $payload フォームデータ * @return Result */ public function createNameserver(array $payload = []): Result { if (!OPENPROVIDER_ENABLED) return Result::error('エラー:OpenProviderは無効です。'); $uri = '/dns/nameservers'; $curl = $this->setupCurl($uri, 'POST', $payload); $res = $this->curlResult($curl); if (isset($res->data['data'])) { $this->cache->murder('listnameservers'); return Result::Success('ネームサーバーの追加に成功。', $res->data); } return Result::Error('ネームサーバーの追加に失敗。'); } /** * ネームサーバー一覧 * @todo テスト * * @param string $domain ドメイン名 * @param array $query 検索クエリー * @return Result */ public function getNameserver(string $domain, array $query = []): Result { if (!OPENPROVIDER_ENABLED) return Result::error('エラー:OpenProviderは無効です。'); $cacheName = "listnameserver-{$domain}"; $cache = $this->cache->get($cacheName); if ($this->cache->validate($cache)) return Result::Success('', $cache); if (empty($query)) $query = [ 'limit' => 100, 'offset' => 0, 'order_by.name' => 'asc' ]; foreach ($query as $k => $v) if (is_bool($v)) $query[$k] = $v ? 'true' : 'false'; $uri = "/dns/nameservers/{$domain}?".http_build_query($query, '', '&', PHP_QUERY_RFC3986); $curl = $this->setupCurl($uri); $res = $this->curlResult($curl); if (isset($res->data['data'])) { $this->cache->set($cacheName, $res->data); return Result::Success('', $res->data); } return Result::Error('ネームサーバー一覧の受け取りに失敗。'); } /** * ネームサーバーの更新 * @todo テスト * * @param string $domain ドメイン名 * @param array $payload フォームデータ * @return Result */ public function updateNameserver(string $domain, array $payload = []): Result { if (!OPENPROVIDER_ENABLED) return Result::error('エラー:OpenProviderは無効です。'); $uri = "/dns/nameservers/{$domain}"; $curl = $this->setupCurl($uri, 'PUT', $payload); $res = $this->curlResult($curl); if (isset($res->data['data'])) { $this->cache->murder('listnameservers'); $this->cache->murder("listnameserver-{$domain}"); if ($res->data['data']['success']) return Result::Success('ネームサーバーの更新に成功。', $res->data); } return Result::Error('ネームサーバーの更新に失敗。'); } /** * ネームサーバーの削除 * @todo テスト * * @param string $domain ドメイン名 * @return Result */ public function deleteNameserver(string $domain): Result { if (!OPENPROVIDER_ENABLED) return Result::error('エラー:OpenProviderは無効です。'); $uri = "/dns/nameservers/{$domain}"; $curl = $this->setupCurl($uri, 'DELETE'); $res = $this->curlResult($curl); if (isset($res->data['data'])) { $this->cache->murder('listnameservers'); $this->cache->murder("listnameserver-{$domain}"); if ($res->data['data']['success']) return Result::Success('ネームサーバーの削除に成功。', $res->data); } return Result::Error('ネームサーバーの削除に失敗。'); } //// NSグループ /** * NSグループ一覧 * @todo テスト * * @param array $query * @return Result */ public function listNsGroups(array $query = []): Result { if (!OPENPROVIDER_ENABLED) return Result::error('エラー:OpenProviderは無効です。'); $cacheName = 'listnsgroups'; $cache = $this->cache->get($cacheName); if ($this->cache->validate($cache, $query)) return Result::Success('', $cache); if (empty($query)) $query = [ 'limit' => 25, 'offset' => 0, 'order_by.name' => 'asc' ]; foreach ($query as $k => $v) if (is_bool($v)) $query[$k] = $v ? 'true' : 'false'; $uri = "/dns/nameservers/groups?".http_build_query($query, '', '&', PHP_QUERY_RFC3986); $curl = $this->setupCurl($uri); $res = $this->curlResult($curl); if (isset($res->data['data'])) { $this->cache->set($cacheName, $res->data); return Result::Success('', $res->data); } return Result::Error('NSグループ一覧の受け取りに失敗。'); } /** * NSグループの作成 * @todo テスト * * @param array $payload フォームデータ * @return Result */ public function createNsGroup(array $payload = []): Result { if (!OPENPROVIDER_ENABLED) return Result::error('エラー:OpenProviderは無効です。'); $uri = '/dns/nameservers/groups'; $curl = $this->setupCurl($uri, 'POST', $payload); $res = $this->curlResult($curl); if (isset($res->data['data'])) { $this->cache->murder('listnsgroups'); return Result::Success('NSグループの追加に成功。', $res->data); } return Result::Error('NSグループの追加に失敗。'); } /** * NSグループ一覧 * @todo テスト * * @param string $nsGroup ネームサーバー名 * @param array $query 検索クエリー * @return Result */ public function getNsGroup(string $nsGroup, array $query = []): Result { if (!OPENPROVIDER_ENABLED) return Result::error('エラー:OpenProviderは無効です。'); $cacheName = "listnsgroup-{$nsGroup}"; $cache = $this->cache->get($cacheName); if ($this->cache->validate($cache)) return Result::Success('', $cache); if (empty($query)) $query = [ 'limit' => 100, 'offset' => 0, 'order_by.name' => 'asc' ]; foreach ($query as $k => $v) if (is_bool($v)) $query[$k] = $v ? 'true' : 'false'; $uri = "/dns/nameservers/groups/{$nsGroup}?".http_build_query($query, '', '&', PHP_QUERY_RFC3986); $curl = $this->setupCurl($uri); $res = $this->curlResult($curl); if (isset($res->data['data'])) { $this->cache->set($cacheName, $res->data); return Result::Success('', $res->data); } return Result::Error('NSグループ一覧の受け取りに失敗。'); } /** * NSグループの更新 * @todo テスト * * @param string $nsGroup ネームサーバー名 * @param array $payload フォームデータ * @return Result */ public function updateNsGroup(string $nsGroup, array $payload = []): Result { if (!OPENPROVIDER_ENABLED) return Result::error('エラー:OpenProviderは無効です。'); $uri = "/dns/nameservers/groups/{$nsGroup}"; $curl = $this->setupCurl($uri, 'PUT', $payload); $res = $this->curlResult($curl); if (isset($res->data['data'])) { $this->cache->murder('listnsgroups'); $this->cache->murder("listnsgroup-{$nsGroup}"); if ($res->data['data']['success']) return Result::Success('NSグループの更新に成功。', $res->data); } return Result::Error('NSグループの更新に失敗。'); } /** * NSグループの削除 * @todo テスト * * @param string $nsGroup ネームサーバー名 * @return Result */ public function deleteNsGroup(string $nsGroup): Result { if (!OPENPROVIDER_ENABLED) return Result::error('エラー:OpenProviderは無効です。'); $uri = "/dns/nameservers/groups/{$nsGroup}"; $curl = $this->setupCurl($uri, 'DELETE'); $res = $this->curlResult($curl); if (isset($res->data['data'])) { $this->cache->murder('listnsgroups'); $this->cache->murder("listnsgroup-{$nsGroup}"); if ($res->data['data']['success']) return Result::Success('NSグループの削除に成功。', $res->data); } return Result::Error('NSグループの削除に失敗。'); } //// テンプレート /** * DNSテンプレート一覧 * @todo テスト * * @param array $query 検索クエリー * @return Result */ public function listDnsTemplate(array $query = []): Result { if (!OPENPROVIDER_ENABLED) return Result::error('エラー:OpenProviderは無効です。'); $cacheName = 'listdnstemplates'; $cache = $this->cache->get($cacheName); if ($this->cache->validate($cache, $query)) return Result::Success('', $cache); foreach ($query as $k => $v) { if (is_bool($v)) $query[$k] = $v ? 'true' : 'false'; } $uri = '/dns/templates?'.http_build_query($query, '', '&', PHP_QUERY_RFC3986); $curl = $this->setupCurl($uri); $res = $this->curlResult($curl); if (isset($res->data['data'])) { $res->data['query'] = $query; $this->cache->set($cacheName, $res->data); return Result::Success('', $res->data); } return Result::Error('DNSテンプレート一覧の受け取りに失敗。'); } /** * DNSテンプレートの作成 * @todo テスト * * @param array $payload フォームデータ * @return Result */ public function createDnsTemplate(array $payload = []): Result { if (!OPENPROVIDER_ENABLED) return Result::error('エラー:OpenProviderは無効です。'); $uri = '/dns/templates'; $curl = $this->setupCurl($uri, 'POST', $payload); $res = $this->curlResult($curl); if (isset($res->data['data'])) { $this->cache->murder('listdnstemplates'); return Result::Success('DNSテンプレートの追加に成功。', $res->data); } return Result::Error('DNSテンプレートの追加に失敗。'); } /** * DNSテンプレートの表示 * @todo テスト * * @param int $id DNSテンプレートID * @return Result */ public function getDnsTemplate(int $id): Result { if (!OPENPROVIDER_ENABLED) return Result::error('エラー:OpenProviderは無効です。'); $cacheName = "getdnstemplate-{$id}"; $cache = $this->cache->get($cacheName); if ($this->cache->validate($cache, $query)) return Result::Success('', $cache); $uri = "/dns/templates/{$id}"; $curl = $this->setupCurl($uri); $res = $this->curlResult($curl); if (isset($res->data['data'])) { $this->cache->set($cacheName, $res->data); return Result::Success('', $res->data); } return Result::Error('DNSテンプレートの更新に失敗。'); } /** * DNSテンプレートの削除 * @todo テスト * * @param int $id DNSテンプレートID * @return Result */ public function deleteDnsTemplate(int $id): Result { if (!OPENPROVIDER_ENABLED) return Result::error('エラー:OpenProviderは無効です。'); $uri = "/dns/templates/{$id}"; $curl = $this->setupCurl($uri, 'DELETE'); $res = $this->curlResult($curl); if (isset($res->data['data'])) { $this->cache->murder('listdnstemplates'); $this->cache->murder("getdnstemplate-{$id}"); if ($res->data['data']['success']) return Result::Success('DNSテンプレートの削除に成功。', $res->data); } return Result::Error('DNSテンプレートの削除に失敗。'); } //// DNSゾーン /** * DNSゾーン一覧 * * @param array $query * @return Result */ public function listDnsZones(array $query = []): Result { if (!OPENPROVIDER_ENABLED) return Result::error('エラー:OpenProviderは無効です。'); $cacheName = 'listdnszones'; $cache = $this->cache->get($cacheName); if ($this->cache->validate($cache, $query)) return Result::Success('', $cache); if (empty($query)) $query = [ 'limit' => 25, 'offset' => 0, 'order_by.name' => 'asc' ]; foreach ($query as $k => $v) if (is_bool($v)) $query[$k] = $v ? 'true' : 'false'; $uri = "/dns/zones?".http_build_query($query, '', '&', PHP_QUERY_RFC3986); $curl = $this->setupCurl($uri); $res = $this->curlResult($curl); if (isset($res->data['data'])) { $this->cache->set($cacheName, $res->data); return Result::Success('', $res->data); } return Result::Error('DNSゾーン一覧の受け取りに失敗。'); } /** * DNSゾーンの作成 * @todo テスト * * @param array $payload フォームデータ * @return Result */ public function createDnsZone(array $payload = []): Result { if (!OPENPROVIDER_ENABLED) return Result::error('エラー:OpenProviderは無効です。'); $uri = '/dns/zones'; $curl = $this->setupCurl($uri, 'POST', $payload); $res = $this->curlResult($curl); if (isset($res->data['data'])) { $this->cache->murder('listdnszones'); return Result::Success('DNSゾーンの追加に成功。', $res->data); } return Result::Error('DNSゾーンの追加に失敗。'); } /** * DNSゾーン一覧 * * @param string $domain ドメイン名 * @param array $query 検索クエリー * @return Result */ public function getDnsZone(string $domain, array $query = []): Result { if (!OPENPROVIDER_ENABLED) return Result::error('エラー:OpenProviderは無効です。'); $cacheName = "getdnszone-{$domain}"; $cache = $this->cache->get($cacheName); if ($this->cache->validate($cache)) return Result::Success('', $cache); if (empty($query)) $query = [ 'limit' => 100, 'offset' => 0, 'order_by.name' => 'asc' ]; foreach ($query as $k => $v) if (is_bool($v)) $query[$k] = $v ? 'true' : 'false'; $uri = "/dns/zones/{$domain}?".http_build_query($query, '', '&', PHP_QUERY_RFC3986); $curl = $this->setupCurl($uri); $res = $this->curlResult($curl); if (isset($res->data['data'])) { $this->cache->set($cacheName, $res->data); return Result::Success('', $res->data); } return Result::Error('DNSゾーン一覧の受け取りに失敗。'); } /** * DNSゾーンの更新 * @todo テスト * * @param string $domain ドメイン名 * @param array $payload フォームデータ * @return Result */ public function updateDnsZone(string $domain, array $payload = []): Result { if (!OPENPROVIDER_ENABLED) return Result::error('エラー:OpenProviderは無効です。'); $uri = "/dns/zones/{$domain}"; $curl = $this->setupCurl($uri, 'PUT', $payload); $res = $this->curlResult($curl); if (isset($res->data['data'])) { $this->cache->murder('listdnszones'); $this->cache->murder("getdnszone-{$domain}"); if ($res->data['data']['success']) return Result::Success('DNSゾーンの更新に成功。', $res->data); } return Result::Error('DNSゾーンの更新に失敗。'); } /** * DNSゾーンの削除 * @todo テスト * * @param string $domain ドメイン名 * @return Result */ public function deleteDnsZone(string $domain): Result { if (!OPENPROVIDER_ENABLED) return Result::error('エラー:OpenProviderは無効です。'); $uri = "/dns/zones/{$domain}"; $curl = $this->setupCurl($uri, 'DELETE'); $res = $this->curlResult($curl); if (isset($res->data['data'])) { $this->cache->murder('listdnszones'); $this->cache->murder("getdnszone-{$domain}"); if ($res->data['data']['success']) return Result::Success('DNSゾーンの削除に成功。', $res->data); } return Result::Error('DNSゾーンの削除に失敗。'); } //// ゾーンレコード /** * DNSレコード一覧 * * @param string $domain * @return Result */ public function listZoneRecords(string $domain): Result { if (!OPENPROVIDER_ENABLED) return Result::error('エラー:OpenProviderは無効です。'); $cacheName = "getzonerecords-{$domain}"; $cache = $this->cache->get($cacheName); if ($this->cache->validate($cache)) return Result::Success('', $cache); $curl = $this->setupCurl("/dns/zones/{$domain}/records"); $res = $this->curlResult($curl); if (isset($res->data['data'])) { $this->cache->set($cacheName, $res->data); return Result::Success('', $res->data); } return Result::Error('TLD一覧の受け取りに失敗。'); } // Easydmarc // メールテンプレート //// メール /** * メールテンプレート一覧 * @todo テスト * * @param array $query 検索クエリー * @return Result */ public function listEmails(array $query = []): Result { if (!OPENPROVIDER_ENABLED) return Result::error('エラー:OpenProviderは無効です。'); $cacheName = 'listemails'; $cache = $this->cache->get($cacheName); if ($this->cache->validate($cache, $query)) return Result::Success('', $cache); foreach ($query as $k => $v) { if (is_bool($v)) $query[$k] = $v ? 'true' : 'false'; } $uri = '/emails?'.http_build_query($query, '', '&', PHP_QUERY_RFC3986); $curl = $this->setupCurl($uri); $res = $this->curlResult($curl); if (isset($res->data['data'])) { $res->data['query'] = $query; $this->cache->set($cacheName, $res->data); return Result::Success('', $res->data); } return Result::Error('メールテンプレート一覧の受け取りに失敗。'); } /** * メールテンプレートの作成 * @todo テスト * * @param array $payload フォームデータ * @return Result */ public function createEmail(array $payload = []): Result { if (!OPENPROVIDER_ENABLED) return Result::error('エラー:OpenProviderは無効です。'); $uri = '/emails'; $curl = $this->setupCurl($uri, 'POST', $payload); $res = $this->curlResult($curl); if (isset($res->data['data'])) { $this->cache->murder('listemails'); return Result::Success('メールテンプレートの追加に成功。', $res->data); } return Result::Error('メールテンプレートの追加に失敗。'); } /** * メールテンプレートの更新 * @todo テスト * * @param int $id メールテンプレートID * @param array $payload フォームデータ * @return Result */ public function updateEmail(int $id, array $payload = []): Result { if (!OPENPROVIDER_ENABLED) return Result::error('エラー:OpenProviderは無効です。'); $uri = "/emails/{$id}"; $curl = $this->setupCurl($uri, 'PUT', $payload); $res = $this->curlResult($curl); if (isset($res->data['data'])) { $this->cache->murder('listemails'); if ($res->data['data']['success']) return Result::Success('メールテンプレートの更新に成功。', $res->data); } return Result::Error('メールテンプレートの更新に失敗。'); } /** * メールテンプレートの削除 * @todo テスト * * @param int $id メールテンプレートID * @return Result */ public function deleteEmail(int $id): Result { if (!OPENPROVIDER_ENABLED) return Result::error('エラー:OpenProviderは無効です。'); $uri = "/emails/{$id}"; $curl = $this->setupCurl($uri, 'DELETE'); $res = $this->curlResult($curl); if (isset($res->data['data'])) { $this->cache->murder('listemails'); if ($res->data['data']['success']) return Result::Success('メールテンプレートの削除に成功。', $res->data); } return Result::Error('メールテンプレートの削除に失敗。'); } // ライセンス // リセラー・顧客様 //// 連絡先 /** * 連絡先の一覧 * * @param array $query 検索クエリー * @return Result */ public function listContacts(array $query = []): Result { if (!OPENPROVIDER_ENABLED) return Result::error('エラー:OpenProviderは無効です。'); $cacheName = 'listcontacts'; $cache = $this->cache->get($cacheName); if ($this->cache->validate($cache, $query)) return Result::Success('', $cache); foreach ($query as $k => $v) { if (is_bool($v)) $query[$k] = $v ? 'true' : 'false'; } $uri = '/contacts?'.http_build_query($query, '', '&', PHP_QUERY_RFC3986); $curl = $this->setupCurl($uri); $res = $this->curlResult($curl); if (isset($res->data['data'])) { $res->data['query'] = $query; $this->cache->set($cacheName, $res->data); return Result::Success('', $res->data); } return Result::Error('連絡先一覧の受け取りに失敗。'); } /** * 連絡先の作成 * * @param array $payload * @return Result */ public function createContact(array $payload): Result { if (!OPENPROVIDER_ENABLED) return Result::error('エラー:OpenProviderは無効です。'); $uri = '/contacts'; $curl = $this->setupCurl($uri, 'POST', $payload); $res = $this->curlResult($curl); if (isset($res)) { $this->cache->murder('listcontacts'); return Result::Success('', $res->data); } return Result::Error("連絡先の作成に失敗。"); } /** * 連絡先の表示 * * @param int $id 連絡先ID * @param bool $withAdditionalData 詳細データ含むか? * @return Result */ public function getContact(int $id, bool $withAdditionalData = false): Result { if (!OPENPROVIDER_ENABLED) return Result::error('エラー:OpenProviderは無効です。'); $cacheName = "getcontact-{$id}"; $cache = $this->cache->get($cacheName); if ($this->cache->validate($cache, $id, 'id')) return Result::Success('', $cache); $query = [ 'with_additional_data' => $withAdditionalData ? 'true' : 'false' ]; $uri = "/contacts/{$id}?".http_build_query($query, '', '&', PHP_QUERY_RFC3986); // kys($uri); $curl = $this->setupCurl($uri); $res = $this->curlResult($curl); if (isset($res->data['data'])) { $res->data['id'] = $id; $this->cache->set($cacheName, $res->data); return Result::Success('', $res->data); } return Result::Error('連絡先の受け取りに失敗。'); } /** * 連絡先の更新 * @todo テスト * * @param int $id 連絡先ID * @param array $payload フォームデータ * @return Result */ public function updateContact(int $id, array $payload = []): Result { if (!OPENPROVIDER_ENABLED) return Result::error('エラー:OpenProviderは無効です。'); $uri = "/contacts/{$id}"; $curl = $this->setupCurl($uri, 'PUT', $payload); $res = $this->curlResult($curl); if (isset($res->data['data'])) { $this->cache->murder("getcontact-{$id}"); $this->cache->murder('listcontacts'); if ($res->data['data']['success']) return Result::Success('連絡先の更新に成功。', $res->data); } return Result::Error('連絡先の更新に失敗。'); } /** * 連絡先の削除 * * @param int $id 連絡先ID * @return Result */ public function deleteContact(int $id): Result { if (!OPENPROVIDER_ENABLED) return Result::error('エラー:OpenProviderは無効です。'); $uri = "/contacts/{$id}"; $curl = $this->setupCurl($uri, 'DELETE'); $res = $this->curlResult($curl); if (isset($res->data['data'])) { $this->cache->murder("getcontact-{$id}"); $this->cache->murder('listcontacts'); if ($res->data['data']['success']) return Result::Success('連絡先の削除に成功。'); } return Result::Error('連絡先の削除に失敗。'); } //// 顧客様 /** * 顧客様の一覧 * * @param array $query 検索クエリー * @return Result */ public function listCustomers(array $query = []): Result { if (!OPENPROVIDER_ENABLED) return Result::error('エラー:OpenProviderは無効です。'); $cacheName = 'listcustomers'; $cache = $this->cache->get($cacheName); if ($this->cache->validate($cache, $query)) return Result::Success('', $cache); foreach ($query as $k => $v) { if (is_bool($v)) $query[$k] = $v ? 'true' : 'false'; } $uri = '/customers?'.http_build_query($query, '', '&', PHP_QUERY_RFC3986); $curl = $this->setupCurl($uri); $res = $this->curlResult($curl); if (isset($res->data['data'])) { $res->data['query'] = $query; $this->cache->set($cacheName, $res->data); return Result::Success('', $res->data); } return Result::Error('顧客様一覧の受け取りに失敗。'); } /** * 顧客様の作成 * * @param array $payload * @return Result */ public function createCustomer(array $payload): Result { if (!OPENPROVIDER_ENABLED) return Result::error('エラー:OpenProviderは無効です。'); $uri = '/customers'; $curl = $this->setupCurl($uri, 'POST', $payload); $res = $this->curlResult($curl); if (isset($res)) { $this->cache->murder('listcustomers'); return Result::Success('', $res->data); } return Result::Error("顧客様の作成に失敗。"); } /** * 顧客様の表示 * * @param string $handle ハンドル * @param bool $withAdditionalData 詳細データ含むか? * @return Result */ public function getCustomer(string $handle, bool $withAdditionalData = false): Result { if (!OPENPROVIDER_ENABLED) return Result::error('エラー:OpenProviderは無効です。'); $cacheName = "getcustomer-{$handle}"; $cache = $this->cache->get($cacheName); if ($this->cache->validate($cache, $handle, 'handle')) return Result::Success('', $cache); $query = [ 'with_additional_data' => $withAdditionalData ? 'true' : 'false' ]; $uri = "/customers/{$handle}?".http_build_query($query, '', '&', PHP_QUERY_RFC3986); // kys($uri); $curl = $this->setupCurl($uri); $res = $this->curlResult($curl); if (isset($res->data['data'])) { $res->data['handle'] = $handle; $this->cache->set($cacheName, $res->data); return Result::Success('', $res->data); } return Result::Error('顧客様の受け取りに失敗。'); } /** * 顧客様の更新 * @todo テスト * * @param string $handle 顧客様のハンドル * @param array $payload フォームデータ * @return Result */ public function updateCustomer(string $handle, array $payload = []): Result { if (!OPENPROVIDER_ENABLED) return Result::error('エラー:OpenProviderは無効です。'); $uri = "/customers/{$handle}"; $curl = $this->setupCurl($uri, 'PUT', $payload); $res = $this->curlResult($curl); if (isset($res->data['data'])) { $this->cache->murder('listcustomers'); $this->cache->murder("getcustomer-{$handle}"); if ($res->data['data']['success']) return Result::Success('顧客様の更新に成功。', $res->data); } return Result::Error('顧客様の更新に失敗。'); } /** * 顧客様の削除 * * @param string $handle 顧客様のハンドル * @return Result */ public function deleteCustomer(string $handle): Result { if (!OPENPROVIDER_ENABLED) return Result::error('エラー:OpenProviderは無効です。'); $uri = "/customers/{$handle}"; $curl = $this->setupCurl($uri, 'DELETE'); $res = $this->curlResult($curl); if (isset($res->data['data'])) { $this->cache->murder('listcustomers'); $this->cache->murder("getcustomer-{$handle}"); if ($res->data['data']['success']) return Result::Success('顧客様の削除に成功。'); } return Result::Error('顧客様の削除に失敗。'); } //// メール認証 /** * メール認証一覧 * @todo テスト * * @param array $query 検索クエリー * @return Result */ public function listEmailVerifications(array $query = []): Result { if (!OPENPROVIDER_ENABLED) return Result::error('エラー:OpenProviderは無効です。'); $cacheName = 'listemailverifications'; $cache = $this->cache->get($cacheName); if ($this->cache->validate($cache, $query)) return Result::Success('', $cache); foreach ($query as $k => $v) { if (is_bool($v)) $query[$k] = $v ? 'true' : 'false'; } $uri = '/customers/verifications/emails/domains?'.http_build_query($query, '', '&', PHP_QUERY_RFC3986); $curl = $this->setupCurl($uri); $res = $this->curlResult($curl); if (isset($res->data['data'])) { $res->data['query'] = $query; $this->cache->set($cacheName, $res->data); return Result::Success('', $res->data); } return Result::Error('メール認証一覧の受け取りに失敗。'); } /** * メール認証の再起動 * @todo テスト * * @param string $email メールアドレス * @return Result */ public function restartEmailVerifications(string $email, string $language = '', string $tag = ''): Result { if (!OPENPROVIDER_ENABLED) return Result::error('エラー:OpenProviderは無効です。'); $uri = '/customers/verifications/emails/restart'; $curl = $this->setupCurl($uri, 'POST', ['email' => $email, 'language' => $language, 'tag' => $tag]); $res = $this->curlResult($curl); if (isset($res->data['data'])) { $this->cache->murder('listemailverifications'); return Result::Success('メール認証の再起動に成功。', $res->data); } return Result::Error('メール認証の再起動に失敗。'); } /** * メール認証の起動 * @todo テスト * * @param string $email メールアドレス * @param string $handle 顧客様のハンドル * @param string $language 言語 * @param string $tag タグ * @return Result */ public function startEmailVerifications(string $email, string $handle = '', string $language = '', string $tag = ''): Result { if (!OPENPROVIDER_ENABLED) return Result::error('エラー:OpenProviderは無効です。'); $uri = '/customers/verifications/emails/start'; $curl = $this->setupCurl($uri, 'POST', ['email' => $email, 'handle' => $handle, 'language' => $language, 'tag' => $tag]); $res = $this->curlResult($curl); if (isset($res->data['data'])) { $this->cache->murder('listemailverifications'); return Result::Success('メール認証の起動に成功。', $res->data); } return Result::Error('メール認証の起動に失敗。'); } //// リセラー /** * リセラーの受け取り * @todo テスト * * @param array $query 検索クエリー * @return Result */ public function getReseller(array $query = []): Result { if (!OPENPROVIDER_ENABLED) return Result::error('エラー:OpenProviderは無効です。'); $cacheName = 'getreseller'; $cache = $this->cache->get($cacheName); if ($this->cache->validate($cache, $query)) return Result::Success('', $cache); foreach ($query as $k => $v) { if (is_bool($v)) $query[$k] = $v ? 'true' : 'false'; } $uri = '/resellers?'.http_build_query($query, '', '&', PHP_QUERY_RFC3986); $curl = $this->setupCurl($uri); $res = $this->curlResult($curl); if (isset($res->data['data'])) { $res->data['query'] = $query; $this->cache->set($cacheName, $res->data); return Result::Success('', $res->data); } return Result::Error('リセラーの受け取りに失敗。'); } /** * リセラーの更新 * @todo テスト * * @param int $id リセラーID * @param array $payload フォームデータ * @return Result */ public function updateReseller(int $id, array $payload = []): Result { if (!OPENPROVIDER_ENABLED) return Result::error('エラー:OpenProviderは無効です。'); $uri = "/resellers/{$id}"; $curl = $this->setupCurl($uri, 'PUT', $payload); $res = $this->curlResult($curl); if (isset($res->data['data'])) { $this->cache->murder('getreseller'); if ($res->data['data']['success']) return Result::Success('リセラーの更新に成功。', $res->data); } return Result::Error('リセラーの更新に失敗。'); } //// 設定 /** * 設定の受け取り * @todo テスト * * @return Result */ public function listSettings(): Result { if (!OPENPROVIDER_ENABLED) return Result::error('エラー:OpenProviderは無効です。'); $cacheName = 'listsettings'; $cache = $this->cache->get($cacheName); if ($this->cache->validate($cache, $query)) return Result::Success('', $cache); $uri = '/resellers/settings'; $curl = $this->setupCurl($uri); $res = $this->curlResult($curl); if (isset($res->data['data'])) { $res->data['query'] = $query; $this->cache->set($cacheName, $res->data); return Result::Success('', $res->data); } return Result::Error('設定の受け取りに失敗。'); } //// 統計 /** * 統計の受け取り * @todo テスト * * @return Result */ public function listStatistics(array $query = []): Result { if (!OPENPROVIDER_ENABLED) return Result::error('エラー:OpenProviderは無効です。'); $cacheName = 'liststatistics'; $cache = $this->cache->get($cacheName); if ($this->cache->validate($cache, $query)) return Result::Success('', $cache); $uri = '/resellers/statistics'; $curl = $this->setupCurl($uri); $res = $this->curlResult($curl); if (isset($res->data['data'])) { $res->data['query'] = $query; $this->cache->set($cacheName, $res->data); return Result::Success('', $res->data); } return Result::Error('統計の受け取りに失敗。'); } //// タグ /** * タグ一覧 * @todo テスト * * @param array $query 検索クエリー * @return Result */ public function listTags(array $query = []): Result { if (!OPENPROVIDER_ENABLED) return Result::error('エラー:OpenProviderは無効です。'); $cacheName = 'listtags'; $cache = $this->cache->get($cacheName); if ($this->cache->validate($cache, $query)) return Result::Success('', $cache); foreach ($query as $k => $v) { if (is_bool($v)) $query[$k] = $v ? 'true' : 'false'; } $uri = '/tags?'.http_build_query($query, '', '&', PHP_QUERY_RFC3986); $curl = $this->setupCurl($uri); $res = $this->curlResult($curl); if (isset($res->data['data'])) { $res->data['query'] = $query; $this->cache->set($cacheName, $res->data); return Result::Success('', $res->data); } return Result::Error('タグ一覧の受け取りに失敗。'); } /** * タグの作成 * @todo テスト * * @param array $payload フォームデータ * @return Result */ public function createTag(array $payload = []): Result { if (!OPENPROVIDER_ENABLED) return Result::error('エラー:OpenProviderは無効です。'); $uri = '/tags'; $curl = $this->setupCurl($uri, 'POST', $payload); $res = $this->curlResult($curl); if (isset($res->data['data'])) { $this->cache->murder('listtags'); return Result::Success('タグの追加に成功。', $res->data); } return Result::Error('タグの追加に失敗。'); } /** * タグの削除 * @todo テスト * * @param array $payload フォームデータ * @return Result */ public function deleteTag(array $payload = []): Result { if (!OPENPROVIDER_ENABLED) return Result::error('エラー:OpenProviderは無効です。'); $uri = "/tags/{$id}"; $curl = $this->setupCurl($uri, 'DELETE', $payload); $res = $this->curlResult($curl); if (isset($res->data['data'])) { $this->cache->murder('listtags'); if ($res->data['data']['success']) return Result::Success('タグの削除に成功。', $res->data); } return Result::Error('タグの削除に失敗。'); } // SpamExpert //// SEDomain /** * SEDomainの作成 * @todo テスト * * @param array $payload * @return Result */ public function createSeDomain(array $payload): Result { if (!OPENPROVIDER_ENABLED) return Result::error('エラー:OpenProviderは無効です。'); $uri = '/spam-expert/domains'; $curl = $this->setupCurl($uri, 'POST', $payload); $res = $this->curlResult($curl); if (isset($res)) { $this->cache->murder('listdomains'); return Result::Success('', $res->data); } return Result::Error("SEDomainの作成に失敗。"); } /** * SEDomainの表示 * @todo テスト * * @param string $domain ドメイン名 * @param array $query 検索クエリー * @return Result */ public function getSeDomain(string $domain, array $query = []): Result { if (!OPENPROVIDER_ENABLED) return Result::error('エラー:OpenProviderは無効です。'); $cacheName = "getsedomain-{$domain}"; $cache = $this->cache->get($cacheName); if ($this->cache->validate($cache, $domain, 'domain')) return Result::Success('', $cache); $uri = "/spam-expert/domains/{$domain}?".http_build_query($query, '', '&', PHP_QUERY_RFC3986); // kys($uri); $curl = $this->setupCurl($uri); $res = $this->curlResult($curl); if (isset($res->data['data'])) { $res->data['domain'] = $domain; $this->cache->set($cacheName, $res->data); return Result::Success('', $res->data); } return Result::Error('SEDomainの受け取りに失敗。'); } /** * SEDomainの更新 * @todo テスト * * @param string $domain ドメイン名 * @param array $payload フォームデータ * @return Result */ public function updateSeDomain(string $domain, array $payload = []): Result { if (!OPENPROVIDER_ENABLED) return Result::error('エラー:OpenProviderは無効です。'); $uri = "/spam-expert/domains/{$domain}"; $curl = $this->setupCurl($uri, 'PUT', $payload); $res = $this->curlResult($curl); if (isset($res->data['data'])) { $this->cache->murder('listdomains'); $this->cache->murder("getsedomain-{$domain}"); if ($res->data['data']['success']) return Result::Success('SEDomainの更新に成功。', $res->data); } return Result::Error('SEDomainの更新に失敗。'); } /** * SEDomainの削除 * @todo テスト * * @param string $domain ドメイン名 * @return Result */ public function deleteSeDomain(string $domain): Result { if (!OPENPROVIDER_ENABLED) return Result::error('エラー:OpenProviderは無効です。'); $uri = "/spam-expert/domains/{$domain}"; $curl = $this->setupCurl($uri, 'DELETE'); $res = $this->curlResult($curl); if (isset($res->data['data'])) { $this->cache->murder('listdomains'); $this->cache->murder("getsedomain-{$domain}"); if ($res->data['data']['success']) return Result::Success('SEDomainの削除に成功。'); } return Result::Error('SEDomainの削除に失敗。'); } // SSL証明書 //// 確認担当者メール /** * 確認担当者メール一覧 * @todo テスト * * @param array $query 検索クエリー * @return Result */ public function listApproverEmails(array $query = []): Result { if (!OPENPROVIDER_ENABLED) return Result::error('エラー:OpenProviderは無効です。'); $cacheName = 'listapproveremails'; $cache = $this->cache->get($cacheName); if ($this->cache->validate($cache, $query)) return Result::Success('', $cache); foreach ($query as $k => $v) { if (is_bool($v)) $query[$k] = $v ? 'true' : 'false'; } $uri = '/ssl/approver-emails?'.http_build_query($query, '', '&', PHP_QUERY_RFC3986); $curl = $this->setupCurl($uri); $res = $this->curlResult($curl); if (isset($res->data['data'])) { $res->data['query'] = $query; $this->cache->set($cacheName, $res->data); return Result::Success('', $res->data); } return Result::Error('確認担当者メール一覧の受け取りに失敗。'); } //// CSR /** * 注文確認担当者メールの再送信 * @todo テスト * * @param array $payload * @return Result */ public function createCsr(array $payload): Result { if (!OPENPROVIDER_ENABLED) return Result::error('エラー:OpenProviderは無効です。'); $uri = '/ssl/csr'; $curl = $this->setupCurl($uri, 'POST', $payload); $res = $this->curlResult($curl); if (isset($res)) { return Result::Success('', $res->data); } return Result::Error("注文確認担当者メールの再送信に失敗。"); } /** * 注文確認担当者メールの再送信 * @todo テスト * * @param string $csr * @return Result */ public function decodeCsr(string $csr): Result { if (!OPENPROVIDER_ENABLED) return Result::error('エラー:OpenProviderは無効です。'); $uri = '/ssl/csr/decode'; $curl = $this->setupCurl($uri, 'POST', ['csr' => $csr]); $res = $this->curlResult($curl); if (isset($res)) { return Result::Success('', $res->data); } return Result::Error("注文確認担当者メールの再送信に失敗。"); } //// 注文 //// 注文確認担当者メール /** * 注文確認担当者メールの更新 * @todo テスト * * @param int $id * @param string $approverEmail * @return Result */ public function updateSslApproverEmail(int $id, string $approverEmail): Result { if (!OPENPROVIDER_ENABLED) return Result::error('エラー:OpenProviderは無効です。'); $uri = "/ssl/orders/{$id}/approver-email"; $curl = $this->setupCurl($uri, 'PUT', ['id' => $id, 'approver_email' => $approverEmail]); $res = $this->curlResult($curl); if (isset($res)) { $this->cache->murder('listapproveremails'); return Result::Success('', $res->data); } return Result::Error("注文確認担当者メールの更新に失敗。"); } /** * 注文確認担当者メールの再送信 * @todo テスト * * @param int $id * @return Result */ public function resendSslApproverEmail(int $id): Result { if (!OPENPROVIDER_ENABLED) return Result::error('エラー:OpenProviderは無効です。'); $uri = "/ssl/orders/{$id}/approver-email/resend"; $curl = $this->setupCurl($uri, 'POST', ['id' => $id]); $res = $this->curlResult($curl); if (isset($res)) { $this->cache->murder('listapproveremails'); return Result::Success('', $res->data); } return Result::Error("注文確認担当者メールの再送信に失敗。"); } //// OTPトークン /** * OTPトークンの作成 * @todo テスト * * @param int $id * @return Result */ public function createSslOtpToken(int $id): Result { if (!OPENPROVIDER_ENABLED) return Result::error('エラー:OpenProviderは無効です。'); $uri = "/ssl/orders/{$id}/otp-tokens"; $curl = $this->setupCurl($uri, 'POST'); $res = $this->curlResult($curl); if (isset($res)) { return Result::Success('', $res->data); } return Result::Error("OTPトークンの作成に失敗。"); } //// 商品 /** * 商品一覧 * @todo テスト * * @param array $query 検索クエリー * @return Result */ public function listSslProducts(array $query = []): Result { if (!OPENPROVIDER_ENABLED) return Result::error('エラー:OpenProviderは無効です。'); $cacheName = 'listsslproducts'; $cache = $this->cache->get($cacheName); if ($this->cache->validate($cache, $query)) return Result::Success('', $cache); foreach ($query as $k => $v) { if (is_bool($v)) $query[$k] = $v ? 'true' : 'false'; } $uri = '/ssl/products?'.http_build_query($query, '', '&', PHP_QUERY_RFC3986); $curl = $this->setupCurl($uri); $res = $this->curlResult($curl); if (isset($res->data['data'])) { $res->data['query'] = $query; $this->cache->set($cacheName, $res->data); return Result::Success('', $res->data); } return Result::Error('商品一覧の受け取りに失敗。'); } /** * 商品の表示 * @todo テスト * * @param int $id 商品ID * @return Result */ public function getSslProduct(int $id): Result { if (!OPENPROVIDER_ENABLED) return Result::error('エラー:OpenProviderは無効です。'); $cacheName = "getsslproduct-{$id}"; $cache = $this->cache->get($cacheName); if ($this->cache->validate($cache, $id, 'id')) return Result::Success('', $cache); // kys($uri); $curl = $this->setupCurl($uri); $res = $this->curlResult($curl); if (isset($res->data['data'])) { $res->data['id'] = $id; $this->cache->set($cacheName, $res->data); return Result::Success('', $res->data); } return Result::Error('商品の受け取りに失敗。'); } //////// /** * トークンの受け取り。 * * @return string トークン */ public function getToken(): string { if (!OPENPROVIDER_ENABLED) return ''; return $this->token; } /** * リセラーIDの受け取り。 * * @return int リセラーID */ public function getResellerId(): int { if (!OPENPROVIDER_ENABLED) return 0; return $this->resellerId; } ////////// private function setupCurl(string $uri, string $resType = 'GET', array $payload = []): Curl { $curl = new Curl("{$this->BASEURL}{$uri}"); $curl->setMethod($resType); if (!empty($payload)) $curl->setPostRaw(json_encode($payload)); $curl->setBearerAuth($this->token); $curl->addHeader('Content-Type', 'application/json'); $curl->addHeader('Accept', 'application/json'); return $curl; } private function curlResult(Curl &$curl): Result { $res = $curl->execute(); if (!$res->isSuccess) { $err = "CURL実行に失敗: {$curl->message}"; assert_unless_success($res, $err); return Result::Error($err); } $body = $curl->getResponseBody(); if ($curl->getResponseCode() != 200) { $err = json_decode($body, true); assert_not_null($err, "エラーの受け取りに失敗。"); assert($curl->getResponseCode() == 200, $err['desc']); return Result::Error($err['desc']); } assert_not_null($body, "返事ボディーは空です。"); return Result::Success('', json_decode($body, true)); } }