Перейти к содержанию
Официальный форум поддержки Simpla

Рекомендуемые сообщения

Здравствуйте. 

Есть готовый файл классов для работы с API запросами 

http://pastebin.com/mWMRy4eF

1. Создаем файл с классом и кидаем в 

api/novaposhta.php 

2. Далее нужно зарегистрировать свойство и класс.

Открываем api/Simpla.php и там где

// Свойства - Классы API
    private $classes = array(
        'config'     => 'Config',
        'request'    => 'Request',
        'db'         => 'Database',
.....

 

Добавляем 

 

 
'NP'    =>  'novaposhta'



По сути класс уже есть. Но вопрос: Каким запросом вызвать функцию в шаблоне?

Например

 

/**
      * Запрос на получение списка населённых пунктов, в которых есть склады Новой почты
      */
public static function city()

Давайте вместе внедрим это для общего блага ёмаё.

Ссылка на сообщение
Поделиться на другие сайты

Уважаемые программисты

Вот в такой бредовой теме, где человек не знает что такое html css - вы активничаете и отписываетесь

А вот в моей теме, где действительно нужна ваша помощь в smarty php - никто помочь не хочет

Обидно :( :(

В Вашей теме нет конкретного вопроса, на который можно ответить... А так там просто: у меня есть код - что с ним дальше делать...
Ссылка на сообщение
Поделиться на другие сайты
  • 3 недели спустя...

А в чем собственно проблема? Класс уже есть, написан...

Если вы к примеру хотите вывести города в корзине, открываем CartView.php и передаем в шаблон:

$this->design->assign('citys', $this->NP->cyty());

а далее в шаблоне разбираем циклом:

Список городов: 
{foreach $citys as $city}

{$city->xxx}, 

{/foreach}

а вот уже xxx это уже то, что возвращает city()...

 

Я так понял, что возвращает она всегда xml, он потом интерпретирует ее в объект.

 

Попробуй в том же CartView.php отправь в шаблон регультат var_dump того, что вернет city(), а в шаблоне просто выведи посмотреть.

У меня просто api_key нету, что бы что-то пробовать, да и не интересна мне УкрПочта :)

Ссылка на сообщение
Поделиться на другие сайты

Просто выводить данные о состоянии груза не интересно.

Было бы интересно, если бы скрипт передавал данные о габарите и весе груза с описания на сайте в базы новой почты, так бы экономилось время на заполнении деклараций.

 

А просто показывать где груз не особо то и интересно, особенно с учетом того, что он обычно за сутки доезжает до места получения

Ссылка на сообщение
Поделиться на другие сайты

Просто выводить данные о состоянии груза не интересно.

Было бы интересно, если бы скрипт передавал данные о габарите и весе груза с описания на сайте в базы новой почты, так бы экономилось время на заполнении деклараций.

 

А просто показывать где груз не особо то и интересно, особенно с учетом того, что он обычно за сутки доезжает до места получения

Вообще то сабж о выводе все отделений НП в корзине заказа в строке "Адрес"

О чем вы - я не знаю.

Ссылка на сообщение
Поделиться на другие сайты

Vladq, а в файле классов ключ к API от балды или рабочий?

Рабочий.

И было бы хорошо чтобы вы приняли участие в сабже, а не обошлись сам по себе или "моя хата скраю" как у нас принято.

Ссылка на сообщение
Поделиться на другие сайты

Рабочий.

И было бы хорошо чтобы вы приняли участие в сабже, а не обошлись сам по себе или "моя хата скраю" как у нас принято.

 

можете мне в icq стукнуть 296892275

Ссылка на сообщение
Поделиться на другие сайты

Вообще то сабж о выводе все отделений НП в корзине заказа в строке "Адрес"

О чем вы - я не знаю.

Ммм. Вот сейчас я уже вник что это. Очень хорошее решение.

 А писал я о api Новой Почты, для отслеживания посылок. 

 

Сейчас в процессе изучения существующих наработок с api новой почты, странно что никто не реализовал автопросчет стоимости, заполнение электронных деклараций непосредственно из админки симплы. Мне например иногда не в кайф в очереди сидеть на новой почте, а так пришел с уже наклеенными декларациями и минимум на одну очередь меньше стоять.

Ссылка на сообщение
Поделиться на другие сайты

И сразу вопрос по другим функциям, которые вы когда-то озвучивали:

http://forum.simplacms.ru/topic/3008-integraciya-s-ukrainskimi-pochtovimi-sluzhbami/

"- К заказу грамотно продумать и прикрутить номер ТТН, для онлайн мониторинга статуса посылки заказчиком.
- Ну и очень бы хотелось реализовать полу-автоматическое СМС-информирование того же ТТН, или трек-номера, на телефон заказчика, через любой доступный SMS шлюх с открытым API. Уж ооочень много драгоценного времени занимает ручная SMS рассылка номеров ТТН клиентам."

 

Что-то из этого было реализовано?

 

Устал в ручную писать sms с номером декларации, да и 60% моих товаров имеют одинаковую стоимость доставки, что наводит на мысль о каком-то ускорении составления деклараций Новой Почты через API 

Ссылка на сообщение
Поделиться на другие сайты
  • 3 недели спустя...

И сразу вопрос по другим функциям, которые вы когда-то озвучивали:

http://forum.simplacms.ru/topic/3008-integraciya-s-ukrainskimi-pochtovimi-sluzhbami/

"- К заказу грамотно продумать и прикрутить номер ТТН, для онлайн мониторинга статуса посылки заказчиком.

- Ну и очень бы хотелось реализовать полу-автоматическое СМС-информирование того же ТТН, или трек-номера, на телефон заказчика, через любой доступный SMS шлюх с открытым API. Уж ооочень много драгоценного времени занимает ручная SMS рассылка номеров ТТН клиентам."

 

Что-то из этого было реализовано?

 

Устал в ручную писать sms с номером декларации, да и 60% моих товаров имеют одинаковую стоимость доставки, что наводит на мысль о каком-то ускорении составления деклараций Новой Почты через API 

 

Именно так у меня выглядит СМС информирование.

Ссылка на сообщение
Поделиться на другие сайты

Кстати, может кому пригодится.

Пока самая дешевая смс рассылка в Украине на этот момент

API sms-sms-.com.ua

0,13 коп. за СМС по Украине

http://pastebin.com/Qd54WGAH

Ссылка на сообщение
Поделиться на другие сайты
  • 7 месяцев спустя...

Итак пишу, как сделал у себя:

Принцип такой: В поле таблицы заказов добавил поле с номером ТТН(это номер руками вбивает администратор после отправки груза), и в шаблоне статуса заказа админской части, и в шаблоне статуса заказа для пользователя выводится статус посылки по этому ТТН, полученный по API Новой Почты.

 

В папке api/ создаем файл NP.php c содержимым:

<?php
  
require_once('Simpla.php');

 class NP extends Simpla{
 	/* Город отправителя */
	 public  $out_city='Киев';
 	/* Отправитель */	 
	 public  $out_company='ПП Петров';
 	/* Склад */	 
	 public  $out_warehouse='1';	 
 	/* Представитель отправителя */	 
	 public  $out_name='Петров Иван Иваныч';	 
 	/* Телефон отправителя */	 
	 public  $out_phone='0671234567';	 
 	/* API ключ */	 
	 public  $api_key='0166186b16d0e49771a0aebf25ac4770';	 
 	/* Описание посылки */	 
	 public  $description='Взуття';
 	/* Описание упаковки */	 
	 public  $pack='Коробка';	 
	 	 
	 /**
	  * Функция отправки запроса на сервер Новой почты
	  	$xml — запрос
	  */
	  public function send($xml){
		$ch = curl_init();
		curl_setopt($ch, CURLOPT_URL, 'http://orders.novaposhta.ua/xml.php');
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
		curl_setopt($ch, CURLOPT_HTTPHEADER, Array("Content-Type: text/xml"));
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
		curl_setopt($ch, CURLOPT_POST, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
		$response = curl_exec($ch);
		curl_close($ch);
		return $response;
	 }
	 
	 /**
	  * Запрос на расчёт стоимости доставки 
	  	$to_city — город получатель
	  	$weight — вес
	  	$pub_price — заявленная стоимость
	  	$height — высота коробки	  		  		  	
	  	$width — ширина коробки	  		  		  	
	  	$depth — длинна коробки	  		  		  		  	
	  */
	 public  function price($to_city,$weight,$pub_price,$date,$height=0,$width=0,$depth=0){
		$xml='<?xml version="1.0" encoding="utf-8"?>
		<file>
		<auth>'.NP::$api_key.'</auth>
		<countPrice>
        	<senderCity>'.NP::$out_city.'</senderCity>
        	<recipientCity>'.$to_city.'</recipientCity>
        	<mass>'.$weight.'</mass>
        	<height>'.$depth.'</height>
        	<width>'.$width.'</width>
        	<depth>'.$depth.'</depth>
        	<publicPrice>'.$pub_price.'</publicPrice>
        	<deliveryType_id>4</deliveryType_id>
        	<floor_count>0</floor_count>
        	<date>'.$date.'</date>
        	</countPrice>
        </file>';
		
		$xml = simplexml_load_string(NP::send($xml));
		return $xml->cost;
	} 	
	 /**
	  * Запрос на создание декларации на отправку 
	  	$order_id — номер заказа на вашем сайте (для вашего удобства)
	  	$city — город получения
	  	$warehouse — номер склада получения
	  	$name — имя получателя	  		  		  	
	  	$surname — фамилия получателя	  		  		  	
	  	$phone — телефон получателя	  		  		  		  	
	  	$weight — вес посылки	  		  		  	
	  	$pub_price — заявленная стоимость	  		  		  	
	  	$date — дата отправки
	  	$payer — плательщик (1 — получатель, 0 — отправитель, 2 — третья сторона)	  	
	  */
	 public  function ttn($order_id,$city,$warehouse,$name,$surname,$phone,$weight,$pub_price,$date,$payer=0){
		$xml='<?xml version="1.0" encoding="utf-8"?>
		<file>
		<auth>'.NP::$api_key.'</auth>
		<order
	        order_id="'.$order_id.'"
	
	        sender_city="'.NP::$out_city.'"
	        sender_company="'.NP::$out_company.'"
	        sender_address="'.NP::$out_warehouse.'"
	        sender_contact="'.NP::$out_name.'"
	        sender_phone="'.NP::$out_phone.'"
	
	        rcpt_city_name="'.$city.'"
	        rcpt_name="ПП '.$surname.'"
	        rcpt_warehouse="'.$warehouse.'"
	        rcpt_contact="'.$name.'"
	        rcpt_phone_num="'.$phone.'"
	        
	        pack_type="'.NP::$pack.'"
	        description="'.NP::$description.'"
	
	        pay_type="1"
	        payer="'.$payer.'"
	
	        cost="'.$pub_price.'"
	        date="'.$date.'" 
	        weight="'.$weight.'">
	        <order_cont
            	cont_description="'.NP::$description.'" />
            </order>
        </file>';
		
		$xml = simplexml_load_string(NP::send($xml));
		return array('oid'=>$order_id,'ttn'=>trim($xml->order->attributes()->np_id));
	} 
	
	 /**
	  * Запрос на удаление декларации из базы Новой почты
	  	$ttn — номер декларации, которую нужно удалить
	  */
	public  function remove($ttn){
		$xml='<?xml version="1.0" encoding="utf-8"?>
		<file>
		<auth>'.NP::$api_key.'</auth>
		<close>'.$ttn.'</close>
		</file>';
		
		$xml = simplexml_load_string(NP::send($xml));
	}
	 /**
	  * Запрос на печать маркировок для декларации (производит перенаправление на страницу печати)
	  	$ttn — номер декларации, которую нужно напечатать
	  */	
	public  function printit($ttn){
		header('location: http://orders.novaposhta.ua/pformn.php?o='.$ttn.'&num_copy=4&token='.NP::$api_key);
	}
	
	
	 /**
	  * Запрос на получение списка складов Новой почты для определённого города (или полный список, если город не указан)
	  	$filter — город, по которому нужно отфильтровать список складов Новой почты
	  */
	public  function warenhouse($filter=false){
		$xml='<?xml version="1.0" encoding="utf-8"?>
		<file>
		<auth>'.NP::$api_key.'</auth>
		<warenhouse/>';
		if($filter){
			$xml.='<filter>'.$filter.'</filter>';
		}
		$xml.='</file>';
		
		$xml = simplexml_load_string(NP::send($xml));
		return($xml);
	}
	
	
	 /**
	  * Запрос на получение списка населённых пунктов, в которых есть склады Новой почты
	  */	
	public function city(){
		$xml='<?xml version="1.0" encoding="utf-8"?>
		<file>
		<auth>'.NP::$api_key.'</auth>
		<city/>
		</file>';
		
		$xml = simplexml_load_string(NP::send($xml));
		return($xml);
	}
	
	public function tracking($ttn){
	$xml='
	<?xml version="1.0" encoding="UTF-8"?>
	<file>
    <auth>'.$this->api_key.'</auth>
    <tracking>
       <barcode>'.$ttn.'</barcode>
    </tracking>
	</file>';
	$xml = simplexml_load_string($this->send($xml));
	//var_dump($xml);
	return($xml);
	
	}
	
		 
 }

Далее в таблицу s_orders, добавим поле:

Теперь в файле simpla/OrderAdmin.php
после кода:
$order->comment = $this->request->post('comment');

Добавим:

$order->delivery_number  = $this->request->post('delivery_number');

 

перед кодом:
$this->design->assign('purchases', $purchases);
        $this->design->assign('purchases_count', $purchases_count);
        $this->design->assign('subtotal', $subtotal);
        $this->design->assign('order', $order);

Добавляем:

//Статус по номеру ТТН из новой почты
		if ($order->delivery_number)
		{
		$this->design->assign('tracking', $this->np->tracking($order->delivery_number));
		}

В шаблоне: simpla/design/html/order.tpl

после:

		<li>
			<label class=property>Адрес <a href='http://maps.yandex.ru/' id=address_link target=_blank><img align=absmiddle src='design/images/map.png' alt='Карта в новом окне' title='Карта в новом окне'></a></label>
			<div class="edit_order_detail" style='display:none;'>
				<textarea name="address">{$order->address|escape}</textarea>
			</div>
			<div class="view_order_detail">
				{$order->address|escape}
			</div>
		</li> 

Добавляем:

<li>
			<label class=property>Номер посылки</label>
			<div class="edit_order_detail" style='display:none;'>
				<input name=" delivery_number" class="simpla_inp " type="text" value="{$order-> delivery_number|escape}" />
			</div>
			<div class="view_order_detail">
				{$order-> delivery_number|escape}
			</div>
		</li>
		
				<li>
			<label class=property>Статус посылки</label>
			<div class="view_order_detail">
				<b>{$tracking->document["status"]}</b>
			</div>
		</li> 

 

 

Далее, в файле view\OrderView.php:

После кода:

// Все валюты
		$this->design->assign('all_currencies', $this->money->get_currencies());

Добавим:

// Получим статус посылки по номеру ТТН от Новой почты
        
 $this->design->assign('tracking', $this->np->tracking($order->delivery_number));

И наконец в шаблоне пользователя design/вашшаблон/order.tpl

после:

{if $order->name}
	<tr>
		<td>
			Имя
		</td>
		<td>
			{$order->name|escape}
		</td>
	</tr>
	{/if}

Добавляем инфу о номере и статусе посылки:

{if $order->delivery_number}
	<tr>
		<td>
			Номер посылки
		</td>
		<td>
			{$order->delivery_number|escape}
			<br />
			Статус в Новой Почте: <br />
			<b>{$tracking->document["status"]}</b>
		
		</td>
	</tr>
	{/if}

Вроде бы все.

Если что забыл пишите.

 

Ссылка на сообщение
Поделиться на другие сайты
  • 1 год спустя...

Не работает код, после завершения заказа ошибка:

 


Fatal error: Call to a member function tracking() on a non-object in /home/virtwww/w_shop_113c0b12/http/view/OrderView.php on line 116

Ссылка на сообщение
Поделиться на другие сайты

Не работает код, после завершения заказа ошибка:

 

 

Fatal error: Call to a member function tracking() on a non-object in /home/virtwww/w_shop_113c0b12/http/view/OrderView.php on line 116

 

ошибка вам говорит что функция tracking не является объектом. нужно смотреть сам файл OrderView.php и тот откуда эта ф-я вызывается, прикрепите файл.

Ссылка на сообщение
Поделиться на другие сайты

в  файл OrderView.php  я добавлял только 

 

// Получим статус посылки по номеру ТТН от Новой почты

        
 $this->design->assign('tracking', $this->np->tracking($order->delivery_number));
 
все делал строго по инструкции, может что недоглядел.
 
 

OrderView.php

NP.php

Изменено пользователем Wallkar
Ссылка на сообщение
Поделиться на другие сайты

 

в  файл OrderView.php  я добавлял только 

 

// Получим статус посылки по номеру ТТН от Новой почты

        
 $this->design->assign('tracking', $this->np->tracking($order->delivery_number));
 
все делал строго по инструкции, может что недоглядел.

 

в api/Simpla.php класс NP зарегистрирован?

'NP'    =>  'novaposhta'

попробуйте еще обратиться к класу с большой буквы

$this->design->assign('tracking', $this->NP->tracking($order->delivery_number));
Ссылка на сообщение
Поделиться на другие сайты

Simpla.php у меня вобще небыло я его создавал по подобию https://github.com/pikusov/Simpla/blob/master/api/Simpla.php
и прописал   'NP' => 'novaposhta'

 

с большой буквы также писал, результат нулевой. У меня стойкое впечатления что я что-то не то делаю.

Ссылка на сообщение
Поделиться на другие сайты

Simpla.php у меня вобще небыло я его создавал по подобию https://github.com/pikusov/Simpla/blob/master/api/Simpla.php

и прописал   'NP' => 'novaposhta'

 

с большой буквы также писал, результат нулевой. У меня стойкое впечатления что я что-то не то делаю.

 

видимо у вас есть файл Newcms.php? тогда нужно добавить туда 

'NP' => 'novaposhta'

и вызывать как описано выше

Изменено пользователем mishanya
Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...