Page tree

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Where do we get this data from? A shop, such as shop 205909, is actually configured for a specific country and currency. A sample payload is illustrated below:

Code Block

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<shop xmlns:xlink="http://www.w3.org/1999/xlink"
      xmlns="http://api.spreadshirt.net"
      xlink:href="httphttps://api.spreadshirt.net/api/v1/shops/205909" id="205909">
    <user xlink:href="httphttps://api.spreadshirt.net/api/v1/users/40000" id="40000"/>
    <country xlink:href="httphttps://api.spreadshirt.net/api/v1/countries/1" id="1"/>
    <language xlink:href="httphttps://api.spreadshirt.net/api/v1/languages/1" id="1"/>
    <currency xlink:href="httphttps://api.spreadshirt.net/api/v1/currencies/1" id="1"/>
    ...
</shop>

The currency, such as currency 1 defines the currency symbol, the price pattern and the decimal count.

Code Block

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<currency xmlns:xlink="http://www.w3.org/1999/xlink"
          xmlns="http://api.spreadshirt.net"
          xlink:href="httphttps://api.spreadshirt.net/api/v1/currencies/1" id="1">
    <plain>EUR</plain>
    <isoCode>EUR</isoCode>
    <symbol>€</symbol>
    <decimalCount>2</decimalCount>
    <pattern>% $</pattern>
</currency>

The country, such as country 1 defines the thousands separator and the decimal point.

Code Block

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<country xmlns:xlink="http://www.w3.org/1999/xlink"
         xmlns="http://api.spreadshirt.net"
         xlink:href="httphttps://api.spreadshirt.net/api/v1/countries/1" id="1">
    <isoCode>DE</isoCode>
    <thousandsSeparator>.</thousandsSeparator>
    <decimalPoint>,</decimalPoint>
    <length>
        <unit>cm</unit>
        <unitFactor>1.0</unitFactor>
    </length>
    <currency xlink:href="httphttps://api.spreadshirt.net/api/v1/currencies/1" id="1"/>
</country>

Example

Code Block

<?php
    // This script shows you how to format prices using Spreadshirt API v1 and
    // Spreadshirt's shop, currency and country data.

    // 1. Get shop
    $shopUrl = "http://api.spreadshirt.net/api/v1/shops/205909";
    $ch = curl_init($shopUrl);
    curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HEADER, false);
    $result = curl_exec($ch);
    // Close the handle
    curl_close($ch);

    $shop = new SimpleXMLElement($result);
    $namespaces = $shop->getNamespaces(true);

    // 2. Get currency
    $attributes = $shop->currency->attributes($namespaces['xlink']);
    $currencyUrl = $attributes->href;
    $ch = curl_init($currencyUrl);
    curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HEADER, false);
    $result = curl_exec($ch);
    // Close the handle
    curl_close($ch);

    $currency = new SimpleXMLElement($result);

    // 3. Get country
    $attributes = $shop->country->attributes($namespaces['xlink']);
    $countryUrl = $attributes->href;
    $ch = curl_init($countryUrl);
    curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HEADER, false);
    $result = curl_exec($ch);
    // Close the handle
    curl_close($ch);

    $country = new SimpleXMLElement($result);

    // 4. calculate the price
    $price = formatPrice("19.3", $currency->symbol, $currency->decimalCount, $currency->pattern,
                    $country->thousandsSeparator, $country->decimalPoint);

    // 5. print the price
    echo '<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/></head><body>';
    echo $price;
    echo '</body></html>';
    
    function formatPrice($price, $symbol, $decimalCount, $pattern, $thousandsSeparator, $decimalPoint) {
        // formatting settings
        $price = "" . $price;

        // split integer from cents
        $centsVal = "";
        $integerVal = "0";
        if (strpos($price, '.') != -1) {
            $centsVal = "" .substr($price, strpos($price, '.') + 1, strlen($price) - strpos($price, '.') + 1);
            $integerVal = "" .substr($price, 0, strpos($price, '.'));
        } else {
            $integerVal = $price;
        }

        $formatted = "";

        $count = 0;
        for ($j = strlen($integerVal)-1; $j >= 0; $j--) {
            $character = $integerVal[$j];
            $count++;
            if ($count % 3 == 0)
                $formatted = ($thousandsSeparator . $character) . $formatted;
            else
                $formatted = $character . $formatted;
        }
        if ($formatted[0] == $thousandsSeparator)
            $formatted = substr($formatted, 1, strlen($formatted));

        $formatted .= $decimalPoint;

        for ($j = 0; $j < $decimalCount; $j++) {
            if($j < strlen($centsVal)) {
                $formatted .= "" . $centsVal[$j];
            } else {
                $formatted .= "0";
            }
        }

        $out = $pattern;
        $out = str_replace('%', $formatted, $out);
        $out = str_replace('$', $symbol, $out);
        return $out;
    };
?>