PageRenderTime 46ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 0ms

/includes/modules/payment/smscoin.php

https://bitbucket.org/smscoin/zen_cart_bank
PHP | 253 lines | 132 code | 29 blank | 92 comment | 14 complexity | 3ea175f06bb9effd505e4b319dd9cd94 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 extends base {
  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 (is_object($order)) $this->update_status();
  39. $this->form_action_url = MODULE_PAYMENT_SMSCOIN_HTTP_ADDR;
  40. }
  41. ###
  42. # Update status
  43. # Функция обновления статуса
  44. ###
  45. function update_status() {
  46. global $order, $db;
  47. if ( ($this->enabled == true) && ((int)MODULE_PAYMENT_SMSCOIN_ZONE > 0) ) {
  48. $check_flag = false;
  49. $check_query = $db->Execute("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");
  50. while (!$check_query->EOF) {
  51. if ($check_query->fields['zone_id'] < 1) {
  52. $check_flag = true;
  53. break;
  54. } elseif ($check_query->fields['zone_id'] == $order->billing['zone_id']) {
  55. $check_flag = true;
  56. break;
  57. }
  58. $check_query->MoveNext();
  59. }
  60. if ($check_flag == false) {
  61. $this->enabled = false;
  62. }
  63. }
  64. }
  65. ###
  66. # Validation
  67. # Функция валидации
  68. ###
  69. function javascript_validation() {
  70. return false;
  71. }
  72. ###
  73. # Select
  74. # Функция выделения
  75. ###
  76. function selection() {
  77. return array('id' => $this->code,
  78. 'module' => $this->title);
  79. }
  80. ###
  81. # Pre confirmation
  82. # Функция проверки подтверждения
  83. ###
  84. function pre_confirmation_check() {
  85. return false;
  86. }
  87. ###
  88. # Confirmation
  89. # Функция подтверждения
  90. ###
  91. function confirmation() {
  92. global $_POST;
  93. return array('title' => MODULE_PAYMENT_SMSCOIN_TEXT_DESCRIPTION);
  94. }
  95. ###
  96. # Show payment button
  97. # Функция генерации кнопки
  98. ###
  99. function process_button() {
  100. global $order, $currencies, $currency, $db;
  101. $products = '';
  102. foreach($order->products as $key => $product) {
  103. $products .= $product['name'];
  104. if (@$product['attributes'] !='') {
  105. foreach($product['attributes'] as $key => $attribut) {
  106. $products .= ' (' . $attribut['option'].': ' . $attribut['value'] . ')';
  107. }
  108. }
  109. }
  110. $currency = $_SESSION['currency'];
  111. $amount = number_format($order->info['total'] * $currencies->get_value($currency), 2);
  112. $clear_amount = '0';
  113. $crc = ref_sign(MODULE_PAYMENT_SMSCOIN_ID,$_SESSION['customer_id'],$amount,$clear_amount,$products,MODULE_PAYMENT_SMSCOIN_SECRET_KEY);
  114. $process_button_string = zen_draw_hidden_field('s_purse', MODULE_PAYMENT_SMSCOIN_ID) ."\n".
  115. zen_draw_hidden_field('s_order_id', $_SESSION['customer_id']) ."\n" .
  116. zen_draw_hidden_field('s_amount', $amount) ."\n".
  117. zen_draw_hidden_field('s_clear_amount', $clear_amount) ."\n" .
  118. zen_draw_hidden_field('s_description', $products) ."\n" .
  119. zen_draw_hidden_field('s_sign', $crc) ."\n";
  120. $order->info['payment_module_code'] = $_SESSION['payment'];
  121. $order->info['payment_method'] = $_SESSION['payment'];
  122. $order_total_modules = new order_total;
  123. $order_totals = $order_total_modules->pre_confirmation_check();
  124. $order_totals = $order_total_modules->process();
  125. $insert_id = $order->create($order_totals, 2);
  126. $order->create_add_products($insert_id);
  127. $_SESSION['cart']->reset(true);
  128. return $process_button_string;
  129. }
  130. ###
  131. # Payment proccess
  132. # Функция препроцесса
  133. ###
  134. function before_process() {
  135. global $_POST;
  136. $purse = $_POST["s_purse"]; // sms:bank id идентификатор смс:банка
  137. $order_id = $_POST["s_order_id"]; // operation id идентификатор операции
  138. $amount = $_POST["s_amount"]; // transaction sum сумма транзакции
  139. $clear_amount = $_POST["s_clear_amount"]; // billing algorithm алгоритм подсчета стоимости
  140. $s_status = $_POST["s_status"]; // Status 1 - delivered, 0 - Panding статус платежа: 1 - прошел, 0 - не прошел.
  141. $s_sign = $_POST["s_sign"]; // MD5-хэш строки, MD5 - hash
  142. // Check proccess
  143. // если проверка платежа неудачна - вернуться к выбору оплаты
  144. if ($s_sign != ref_sign(MODULE_PAYMENT_SMSCOIN_SECRET_KEY,$purse,$order_id,$amount,$clear_amount,$s_status)) {
  145. zen_redirect(zen_href_link(FILENAME_CHECKOUT_PAYMENT, 'error_message=' . MODULE_PAYMENT_SMSCOIN_TEXT_ERROR_MESSAGE, 'SSL', true, false));
  146. }
  147. // Allow
  148. // проверка платежа удачна
  149. return false;
  150. }
  151. ###
  152. # After proccess
  153. # Функция вызова после процесса
  154. ###
  155. function after_process() {
  156. global $insert_id, $db;
  157. }
  158. ###
  159. # Get error
  160. # Функция ошибки
  161. ###
  162. function get_error() {
  163. return false;
  164. }
  165. ###
  166. # Check
  167. # Функция проверки
  168. ###
  169. function check() {
  170. global $db;
  171. if (!isset($this->_check)) {
  172. $check_query = $db->Execute("select configuration_value from " . TABLE_CONFIGURATION . " where configuration_key = 'MODULE_PAYMENT_SMSCOIN_STATUS'");
  173. $this->_check = $check_query->RecordCount();
  174. }
  175. return $this->_check;
  176. }
  177. ###
  178. # installation of module payment method in the system
  179. # Функция для инсталляции модуля оплаты в систему
  180. ###
  181. function install() {
  182. global $db;
  183. // following payment method switched on or off
  184. // включен или выключен данный модуль оплаты
  185. $db->Execute("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', 'zen_cfg_select_option(array(\'True\', \'False\'), ', now())");
  186. // allowed countries where the following module is accessible
  187. // разрешённые страны, для которых будет доступен данный модуль оплаты
  188. $db->Execute("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())");
  189. // your sms bank identification in the system
  190. // идентификатор вашего смс:банка в системе
  191. $db->Execute("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())");
  192. // your sms bank secret key
  193. // секретный ключ вашего смс:банка
  194. $db->Execute("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())");
  195. // payment zones; enables access to payment method from that specific zone only
  196. // зоны оплаты; данный модуль оплаты доступен только для выбранной зоны
  197. $db->Execute("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', 'zen_get_zone_class_title', 'zen_cfg_pull_down_zone_classes(', now())");
  198. // order status, which will be specified after the payment
  199. // cтатус заказа, который будет установлен после оплаты
  200. $db->Execute("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', 'zen_cfg_pull_down_order_statuses(', 'zen_get_order_status_name', now())");
  201. // cтатус заказа, который будет установлен до оплаты
  202. $db->Execute("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_BEFORE_ID_TITLE."','MODULE_PAYMENT_SMSCOIN_ORDER_STATUS_BEFORE_ID', '0','".MODULE_PAYMENT_SMSCOIN_ORDER_STATUS_BEFORE_ID_DESC."' ,'6', '5', 'zen_cfg_pull_down_order_statuses(', 'zen_get_order_status_name', now())");
  203. // payment module sort order (under which number in the payment module list will following module be accessible)
  204. // порядок сортировки модуля оплаты (под каким номером в списке модулей оплаты будет доступен данный модуль)
  205. $db->Execute("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())");
  206. // payment module sort order (under which number in the payment module list will following module be accessible)
  207. // порядок сортировки модуля оплаты (под каким номером в списке модулей оплаты будет доступен данный модуль)
  208. $db->Execute("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://bank.smscoin.com/bank/', '".MODULE_PAYMENT_SMSCOIN_HTTP_ADDR_DESC."' ,'6', '7', now())");
  209. }
  210. ###
  211. # Функция удаления
  212. ###
  213. function remove() {
  214. global $db;
  215. $db->Execute("delete from " . TABLE_CONFIGURATION . " where configuration_key in ('" . implode("', '", $this->keys()) . "')");
  216. }
  217. ###
  218. # Функция ключей
  219. ###
  220. function keys() {
  221. return array('MODULE_PAYMENT_SMSCOIN_STATUS','MODULE_PAYMENT_SMSCOIN_ALLOWED', 'MODULE_PAYMENT_SMSCOIN_ZONE', 'MODULE_PAYMENT_SMSCOIN_ORDER_STATUS_ID', 'MODULE_PAYMENT_SMSCOIN_ORDER_STATUS_BEFORE_ID', 'MODULE_PAYMENT_SMSCOIN_SORT_ORDER', 'MODULE_PAYMENT_SMSCOIN_ID', 'MODULE_PAYMENT_SMSCOIN_SECRET_KEY', 'MODULE_PAYMENT_SMSCOIN_HTTP_ADDR');
  222. }
  223. }
  224. ?>