Plugin Directory

Changeset 3266024


Ignore:
Timestamp:
04/03/2025 05:54:47 AM (12 months ago)
Author:
robokassa
Message:

1.6.9

Location:
robokassa/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • robokassa/trunk/readme.txt

    r3256363 r3266024  
    125125== Changelog ==
    126126
     127= 1.6.9 =
     128* Исправлены незначительные ошибки
     129
    127130= 1.6.8 =
    128131* Добавлена поддержка плагина Smart Coupons For WooCommerce
  • robokassa/trunk/wp_robokassa.php

    r3256363 r3266024  
    66 * Author: Robokassa
    77 * Author URI: https://robokassa.com
    8  * Version: 1.6.8
     8 * Version: 1.6.9
    99 */
    1010
     
    263263
    264264        if ($_REQUEST['robokassa'] === 'result') {
    265 
    266             /** @var string $crc_confirm */
    267             $crc_confirm = strtoupper(
    268                 md5(
    269                     implode(
    270                         ':',
    271                         [
    272                             $_REQUEST['OutSum'],
    273                             $_REQUEST['InvId'],
    274                             (
    275                             (get_option('robokassa_payment_test_onoff') == 'true')
    276                                 ? get_option('robokassa_payment_testshoppass2')
    277                                 : get_option('robokassa_payment_shoppass2')
    278                             ),
    279                             'shp_label=official_wordpress',
    280                             'Shp_merchant_id=' . get_option('robokassa_payment_MerchantLogin'),
    281                             'Shp_order_id=' . $_REQUEST['InvId'],
    282                             'Shp_result_url=' . (site_url('/?robokassa=result'))
    283                         ]
    284                     )
    285                 )
    286             );
    287 
    288             if ($crc_confirm == $_REQUEST['SignatureValue']) {
    289 
    290                 $order = new WC_Order($_REQUEST['InvId']);
    291                 $order->add_order_note('Заказ успешно оплачен!');
    292                 $order->payment_complete();
    293 
    294                 global $woocommerce;
    295                 $woocommerce->cart->empty_cart();
    296 
    297                 //определяем есть ли в заказе подписка
    298                 if (function_exists('wcs_order_contains_subscription')) {
    299                     $subscriptions = wcs_get_subscriptions_for_order($_REQUEST['InvId']) ?: wcs_get_subscriptions_for_renewal_order($_REQUEST['InvId']);
    300 
    301                     if ($subscriptions == true) {
    302                         foreach ($subscriptions as $subscription) {
    303                             $subscription->update_status('active');
     265            if (strpos($_SERVER['CONTENT_TYPE'], 'application/json') !== false) {
     266                $input_data = file_get_contents('php://input');
     267                $token_parts = explode('.', $input_data);
     268
     269                if (count($token_parts) === 3) {
     270                    $json_data = json_decode(base64_decode($token_parts[1]), true);
     271
     272                    if (isset($json_data['data']['invId']) && isset($json_data['data']['state'])) {
     273                        $order = new WC_Order($json_data['data']['invId']);
     274
     275                        if ($json_data['data']['state'] === 'HOLD') {
     276                            $date_in_five_days = date('Y-m-d H:i:s', strtotime('+5 days'));
     277                            $order->add_order_note("Robokassa: Платеж успешно подтвержден. Он ожидает подтверждения до {$date_in_five_days}, после чего автоматически отменится");
     278                            $order->update_status('on-hold');
     279                            wp_schedule_single_event(strtotime('+5 days'), 'robokassa_cancel_payment_event', array($order->get_id()));
     280                        } elseif ($json_data['data']['state'] === 'OK') {
     281                            $order->add_order_note("Robokassa: Платеж успешно подтвержден");
     282                            $order->update_status('processing');
     283
     284                            if (function_exists('wcs_order_contains_subscription')) {
     285                                $subscriptions = wcs_get_subscriptions_for_order($json_data['data']['invId']) ?: wcs_get_subscriptions_for_renewal_order($json_data['data']['invId']);
     286
     287                                if ($subscriptions) {
     288                                    foreach ($subscriptions as $subscription) {
     289                                        $subscription->update_status('active');
     290                                    }
     291                                }
     292                            }
    304293                        }
     294
     295                        http_response_code(200);
     296                        echo "OK" . $json_data['data']['invId'];
     297                    } else {
     298                        http_response_code(400);
    305299                    }
    306                 }
    307 
    308                 $returner = 'OK' . $_REQUEST['InvId'];
    309 
    310                 if (get_option('robokassa_payment_sms1_enabled') == 'on') {
    311 
    312                     try {
    313 
    314                         (new RobokassaSms(
    315                             (new RoboDataBase(mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME))),
    316                             (new RobokassaPayAPI(
    317                                 get_option('robokassa_payment_MerchantLogin'),
    318                                 get_option('robokassa_payment_shoppass1'),
    319                                 get_option('robokassa_payment_shoppass2')
    320                             )
    321                             ),
    322                             $order->billing_phone,
    323                             get_option('robokassa_payment_sms1_text'),
    324                             (get_option('robokassa_payment_sms_translit') == 'on'),
    325                             $_REQUEST['InvId'],
    326                             1
    327                         ))->send();
    328                     } catch (Exception $e) {
    329                     }
    330                 }
    331             } elseif ((get_option('robokassa_payment_hold_onoff') == 'true') &&
    332                 strpos($_SERVER['CONTENT_TYPE'], 'application/json') !== false) {
    333 
    334                 $input_data = file_get_contents('php://input');
    335 
    336                 // Разбиваем JWT на три части
    337                 $token_parts = explode('.', $input_data);
    338 
    339                 // Проверяем, что есть три части
    340                 if (count($token_parts) === 3) {
    341                     // Декодируем вторую часть (полезные данные)
    342                     $json_data = json_decode(base64_decode($token_parts[1]), true);
    343 
    344                     // Проверяем наличие ключевого поля "state" со значением "HOLD"
    345                     if (isset($json_data['data']['state']) && $json_data['data']['state'] === 'HOLD') {
    346                         // Изменяем статус заказа
    347                         $order = new WC_Order($json_data['data']['invId']);
    348                         $date_in_five_days = date('Y-m-d H:i:s', strtotime('+5 days'));
    349                         $order->add_order_note("Robokassa: Платеж успешно подтвержден. Он ожидает подтверждения до {$date_in_five_days}, после чего автоматически отменится");
    350                         $order->update_status('on-hold');
    351 
    352                         // Добавляем событие, которое делает unhold через 5 дней
    353                         wp_schedule_single_event(strtotime('+5 days'), 'robokassa_cancel_payment_event', array($order->get_id()));
    354                     }
    355                     if (isset($json_data['data']['state']) && $json_data['data']['state'] === 'OK') {
    356                         // Изменяем статус заказа
    357                         $order = new WC_Order($json_data['data']['invId']);
    358                         $order->add_order_note("Robokassa: Платеж успешно подтвержден");
    359                         $order->update_status('processing');
    360 
    361                     }
    362                     http_response_code(200);
    363300                } else {
    364301                    http_response_code(400);
    365302                }
    366303            } else {
    367                 $returner = 'BAD SIGN';
    368 
    369                 try {
     304                $crc_confirm = strtoupper(
     305                    md5(
     306                        implode(
     307                            ':',
     308                            [
     309                                $_REQUEST['OutSum'],
     310                                $_REQUEST['InvId'],
     311                                (
     312                                (get_option('robokassa_payment_test_onoff') == 'true')
     313                                    ? get_option('robokassa_payment_testshoppass2')
     314                                    : get_option('robokassa_payment_shoppass2')
     315                                ),
     316                                'shp_label=official_wordpress',
     317                                'Shp_merchant_id=' . get_option('robokassa_payment_MerchantLogin'),
     318                                'Shp_order_id=' . $_REQUEST['InvId'],
     319                                'Shp_result_url=' . (site_url('/?robokassa=result'))
     320                            ]
     321                        )
     322                    )
     323                );
     324
     325                if ($crc_confirm == $_REQUEST['SignatureValue']) {
    370326                    $order = new WC_Order($_REQUEST['InvId']);
    371                     $order->add_order_note('Bad CRC '. $crc_confirm .' . '. $_REQUEST['SignatureValue']);
    372                     $order->update_status('failed');
    373                 } catch (Exception $e) {}
     327                    $order->add_order_note('Заказ успешно оплачен!');
     328                    $order->payment_complete();
     329
     330                    global $woocommerce;
     331                    $woocommerce->cart->empty_cart();
     332
     333                    if (function_exists('wcs_order_contains_subscription')) {
     334                        $subscriptions = wcs_get_subscriptions_for_order($_REQUEST['InvId']) ?: wcs_get_subscriptions_for_renewal_order($_REQUEST['InvId']);
     335
     336                        if ($subscriptions) {
     337                            foreach ($subscriptions as $subscription) {
     338                                $subscription->update_status('active');
     339                            }
     340                        }
     341                    }
     342
     343                    if (get_option('robokassa_payment_sms1_enabled') == 'on') {
     344                        try {
     345                            (new RobokassaSms(
     346                                (new RoboDataBase(mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME))),
     347                                (new RobokassaPayAPI(
     348                                    get_option('robokassa_payment_MerchantLogin'),
     349                                    get_option('robokassa_payment_shoppass1'),
     350                                    get_option('robokassa_payment_shoppass2')
     351                                )),
     352                                $order->billing_phone,
     353                                get_option('robokassa_payment_sms1_text'),
     354                                (get_option('robokassa_payment_sms_translit') == 'on'),
     355                                $_REQUEST['InvId'],
     356                                1
     357                            ))->send();
     358                        } catch (Exception $e) {}
     359                    }
     360
     361                    echo "OK" . $_REQUEST['InvId'];
     362                } else {
     363                    $returner = 'BAD SIGN';
     364                    try {
     365                        $order = new WC_Order($_REQUEST['InvId']);
     366                        $order->add_order_note('Bad CRC '. $crc_confirm .' . '. $_REQUEST['SignatureValue']);
     367                        $order->update_status('failed');
     368                    } catch (Exception $e) {}
     369                    echo $returner;
     370                }
    374371            }
     372            die;
    375373        }
    376374
     
    384382            die;
    385383        }
    386         echo $returner;
    387         die;
    388384    }
    389385}
     
    888884}
    889885
    890 function robokassa_hold_confirm($order_id, $old_status, $new_status, $order)
    891 {
    892     // Проверяем, что статус был изменен с "on-hold" на "processing" (обработка)
    893     if ((get_option('robokassa_payment_hold_onoff') == 'true')
     886function robokassa_hold_confirm($order_id, $old_status, $new_status, $order) {
     887    $option_value = get_option('robokassa_payment_hold_onoff');
     888    if (($option_value == 1 )
    894889        && $old_status === 'on-hold' && $new_status === 'processing') {
    895 
    896890        $order = wc_get_order($order_id);
    897891        $shipping_total = $order->get_shipping_total();
     
    899893        $receipt_items = array();
    900894        $tax = get_option('robokassa_payment_tax');
    901 
    902         /**
    903          * @var \WC_Order_Item_Product $item
    904          */
    905         foreach ($order->get_items() as $item)
    906         {
    907 
     895        $total_receipt = 0;
     896
     897        foreach ($order->get_items() as $item) {
    908898            $product = $item->get_product();
    909899
     
    930920        }
    931921
    932         foreach($order->get_items('fee') as $feeItem)
    933         {
     922        foreach ($order->get_items('fee') as $feeItem) {
    934923            $additional_item_name = $feeItem->get_name();
    935924            $additional_item_total = (float) $feeItem->get_total();
     
    982971function robokassa_hold_cancel($order_id, $old_status, $new_status, $order)
    983972{
    984     // Проверяем, что статус был изменен с "on-hold" на "Canceled"
    985     if ((get_option('robokassa_payment_hold_onoff') == 'true') &&
    986         $old_status === 'on-hold' && $new_status === 'cancelled') {
     973    $option_value = get_option('robokassa_payment_hold_onoff');
     974    if (($option_value == 1)
     975        && $old_status === 'on-hold' && $new_status === 'cancelled') {
    987976
    988977        $request_data = array(
     
    1005994            $order->add_order_note('Error sending payment request: ' . $response->get_error_message());
    1006995        } else {
     996
     997            // Добавляем заметку в заказ
    1007998            $order->add_order_note('Robokassa: холдирование было отменено вами, либо автоматически после 5 дней ожидания');
    1008999        }
     
    10141005    $order = wc_get_order($order_id);
    10151006    if ($order) {
    1016         // Проверяем текущий статус заказа
    10171007        if ($order->get_status() === 'on-hold') {
    1018             // Отменяем заказ и добавляем соответствующее уведомление
    10191008            $request_data = array(
    10201009                'MerchantLogin' => get_option('robokassa_payment_MerchantLogin'),
Note: See TracChangeset for help on using the changeset viewer.