示例#1
0
 /**
  * 
  * @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;
 }
示例#2
0
 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);
 }