TopWarehouse.php 1.5 KB
<?php

namespace Lackoxygen\TopWarehouse;

use Illuminate\Support\Arr;
use Lackoxygen\TopWarehouse\Contracts\ResponseInterface;
use Lackoxygen\TopWarehouse\Contracts\TopWarehouseInterface;
use Lackoxygen\TopWarehouse\Exception\Exception;
use Lackoxygen\TopWarehouse\Request\RequestProxy;
use Lackoxygen\TopWarehouse\Utils\SignatureUtil;
use Closure;

/**
 * @method ResponseInterface ordersB2cAdd(Closure $callback)
 * @method ResponseInterface getStockInventory(Closure $callback)
 * @method ResponseInterface orderEntryStatus(Closure $callback)
 * @method ResponseInterface loadDelivery(Closure $callback)
 *
 * @package Lackoxygen\TopWarehouse
 */
class TopWarehouse implements TopWarehouseInterface
{
    /**
     * @inheritDoc
     */
    public function verify(array $data): bool
    {
        $sign = Arr::get($data, 'sign');
        if (empty($sign) || !is_string($sign)) {
            return false;
        }
        unset($data['sign']);
        $generateSign = SignatureUtil::generate($data, config('top-warehouse.app_secret'));

        return $generateSign === $sign;
    }

    /**
     * @param $name
     * @param $argv
     *
     * @return ResponseInterface
     * @throws Exception
     */
    public function __call($name, $argv): ResponseInterface
    {
        $closure = Arr::get($argv, 0);
        $request = RequestProxy::proxy($name);
        if ($closure instanceof \Closure) {
            call_user_func($closure, $request);
        }

        return Client::request($request);
    }

}