Signature.php 1.3 KB
<?php


namespace Lackoxygen\MinPayment\Utils;

class Signature
{
    /**
     * @var array $item
     */
    protected $item = [];

    protected function __construct(array $item)
    {
        $this->item = $item;
    }

    public static function make(array $items): string
    {
        $signature = new self($items);

        return $signature->toString();
    }

    protected function sortByASCII()
    {
        $item = &$this->item;

        ksort($item);
    }

    /**
     * @param array    $item
     * @param callable $filter
     *
     * @return string
     */
    protected function map(array $item, callable $filter): string
    {
        $array = [];
        foreach ($item as $key => $value) {
            if ($filter($key, $value) !== false) {
                $array[] = $key . '=' . $value;
            }
        }

        return join($array, '&');
    }

    /**
     * @param string $string
     *
     * @return string
     */
    public static function encode(string $string): string
    {
        return strtoupper(md5($string));
    }

    /**
     * @return string
     */
    protected function toString(): string
    {
        $this->sortByASCII();

        $string = $this->map($this->item, function ($k, $v) {
            return !($v === '' || $v === null);
        });

        return self::encode($string);
    }
}