Zadarma API. Работающие примеры запросов php \ bash.


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
       ]);

Здесь всё аналогично с первым примером — укажите свои параметры доступа и метод, к которому хотите получить доступ.

,

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *