<?
global $DOCUMENT_ROOT,$HTTP_HOST;

define('SHAREDSEC',   'coolPassword');                                                     // Пароль для шифрования подписи
define('PRODUCT_ID',  '001234-0001-0001');                                                 // Код магазина
define('SUCCESS_URL', "http://{$HTTP_HOST}/netshop/paysuccess/");                          // URL успешной оплаты
define('DECLINE_URL', "http://{$HTTP_HOST}/netshop/payfailed/");                           // URL неудачной оплаты
define('CB_URL', "http://{$HTTP_HOST}/netcat/modules/netshop/post.php?system=chronopay");  // URL обработчика платежей
define('LOGFILE', $DOCUMENT_ROOT.'/netcat/modules/netshop/payment/payments.log');          // Лог-файл с платежами
define('PAID_STATUS', 3);                                                                  // Статус заказа при успешной оплате

setlocale(LC_NUMERIC, 'C'); // разделитель дробных частей в float - точка!

class Payment_chronopay
{
   private $shop = null;       // object

   function __construct($shop) {
        $this->shop = $shop;

        if (!$shop->OrderID && $_GET["OrderNumber"]) {
            $this->shop->LoadOrder($_GET["OrderNumber"]);
        }
    }

   // создание формы на формирование счета
   function create_bill($to_string = false)
   {
     $shop = $this->shop;
     
     $order_id = $shop->OrderID;             // номер заказа
     $product_price = $shop->CartSum();      // сумма заказа
     $phone=$GLOBALS["f_Phone"];             // Телефон заказчика
     $email=$GLOBALS["f_Email"];             // Емайл заказчика

     file_put_contents(LOGFILE,date("d.m.y H:i:s")." prepare for payment order: {$order_id}\n",FILE_APPEND);
   

     // формирование подписи
     $crc  = md5(PRODUCT_ID."-{$product_price}-{$order_id}-".SHAREDSEC);

     // форма оплаты товара
     // реальные платежи: https://payments.chronopay.com
     // тестовые платежи: https://payments.test.chronopay.com
     $chronopay = "<form id='fchronopay' action='https://payments.chronopay.com' method='post'>
               <input type='hidden' name='product_id' value='".PRODUCT_ID."' />
               <input type='hidden' name='product_price' value='$product_price' />
               <input type='hidden' name='order_id' value='$order_id' />
               <input type='hidden' name='success_url' value='".SUCCESS_URL."' />
               <input type='hidden' name='decline_url' value='".DECLINE_URL."' />
               <input type='hidden' name='cb_url' value='".CB_URL."' />
               <input type='hidden' name='email' value='$email' />
               <input type='hidden' name='sign' value='$crc' />
               ".(!$to_string?"<br /><br /><input type='submit' value='Оплатить через ChronoPay' /><br /><br />":NULL)."
           </form>";
    return (!$to_string) ? true : $chronopay;

   }


   // знаем, что данные пришли через post
   function success()
   {
     file_put_contents(LOGFILE,date("d.m.y H:i:s").' '.$_SERVER['REQUEST_METHOD'].' '.print_r($_REQUEST,true)."\n",FILE_APPEND);
     global $db;

     $total = $_POST["total"];                   // сумма заказа
     $order_id = $_POST["order_id"];             // номер заказа
     $customer_id = $_POST["customer_id"];       // номер покупателя в Chronopay
     $dt = $_POST["date"];                       // дата операции
     $transaction_id = $_POST["transaction_id"]; // номер транзакции
     $transaction_type = $_POST["transaction_type"]; // тип транзакции
     $auth_code = $_POST["auth_code"];           // код авторизации
     $payment_type = $_POST["payment_type"];     // Тип платежного средства
     $cardholder = $_POST["cardholder"];         // имя держателя карты
     $crc = $_POST["sign"];                      // подпись
     $crc = strtoupper($crc);
     $my_crc = strtoupper(md5(SHAREDSEC."{$customer_id}{$transaction_id}{$transaction_type}{$total}"));

     if ($my_crc == $crc)             // проверка корректности подписи
       {                              // записать факт в комменты, изменить статус
         $payinfo = sprintf("Оплата CHRONOPAY: местное время: %s, сумма: %s.
Код покупателя: $customer_id
Дата транзакции: $dt
Номер транзакции: $transaction_id
Тип транзакции: $transaction_type
Код авторизации: $auth_code
Тип платежного средства: $payment_type
Держатель карты: $cardholder\n",
                               date("d.m.y H:i:s"),
                               $this->shop->FormatCurrency($total,"",1)
                             );
         $newordstatus=PAID_STATUS;
         if (intval($order_id)>0) $db->query("UPDATE Message{$this->shop->order_table}
            SET PaymentInfo=concat(COALESCE(PaymentInfo,''), '".mysql_escape_string($payinfo)."'), status='$newordstatus'
            WHERE Message_ID = ".intval($order_id));

          echo "200 OK";        // признак успешно проведенной операции
          file_put_contents(LOGFILE,date("d.m.y H:i:s")." Sent reply: 200 OK\n",FILE_APPEND);
        }
     else
        {
          die("bad sign\n");         // Ошибка CRC
          file_put_contents(LOGFILE,date("d.m.y H:i:s")." Send reply: CRC ERROR\n",FILE_APPEND);
        }
   }
}

?>