PHP biblioteka
Pašto kodų paieška iš jūsų sistemos serverio: el. parduotuvės, užsakymų ar sandėlio programos, CRM. Vienas failas be priklausomybių, veikia ir senesniuose serveriuose.
Apie biblioteką
Biblioteka skirta paieškai serverio pusėje: kai pašto kodą reikia nustatyti užsakymui, sąskaitai ar siuntai. Pasiūlymams formoje, kol vartotojas rašo, naudokite JavaScript biblioteką.
- • Adresas → pašto kodas, pasiūlymai, struktūrinė paieška, adresai pagal pašto kodą ar koordinates.
- • Lietuvos, Latvijos ir Estijos adresai.
- • Viena klaidų klasė su aiškiais kodais.
Diegimas
Atsisiųskite archyvą ir įkelkite PostAPIClient.php į savo projektą:
require 'PostAPIClient.php';
Arba per Composer – archyve yra composer.json (paketas postapi/client):
{
"repositories": [{ "type": "path", "url": "lib/postapi-php-client" }],
"require": { "postapi/client": "^1.0" }
}Greitas startas
require 'PostAPIClient.php';
$postapi = new PostAPI\Client('JŪSŲ_API_RAKTAS');
$result = $postapi->address('Gedimino pr. 9, Vilnius');
echo $result->postcode(); // LT-01103
echo $result->first()['city']; // VilniusPaieškos metodai
address()Laisvo teksto adresas: „Gedimino pr. 9, Vilnius“, „Kauno m. Savanorių pr. 120“.
autocomplete()Pasiūlymai nebaigtam tekstui (vartotojas dar rašo): „Savanor“, „Gedimino pr 9“.
search()Struktūrinė paieška pagal atskirus laukus: city, street, house_number, municipality.
postcode()Adresai pagal pašto kodą: „LT-01103“ arba „01103“.
nearby()Artimiausi adresai pagal koordinates (150–10 000 m). Įrašuose – atstumas metrais (distance).
request()Bet kokia užklausa su API parametrais (žr. API dokumentaciją).
$postapi->autocomplete('Savanor', ['limit' => 5]);
$postapi->search([
'city' => 'Vilnius',
'street' => 'Gedimino pr.',
'house_number' => '9',
]);
$postapi->postcode('LT-01103');
$postapi->nearby(54.6855, 25.2873, 300);
$postapi->address('Brīvības iela 100, Rīga', ['country' => 'LV']);Rezultatas
found()Ar rastas bent vienas adresas. Nieko neradus – ne klaida.
first()Pirmas (tinkamiausias) įrašas.
postcode()Pirmo įrašo pašto kodas: „LT-01103“, su postcode(false) – „01103“.
rows()Visi įrašai šiame puslapyje. Rezultatą galima naudoti ir foreach.
total()Visų rastų įrašų skaičius.
page(), pages()Dabartinis puslapis ir puslapių skaičius.
apartment()Butas, atpažintas adrese: „Laisvės pr. 44-78“ → „78“.
freeTier()Nemokamas planas – svetainėje privaloma nuoroda į PostAPI.lt.
$result = $postapi->autocomplete('Laisvės pr. 44-78');
foreach ($result as $row) {
echo $row['address'], ', ', $row['city'], ' ', $row['postcode_full'], "\n";
}
echo $result->apartment(); // 78Nustatymai
countryNumatyta šalis visoms užklausoms: LT, LV arba EE.
timeoutUžklausos laiko limitas sekundėmis.
connectTimeoutPrisijungimo laiko limitas sekundėmis (cURL).
transportauto – cURL, o jei jo nėra – file_get_contents; galima nurodyti curl arba stream.
apiUrlAPI adresas.
$postapi = new PostAPI\Client('JŪSŲ_API_RAKTAS', [
'country' => 'LV',
'timeout' => 5,
]);Klaidos
Visos klaidos – viena išimtis PostAPI\PostAPIException. Tipas – getType(), API klaidos kodas – getCode().
try {
$result = $postapi->address($_POST['address']);
} catch (PostAPI\PostAPIException $e) {
if ($e->getType() === 'API' && $e->getCode() === 1002) {
// viršytas užklausų limitas
}
error_log($e->getMessage());
}APIAPI klaida, getCode() – klaidos kodas: 1002 – viršytas limitas, 1003 – blogas raktas, 1006 – nepalaikoma šalis.
NETWORKNepavyko prisijungti prie API.
TIMEOUTViršytas laiko limitas.
HTTP, INVALID_RESPONSENetikėtas API atsakymas.
CONFIGNenurodytas API raktas ar netinkamas viešasis raktas.
Token'as JS bibliotekai
Jei svetainėje naudojate JavaScript biblioteką, API rakto puslapyje rodyti nereikia: jūsų serveris sukuria laikiną token'ą (galioja 180 min.).
require 'PostAPIClient.php';
header('Content-Type: application/json');
echo json_encode([
'token' => PostAPI\Client::createToken('JŪSŲ_API_RAKTAS', file_get_contents('postapi-public.pem')),
]);PostAPI.attach("#address", {
tokenUrl: "/postapi-token.php",
fields: { postcode: "#postcode" }
});Reikalavimai
- • PHP 5.6–8.4 – be įspėjimų ir naujose versijose.
- • cURL arba, jei jo nėra, allow_url_fopen (file_get_contents).
- • OpenSSL – tik token'ams JS bibliotekai.
- • Veikia su framework'ais, kurie įspėjimus verčia išimtimis (Laravel, Symfony ir kt.).
Naudojant nemokamą API raktą, svetainėje ar aplikacijoje privaloma nuoroda į PostAPI.lt (žr. API dokumentaciją).