private function _processWebhook() { $webhook = new \beGateway\Webhook(); if ($webhook->isAuthorized() && ($webhook->isSuccess() || $webhook->isFailed())) { $Status = $webhook->getStatus(); $Currency = $webhook->getResponse()->transaction->currency; $Amount = new \beGateway\Money(); $Amount->setCurrency($Currency); $Amount->setCents($webhook->getResponse()->transaction->amount); $TransId = $webhook->getUid(); $orderno = $webhook->getTrackingId(); $cart = new Cart((int) $orderno); if (!Validate::isLoadedObject($cart)) { Logger::addLog($this->l('Webhook: error to load cart'), 4); die($this->l('Critical error to load order cart')); } $customer = new Customer((int) $cart->id_customer); if (!Validate::isLoadedObject($customer)) { Logger::addLog($this->l('Webhook: error to load customer details'), 4); die($this->l('Critical error to load customer')); } $shop_ptype = trim(Configuration::get('BEGATEWAY_SHOP_PAYTYPE')); $payment_status = $webhook->isSuccess() ? Configuration::get('PS_OS_PAYMENT') : Configuration::get('PS_OS_ERROR'); $this->be_gateway->validateOrder((int) $orderno, $payment_status, $Amount->getAmount(), $this->be_gateway->displayName, $webhook->getMessage(), array('transaction_id' => $TransId), NULL, false, $customer->secure_key); $order_new = empty($this->be_gateway->currentOrder) ? $orderno : $this->be_gateway->currentOrder; Db::getInstance()->Execute(' INSERT INTO ' . _DB_PREFIX_ . 'begateway_transaction (type, id_begateway_customer, id_cart, id_order, uid, amount, status, currency, date_add) VALUES ("' . $shop_ptype . '", ' . $cart->id_customer . ', ' . $orderno . ', ' . $order_new . ', "' . $TransId . '", ' . $Amount->getAmount() . ', "' . $Status . '", "' . $Currency . '", NOW())'); die('OK'); } }
public function executeComponent() { global $APPLICATION; try { # verify token is valid $token = $this->checkToken(); # locate order and its payment system $order_id = $_REQUEST['order_id']; $payment_id = $_REQUEST['payment_id']; $uid = $_REQUEST['uid']; $order = Order::load($order_id); if (!$order) throw new Exception( Loc::getMessage("COMPONENT_BEGATEWAY_WRONG_ORDER_ID") . $order_id); $payment = $order->getPaymentCollection()->getItemById($payment_id); if (!$payment) throw new Exception( Loc::getMessage("COMPONENT_BEGATEWAY_WRONG_PAYMENT_ID") . $payment_id); $arOrder = CSaleOrder::GetByID($order_id); CSalePaySystemAction::InitParamArrays($arOrder, $arOrder["ID"], '', array(), $payment->getFieldValues()); \beGateway\Settings::$shopId = CSalePaySystemAction::GetParamValue("SHOP_ID"); \beGateway\Settings::$shopKey = CSalePaySystemAction::GetParamValue("SHOP_KEY"); \beGateway\Settings::$gatewayBase = "https://" . CSalePaySystemAction::GetParamValue("DOMAIN_GATEWAY"); \beGateway\Settings::$checkoutBase = "https://" . CSalePaySystemAction::GetParamValue("DOMAIN_PAYMENT_PAGE"); $query = new \beGateway\QueryByToken(); $query->setToken($token); $response = $query->submit()->getResponse(); if( ! isset( $response->checkout ) ) throw new Exception( Loc::getMessage("COMPONENT_BEGATEWAY_FAIL_TOKEN_QUERY") ); # verify token matches uid $this->arResult = $response->checkout; $type = $this->arResult->transaction_type; if (! isset($this->arResult->gateway_response)) throw new Exception( Loc::getMessage("COMPONENT_BEGATEWAY_NO_TRANS_INFO") ); if ($this->arResult->gateway_response->$type->uid != $uid) throw new Exception( Loc::getMessage("COMPONENT_BEGATEWAY_NO_UID_TOKEN_ACCESS") ); if ($this->arResult->order->tracking_id != $order_id . ':' . $payment_id) throw new Exception( Loc::getMessage("COMPONENT_BEGATEWAY_WRONG_TRACKING_ID") ); $money = new \beGateway\Money; $money->setCents($response->checkout->order->amount); $money->setCurrency($response->checkout->order->currency); $response->checkout->order->amount = CCurrencyLang::CurrencyFormat( $money->getAmount(), $money->getCurrency() ); $this->arResult->order->description = $APPLICATION->ConvertCharset($this->arResult->order->description, 'utf-8', SITE_CHARSET); $this->arResult->gateway_response->$type->billing_descriptor = $APPLICATION->ConvertCharset($this->arResult->gateway_response->$type->billing_descriptor, SITE_CHARSET, 'utf-8'); $this->IncludeComponentTemplate(); } catch(Exception $e) { ShowError( $e->getMessage() ); } }
$payment_id = CSalePaySystemAction::GetParamValue("ORDER_PAYMENT_ID"); $order_id = IntVal($GLOBALS["SALE_INPUT_PARAMS"]["ORDER"]["ID"]); $tracking_id = $order_id . ":" . $payment_id; set_time_limit(0); $query = new \beGateway\QueryByTrackingId; $query->setTrackingId($tracking_id); $response = $query->submit(); if ($response && $response != 'error') { $money = new \beGateway\Money; $money->setCurrency($response->getResponse()->transaction->currency); $money->setCents($response->getResponse()->transaction->amount); if($response->getTrackingId() == $tracking_id) { $arOrder = CSaleOrder::GetByID($order_id); $message = array(); $message []= Loc::getMessage("SALE_BEGATEWAY_STATUS_MESSAGE_UID") . ' ' . $response->getUid(). ". " . Loc::getMessage("SALE_BEGATEWAY_STATUS_MESSAGE_TIME") . ' ' . $response->getResponse()->transaction->paid_at; if(isset($response->getResponse()->transaction->three_d_secure_verification->pa_status)) { $message[] = "3-D Secure: " .$response->getResponse()->transaction->three_d_secure_verification->pa_status; } $arFields = array( "PS_STATUS" => ($response->isSuccess() ? "Y" : "N"), "PS_STATUS_DESCRIPTION" => implode("\n",$message), "PS_SUM" => $money->getAmount(), "PS_CURRENCY" => $money->getCurrency(), "PS_RESPONSE_DATE" => new \Bitrix\Main\Type\DateTime(),
use Bitrix\Main\Localization\Loc; Loc::loadMessages(__FILE__); \beGateway\Settings::$shopId = (int) \Bitrix\Main\Config\Option::get($module_id, "shop_id"); \beGateway\Settings::$shopKey = \Bitrix\Main\Config\Option::get($module_id, "shop_key"); \beGateway\Settings::$gatewayBase = "https://" . \Bitrix\Main\Config\Option::get($module_id, "domain_gateway"); \beGateway\Settings::$checkoutBase = "https://" . \Bitrix\Main\Config\Option::get($module_id, "domain_payment_page"); $webhook = new \beGateway\Webhook(); list($site_id, $tracking_id) = explode('_', $webhook->getTrackingId()); $arOrder = CSaleOrder::GetByID($tracking_id); if ($arOrder && $webhook->isAuthorized()) { if ($webhook->isSuccess() && $arOrder["PAYED"] != "Y") { CSaleOrder::PayOrder($arOrder["ID"], "Y"); CSaleOrder::StatusOrder($arOrder["ID"], "P"); $message = array(); if (isset($webhook->getResponse()->transaction->three_d_secure_verification)) { $message[] = "3-D Secure: " . $webhook->getResponse()->transaction->three_d_secure_verification->pa_status; } $message[] = $webhook->getResponse()->transaction->description; $money = new \beGateway\Money(); $money->setCurrency($webhook->getResponse()->transaction->currency); $money->setCents($webhook->getResponse()->transaction->amount); $arFields = array("PS_STATUS" => "Y", "PS_STATUS_MESSAGE" => implode("\n", $message), "PS_SUM" => $money->getAmount(), "PS_CURRENCY" => $webhook->getResponse()->transaction->currency, "PS_RESPONSE_DATE" => date("d.m.Y H:i:s", strtotime($webhook->getResponse()->transaction->created_at)), "PS_STATUS_DESCRIPTION" => json_encode(array($webhook->getUid() => $webhook->getResponse()->transaction->type))); \Bitrix\Main\Config\Option::set("main", "~sale_converted_15", "N"); //Костыль из - за совместимости битрикс с ядром D7 CSaleOrder::Update($arOrder["ID"], $arFields); \Bitrix\Main\Config\Option::set("main", "~sale_converted_15", "Y"); echo "OK " . $webhook->getUid(); } } $APPLICATION->RestartBuffer(); die;