switchepp.class.php 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. <?php
  2. use Illuminate\Database\Capsule\Manager as Capsule;
  3. class SWITCHEPP {
  4. private $apiUrl;
  5. private $port;
  6. private $regId;
  7. private $regPw;
  8. private $passPhrase;
  9. private $dnsSec;
  10. public function __construct() {
  11. $this->WgsSwitchEppGetModuleParams();
  12. }
  13. public function WgsSwitchEppGetModuleParams() {
  14. $getRegModuleDetail = Capsule::table('tblregistrars')->where('registrar', 'switchepp')->orderBy('id', 'asc')->get();
  15. foreach ($getRegModuleDetail as $detail) {
  16. $detail = (array) $detail;
  17. if ($detail['setting'] == 'eppurl')
  18. $this->apiUrl = decrypt($detail['value']);
  19. if ($detail['setting'] == 'eppport')
  20. $this->port = decrypt($detail['value']);
  21. if ($detail['setting'] == 'registrar_id')
  22. $this->regId = decrypt($detail['value']);
  23. if ($detail['setting'] == 'registrar_password')
  24. $this->regPw = decrypt($detail['value']);
  25. if ($detail['setting'] == 'passphrase')
  26. $this->passPhrase = decrypt($detail['value']);
  27. if ($detail['setting'] == 'dnssec')
  28. $this->dnsSec = decrypt($detail['value']);
  29. }
  30. }
  31. public function WgsSwitchEppGetWHMCS_Admin() {
  32. $admin = Capsule::table('tbladmins')->limit(1)->get();
  33. return $admin[0]->id;
  34. }
  35. public function WgsSwitchEppGetPoll() {
  36. $client = $this->WgsSwitchEppConnect();
  37. if (is_array($client)) {
  38. $error = $client['msg'];
  39. return ['status' => 'error', 'msg' => $error];
  40. }
  41. $login = $this->WgsSwitchEppLoggedIn($client);
  42. if ($login['status'] == 'error')
  43. return $login;
  44. $loginXmlArr = simplexml_load_string($login['resp']);
  45. $loginCode = $loginXmlArr->response->result->attributes()->code[0];
  46. if ($loginCode == 1000) {
  47. $poll = $this->WgsSwitchEppPoll($client);
  48. $pollXmlArr = simplexml_load_string($poll['resp']);
  49. $pollCode = $pollXmlArr->response->result->attributes()->code[0];
  50. $msgid = $pollXmlArr->response->msgQ->attributes()->id[0];
  51. if ($pollCode == 1300 || $pollCode == 1301) {
  52. return ['status' => 'success', 'msg' => $pollXmlArr->response->result->msg, 'resp' => $poll['resp'], 'msgid' => $msgid];
  53. } else {
  54. return ['status' => 'error', 'msg' => $pollXmlArr->response->result->msg];
  55. }
  56. } else {
  57. foreach ($loginXmlArr->response->result as $resp) {
  58. $error = $resp->msg;
  59. }
  60. return ['status' => 'error', 'msg' => $error];
  61. }
  62. $logout = $this->WgsSwitchEppLogout($client);
  63. }
  64. public function WgsSwitchEppPoll($client) {
  65. $request = '<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  66. <command>
  67. <poll op="req"/>
  68. <clTRID>POLL-' . rand(10000, 99999) . '</clTRID>
  69. </command>
  70. </epp>';
  71. $response = $client->request($request);
  72. logModuleCall('SWITCH EPP Addon Module', 'Get Poll', $request, $response);
  73. return ['status' => 'success', 'req' => $request, 'resp' => $response];
  74. }
  75. public function WgsSwitchEppAckConfirm($msgId) {
  76. $client = $this->WgsSwitchEppConnect();
  77. if (is_array($client)) {
  78. $error = $client['msg'];
  79. return ['status' => 'error', 'msg' => $error];
  80. }
  81. $login = $this->WgsSwitchEppLoggedIn($client);
  82. if ($login['status'] == 'error')
  83. return $login;
  84. $loginXmlArr = simplexml_load_string($login['resp']);
  85. $loginCode = $loginXmlArr->response->result->attributes()->code[0];
  86. if ($loginCode == 1000) {
  87. $pollCnfrm = $this->WgsSwitchEppAckConfirmCommand($client, $msgId);
  88. $pollCnfrmXmlArr = simplexml_load_string($pollCnfrm['resp']);
  89. $pollCnfrmCode = $pollCnfrmXmlArr->response->result->attributes()->code[0];
  90. if ($pollCnfrmCode == 1000) {
  91. return ['status' => 'success', 'msg' => $pollCnfrmXmlArr->response->result->msg, 'resp' => $pollCnfrm['resp']];
  92. } else {
  93. return ['status' => 'error', 'msg' => $pollCnfrmXmlArr->response->result->msg];
  94. }
  95. } else {
  96. foreach ($loginXmlArr->response->result as $resp) {
  97. $error = $resp->msg;
  98. }
  99. return ['status' => 'error', 'msg' => $error];
  100. }
  101. $logout = $this->WgsSwitchEppLogout($client);
  102. }
  103. public function WgsSwitchEppAckConfirmCommand($client, $msgId) {
  104. $request = '<?xml version="1.0" encoding="UTF-8" standalone="no"?>
  105. <epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  106. <command>
  107. <poll op="ack" msgID="' . $msgId . '"/>
  108. <clTRID>POLLCF-' . rand(1000, 9999) . '</clTRID>
  109. </command>
  110. </epp>';
  111. $response = $client->request($request);
  112. logModuleCall('SWITCH EPP Addon Module', 'Confirm Acknowledge', $request, $response);
  113. return ['status' => 'success', 'req' => $request, 'resp' => $response];
  114. }
  115. public function WgsSwitchEppLoggedIn($client) {
  116. if ($this->regId && $this->regPw) {
  117. $request = '<?xml version="1.0" encoding="UTF-8" standalone="no"?>
  118. <epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  119. <command>
  120. <login>
  121. <clID>' . $this->regId . '</clID>
  122. <pw>' . $this->regPw . '</pw>
  123. <options>
  124. <version>1.0</version>
  125. <lang>en</lang>
  126. </options>
  127. <svcs>
  128. <objURI>urn:ietf:params:xml:ns:domain-1.0</objURI>
  129. <objURI>urn:ietf:params:xml:ns:contact-1.0</objURI>
  130. <objURI>urn:ietf:params:xml:ns:host-1.0</objURI>
  131. </svcs>
  132. </login>
  133. <clTRID>' . rand(9999999, 100000) . '</clTRID>
  134. </command>
  135. </epp>';
  136. $response = $client->request($request);
  137. return ['status' => 'success', 'req' => $request, 'resp' => $response];
  138. } else {
  139. return ['status' => 'error', 'msg' => 'Registrar id or Registrar password missing'];
  140. }
  141. }
  142. public function WgsSwitchEppLogout($client) {
  143. $request = '<?xml version="1.0" encoding="UTF-8" standalone="no"?>
  144. <epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  145. <epp:command xmlns:epp="urn:ietf:params:xml:ns:epp-1.0">
  146. <epp:logout />
  147. <epp:clTRID>' . $this->regId . '</epp:clTRID>
  148. </epp:command>
  149. </epp>';
  150. $response = $client->request($request);
  151. return ['status' => 'success', 'req' => $request, 'resp' => $response];
  152. }
  153. public function WgsSwitchEppConnect() {
  154. try {
  155. $certFile = __DIR__ . '/../../../registrars/switchepp/cert/cert.pem';
  156. $client = new Net_EPP_Client();
  157. $use_ssl = true;
  158. if (file_exists($certFile)) {
  159. $context = stream_context_create();
  160. stream_context_set_option($context, 'ssl', 'verify_peer', false);
  161. stream_context_set_option($context, 'ssl', 'allow_self_signed', true);
  162. stream_context_set_option($context, 'ssl', 'local_cert', $certFile);
  163. stream_context_set_option($context, 'ssl', 'passphrase', $this->passPhrase);
  164. $client->connect($this->apiUrl, $this->port, 300, $use_ssl, $context) or die("Not connected with epp server");
  165. } else {
  166. $context = false;
  167. $client->connect($this->apiUrl, $this->port, 300, $use_ssl, $context) or die("Not connected with epp server");
  168. }
  169. } catch (Exception $e) {
  170. $port = $this->port;
  171. $client = ["error" => 'true', 'msg' => "Connection Error: " . $e->getMessage()];
  172. }
  173. return $client;
  174. }
  175. }
  176. ?>