/** * * @param type $xml * @return boolean */ public function createOrder($xml) { $payqrCURLObject = new PayqrCurl(); $responceXML = $payqrCURLObject->sendXMLFile(PayqrConfig::$insalesURL . "orders.xml", $xml); if (!$responceXML) { PayqrLog::log("Ответ от сервера InSales не в формате xml"); //Помечаем ответ от InSales, как ошибочный \frontend\models\InvoiceTable::updateAll(['order_request' => -1], 'invoice_id = :invoice_id', [':invoice_id' => $this->invoiceId]); return false; } //PayqrLog::log("Ответ от сервера \r\n" . $responceXML); return $responceXML; }
public function setDeliveryCases() { PayqrLog::log("setDeliveryCases" . PHP_EOL); $result = \frontend\models\InvoiceTable::find()->where(["invoice_id" => $this->invoiceId])->one(); PayqrLog::log(print_r($result, true)); $deliveryData = json_decode($result->data); if ($deliveryData) { //проверяем данные в формате json, но в любом случае наличие данных говорит, о том, что запрос уже был PayqrLog::log("setDeliveryCases. Уже иммем все необходимые данные, возвращаем их!"); $this->invoice->setDeliveryCases($deliveryData); return true; } // PayqrLog::log("setDeliveryCases. Первый запрос, сохраняем данные!"); $invoiceTable = new \frontend\models\InvoiceTable(); $invoiceTable->invoice_id = $this->invoiceId; $invoiceTable->data = ""; $invoiceTable->save(); $payqrDelivery = $this->invoice->getDelivery(); if (empty($payqrDelivery)) { PayqrLog::log("Возвращаем пустой массив"); return array(); } //проверяем xml на валидность libxml_use_internal_errors(true); //Получаем способы доставки через запрос к API InSales $payqrCurl = new PayqrCurl(); //вначале производим получение всех способов оплаты, которые присутствуют в системе $responsePayqmetsXML = $payqrCurl->sendXMLFile(PayqrConfig::$insalesURL . "payment_gateways.xml", "", "GET"); PayqrLog::log(print_r($responsePayqmetsXML, true)); $elem = simplexml_load_string($responsePayqmetsXML); if ($elem == false) { //Не смогли получить информацию о способах доставки PayqrLog::log("Не смогли получить информацию о способах доставки \r\n" . $responsePayqmetsXML); return array(); } //производм разбор xml $xml = new SimpleXMLElement($responsePayqmetsXML); $paymentsVariants1 = $xml->xpath("/objects/object"); $id_payqr_payment = 0; foreach ($paymentsVariants1 as $payment) { if (strpos(strtolower((string) $payment->title), "payqr") !== false) { $id_payqr_payment = (int) $payment->id; break; } } if (!$id_payqr_payment) { $paymentsVariants = $xml->xpath("/payment-gateway-customs/payment-gateway-custom"); foreach ($paymentsVariants as $payment) { if (strpos(strtolower((string) $payment->title), "payqr") !== false) { $id_payqr_payment = (int) $payment->id; break; } } } if (!$id_payqr_payment) { //не смогли получить платежную систему PayqrLog::log("Не смогли получить способы оплаты"); return array(); } PayqrLog::log("Получили id способы оплаты " . $id_payqr_payment); //получаем способы доставки $responsedeliveriesXML = $payqrCurl->sendXMLFile(PayqrConfig::$insalesURL . "delivery_variants.xml", "", "GET"); PayqrLog::log(print_r($responsedeliveriesXML, true)); $elem = simplexml_load_string($responsedeliveriesXML); if ($elem == false) { //Не смогли получить информацию о способах доставки PayqrLog::log("Не смогли получить информацию о способах доставки \r\n" . $responsedeliveriesXML); return array(); } //производм разбор xml $xml = new SimpleXMLElement($responsedeliveriesXML); //получаем OrderId-внешний идентификатор $deliveryVariants = $xml->xpath("/delivery-variant-fixeds/delivery-variant-fixed"); if (empty($deliveryVariants)) { //не смогли получить варианты доставок PayqrLog::log("Не смогли получить варианты доставок"); return false; } $i = 1; foreach ($deliveryVariants as $delivery) { // получаем $isIvertedCity = false; //PayqrLog::log(print_r($delivery, true)); $deliveryPayqments = $delivery->xpath("payment-delivery-variants/payment-delivery-variant"); //PayqrLog::log(print_r($deliveryPayqments, true)); if (empty($deliveryPayqments)) { continue; } if (isset($delivery->inverted) && $delivery->inverted == "true") { $isIvertedCity = true; } //PayqrLog::log("Нашли варианты оплаты для данной доставки"); foreach ($deliveryPayqments as $deliveryPayment) { if ((int) $deliveryPayment->{"payment-gateway-id"} == $id_payqr_payment) { //Проверяем теперь город, для которого разрешена доставка $deliveryLocations = $delivery->xpath("delivery-locations/delivery-location"); if (!empty($deliveryLocations)) { foreach ($deliveryLocations as $deliveryLocation) { if (isset($payqrDelivery->city) && !empty($payqrDelivery->city) && (!$isIvertedCity && strtolower((string) $deliveryLocation->city) == strtolower($payqrDelivery->city))) { $delivery_cases[] = array('article' => (int) $delivery->id, 'number' => $i++, 'name' => (string) $delivery->title, 'description' => strip_tags((string) $delivery->description), 'amountFrom' => round((double) $delivery->price, 2), 'amountTo' => round((double) $delivery->price, 2)); } if (isset($payqrDelivery->city) && !empty($payqrDelivery->city) && ($isIvertedCity && strtolower((string) $deliveryLocation->city) != strtolower($payqrDelivery->city))) { $delivery_cases[] = array('article' => (int) $delivery->id, 'number' => $i++, 'name' => (string) $delivery->title, 'description' => strip_tags((string) $delivery->description), 'amountFrom' => round((double) $delivery->price, 2), 'amountTo' => round((double) $delivery->price, 2)); } } } else { $delivery_cases[] = array('article' => (int) $delivery->id, 'number' => $i++, 'name' => (string) $delivery->title, 'description' => strip_tags((string) $delivery->description), 'amountFrom' => round((double) $delivery->price, 2), 'amountTo' => round((double) $delivery->price, 2)); } } } } //PayqrLog::log("Передаем варианты доставок"); //PayqrLog::log(print_r($delivery_cases, true)); \frontend\models\InvoiceTable::updateAll(['data' => json_encode($delivery_cases)], 'invoice_id = :invoice_id', [':invoice_id' => $this->invoiceId]); $this->invoice->setDeliveryCases($delivery_cases); }