API сервиса телефонии Zadarma достаточно сильно усложнено и может вызвать проблемы — приведу несколько проверенных и работающих примеров обращения к API.
Первый и самый очевидный вариант — официальная либа на php.
Видел много вопросов у людей по её работе, собственно поэтому и решил написать статью с разными вариантами запросов.
Работа с библиотекой сводится к нескольким строкам — всё есть в документации.
$api = new \Zadarma_API\Api(
___ВАШ KEY___,
___ВАШ SECRET___,
true
);
try{
$result = $api->getBalance();
var_dump(
$result
);
} catch( \Zadarma_API\ApiException $e ){
var_dump([
$e->getMessage(),
$e->getFile() . ':' . $e->getLine(),
$e->getTraceAsString()
], 10, true);
}
Это типовой простой пример, по которому у меня был положительный ответ — пример рабочий.
Второй метод — обращение при помощи sh-файла. Не претендую на авторство — пример был найден в интернете.
Итак, нужно создать sh-файл с таким содержимым:
#!/bin/bash # $1 это сюда запрос помещается /v1/info/balance/ declare -r key="___ВАШ KEY___" declare -r secret="___ВАШ SECRET___" declare signature="" declare -r baseurl="https://api.zadarma.com" signature=`echo -n '' |openssl dgst -md5 | cut -d" " -f2` #echo "md5 = $signature" signature=`echo -n "$1$signature" | openssl dgst -sha1 -hmac "$secret" -hex | cut -d" " -f2` #echo "sha1 = $signature" signature=`echo -n "$signature" | openssl enc -base64 | cut -d" " -f2` #echo "base64 = $signature" #echo ""Authorization: $key:$signature"" "$baseurl""$1" curl -H "Authorization: $key:$signature" "$baseurl""$1"
Пропишите в файле свои key и secret и вызывайте следующим образом с указанием пути и имени файла (у меня файл называется zadarma.sh и лежит в текущей директории):
sh ./zadarma.sh /v1/info/balance/
Параметр, который мы должны передать в скрипт — это метод, к которому требуется получить доступ.
Третий метод — кастомный php.
$key = '___ВАШ KEY___' ;
$secret = '___ВАШ SECRET___' ;
$params = [];
$method = '/v1/info/balance/' ;
ksort($params);
$paramsStr = http_build_query( $params, null, '&', PHP_QUERY_RFC1738 );
$sign = base64_encode( hash_hmac('sha1', $method . $paramsStr . md5($paramsStr), $secret) );
$authHeader = 'Authorization: ' . $key . ':' . $sign;
$url = 'https://api.zadarma.com' ;
$options = array(
CURLOPT_URL => $url . $method,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_CONNECTTIMEOUT => 10,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSL_VERIFYHOST => false,
CURLOPT_HTTPHEADER => [$authHeader],
);
$ch = curl_init();
curl_setopt_array($ch, $options);
$response = curl_exec($ch);
$error = curl_error($ch);
curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
var_dump([
$response,
$error
]);
Здесь всё аналогично с первым примером — укажите свои параметры доступа и метод, к которому хотите получить доступ.