PHP
Prefer the official Laravel client for PHP apps. It sends decimal strings
so PHP floats do not alter precision. Package:
unifyunits/unifyunits-laravel; source:
unifyunits-php. Requires PHP 8.2+ and Laravel 10-13.
The client covers convert, batch, categories, units, and health. For
parse, normalize, currency, substances, unit price,
decimals, and
format_locale, use raw HTTP (see
API reference).
Install
The package is not on Packagist yet. Add the GitHub repository to Composer,
install the v0.1 release, then publish the
config:
bash
composer config repositories.unifyunits-laravel vcs https://github.com/unifyunits/unifyunits-php
composer require unifyunits/unifyunits-laravel:^0.1
php artisan vendor:publish --tag=unifyunits-config
bash
# .env
UNIFYUNITS_BASE_URL=https://api.unifyunits.com
UNIFYUNITS_API_KEY=uu_live_your_key
UNIFYUNITS_TIMEOUT=10
Convert with the SDK
php
<?php
use UnifyUnits\Laravel\Contracts\UnifyUnitsClient;
class QuoteController
{
public function __invoke(UnifyUnitsClient $units)
{
$conversion = $units->convert('1', 'ft', 'm');
return $conversion['data']['result'];
// ['value' => '0.3048', 'unit' => 'm']
}
}
Or via the facade:
php
<?php
use UnifyUnits\Laravel\Facades\UnifyUnits;
$result = UnifyUnits::convert('1', 'ft', 'm');
echo $result['data']['result']['value']; // "0.3048"
Batch with the SDK
php
<?php
use UnifyUnits\Laravel\Facades\UnifyUnits;
$result = UnifyUnits::convertBatch([
['value' => '10', 'from' => 'kg', 'to' => 'lb'],
['value' => '100', 'from' => 'km', 'to' => 'mi'],
]);
foreach ($result['data'] as $item) {
if ($item['status'] === 'success') {
echo "Item {$item['index']}: {$item['result']['value']} {$item['result']['unit']}\n";
} else {
echo "Item {$item['index']} failed: {$item['error']['code']}\n";
}
}
Same calls with raw HTTP
Use plain PHP cURL when you are not on Laravel, or when debugging the OpenAPI contract.
php
<?php
$url = 'https://api.unifyunits.com/v1/convert?value=1&from=ft&to=m';
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('UNIFYUNITS_API_KEY'),
],
CURLOPT_TIMEOUT => 10,
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($status < 200 || $status >= 300) {
$error = json_decode($response, true, 512, JSON_THROW_ON_ERROR);
throw new RuntimeException($error['error']['code'] . ': ' . $error['error']['message']);
}
$data = json_decode($response, true, 512, JSON_THROW_ON_ERROR);
echo $data['data']['result']['value']; // "0.3048"