PageRenderTime 47ms CodeModel.GetById 14ms RepoModel.GetById 1ms app.codeStats 0ms

/includes/modules/payment/smscoin.php

https://bitbucket.org/smscoin/oscommerce
PHP | 243 lines | 128 code | 22 blank | 93 comment | 16 complexity | 4af82ef16970ad4fb4b51eb2b02baefa MD5 | raw file
  1. <?php
  2. /*
  3. =====================================================
  4. OSCommerce plugin - by SmsCoin
  5. -----------------------------------------------------
  6. http://smscoin.com
  7. -----------------------------------------------------
  8. Copyright (c) 2008 SmsCoin
  9. =====================================================
  10. Файл: smscoin.php
  11. -----------------------------------------------------
  12. Purpose: payment module via SMS message
  13. =====================================================
  14. */
  15. include_once(dirname(__FILE__)."/../../languages/$_SESSION[language]/modules/payment/smscoin.php");
  16. ###
  17. # MD5 sign
  18. # Функция генерации md5 подписи
  19. ###
  20. function ref_sign() {
  21. $params = func_get_args();
  22. $prehash = implode("::", $params);
  23. return md5($prehash);
  24. }
  25. class smscoin {
  26. var $code, $title, $description, $enabled;
  27. ###
  28. # Constructor
  29. # Функция конструктор
  30. ###
  31. function smscoin() {
  32. global $order;
  33. $this->code = 'smscoin';
  34. $this->title = MODULE_PAYMENT_SMSCOIN_TEXT_TITLE;
  35. $this->description = MODULE_PAYMENT_SMSCOIN_TEXT_DESCRIPTION;
  36. $this->sort_order = MODULE_PAYMENT_SMSCOIN_SORT_ORDER;
  37. $this->enabled = ((MODULE_PAYMENT_SMSCOIN_STATUS == 'True') ? true : false);
  38. if ((int)MODULE_PAYMENT_SMSCOIN_ORDER_STATUS_ID > 0) {
  39. $this->order_status = MODULE_PAYMENT_SMSCOIN_ORDER_STATUS_ID;
  40. }
  41. if (is_object($order)) $this->update_status();
  42. $this->form_action_url = MODULE_PAYMENT_SMSCOIN_HTTP_ADDR;
  43. }
  44. ###
  45. # Update status
  46. # Функция обновления статуса
  47. ###
  48. function update_status() {
  49. global $order;
  50. if ( ($this->enabled == true) && ((int)MODULE_PAYMENT_SMSCOIN_ZONE > 0) ) {
  51. $check_flag = false;
  52. $check_query = tep_db_query("select zone_id from " . TABLE_ZONES_TO_GEO_ZONES . " where geo_zone_id = '" . MODULE_PAYMENT_SMSCOIN_ZONE . "' and zone_country_id = '" . $order->billing['country']['id'] . "' order by zone_id");
  53. while ($check = tep_db_fetch_array($check_query)) {
  54. if ($check['zone_id'] < 1) {
  55. $check_flag = true;
  56. break;
  57. } elseif ($check['zone_id'] == $order->billing['zone_id']) {
  58. $check_flag = true;
  59. break;
  60. }
  61. }
  62. if ($check_flag == false) {
  63. $this->enabled = false;
  64. }
  65. }
  66. }
  67. ###
  68. # Validation
  69. # Функция валидации
  70. ###
  71. function javascript_validation() {
  72. return false;
  73. }
  74. ###
  75. # Select
  76. # Функция выделения
  77. ###
  78. function selection() {
  79. return array('id' => $this->code,
  80. 'module' => $this->title);
  81. }
  82. ###
  83. # Pre confirmation
  84. # Функция проверки подтверждения
  85. ###
  86. function pre_confirmation_check() {
  87. return false;
  88. }
  89. ###
  90. # Confirmation
  91. # Функция подтверждения
  92. ###
  93. function confirmation() {
  94. global $_POST;
  95. return array('title' => MODULE_PAYMENT_SMSCOIN_TEXT_DESCRIPTION);
  96. }
  97. ###
  98. # Show payment button
  99. # Функция генерации кнопки
  100. ###
  101. function process_button() {
  102. global $order, $currencies, $currency;
  103. $products = '';
  104. foreach($order->products as $key => $product) {
  105. $products .= $product['name'];
  106. if (@$product['attributes'] !='') {
  107. foreach($product['attributes'] as $key => $attribut) {
  108. $products .= '(' . $attribut['option'].': ' . $attribut['value'] . ')';
  109. }
  110. }
  111. }
  112. $order_query = tep_db_query("select MAX(orders_id) AS orders_id FROM " . TABLE_ORDERS_TOTAL);
  113. $order_id = tep_db_fetch_array($order_query);
  114. $currency = $_SESSION['currency'];
  115. $num = $order_id['orders_id'] + 1;
  116. $amount = number_format($order->info['total'] * $currencies->get_value($currency), 2);
  117. $clear_amount = '0';
  118. $crc = ref_sign(MODULE_PAYMENT_SMSCOIN_ID,$num,$amount,$clear_amount,$products,MODULE_PAYMENT_SMSCOIN_SECRET_KEY);
  119. $process_button_string = tep_draw_hidden_field('s_purse', MODULE_PAYMENT_SMSCOIN_ID) .
  120. tep_draw_hidden_field('s_order_id', $num) .
  121. tep_draw_hidden_field('s_amount', $amount) .
  122. tep_draw_hidden_field('s_clear_amount', $clear_amount) .
  123. tep_draw_hidden_field('s_description', $products) .
  124. tep_draw_hidden_field('s_sign', $crc);
  125. return $process_button_string;
  126. }
  127. ###
  128. # Payment proccess
  129. # Функция препроцесса
  130. ###
  131. function before_process() {
  132. global $_POST;
  133. $purse = $_POST["s_purse"]; // sms:bank id идентификатор смс:банка
  134. $order_id = $_POST["s_order_id"]; // operation id идентификатор операции
  135. $amount = $_POST["s_amount"]; // transaction sum сумма транзакции
  136. $clear_amount = $_POST["s_clear_amount"]; // billing algorithm алгоритм подсчета стоимости
  137. $s_status = $_POST["s_status"]; // Status 1 - delivered, 0 - Panding статус платежа: 1 - прошел, 0 - не прошел.
  138. $s_sign = $_POST["s_sign"]; // MD5-хэш строки, MD5 - hash
  139. // Check proccess
  140. // если проверка платежа неудачна - вернуться к выбору оплаты
  141. if ($s_sign != ref_sign(MODULE_PAYMENT_SMSCOIN_SECRET_KEY,$purse,$order_id,$amount,$clear_amount,$s_status)) {
  142. tep_redirect(tep_href_link(FILENAME_CHECKOUT_PAYMENT, 'error_message=' . MODULE_PAYMENT_SMSCOIN_TEXT_ERROR_MESSAGE, 'SSL', true, false));
  143. }
  144. // Allow
  145. // проверка платежа удачна
  146. return false;
  147. }
  148. ###
  149. # After proccess
  150. # Функция вывзова после процесса
  151. ###
  152. function after_process() {
  153. global $insert_id;
  154. if ($this->order_status) {
  155. tep_db_query("UPDATE ". TABLE_ORDERS ." SET orders_status='".$this->order_status."' WHERE orders_id='".$insert_id."'");
  156. }
  157. }
  158. ###
  159. # Get error
  160. # Функция ошибки
  161. ###
  162. function get_error() {
  163. return false;
  164. }
  165. ###
  166. # Check
  167. # Функция проверки
  168. ###
  169. function check() {
  170. if (!isset($this->_check)) {
  171. $check_query = tep_db_query("select configuration_value from " . TABLE_CONFIGURATION . " where configuration_key = 'MODULE_PAYMENT_SMSCOIN_STATUS'");
  172. $this->_check = tep_db_num_rows($check_query);
  173. }
  174. return $this->_check;
  175. }
  176. ###
  177. # installation of module payment method in the system
  178. # Функция для инсталляции модуля оплаты в систему
  179. ###
  180. function install() {
  181. // following payment method switched on or off
  182. // включен или выключен данный модуль оплаты
  183. tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) values ('".MODULE_PAYMENT_SMSCOIN_STATUS_TITLE."', 'MODULE_PAYMENT_SMSCOIN_STATUS', 'True', '".MODULE_PAYMENT_SMSCOIN_STATUS_DESC."', '6', '1', 'tep_cfg_select_option(array(\'True\', \'False\'), ', now())");
  184. // allowed countries where the following module is accessible
  185. // разрешённые страны, для которых будет доступен данный модуль оплаты
  186. tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('".MODULE_PAYMENT_SMSCOIN_ALLOWED_TITLE."', 'MODULE_PAYMENT_SMSCOIN_ALLOWED', 'RU', '".MODULE_PAYMENT_SMSCOIN_ALLOWED_DESC."', '6', '2', now())");
  187. // your sms bank identification in the system
  188. // идентификатор вашего смс:банка в системе
  189. tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('".MODULE_PAYMENT_SMSCOIN_ID_TITLE."', 'MODULE_PAYMENT_SMSCOIN_ID', '123', '".MODULE_PAYMENT_SMSCOIN_ID_DESC."', '6', '3', now())");
  190. // your sms bank secret key
  191. // секретный ключ вашего смс:банка
  192. tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('".MODULE_PAYMENT_SMSCOIN_SECRET_KEY_TITLE."', 'MODULE_PAYMENT_SMSCOIN_SECRET_KEY', '', '".MODULE_PAYMENT_SMSCOIN_SECRET_KEY_DESC."', '6', '4', now())");
  193. // payment zones; enables access to payment method from that specific zone only
  194. // зоны оплаты; данный модуль оплаты доступен только для выбранной зоны
  195. tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title,configuration_key, configuration_value, configuration_group_id, sort_order, use_function, set_function, date_added) values ('".MODULE_PAYMENT_SMSCOIN_ZONE_TITLE."', 'MODULE_PAYMENT_SMSCOIN_ZONE', '0', '6', '4', 'tep_get_zone_class_title', 'tep_cfg_pull_down_zone_classes(', now())");
  196. // order status, which will be specified after the payment
  197. // cтатус заказа, который будет установлен после оплаты
  198. tep_db_query("insert into " . TABLE_CONFIGURATION . " ( configuration_title, configuration_key, configuration_value, configuration_description ,configuration_group_id, sort_order, set_function, use_function, date_added) values ('".MODULE_PAYMENT_SMSCOIN_ORDER_STATUS_ID_TITLE."','MODULE_PAYMENT_SMSCOIN_ORDER_STATUS_ID', '0','".MODULE_PAYMENT_SMSCOIN_ORDER_STATUS_ID_DESC."' ,'6', '5', 'tep_cfg_pull_down_order_statuses(', 'tep_get_order_status_name', now())");
  199. // payment module sort order (under which number in the payment module list will following module be accessible)
  200. // порядок сортировки модуля оплаты (под каким номером в списке модулей оплаты будет доступен данный модуль)
  201. tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description , configuration_group_id, sort_order, date_added) values ('".MODULE_PAYMENT_SMSCOIN_SORT_ORDER_TITLE."','MODULE_PAYMENT_SMSCOIN_SORT_ORDER', '0', '".MODULE_PAYMENT_SMSCOIN_ORDER_STATUS_ID_DESC."', '6', '6', now())");
  202. // payment module sort order (under which number in the payment module list will following module be accessible)
  203. // порядок сортировки модуля оплаты (под каким номером в списке модулей оплаты будет доступен данный модуль)
  204. tep_db_query("insert into " . TABLE_CONFIGURATION . " ( configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('".MODULE_PAYMENT_SMSCOIN_HTTP_ADDR_TITLE."','MODULE_PAYMENT_SMSCOIN_HTTP_ADDR', 'http://XXXX.bank.smscoin.com/bank/', '".MODULE_PAYMENT_SMSCOIN_HTTP_ADDR_DESC."' ,'6', '7', now())");
  205. }
  206. ###
  207. # Remove
  208. # Функция удаления
  209. ###
  210. function remove() {
  211. tep_db_query("delete from " . TABLE_CONFIGURATION . " where configuration_key in ('" . implode("', '", $this->keys()) . "')");
  212. }
  213. ###
  214. # Get keys
  215. # Функция ключей
  216. ###
  217. function keys() {
  218. return array('MODULE_PAYMENT_SMSCOIN_STATUS','MODULE_PAYMENT_SMSCOIN_ALLOWED', 'MODULE_PAYMENT_SMSCOIN_ZONE', 'MODULE_PAYMENT_SMSCOIN_ORDER_STATUS_ID', 'MODULE_PAYMENT_SMSCOIN_SORT_ORDER', 'MODULE_PAYMENT_SMSCOIN_ID', 'MODULE_PAYMENT_SMSCOIN_SECRET_KEY', 'MODULE_PAYMENT_SMSCOIN_HTTP_ADDR');
  219. }
  220. }
  221. ?>