switchepp.class.php 9.0 KB

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