UnifyUnits Developers

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"