Automatické načtení sídla firmy a verifikace DIČ (VAT) pro celou EU
Minulý rok jsem publikoval krátký článek ohledně automatické načtení sídla české firmy a DIČ podle zadaného IČ z ARES XML pomocí PHP a jQuery. Uvedenou službu je možné snado rozšířit na celou EU pomocí webové služby dostupné na adrese ec.europa.eu. Tato službá má totiž veřejně dostupné WSDL a pomocí SOAP klienta ji snadno můžete dotazovat.
Zjednodušený kód produkující stejný výstup jako dříve odkazovaný skript pro ARES může vypadat takto - vstupem je dvouznakový kód země a IČ (přesněji DIČ bez počátečního kódu země, což v praxi bývá IČ):
<?php
header("Content-Type: application/json; charset=UTF-8");
$a = array();
try {
$ic = $_REQUEST['ic']; // IČ
$country = $_REQUEST['country']; // Country code
$soap = new SoapClient(
'http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl');
$params = array('countryCode' => $country, 'vatNumber' => $ic);
$result = $soap->checkVatApprox($params);
if (!$result->valid) {
$a['stav'] = 'DIČ '.$country.$ic.' nebylo nalezeno';
} else {
$a['ic'] = strval($result->vatNumber);
$a['dic'] = $country.$a['ic'];
$a['firma'] = strval($result->traderName);
if (!$result->traderCity && $result->traderAddress) {
$t = explode("\n",$result->traderAddress);
$result->traderStreet = $t[0];
$result->traderCity = $t[1];
$result->traderPostcode = $t[2];
}
$a['ulice'] = strval($result->traderStreet);
$a['mesto'] = strval($result->traderCity);
$a['psc'] = strval($result->traderPostcode);
$a['stav'] = 'ok';
}
} catch (Exception $e) {
$a['stav'] = 'EC služba právě není dostupná';
}
echo json_encode($a);
?>
A výstupem třeba pro Mladá fronta a.s. je takovýto JSON:
{
"ic":"49240315",
"dic":"CZ49240315",
"firma":"Mlad\u00e1 fronta a.s.",
"ulice":"Mezi Vodami 1952\/9",
"mesto":"PRAHA 12 - MOD\u0158ANY",
"psc":"143 00 PRAHA 412",
"stav":"ok"
}
(PHP) den nemá 86 400 sekund?
Víte kolik má den sekund? Občas jsem viděl v PHP toto počítat jako 24 (hodin) * 60 (minut) * 60 (sekund). Nefunguje to.
setlocale(LC_ALL, "czech");
date_default_timezone_set("Europe/Paris");
function p($t) {
$d = getdate( $t );
echo $d['mday'],' ';
}
$o = 24*60*60; // 86 400
$t = mktime(0,0,0,10,29,2011);
p($t);
for ($i = 1; $i<=4; $i++) {
$t += $o;
p($t);
}
Vypíše:
29 30 30 31 1
Automatické načtení sídla firmy a DIČ podle zadaného IČ (ARES XML) pomocí PHP a jQuery
V eshopu zaměřeném na firemní zákazníky můžete těmto usnadnit nákup a prvotní registraci tím, že podle zadaného IČ načtete kompletní informace o sídle a DIČ z databáze ARES. MFČR ji poskytuje jako webovou službu vracející přehledný XML feed.
Implementace s pomocí jQuery je velice jednoduchá, stačí si vytvořit JSON feed reagující na AJAXový požadavek pod názvem ares.php:
<?php
header("Content-Type: application/json; charset=UTF-8");
define('ARES','http://wwwinfo.mfcr.cz/cgi-bin/ares/darv_bas.cgi?ico=');
$ico = intval($_REQUEST['ico']);
$file = @file_get_contents(ARES.$ico);
if ($file) $xml = @simplexml_load_string($file);
$a = array();
if ($xml) {
$ns = $xml->getDocNamespaces();
$data = $xml->children($ns['are']);
$el = $data->children($ns['D'])->VBAS;
if (strval($el->ICO) == $ico) {
$a['ico'] = strval($el->ICO);
$a['dic'] = strval($el->DIC);
$a['firma'] = strval($el->OF);
$a['ulice'] = strval($el->AA->NU).' '.strval($el->AA->CO);
$a['mesto'] = strval($el->AA->N);
$a['psc'] = strval($el->AA->PSC);
$a['stav'] = 'ok';
} else
$a['stav'] = 'IČ firmy nebylo nalezeno';
} else
$a['stav'] = 'Databáze ARES není dostupná';
echo json_encode($a);
?>
Rychlý export HTML stránky do PDF v PHP
Pokud potřebujete rychle vytvořit z HTML stránky PDF soubor a nabídnout jej ke stažení či poslat jej emailem v PHP, existuje na to výborná knihovna mPDF. Podporuje zpracování řady formátovacích prvků v CSS, nemusíte tedy HTML stránku či layout nijak speciálně upravovat.
Pokud máte třeba fakturu v eshopu připravenou jako HTML, je její převod do PDF otázkou pár řádků kódu:
require("mpdf/mpdf.php");
$mpdf = new mPDF('utf-8','A4');
$mpdf->useOnlyCoreFonts = true;
$mpdf->SetDisplayMode('fullpage');
$mpdf->SetAutoFont(0);
// CSS soubor
$stylesheet = file_get_contents('faktura.css');
// faktura v HTML (PHP, atd.)
$html = file_get_contents('faktura.html');
$mpdf->WriteHTML($stylesheet,1);
$mpdf->WriteHTML($html,2);
$name = "danovy-doklad.pdf";
$mpdf->Output($name,"D"); // download
Rychlý export databázové tabulky do Excelu (2007/2010) v PHP
Pokud potřebujete rychle exportovat nějaká data - tabulku či VIEW - z MySQL databáze do Excelu, je to v PHP velice snadné díky PHPExcel knihovně na Codeplexu. Kromě moderního XLSX umí tato knihovna i XLS, PDF, CSV a další formáty.
Tento jednoduchý skript vezme VIEW v MySQL databázi (v tomto případě čtenost článků, které nějak souvisí s Microsoftem), vytvoří z nich Excelovský soubor, a nabídne jej ke stažení v Excel 2010 formátu.
class createXLSX {
var $xlsxrow = 1;
var $xlsxcolumn = 1;
var $maxcolumn = 0;
function getColumn($column) {
if ($this->maxcolumn < $column)
$this->maxcolumn = $column;
if ($column > 26)
return chr(ord('A') + floor(($column - 1)/26) - 1) . chr(ord('A') + ($column % 26) - 1);
else
return chr(ord('A') + $column - 1);
}
function writeRow($x, $data, $bold = false) {
$i = 0;
foreach ($data as $s) {
$c = $this->getColumn($this->xlsxcolumn + $i++).strval($this->xlsxrow);
$x->setActiveSheetIndex(0)->setCellValue($c,$s);
if ($bold)
$x->getActiveSheet()->getStyle($c)->getFont()->setBold(true);
}
$this->xlsxrow++;
}
}
Dotaz: Skloňování a synonyma (v PHP)
Pro jeden projekt potřebuji získat pro každé slovo nejen databázi všech jeho možných tvarů, ale i synonyma. Takže třeba pro slovo "zelená" získat i tvary "zelený", "zelené" a další, pro slovo "gauč" získat ekvivalentní "sedací souprava". Potřeboval bych ideálně poznat i kořen slova.
Zkoušel jsem pspell_suggest a podobné funkce v PHP, ale jsou zcela nespolehlivé, české slovníkové podklady pspellu jsou strašné.
Teoreticky by šel vzít slovník třeba z OpenOffice.org, převést jej do databázové podoby a používat alespoň pro ona synonyma.
Řešil jste někdo podobný problém?
Automatické ukládání a obnova libovolných HTML formulářů pomocí jQuery
Pro jednoho klienta dodáváme analyticky i programátorsky hodně zajímavý projekt - Monitoring druhů. Jedná se o sledování parametrů u stovek druhů, přičemž každý druh má nejen velice rozsáhlou, ale také rozdílnou množinu často unikátních parametrů. Realizace je provedena pomocí uživatelské definice formulářů administrátorem systému. Tyto formuláře používají před-definované datové typy, číselníky, našeptávače, subformuláře (včetně neomezeného zanořování) a další prvky. Veškeré hodnoty mohou mít jak 1:1, tak 1:N relace, mohou být povinné či nepovinné. Data z těchto formulářů se ukládají jako XMLType do Oracle 10g.
Samotné řešení XML formulářů je tak zajímavé, že bude předmětem několika dalších článků, ale v tomto budu psát o něčem jiném - automatickém ukládání těchto formulářů při jejich editaci uživatelem.
Poslání embedované fotky v HTML emailu
Pokud posíláte email s obrázky klientům, máte v zásadě tři možnosti:
- odkázat se v HTML na váš externí server, čímž sice zmenšíte velikost emailu, ale email aplikace externí obrázky většinou blokují (takže se stránka zobrazí neúplná)
- dát obrázek jako přílohu emailu, jenže to také vyžaduje aktivitu klienta (kliknutí na obrázek)
- embedovat obrázky přímo do HTML
Ta poslední metoda je často ideální, protože typická emailová aplikace takovýto obrázek zobrazí bez jakékoliv požadované aktivity na straně příjemce.
Pro snadnou tvorbu takovéhoto emailu je možné použít třeba knihovnu phpMailer:
require("class.phpmailer.php");
$mail = new PHPMailer();
$mail->IsMail();
$mail->From="vas email";
$mail->FromName="vase jmeno";
$mail->AddAddress("prijemce email");
$mail->Subject = "Subjekt emailu";
$mail->IsHTML(true);
$mail->AddEmbeddedImage(
'/dir/soubor.jpg', // lokalni soubor
'logoimg', // ID shodné s HTML
'fotografie.jpg', // zobrazený název souboru
'base64',
'image/jpeg'); // MIME typ
$mail->Body = "<p><img src=\"cid:logoimg\" /></p>";
$mail->AltBody="Fotografie";
$mail->Send();
Základem je uvedení anchoru v HTML pro daný obrázek, zde cid:logoimg, na který se poté odkážete v metodě AddEmbeddedImage(). Důležité je také správné uvedení MIME Type (pátý parametr) a volitelné jméno souboru (třetí parametr).
PHP skript pro posílání SMS z sms.sluzba.cz
Téměř identická služba ke KlikniaVolej.cz je i sms.sluzba.cz. Posílání SMS (na základě dokumentace z tohoto PDF) přes tuto bránu můžete v PHP zajistit třeba následovně:
$action = 'send';
$body = 'Text SMS zpravy';
$vars = array(
'msg' => $body,
'msisdn' => $telefon,
'act' => $action,
'login' => $username,
'auth' => md5(md5($passwd).$username.$action.substr($body,0,31))
);
$data = http_build_query($vars);
$url = 'https://smsgateapi.sluzba.cz/apipost10/sms';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_TIMEOUT, 180);
curl_setopt($ch, CURLOPT_HEADER , false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER , true);
curl_setopt($ch, CURLOPT_VERBOSE , false);
curl_setopt($ch, CURLOPT_POST , true);
curl_setopt($ch, CURLOPT_POSTFIELDS , $data);
$response = curl_exec($ch);
curl_close($ch);
PHP skript pro posílání SMS z KlikniaVolej.cz
KlikniaVolej.cz je služba pod hlavičkou MAFRA a.s. (iDNES), která umožňuje posílat SMS přes jejich webovou bránu s tím, že dostupné je i API pro aplikační napojení. API je opravdu triviální, popsané je v tomto PDF, jedná se o prostý POST na dané URL s několika položkami.
Máte následující proměnné obsahující vaše údaje k přihášení:
$username = přihlašovací jméno
$passwd = přihlašovací heslo
$sender = vaše jméno
$telefon = číslo, na které chcete poslat SMS
Poté odešlete SMS pomocí CURL následovně:
srand((double)microtime()*1000000);
$id = strval(time()).rand(0, 999); // jedinečné ID
$vars = array(
'user' => $username,
'number' => $telefon,
'sender' => $sender,
'text' => "Text SMS zpravy",
'encoding' => 'ascii',
'test' => '0',
'id' => $id,
'hash' => sha1( $username . ':' . $id . ':' . sha1($passwd) ),
'flash' => '0'
);
$data = http_build_query($vars);
$url = 'http://kavremote.mobil.cz:80/smsgateway.pl';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_TIMEOUT, 180);
curl_setopt($ch, CURLOPT_HEADER , false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER , true);
curl_setopt($ch, CURLOPT_VERBOSE , false);
curl_setopt($ch, CURLOPT_POST , true);
curl_setopt($ch, CURLOPT_POSTFIELDS , $data);
$response = curl_exec($ch);
curl_close($ch);
Starší články
- 05.12.2009 Hostujeme PHP aplikace na Windows (namísto Linuxu) [komentáře: 5] 18.12.09 23:27
- 27.11.2009 SQL Server 2008 - dotaz pro vypsání parametrů tabulky [komentáře: 2] 29.11.09 10:12
- 22.11.2009 WinCache - výborný PHP akcelerátor od Microsoftu [komentáře: 2] 24.11.09 21:04
- 17.09.2009 Zend Server (PHP) na Windows s SQL Server 1.1 driverem, kompilovaný pomocí VC8 (Visual Studio 2005) [komentáře: 1] 18.09.09 20:34
- 05.05.2009 Jak migrovat z MySQL na Oracle 10g databázi + PHP [komentáře: 2] 18.05.09 21:34
- 23.03.2009 Programujete v PHP? Zajděte si na školení Nette! [komentáře: 2] 25.03.09 22:19
- 22.01.2009 10 bodů jak migrovat z MySQL na SQL Server 2008 + IIS7 + PHP [komentáře: 11] 24.01.09 02:24
- 07.01.2009 Použijte DB konečně naplno - zapomeňte na DB layer [komentáře: 27] 12.01.09 08:14
- 06.01.2009 Vista x64: SQL Server 2008 driver pro PHP na IIS7 [komentáře: 15] 07.01.09 10:06
- 16.07.2008 PremiumSoft Navicat - nejlepší správa MySQL DB [komentáře: 39] 17.07.08 12:40
- 24.04.2008 Částečné vyhodnocení podmínek v PHP [komentáře: 8] 24.04.08 14:52
- 27.01.2008 Jak si smazat celodenní práci [selfdestruction] [komentáře: 17] 03.03.09 06:52
- 29.07.2007 Instalace Apache, MySQL a PHP na Windows [komentáře: 22] 02.03.12 17:25
- 29.04.2007 SQLite3 a pár tipů pro vaše aplikace [komentáře: 1] 07.02.10 22:10
- 27.03.2007 PHP vytváří i dnes banda pitomců
- 16.03.2007 bCompiler - kompilace a ochrana PHP kódu zdarma
- 12.03.2007 Základy SQL, část 2.
- 15.02.2007 Dostupnost x64 verzí Apache, MySQL a PHP pro Windows [komentáře: 1] 09.02.08 10:35
- 24.01.2007 Jak funguje mkdir / chmod v PHP [komentáře: 25] 11.05.09 16:48
- 10.10.2006 Jak na download PDF souboru v PHP? [komentáře: 13] 22.11.06 11:06


