return substr($rs, $start, $end - $start); } if ($_POST['signature'] == "" || $_POST['operation_xml'] == "") { die; } $insig = $_POST['signature']; $resp = base64_decode($_POST['operation_xml']); $order_id = str_replace("ORDER_", "", liqpay_parseTag($resp, "order_id")); $status = liqpay_parseTag($resp, "status"); $response_description = liqpay_parseTag($resp, "response_description"); $transaction_id = liqpay_parseTag($resp, "transaction_id"); $pay_details = liqpay_parseTag($resp, "pay_details"); $pay_way = liqpay_parseTag($resp, "pay_way"); $amount = liqpay_parseTag($resp, "amount"); $currency = liqpay_parseTag($resp, "currency"); $sender_phone = liqpay_parseTag($resp, "sender_phone"); if ($order_id <= 0) { die; } if (!($arOrder = CSaleOrder::GetByID($order_id))) { die; } if ($arOrder["PAYED"] == "Y") { die; } CSalePaySystemAction::InitParamArrays($arOrder, $arOrder["ID"]); $merchant_id = CSalePaySystemAction::GetParamValue("MERCHANT_ID"); $signature = CSalePaySystemAction::GetParamValue("SIGN"); $gensig = base64_encode(sha1($signature . $resp . $signature, 1)); if ($insig == $gensig) { if ($status == "success") {
function liqpay_parseTag($rs, $tag) { $rs = str_replace("\n", "", str_replace("\r", "", $rs)); $tags = '<' . $tag . '>'; $tage = '</' . $tag; $start = strpos($rs, $tags) + strlen($tags); $end = strpos($rs, $tage); return substr($rs, $start, $end - $start); } if ($_POST['signature'] == "" || $_POST['operation_xml'] == "") { die; } $insig = $_POST['signature']; $resp = base64_decode($_POST['operation_xml']); $request = \Bitrix\Main\Application::getInstance()->getContext()->getRequest(); $entityId = str_replace("PAYMENT_", "", liqpay_parseTag($resp, "order_id")); list($orderId, $paymentId) = \Bitrix\Sale\PaySystem\Manager::getIdsByPayment($entityId); if ($orderId > 0) { /** @var \Bitrix\Sale\Order $order */ $order = \Bitrix\Sale\Order::load($orderId); if ($order) { /** @var \Bitrix\Sale\PaymentCollection $paymentCollection */ $paymentCollection = $order->getPaymentCollection(); if ($paymentCollection && $paymentId > 0) { /** @var \Bitrix\Sale\Payment $payment */ $payment = $paymentCollection->getItemById($paymentId); if ($payment) { $service = \Bitrix\Sale\PaySystem\Manager::getObjectById($payment->getPaymentSystemId()); if ($service) { $service->processRequest($request); }