alphasms.php 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. <?php
  2. class alphasms extends SendDogProto {
  3. /**
  4. * Returns set of inputs, required for AlphaSMS service configuration
  5. *
  6. * @return string
  7. */
  8. public function renderAlphasmsConfigInputs() {
  9. $inputs = wf_tag('h2') . __('AlphaSMS') . ' ' . wf_Link(self::URL_ME . '&showmisc=alphasms', wf_img_sized('skins/icon_dollar.gif', __('Balance'), '10', '10'), true) . wf_tag('h2', true);
  10. $inputs .= wf_TextInput('editalphasmsgateway', __('API address') . ' ' . __('AlphaSMS'), $this->settings['ALPHASMS_GATEWAY'], true, 30);
  11. $inputs .= wf_TextInput('editalphasmslogin', __('User login to access API'), $this->settings['ALPHASMS_LOGIN'], true, 20);
  12. $inputs .= wf_TextInput('editalphasmspassword', __('User password for access API'), $this->settings['ALPHASMS_PASSWORD'], true, 20);
  13. $inputs .= wf_TextInput('editalphasmsapikey', __('User API key for') . ' ' . __('AlphaSMS'), $this->settings['ALPHASMS_APIKEY'], true, 20);
  14. $inputs .= wf_TextInput('editalphasmssign', __('AlphaSMS') . ' ' . __('Sign') . ' (' . __('Alphaname') . ')', $this->settings['ALPHASMS_SIGN'], true, 20);
  15. $smsServiceFlag = ($this->settings['SMS_SERVICE'] == 'alphasms') ? true : false;
  16. $inputs .= wf_RadioInput('defaultsmsservice', __('Use') . ' ' . __('AlphaSMS') . ' ' . __('as default SMS service'), 'alphasms', true, $smsServiceFlag);
  17. return ($inputs);
  18. }
  19. /**
  20. * Loads AlphaSMS service config
  21. *
  22. * @return void
  23. */
  24. public function loadAlphasmsConfig() {
  25. $smsgateway = zb_StorageGet('SENDDOG_ALPHASMS_GATEWAY');
  26. if (empty($smsgateway)) {
  27. $smsgateway = 'https://alphasms.ua/api/http.php';
  28. zb_StorageSet('SENDDOG_ALPHASMS_GATEWAY', $smsgateway);
  29. }
  30. $smslogin = zb_StorageGet('SENDDOG_ALPHASMS_LOGIN');
  31. if (empty($smslogin)) {
  32. $smslogin = 'yourlogin';
  33. zb_StorageSet('SENDDOG_ALPHASMS_LOGIN', $smslogin);
  34. }
  35. $smspassword = zb_StorageGet('SENDDOG_ALPHASMS_PASSWORD');
  36. if (empty($smspassword)) {
  37. $smspassword = 'yourpassword';
  38. zb_StorageSet('SENDDOG_ALPHASMS_PASSWORD', $smspassword);
  39. }
  40. $smssign = zb_StorageGet('SENDDOG_ALPHASMS_SIGN');
  41. if (empty($smssign)) {
  42. $smssign = 'test';
  43. zb_StorageSet('SENDDOG_ALPHASMS_SIGN', $smssign);
  44. }
  45. $smsapikey = zb_StorageGet('SENDDOG_ALPHASMS_APIKEY');
  46. if (empty($smsapikey)) {
  47. $smsapikey = 'XXXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZXXXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZ';
  48. zb_StorageSet('SENDDOG_ALPHASMS_APIKEY', $smsapikey);
  49. }
  50. $this->settings['ALPHASMS_GATEWAY'] = $smsgateway;
  51. $this->settings['ALPHASMS_LOGIN'] = $smslogin;
  52. $this->settings['ALPHASMS_PASSWORD'] = $smspassword;
  53. $this->settings['ALPHASMS_SIGN'] = $smssign;
  54. $this->settings['ALPHASMS_APIKEY'] = $smsapikey;
  55. }
  56. /**
  57. * Saves service settings to database
  58. *
  59. * @return void
  60. */
  61. public function saveSettings() {
  62. //AlphaSMS configuration
  63. if ($_POST['editalphasmsgateway'] != $this->settings['ALPHASMS_GATEWAY']) {
  64. zb_StorageSet('SENDDOG_ALPHASMS_GATEWAY', $_POST['editalphasmsgateway']);
  65. log_register('SENDDOG CONFIG SET ALPHASMSGATEWAY `' . $_POST['editalphasmsgateway'] . '`');
  66. }
  67. if ($_POST['editalphasmslogin'] != $this->settings['ALPHASMS_LOGIN']) {
  68. zb_StorageSet('SENDDOG_ALPHASMS_LOGIN', $_POST['editalphasmslogin']);
  69. log_register('SENDDOG CONFIG SET ALPHASMSLOGIN `' . $_POST['editalphasmslogin'] . '`');
  70. }
  71. if ($_POST['editalphasmspassword'] != $this->settings['ALPHASMS_PASSWORD']) {
  72. zb_StorageSet('SENDDOG_ALPHASMS_PASSWORD', $_POST['editalphasmspassword']);
  73. log_register('SENDDOG CONFIG SET ALPHASMSPASSWORD `' . $_POST['editalphasmspassword'] . '`');
  74. }
  75. if ($_POST['editalphasmssign'] != $this->settings['ALPHASMS_SIGN']) {
  76. zb_StorageSet('SENDDOG_ALPHASMS_SIGN', $_POST['editalphasmssign']);
  77. log_register('SENDDOG CONFIG SET ALPHASMSSIGN `' . $_POST['editalphasmssign'] . '`');
  78. }
  79. if ($_POST['editalphasmsapikey'] != $this->settings['ALPHASMS_APIKEY']) {
  80. zb_StorageSet('SENDDOG_ALPHASMS_APIKEY', $_POST['editalphasmsapikey']);
  81. log_register('SENDDOG CONFIG SET ALPHASMSAPIKEY `' . $_POST['editalphasmsapikey'] . '`');
  82. }
  83. }
  84. /**
  85. * Sends all sms storage via AlphaSMS service
  86. *
  87. * @return void
  88. */
  89. public function alphaPushMessages() {
  90. $apikey = $this->settings['ALPHASMS_APIKEY'];
  91. $sender = $this->settings['ALPHASMS_SIGN'];
  92. $allSmsQueue = $this->smsQueue->getQueueData();
  93. if (!empty($allSmsQueue)) {
  94. foreach ($allSmsQueue as $sms) {
  95. $formattedPhone = $this->cutInternationalsFromPhoneNum($sms['number']);
  96. $params = array('from' => urlencode($sender),
  97. 'to' => urlencode($formattedPhone),
  98. 'message' => $sms['message'],
  99. 'login' => $this->settings['ALPHASMS_LOGIN'],
  100. 'password' => $this->settings['ALPHASMS_PASSWORD'],
  101. 'key' => urlencode($apikey),
  102. 'command' => 'send');
  103. $params_url = '';
  104. foreach ($params as $key => $value) {
  105. $params_url .= '&' . $key . '=' . $this->base64_url_encode($value);
  106. }
  107. //cURL HTTPS POST
  108. $ch = curl_init($this->settings['ALPHASMS_GATEWAY']);
  109. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  110. curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
  111. curl_setopt($ch, CURLOPT_POST, count($params));
  112. curl_setopt($ch, CURLOPT_POSTFIELDS, $params_url);
  113. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  114. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
  115. $response = @curl_exec($ch);
  116. curl_close($ch);
  117. //remove old sent message
  118. $this->smsQueue->deleteSms($sms['filename']);
  119. }
  120. }
  121. }
  122. /**
  123. * Renders current AlphaSMS service user balance
  124. *
  125. * @return string
  126. */
  127. public function renderAlpasmsBalance() {
  128. $result = '';
  129. $params = array();
  130. $params['login'] = $this->settings['ALPHASMS_LOGIN'];
  131. $params['password'] = $this->settings['ALPHASMS_PASSWORD'];
  132. $params['key'] = $this->settings['ALPHASMS_APIKEY'];
  133. $params['command'] = 'balance';
  134. $params_url = '';
  135. foreach ($params as $key => $value) {
  136. $params_url .= '&' . $key . '=' . $this->base64_url_encode($value);
  137. }
  138. //cURL HTTPS POST
  139. $curl = curl_init($this->settings['ALPHASMS_GATEWAY']);
  140. curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
  141. curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 5);
  142. curl_setopt($curl, CURLOPT_POST, count($params));
  143. curl_setopt($curl, CURLOPT_POSTFIELDS, $params_url);
  144. curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
  145. curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
  146. $response = curl_exec($curl);
  147. curl_close($curl);
  148. $response = @unserialize($this->base64_url_decode($response));
  149. $result .= wf_BackLink(self::URL_ME, '', true);
  150. $result .= $this->messages->getStyledMessage(__('Current account balance') . ': ' . @$response['balance'] . ' UAN', 'info');
  151. return ($result);
  152. }
  153. /**
  154. * Returns bas64 encoded URL
  155. *
  156. * @param string $input
  157. *
  158. * @return string
  159. */
  160. protected function base64_url_encode($input) {
  161. return strtr(base64_encode($input), '+/=', '-_,');
  162. }
  163. /**
  164. * Returns bas64 decoded URL
  165. *
  166. * @param string $input
  167. *
  168. * @return string
  169. */
  170. protected function base64_url_decode($input) {
  171. return base64_decode(strtr($input, '-_,', '+/='));
  172. }
  173. }