Example #1
0
 public static function reciver($data, $status)
 {
     $config = static::getConfig();
     $skey = $config['secret'];
     // Функция, которая возвращает результат в Единую кассу
     function print_answer($result, $description)
     {
         $print = "WMI_RESULT=" . strtoupper($result) . "&";
         $print .= "WMI_DESCRIPTION=" . urlencode($description);
         return $print;
     }
     // Проверка наличия необходимых параметров в POST-запросе
     if (!isset($data["WMI_SIGNATURE"])) {
         $result['callback'] = print_answer("Retry", "Отсутствует параметр WMI_SIGNATURE");
     }
     if (!isset($data["WMI_PAYMENT_NO"])) {
         $result['callback'] = print_answer("Retry", "Отсутствует параметр WMI_PAYMENT_NO");
     }
     if (!isset($data["WMI_ORDER_STATE"])) {
         $result['callback'] = print_answer("Retry", "Отсутствует параметр WMI_ORDER_STATE");
     }
     // Извлечение всех параметров POST-запроса, кроме WMI_SIGNATURE
     $params = [];
     foreach ($data as $name => $value) {
         if ($name !== "WMI_SIGNATURE") {
             $params[$name] = $value;
         }
     }
     // Сортировка массива по именам ключей в порядке возрастания
     // и формирование сообщения, путем объединения значений формы
     uksort($params, "strcasecmp");
     $values = "";
     foreach ($params as $name => $value) {
         //Конвертация из текущей кодировки (UTF-8)
         //необходима только если кодировка магазина отлична от Windows-1251
         $value = iconv("utf-8", "windows-1251", $value);
         $values .= $value;
     }
     // Формирование подписи для сравнения ее с параметром WMI_SIGNATURE
     $signature = base64_encode(pack("H*", md5($values . $skey)));
     //Сравнение полученной подписи с подписью W1
     if (!empty($data["WMI_SIGNATURE"]) && $signature == $data["WMI_SIGNATURE"]) {
         if (strtoupper($data["WMI_ORDER_STATE"]) == "ACCEPTED") {
             // вызываем функцию обработки в случае успеха
             $result['callback'] = print_answer("Ok", "Заказ #" . $data["WMI_PAYMENT_NO"] . " оплачен!");
             $result['payId'] = $data["WMI_PAYMENT_NO"];
             $result['status'] = 'success';
             return $result;
         } else {
             // Случилось что-то странное, пришло неизвестное состояние заказа
             $result['callback'] = print_answer("Retry", "Неверное состояние " . $data["WMI_ORDER_STATE"]);
         }
     } else {
         // Подпись не совпадает, возможно вы поменяли настройки интернет-магазина
         $result['callback'] = print_answer("Retry", "Неверная подпись " . (!empty($data["WMI_SIGNATURE"]) ? $data["WMI_SIGNATURE"] : 'empty'));
     }
     return $result;
 }
 function check_ipn_response()
 {
     global $woocommerce;
     if (!isset($_POST["WMI_SIGNATURE"])) {
         print "WMI_RESULT=" . strtoupper("Retry") . "&";
         print "WMI_DESCRIPTION=" . urlencode("Отсутствует параметр WMI_SIGNATURE");
         exit;
     }
     if (!isset($_POST["WMI_PAYMENT_NO"])) {
         print "WMI_RESULT=" . strtoupper("Retry") . "&";
         print "WMI_DESCRIPTION=" . urlencode("Отсутствует параметр WMI_PAYMENT_NO");
         exit;
     }
     if (!isset($_POST["WMI_ORDER_STATE"])) {
         print "WMI_RESULT=" . strtoupper("Retry") . "&";
         print "WMI_DESCRIPTION=" . urlencode("Отсутствует параметр WMI_ORDER_STATE");
         exit;
     }
     if (isset($_POST["WMI_SIGNATURE"]) && $this->merchant_id == $_POST["WMI_MERCHANT_ID"]) {
         if (strtoupper($_POST["WMI_ORDER_STATE"]) == "ACCEPTED") {
             $order_id = $_POST['WMI_PAYMENT_NO'];
             $order = new WC_Order($order_id);
             $order->update_status('on-hold', __('Платеж успешно оплачен', 'woocommerce'));
             $woocommerce->cart->empty_cart();
             print "WMI_RESULT=" . strtoupper("Ok") . "&";
             print "WMI_DESCRIPTION=" . urlencode("Заказ #" . $_POST["WMI_PAYMENT_NO"] . " оплачен!");
             wp_redirect(add_query_arg('key', $order->order_key, add_query_arg('order', $order_id, get_permalink(get_option('woocommerce_thanks_page_id')))));
             exit;
         } else {
             $inv_id = $_POST['WMI_PAYMENT_NO'];
             $order = new WC_Order($inv_id);
             $order->update_status('failed', __('Платеж не оплачен', 'woocommerce'));
             print_answer("Retry", "Неверное состояние " . $_POST["WMI_ORDER_STATE"]);
             wp_redirect($order->get_cancel_order_url());
             exit;
         }
     } else {
         print "WMI_RESULT=" . strtoupper("Retry") . "&";
         print "WMI_DESCRIPTION=" . urlencode("Неверная подпись " . $_POST["WMI_SIGNATURE"]);
         wp_redirect($order->get_cancel_order_url());
         exit;
     }
 }