Skip to content

Instantly share code, notes, and snippets.

@getjump
Created June 8, 2017 05:39
Show Gist options
  • Select an option

  • Save getjump/f677d004b92002244783139e1d330095 to your computer and use it in GitHub Desktop.

Select an option

Save getjump/f677d004b92002244783139e1d330095 to your computer and use it in GitHub Desktop.
<?php namespace getjump\CarPad\Drom;
// https://api.drom.ru/v1.2/bulls/search?app_id=p8&cid%5B0%5D=23&mainPhotoWidth=300&page=1&pretty=1&revertSort=1&sortBy=enterdate&sticky_region%5B0%5D=25&timestamp=1495761446&secret=53e7ac1a6b6b42f0728657a515d6992f09a5a227c5799987941ab30eaecb0513
class BasicQuery
{
const API_URL = '{protocol}://api.drom.ru/v{version}/{method}';
private $appId;
private $key;
private $version;
private $protocol;
public function __construct($appId, $key, $version = '1.2', $protocol = 'https')
{
$this->appId = $appId;
$this->key = $key;
$this->version = $version;
$this->protocol = $protocol;
}
public function query($method, $args = [])
{
return file_get_contents($this->buildQueryString($method, $args));
}
public function buildQueryString($method, $args = [])
{
$args = ['app_id' => $this->appId] + $args;
if (!isset($args['timestamp'])) {
$args['timestamp'] = time();
}
$args['secret'] = $this->makeSecret($this->key, $args);
unset($args['id']);
return strtr(static::API_URL . '?' . http_build_query($args), [
'{protocol}' => $this->protocol,
'{version}' => $this->version,
'{method}' => $method,
]);
}
private function makeSecret(string $key, array $args = [])
{
return hash('sha256', $this->prepareArguments($args) . $key);
}
private function prepareArguments($args = [], $glue = '')
{
$result = [];
foreach ($args as $arg) {
if (is_array($arg)) {
$result[] = $this->prepareArguments($arg, ',');
} else {
$result[] = $arg;
}
}
return implode($glue, $result);
}
}
@professrr

Copy link
Copy Markdown

Bro how to get param [secret]?
// "message": "Param not set [secret]"

@tdn670000

Copy link
Copy Markdown

@getjump Привет!
Подскажи плз, какие аргументы, помимо appId и timestamp, нужно подать, чтобы сформировать secret
и где взять key?

@professrr

Copy link
Copy Markdown

@getjump Привет!
Подскажи плз, какие аргументы, помимо appId и timestamp, нужно подать, чтобы сформировать secret
и где взять key?

)) Я спрашивал его, ключ можно найти в apk, нашел, но при проверке не сходились хэши

@professrr

Copy link
Copy Markdown

@getjump Привет!
Подскажи плз, какие аргументы, помимо appId и timestamp, нужно подать, чтобы сформировать secret
и где взять key?

По идее там надо отсортировать параметры по алфавиту, это еще не пробовал

@professrr

Copy link
Copy Markdown

@getjump Привет!
Подскажи плз, какие аргументы, помимо appId и timestamp, нужно подать, чтобы сформировать secret
и где взять key?

а что ты делаешь?) Просто я и ты, только два человека интересовались этой темой, и я кажется догадываюсь что ты хочешь))

@vmzhivetyev

Copy link
Copy Markdown

@professrr есть успехи?))

@professrr

Copy link
Copy Markdown

@vmzhivetyev ого, 3-й человек кто этим интересуется)) Я в декабре так и не решил эту задачу))

@vmzhivetyev

vmzhivetyev commented Jul 3, 2021

Copy link
Copy Markdown

@professrr ну штош)

@professrr

Copy link
Copy Markdown

@professrr ну штош)

Собрались как-то 3 русских в Гисте, и всем троим нужен был доступ к апи дрома))

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment