Changeset 3266024
- Timestamp:
- 04/03/2025 05:54:47 AM (12 months ago)
- Location:
- robokassa/trunk
- Files:
-
- 2 edited
-
readme.txt (modified) (1 diff)
-
wp_robokassa.php (modified) (9 diffs)
Legend:
- Unmodified
- Added
- Removed
-
robokassa/trunk/readme.txt
r3256363 r3266024 125 125 == Changelog == 126 126 127 = 1.6.9 = 128 * Исправлены незначительные ошибки 129 127 130 = 1.6.8 = 128 131 * Добавлена поддержка плагина Smart Coupons For WooCommerce -
robokassa/trunk/wp_robokassa.php
r3256363 r3266024 6 6 * Author: Robokassa 7 7 * Author URI: https://robokassa.com 8 * Version: 1.6. 88 * Version: 1.6.9 9 9 */ 10 10 … … 263 263 264 264 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 } 304 293 } 294 295 http_response_code(200); 296 echo "OK" . $json_data['data']['invId']; 297 } else { 298 http_response_code(400); 305 299 } 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 1327 ))->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);363 300 } else { 364 301 http_response_code(400); 365 302 } 366 303 } 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']) { 370 326 $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 } 374 371 } 372 die; 375 373 } 376 374 … … 384 382 die; 385 383 } 386 echo $returner;387 die;388 384 } 389 385 } … … 888 884 } 889 885 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') 886 function robokassa_hold_confirm($order_id, $old_status, $new_status, $order) { 887 $option_value = get_option('robokassa_payment_hold_onoff'); 888 if (($option_value == 1 ) 894 889 && $old_status === 'on-hold' && $new_status === 'processing') { 895 896 890 $order = wc_get_order($order_id); 897 891 $shipping_total = $order->get_shipping_total(); … … 899 893 $receipt_items = array(); 900 894 $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) { 908 898 $product = $item->get_product(); 909 899 … … 930 920 } 931 921 932 foreach($order->get_items('fee') as $feeItem) 933 { 922 foreach ($order->get_items('fee') as $feeItem) { 934 923 $additional_item_name = $feeItem->get_name(); 935 924 $additional_item_total = (float) $feeItem->get_total(); … … 982 971 function robokassa_hold_cancel($order_id, $old_status, $new_status, $order) 983 972 { 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') { 987 976 988 977 $request_data = array( … … 1005 994 $order->add_order_note('Error sending payment request: ' . $response->get_error_message()); 1006 995 } else { 996 997 // Добавляем заметку в заказ 1007 998 $order->add_order_note('Robokassa: холдирование было отменено вами, либо автоматически после 5 дней ожидания'); 1008 999 } … … 1014 1005 $order = wc_get_order($order_id); 1015 1006 if ($order) { 1016 // Проверяем текущий статус заказа1017 1007 if ($order->get_status() === 'on-hold') { 1018 // Отменяем заказ и добавляем соответствующее уведомление1019 1008 $request_data = array( 1020 1009 'MerchantLogin' => get_option('robokassa_payment_MerchantLogin'),
Note: See TracChangeset
for help on using the changeset viewer.