Jump to content

Recommended Posts

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

Есть готовый файл классов для работы с 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()

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

Link to post
Share on other sites

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

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

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

Обидно :( :(

В Вашей теме нет конкретного вопроса, на который можно ответить... А так там просто: у меня есть код - что с ним дальше делать...
Link to post
Share on other sites
  • 3 weeks later...

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

Если вы к примеру хотите вывести города в корзине, открываем 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 нету, что бы что-то пробовать, да и не интересна мне УкрПочта :)

Link to post
Share on other sites

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

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

 

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

Link to post
Share on other sites

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

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

 

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

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

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

Link to post
Share on other sites

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

Рабочий.

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

Link to post
Share on other sites

Рабочий.

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

 

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

Link to post
Share on other sites

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

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

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

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

 

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

Link to post
Share on other sites

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

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

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

 

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

 

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

Link to post
Share on other sites
  • 3 weeks later...

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

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

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

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

 

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

 

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

 

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

Link to post
Share on other sites
  • 7 months later...

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

Принцип такой: В поле таблицы заказов добавил поле с номером ТТН(это номер руками вбивает администратор после отправки груза), и в шаблоне статуса заказа админской части, и в шаблоне статуса заказа для пользователя выводится статус посылки по этому ТТН, полученный по 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}

Вроде бы все.

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

 

Link to post
Share on other sites
  • 1 year later...

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

 

 

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 и тот откуда эта ф-я вызывается, прикрепите файл.

Link to post
Share on other sites

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

 

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

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

OrderView.php

NP.php

Edited by Wallkar
Link to post
Share on other sites

 

в  файл 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));
Link to post
Share on other sites

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

 

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

Link to post
Share on other sites

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

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

 

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

 

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

'NP' => 'novaposhta'

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

Edited by mishanya
Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...