Advertisement
Guest User

Untitled

a guest
Jan 23rd, 2018
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 18.66 KB | None | 0 0
  1. <?php
  2. require 'config.class.php';
  3. require 'mailer/PHPMailerAutoload.php';
  4.  
  5. class C extends Config {};
  6.  
  7. $config = new C();
  8.  
  9. function initPHPMailer($config)
  10. {
  11. $mail = new PHPMailer;
  12. $mail->isSMTP();
  13. $mail->SMTPSecure = 'ssl';
  14. $mail->Port = '465';
  15. $mail->Host = $config->smtp_host;
  16. $mail->SMTPAuth = true;
  17. $mail->Username = $config->smtp_login;
  18. $mail->Password = $config->smtp_password;
  19. $mail->CharSet = 'utf-8';
  20. $mail->Encoding = 'quoted-printable';
  21. $mail->From = $config->smtp_from_email;
  22. $mail->FromName = $config->smtp_from_name;
  23. return $mail;
  24. }
  25.  
  26. if (!isset($_GET['success']) and !isset($_POST['sha1_hash'])) { // Форма оплаты
  27. $crmdomain = mysql_escape_string(htmlspecialchars(strip_tags($_GET['crmdomain'])));
  28. ?>
  29. <!DOCTYPE html>
  30. <html lang="ru">
  31. <head>
  32. <meta charset="utf-8">
  33. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  34. <meta name="viewport" content="width=device-width, initial-scale=1">
  35. <meta name="yandex-verification" content="b14cde661823ee89" />
  36.  
  37. <title>PartCRM - продлить</title>
  38.  
  39. <link rel="image_src" href="/images/partcrm-logo.png">
  40. <meta property="og:image" content="/images/partcrm-logo.png">
  41. <link rel="shortcut icon" href="/favicon.ico">
  42. <link rel="apple-touch-icon" sizes="57x57" href="/images/apple-touch-icon-57x57.png">
  43. <link rel="apple-touch-icon" sizes="114x114" href="/images/apple-touch-icon-114x114.png">
  44. <link rel="apple-touch-icon" sizes="72x72" href="/images/apple-touch-icon-72x72.png">
  45. <link rel="apple-touch-icon" sizes="144x144" href="/images/apple-touch-icon-144x144.png">
  46. <link rel="apple-touch-icon" sizes="60x60" href="/images/apple-touch-icon-60x60.png">
  47. <link rel="apple-touch-icon" sizes="120x120" href="/images/apple-touch-icon-120x120.png">
  48. <link rel="apple-touch-icon" sizes="76x76" href="/images/apple-touch-icon-76x76.png">
  49. <link rel="apple-touch-icon" sizes="152x152" href="/images/apple-touch-icon-152x152.png">
  50. <link rel="icon" type="image/png" href="/images/favicon-196x196.png" sizes="196x196">
  51. <link rel="icon" type="image/png" href="/images/favicon-160x160.png" sizes="160x160">
  52. <link rel="icon" type="image/png" href="/images/favicon-96x96.png" sizes="96x96">
  53. <link rel="icon" type="image/png" href="/images/favicon-16x16.png" sizes="16x16">
  54. <link rel="icon" type="image/png" href="/images/favicon-32x32.png" sizes="32x32">
  55.  
  56. <link rel="stylesheet" href="css/plugins.min.css">
  57.  
  58. <link rel="stylesheet" href="css/style.min.css">
  59. <script>
  60. function showPayPrice(value){
  61. var _ = [];
  62. _[<?=$config->price['month']?>] = '1 месяц';
  63. _[<?=$config->price['year']?>] = '1 год';
  64. _[<?=$config->price['forever']?>] = 'навсегда';
  65. $('#info_period').text(_[value]);
  66. $('#info_price').text(value + 'руб.');
  67. }
  68. </script>
  69. </head>
  70.  
  71. <body>
  72.  
  73. <nav class="navbar navbar-default navbar-fixed-top" role="navigation" aria-label="Меню">
  74. <div class="container">
  75. <div class="navbar-header">
  76. <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar"
  77. aria-expanded="false" aria-controls="navbar">
  78. <span class="sr-only"></span>
  79. <span class="icon-bar"></span>
  80. <span class="icon-bar"></span>
  81. <span class="icon-bar"></span>
  82. </button>
  83. <a class="navbar-brand" href="/">Part CRM</a>
  84. </div>
  85. <div id="navbar" class="collapse navbar-collapse">
  86. <ul class="nav navbar-nav navbar-left">
  87. <li><a href="/">О программе</a></li>
  88. <li><a href="clients.html">Возможности</a></li>
  89. <li><a href="tarifs.html">Тарифы</a></li>
  90. <li><a href="demo-access.html">Демо-доступ</a></li>
  91. <li><a href="ask-question.html">Задать вопрос</a></li>
  92. </ul>
  93. <a href="get-free.html" role="button" class="btn btn-success navbar-btn navbar-right hidden-xs hidden-sm">Попробовать
  94. бесплатно</a>
  95. </div><!--/.nav-collapse -->
  96. </div>
  97. </nav>
  98.  
  99. <div class="container" role="main">
  100. <div class="row page">
  101. <div class="col-xs-12">
  102. <div class="row">
  103. <div class="col-xs-12 col-md-8 col-md-offset-2">
  104. <div class="jumbotron well">
  105. <?php if (isset($_GET['crmdomain'])) {?>
  106. <h2>Продлить действие <?=$crmdomain?>.partcrm.ru</h2>
  107. <p class="alert alert-danger" style="display: none;"></p>
  108. <p class="alert alert-info" style="display: none;"></p>
  109. <form method="POST" action="https://money.yandex.ru/quickpay/confirm.xml" id="formProlong" style="margin-top: 30px;">
  110. <div class="form-group">
  111. <label for="period">Выбирете период продления</label>
  112. <select class="form-control" name="sum" id="period" onchange="showPayPrice(this.value)">
  113. <option value="<?=$config->price['month']?>" id="sum-m" selected>1 месяц(<?=$config->price['month']?> руб.)</option>
  114. <option value="<?=$config->price['year']?>" id="sum-y">1 год (<?=$config->price['year']?> руб.)</option>
  115. <option value="<?=$config->price['forever']?>" id="sum-f">Навсегда (<?=$config->price['forever']?> руб.)</option>
  116. </select>
  117. <input type="hidden" name="receiver" value="<?=$config->ya_money_purse;?>">
  118. <input type="hidden" name="successURL" value="http://<?=$config->domain;?>/success.php?crmdomain=<?=$crmdomain?>">
  119. <input type="hidden" name="quickpay-form" value="shop">
  120. <input type="hidden" name="targets" value="<?= $crmdomain ?>">
  121. <input type="hidden" name="formcomment" value="PartCRM">
  122. <input type="hidden" name="short-dest" value="PartCRM: Оплата CRM">
  123. <input type="hidden" name="label" value="<?= $crmdomain ?>">
  124. </div>
  125. <div class="form-group">
  126. <label>Выбирете способ оплаты</label>
  127. <div class="row">
  128. <div class="col-xs-12 col-sm-6">
  129. <label for="way_1" class="payment-way checked">
  130. <img src="images/logo_cards_small.png" style="margin: 3px 0;" alt="Visa, MasterCard, Maestro">
  131. <div class="label-wp">
  132. <input type="radio" name="paymentType" id="way_1" value="AC" checked>
  133. <span>Картой</span>
  134. </div>
  135. </label>
  136. </div>
  137. <div class="col-xs-12 col-sm-6">
  138. <label for="way_2" class="payment-way">
  139. <img src="images/yandex_dengi_full_rgb.png" alt="Yandex.Money">
  140. <div class="label-wp">
  141. <input type="radio" name="paymentType" id="way_2" value="PC">
  142. <span>Яндекс.Деньгами</span>
  143. </div>
  144. </label>
  145. </div>
  146. </div>
  147. </div>
  148. <p class="alert alert-info" style="font-size: 14px;">Ваша CRM: <b><?=$crmdomain?>.partcrm.ru</b> будет продлена на <b id="info_period">1 месяц</b> за <b id="info_price"><?=$config->price['month']?> руб.</b>
  149. <br> Для продложения, нажмите кнопку "Оплатить"</p>
  150. <button type="submit" class="btn btn-primary btn-lg"
  151. data-loading-text="Пожалуйста, подождите ..." data-autocomplete="off">Продлить
  152. </button>
  153. </form>
  154. <?php } else { ?>
  155. <h2>Ошибка</h2>
  156. <?php } ?>
  157. </div>
  158. </div>
  159. </div>
  160. </div>
  161. </div>
  162. </div>
  163.  
  164. <footer class="footer" role="contentinfo">
  165. <div class="container">
  166. <p class="text-muted">&copy; PartCRM 2012-2017. Программа для автоматизации магазина автозапчастей.</p>
  167. <p><a href="#" data-toggle="modal" data-target="#privacyPolicy">Политика конфиденциальности</a></p>
  168. </div>
  169. </footer>
  170.  
  171. <div class="modal fade" id="privacyPolicy" tabindex="-1" role="dialog" aria-labelledby="privacyPolicyLabel">
  172. <div class="modal-dialog" role="document">
  173. <div class="modal-content">
  174. <div class="modal-header">
  175. <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span
  176. aria-hidden="true">&times;</span></button>
  177. <h4 class="modal-title" id="privacyPolicyLabel">Политика конфиденциальности</h4>
  178. </div>
  179. <div class="modal-body">
  180. <ul class="agreement">
  181. <li>Обработка персональных данных Пользователя осуществляется в соответствии с законодательством
  182. Российской Федерации. Администрация Сайта обрабатывает персональные данные Пользователя в целях
  183. предоставления Пользователю услуг.
  184. </li>
  185. <li>Пользователь заполняя форму на сайте даёт согласие на обработку своих персональных данных. Под
  186. обработкой персональных данных понимается сбор, систематизация, накопление, уточнение
  187. (обновление, изменение).
  188. </li>
  189. <li>Обработка осуществляется с использованием средств автоматизации и/или без использования таких
  190. средств, в целях реализации мероприятий оповещения пользователя о изменениях на сайте и по
  191. поддержке обратной связи с пользователями сайта.
  192. </li>
  193. <li>Указанное согласие действует бессрочно с момента предоставления данных и может быть отозвано
  194. Вами путем подачи заявления администрации сайта с указанием данных, определенных ст. 14 Закона
  195. «О персональных данных».
  196. </li>
  197. <li>Отзыв согласия на обработку персональных данных может быть осуществлен путем направления
  198. Пользователем соответствующего распоряжения путем нажатия соотвествующей кнопки во входящем
  199. письме от сайта в любое время. Соглашение считается бессрочным.
  200. </li>
  201. <li>Сайт не передает данные третьим лицам.</li>
  202. <li>К настоящему Соглашению и отношениям между пользователем и Сайтом, возникающим в связи с
  203. применением Соглашения подлежит применению право Российской Федерации.
  204. </li>
  205. </ul>
  206. </div>
  207. </div>
  208. </div>
  209. </div>
  210.  
  211. <script src="js/plugins.min.js"></script>
  212.  
  213. <script src="js/bootstrap.min.js"></script>
  214.  
  215. <script src="js/main.min.js"></script>
  216. </body>
  217. </html>
  218. <?php
  219. } else if($_POST['sha1_hash']) { //Обработка ответа от яндекса
  220. $error = '';
  221. //Сбор и фильтрация данных
  222. $notification_type = mysql_escape_string(htmlspecialchars(strip_tags($_POST['notification_type'])));
  223. $operation_id = mysql_escape_string(htmlspecialchars(strip_tags($_POST['operation_id'])));
  224. $amount = mysql_escape_string(htmlspecialchars(strip_tags($_POST['amount'])));
  225. $withdraw_amount = mysql_escape_string(htmlspecialchars(strip_tags($_POST['withdraw_amount'])));
  226. $datetime = mysql_escape_string(htmlspecialchars(strip_tags($_POST['datetime'])));
  227. $sender = mysql_escape_string(htmlspecialchars(strip_tags($_POST['sender'])));
  228. $codepro = mysql_escape_string(htmlspecialchars(strip_tags($_POST['codepro'])));
  229. $label = mysql_escape_string(htmlspecialchars(strip_tags($_POST['label'] )));
  230. $sha1_hash = mysql_escape_string(htmlspecialchars(strip_tags($_POST['sha1_hash'])));
  231. $CRMDomain = $label;
  232. // Проверяем подлинность
  233. $sha1 = sha1($notification_type . '&'.$operation_id. '&' . $amount . '&643&' . $datetime . '&'. $sender . '&' . $codepro . '&' . $config->ya_money_secret. '&' . $label );
  234.  
  235. if ($sha1 != $sha1_hash) {
  236. //Верификация не пройдена
  237. file_put_contents($config->payment_log_file_path, date('Y-m-d H:i:s')."\nВерификация не пройдена\n\n\n", FILE_APPEND);
  238. exit();
  239. } else {
  240. //Верификация пройдена
  241. if (!$db_link = @mysql_connect($config->db_host, $config->db_login, $config->db_password)) {
  242. $error .= 'Ошибка подключения к MySQL: '.mysql_errno() . ' ' . mysql_error().' ';
  243. }
  244.  
  245. mysql_query("SET NAMES 'utf8'",$db_link);
  246. $tbd_sql = mysql_query("SELECT `till_bought_date`, `email`, `name` FROM `{$config->db_name}`.`tickets` WHERE `domain` = '{$CRMDomain}';", $db_link);
  247.  
  248.  
  249. if (mysql_num_rows($tbd_sql) === 1) {
  250. $row = mysql_fetch_assoc($tbd_sql);
  251. $till_bought_date_timestamp = strtotime($row['till_bought_date']);
  252. $email = $row['email'];
  253. $name = $row['name'];
  254. } else {
  255. $error .= 'Не удалось получить дату действия CRM из центральной базы. Пожалуйста, обратитесь к администратору. ';
  256. }
  257.  
  258. $today = strtotime(date('Y-m-d'));
  259.  
  260. switch ($withdraw_amount){
  261. case $config->price['forever']:
  262. $new_till_bought_date_timestamp = 4102434000; //2100 год
  263. break;
  264.  
  265. case $config->price['year']:
  266. if($till_bought_date_timestamp < time()) { // CRM просрочена
  267. $new_till_bought_date_timestamp = strtotime('+1 year', $today);
  268. } else {
  269. $new_till_bought_date_timestamp = strtotime('+1 year',$till_bought_date_timestamp);
  270. }
  271. break;
  272.  
  273. default:
  274. $days = ($withdraw_amount/$config->price['month'])*30;
  275. if($days < 2) {
  276. $error .= 'Нельзя продлить CRM менее чем на 2 дня. ';
  277. } else {
  278. $days = round($days);
  279. }
  280. if($till_bought_date_timestamp < time()) { // CRM просрочена
  281. $new_till_bought_date_timestamp = strtotime('+'.$days.' days', $today);
  282. } else {
  283. $new_till_bought_date_timestamp = strtotime('+'.$days.' days',$till_bought_date_timestamp);
  284. }
  285. }
  286.  
  287. $new_till_bought_date = date('Y-m-d H:i:s',$new_till_bought_date_timestamp);
  288.  
  289. $result_sql = mysql_query("UPDATE `{$config->db_name}`.`tickets` SET `till_bought_date` = '{$new_till_bought_date}', `bought`='1' WHERE `domain` = '{$CRMDomain}';", $db_link);
  290.  
  291. if ($result_sql) {
  292. mysql_close($db_link);
  293. $msg = "
  294. <p>Здравствуйте {$name}!</p>
  295. <p>Ваша crm <a href=\"".$CRMDomain.".partcrm.ru\">".$CRMDomain.".partcrm.ru</a> оплачена до ".date('d.m.Y', $new_till_bought_date_timestamp).".</p>";
  296. $mail = initPHPMailer($config);
  297. $mail->addAddress($email);
  298. $mail->isHTML(true);
  299. $mail->Subject = 'CRM оплачена';
  300. $mail->Body = $msg;
  301. if(!$mail->send()) {
  302. $error .= 'E-mail не отправлен! ';
  303. }
  304. $error .= 'Продление выполнено. ';
  305. } else {
  306. $error .= 'Ошибка Mysql: '.mysql_errno($db_link) . ' ' . mysql_error($db_link).' ';
  307. }
  308. file_put_contents($config->payment_log_file_path, date('Y-m-d H:i:s')." - Верификация пройдена!\nДанные от яндекса: \n".$datetime.":".$label.":".$withdraw_amount."\n\n Результаты выполнения функции продления: ".$error ."\n\n\n", FILE_APPEND);
  309. }
  310. }
  311. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement