function fn_rus_payments_change_order_status(&$status_to, &$status_from, &$order_info, &$force_notification, &$order_statuses, &$place_order) { $processor_data = fn_get_processor_data($order_info['payment_id']); $payment_info = $order_info['payment_info']; if (!empty($processor_data['processor']) && $processor_data['processor'] == 'Yandex.Money' && !empty($payment_info['yandex_postponed_payment'])) { try { $cert = $processor_data['processor_params']['certificate_filename']; $mws_client = new MWSClient(); $mws_client->authenticate(array('pkcs12_file' => Registry::get('config.dir.certificates') . $cert, 'pass' => $processor_data['processor_params']['p12_password'], 'is_test_mode' => $processor_data['processor_params']['mode'] == 'test')); if ($status_to == $processor_data['processor_params']['confirmed_order_status']) { $mws_client->confirmPayment($payment_info['yandex_invoice_id'], $order_info['total']); $payment_info['yandex_confirmed_time'] = date('c'); $payment_info['yandex_postponed_payment'] = false; } elseif ($status_to == $processor_data['processor_params']['canceled_order_status']) { $mws_client->cancelPayment($payment_info['yandex_invoice_id']); $payment_info['yandex_canceled_time'] = date('c'); $payment_info['yandex_postponed_payment'] = false; } $payment_info['order_status'] = $status_to; fn_update_order_payment_info($order_info['order_id'], $payment_info); $order_info['payment_info'] = $payment_info; } catch (\Exception $e) { fn_set_notification('E', __('error'), __('addons.rus_payments.yandex_money_mws_operation_error')); return $status_to = $status_from; } } }
use Tygh\Payments\Processors\YandexMoneyMWS\Exception as MWSException; if (!defined('BOOTSTRAP')) { die('Access denied'); } if ($_SERVER['REQUEST_METHOD'] == 'POST') { if ($mode == 'rus_payments_refund' && !empty($_REQUEST['refund_data'])) { $refund_data = $_REQUEST['refund_data']; $order_info = fn_get_order_info($_REQUEST['order_id']); $payment_info = $order_info['payment_info']; $pdata = $order_info['payment_method']; if ($pdata['processor'] == 'Yandex.Money' && $pdata['processor_params']['returns_enabled'] == 'Y') { try { $chunks = explode('_', $payment_info['yandex_merchant_order_id'], 3); $order_number = $chunks[0] . '_' . $chunks[1]; $cert = $pdata['processor_params']['certificate_filename']; $mws_client = new MWSClient(); $mws_client->authenticate(array('pkcs12_file' => Registry::get('config.dir.certificates') . $cert, 'pass' => $pdata['processor_params']['p12_password'], 'shop_id' => $pdata['processor_params']['shop_id'], 'is_test_mode' => $pdata['processor_params']['mode'] == 'test')); $orders = $mws_client->getOrders(array('order_number' => $order_number)); if (empty($orders) || empty($orders['orderCount'])) { throw new \Exception(); } $mws_client->returnPayment($order_info['order_id'], $orders->order[0]['invoiceId'], $refund_data['amount'], !empty($refund_data['cause']) ? $refund_data['cause'] : '#'); fn_change_order_status($order_info['order_id'], $pdata['processor_params']['returned_order_status']); $payment_info['yandex_refunded_time'] = date('c'); $payment_info['yandex_refund_amount'] = $refund_data['amount']; fn_update_order_payment_info($order_info['order_id'], $payment_info); } catch (\Exception $e) { $message = __('addons.rus_payments.yandex_money_mws_operation_error'); if ($e instanceof MWSException) { $message .= "<br />Tech message: " . $e->getTechMessage(); }