Маленькой элиане нужна сложная операция. Как сделать пожертвование на благотворительность? Кто получает ваши деньги

💖 Нравится? Поделись с друзьями ссылкой

Привет, Хабр!

В своё время, бороздя просторы интернета на предмет рационального использования API Вконтакте, я не смог найти чего-то вразумительного, единственные библиотеки, которые были найдены мной были реализованы без использования каких-либо общепринятых практик и без красивого кода. Я решил исправить, сложившееся недоразумение и написал свою библиотеку для работы с API Вконтакте.
Животрепещущие подробности и подходы под хабракатом.

Так уж сложилось, что API Вк, реализован довольно хорошо, за исключением некоторых не логичных моментов, о которых я упомяну позднее. Но речь, сегодня не о качестве, а о конкретном применении.

Сразу необходимо сделать оговорку, помимо описания, я буду приводить куски рабочего кода к моей библиотеке, ссылку на которую я приведу в конце статьи. Библиотека работает на последней стабильной версии 5.5, если вырезать генераторы из пакетного получения, то должно работать на 5.4.

  • Серверная авторизация(т.н. авторизация сайтов)
  • Клиентская авторизация(Standalone)
  • Авторизация сервера приложения
Самое интересное для разработчика, представляют первые два. Первый, позволяет авторизовать пользователя на сайте и получить его ключ доступа, второй позволит авторизовать ваше приложение, например Dekstop или Mobile. Забегая, вперёд, второй вариант предоставляет нам огромные возможности, а первый, лишь малую их часть.

Алгоритм получения в первом случае сводится к выполнению следующих пунктов:

  • Мы выводим ссылку для авторизации пользователя, которую форматируем в соответствии с документацией
  • Пользователь переходит по ней и авторизуется
  • Пользователя перенаправляют на REDIRECT_URI нашего приложения с GET параметром code
  • Наше приложение должно выполнить запрос к API содержащий code, чтобы получить ключ доступа пользователя
  • API отвечает, либо с объектом, содержащим ключ доступа, либо ошибкой.

Пример кода, с помощью которого можно провернуть это не хитрое дело.

$auth = getjump\Vk\Auth::getInstance(); $auth->setAppId("3470411")->setScope("SCOPE")->setSecret("SECRET CODE")->setRedirectUri("http://localhost/test.php"); $token=$auth->startCallback(); printf("LINK", $auth->getUrl());

Предполагается, что наш домен это localhost, а текущий файл test.php. Если, всё прошло хорошо, то в нашей переменной $token, будет содержаться ключ доступа пользователя, который прошёл авторизацию.

С момента, когда мы имеем ключ доступа, мы можем выполнять запросы к API . Общая логика запросов проста, вы передаёте специально сформированный запрос на URL API. Запрос должен содержать, название метода и аргументы.

api.vk.com/method/METHOD_NAME?PARAMETERS&access_token=ACCESS_TOKEN

Список методов , это одна из богатых вещей API. В нём вы можете встретить методы, которые не требуют ключ доступа для своей работы, следовательно вызывать их вы можете, не получая его.

При использовании библиотеки нам необходимо создать базовый объект, например так:
$vk = getjump\Vk\Core::getInstance()->apiVersion("5.5")->setToken($token);

Пара примеров запросов с использованием библиотеки:

Через анонимную функцию в each, пройдёт ровно 100 объектов, содержащих данные о пользователях от 1 до 100. Заметьте, если мы уберём вызов функции, то не произойдёт никакого запроса, всё потому что вернётся объект, у которого переопределены магические методы __call и __get, что позволяет нам делать запрос, когда нам это действительно необходимо.
$vk->request("users.get", ["user_ids" => range(1, 100)])->each(function($i, $v) { if($v->last_name == "") return; print $v->last_name . "
"; });

Одна из вещей, что открывает, нам использование генераторов - пакетное получение. То есть, мы получаем данные только тогда, когда они нам нужны. Следующий пример, позволит нам получить ВСЕ наши сообщения, запросами по 100. Будьте внимательны, метод требует от вас прав для messages, Standalone приложения, такой-же авторизации и соответственно передачи ключа доступа.
foreach($vk->request("messages.get")->batch(100) as $data) { $data->each(function($i, $m) { if(isset($m->body)) print $m->body . PHP_EOL; }); }

Хороший метод, который можно отыскать в API - execute . Он принимает параметр code в качестве аргумента, code - некий псевдо JavaScript, который позволяет нам выполнять наш код на стороне сервера, так-же он позволяет выполнять хранимые процедуры, которые мы можем создать при редактировании нашего приложения.

Эту вещь я не смог обойти стороной и реализовал её в библиотеке. В двух словах, она позволяет выполнить несколько запросов, как один. Смотрите следующий пример кода.

$js1 = $vk->request("messages.get", ["count" => 200, "offset" =>0 * 200])->toJs(); // Вернёт объект типа VkJs $js2 = $vk->request("messages.get", ["count" => 200, "offset" =>1 * 200])->toJs(); $js3 = $vk->request("messages.get", ["count" => 200, "offset" =>2 * 200])->toJs(); $js4 = $vk->request("messages.get", ["count" => 200, "offset" =>3 * 200])->toJs(); $js1 ->append($js2) // Мы прибавляем js2 к js1 ->append($js3) ->append($js4) ->execute() // Мы хотим выполнить это(на самом деле это вернёт RequestTransaction) ->response //Запрос исполнится только сейчас ->each(function($i, $v) //Первая анонимная функция нужна для обхода всех элементов массива полученного от execute(массив из 4 элементов, 4 запроса) { $v->each(function($c, $d) { // Следующая для прохода всех 200 сообщений в каждом массиве if(isset($d->body)) print $d->body; //Выведем сообщение если такое поле присутствует }); });

Как и обещал, одно из тех недоразумений, которое вы можете встретить в текущей версии API(5.21), метод

Социальные сети уже давно стали частью нашей жизни. Практически у каждого пользователя есть персональная страничка в таких сервисах как вконтакте, фейсбук, твиттер и другие. И поскольку такие сервисы очень популярны в наше время, они сделали специальное API . При помощи методов которые предоставляет API конкретной системы, вы можете получить список пользователей, список фотографий, даже найти всех пользователей в определенной области на карте, список действий очень большой.

Однако, не каждый пользователь может получить доступ к этим данным. Большинство сервисов требуют регистрации и создания специального приложение, которое и будет работать с методами определенного сервиса.

Итак, сегодня мы рассмотрим пример работы с VK API, в котором будем получать список пользователей c именем «Маша» в городе «Москва». Будем искать Маш в Москве.:)

Первым делом нам нужно создать приложение. Для создания приложения переходим по ссылке (https://new.vk.com/dev -> Создать приложение ).

Вводим название и поскольку мы разбираем пример на PHP используя веб-сервер, выбираем тип приложения — «Веб-сайт «. Указываем адрес вашего сайта и базовый домен(если делаете на локальном веб-сервере, пишем http://localhost ). Нажимаем кнопку «Подключить сайт» и ваше приложение создано, часть пути пройдена.

Приступаем к программированию. Существует множество классов для работы с API сайтов, однако мы будем писать все сами, чтобы понять основные принципы работы.

Для получения доступа к методам API, нужно выполнить несколько шагов:

  1. Авторизировать пользователя;
  2. Получить ключ доступа;
  3. Получить access_token;
  4. Выполнить запрос к методу;

4 простых шага, но на деле немного сложнее.

Авторизируем пользователя:

session_start(); $client_id = "1234567"; $redirect_uri = "http://localhost"; $display = "page"; $scope = "friends,groups"; $response_type = "code"; $auth_uri = "https://oauth.vk.com/authorize?client_id={$client_id}&display={$display}& redirect_uri={$redirect_uri}&scope={$scope}&response_type={$response_type}&v=5.52";

Разбираем по пунктам, что же тут написано:

  • $client_id — идентификатор вашего приложения, присвоенный системой;
  • $redirect_uri — страница на которую будет перенаправлен пользователь после успешной авторизации;
  • $display — как отображается страница входа, в данном случае это будет отдельная страница;
  • $scope — разрешения для приложения, указывать через запятую. Полный список ;
  • $response_type — тип ответа, в данном случае будет предоставлен JSON;
  • $auth_uri — формируем строку для авторизации пользователя, передвая нужные параметры;

Получаем access_token:

if(isset($_GET["code"])){ $code = $_GET["code"]; $client_secret = "you_application_password"; $acces_uri = "https://oauth.vk.com/access_token"; $fields = array("client_id" => $client_id, "client_secret" => $client_secret, "redirect_uri" => $redirect_uri, "code" => $code); $acces_uri .= "?client_id={$fields["client_id"]}&"; $acces_uri .= "client_secret={$fields["client_secret"]}&"; $acces_uri .= "redirect_uri={$fields["redirect_uri"]}&"; $acces_uri .= "code={$fields["code"]}"; $res = file_get_contents($acces_uri); $response_string = json_decode($res,true); $_SESSION["token"] = $response_string["access_token"];

Тут все довольно просто, записываем полученный код в переменную $code , формируем ссылку с нужными нам данными — $access_uri . Далее при помощи функции file_get_contents выполняем запрос и в ответ получаем JSON объект который сразу же декодируем в массив. В конце просто полученный токен записываем в переменную сессии. Не очень хороший подход, лучше сразу писать в базу данных, однако цель этого руководства не в этом.

$client_secret — «Защищенный ключ » вашего приложения, без него работать не будет 🙂

Вот теперь у нас уже все готово для того, чтобы получить список пользователей с определенного города. Алгоритм работы очень простой: сформировать запрос, выполнить, получить данные.

Формируем:

If (isset($_SESSION["token"])) { $name = "Маша"; $url = $url = "https://api.vk.com/method/users.search?city_id=1&q={$name}&count=1000&access_token={$_SESSION["token"]}"; $res = file_get_contents($url); $users_data = json_decode($res,true); $users_count = array_shift($users_data["response"]); $users_list = $users_data["response"]; }

Данный запрос вернет нам 1000 пользователей с Москвы. На выходе мы получим количество затронутых записей и ассоциативный массив с пользователями записанный в переменную $users_list , который уже можем использовать на свое усмотрение.

Единственный нюанс в том, что API не позволяет выбрать большее количество пользователей, даже если использовать параметр offset в строке запроса. К сожалению такое ограничение в VK API.

Полный список параметров VK API для запроса можете посмотреть в

У меня часто спрашивают, как работать с API . Наиболее, популярной задачей, связанной с API , является - работа с API ВКонтакте . В данной статье я покажу, как работать с API ВКонтакте , а, главное, покажу Вам, что все API работают по единому принципу .

Вот порядок действий , который Вам необходимо сделать, чтобы начать работать с любым API :

  1. Найти документацию по нужному API .
  2. Посмотреть примеры подключения к API . Тут могут быть разные варианты. Например, на одном сервисе потребуют секретный ключ, выдаваемый после регистрации. На втором сервисе, все запросы не требуют секретных ключей. На третьем сервисе, есть и с секретным ключом, и без варианты работы. Иногда, секретный ключ называют токеном .
  3. Скопировать простой готовый код с сайта документации и проверить его работу. Если не работает, то ищите ошибку у себя, так как едва ли она будет у сервиса.
  4. Найти в документации метод , который решает Вашу задачу.
  5. Используя примеры и описание метода, отправить правильный запрос к API .
  6. В зависимости от формата ответа, разобрать его на "составные части ", а дальше уже делать то, что требуется - вывести пользователю, сохранить в файл, отправить в базу данных и тому подобное.

А в качестве примера следования данной инструкции мы разберём API ВКонтакте . Итак:

  1. Ссылка на документацию .
  2. В данном случае есть методы, которые общедоступны, а потому не требуют токена, а есть методы, требующие его.
  3. В данном случае, примеров на конкретном языке я не нашёл. Возможно, они есть, но явно не на виду. Обычно же, у API для каждого метода есть примеры на разных языках.
  4. Мы хотим вывести 5 последних записей со стены конкретного пользователя, а затем вывести их у себя на сайте . Нужный нам метод .

Теперь мы должны отправить запрос к API , используя описание метода. Делать мы это будем через PHP :

$wall = file_get_contents("https://api.vk.com/method/wall.get?v=5.3&filter=others&domain=myrusakov&count=5");
print_r($wall);
?>

В данном случае, я использую API 5.3 (v=5.3 ), вывожу все записи независимо от автора (filter=others ) со своей страницы (domain=myrusakov ) в количестве 5 штук (count=5 ). Думаю, что здесь всё очень прозрачно.

Мы получили ответ в формате JSON , и теперь нам нужно перейти к последнему пункту - разобрать ответ на "составные части ". Дальше мы с Вами выведем записи со стены в более-менее читабельном виде на странице нашего сайта. Результирующий PHP-код :

$wall = file_get_contents("http://api.vk.com/method/wall.get?v=5.3&filter=others&domain=myrusakov&count=5"); // Отправляем запрос
$wall = json_decode($wall); // Преобразуем JSON-строку в массив
$wall = $wall->response->items; // Получаем массив комментариев
for ($i = 0; $i < count($wall); $i++) {
echo "

".($i + 1).". ".$wall[$i]->text."
".date("Y-m-d H:i:s", $wall[$i]->date)."

"; // Выводим записи
}
?>

Как видите, всё очень просто. Самая сложная часть - разобрать на составные элементы. Я предпочитаю выводить результат от API через print_r , а уже затем писать обработку этого. Хотя можно посмотреть пример ответа в описании метода, а дальше уже написать парсер.

Сегодня совместно с Благотворительным фондом «Линия Жизни» мы собираем деньги на спасение Алексея Берёзкина. Мальчику уже 11 лет, но из-за приступов эпилепсии он отстает в развитии, мозг ребенка разрушается.

Наш корреспондент Константин Крылов расскажет, как спасти Алексея.

Страшная болезнь точит неокрепший мозг Алеши уже больше 8 лет, из-за этого мальчик сильно отстает в развитии. В свои одиннадцать лет он совсем еще ребенок. Непосредственный и беззащитный.

Вместе с Лешей и его мамой мы пришли в коррекционную школу, которую он посещает. Из-за особенностей его здоровья он ходит далеко не на все занятия, а некоторые уроки проводят для него индивидуально. Даже среди особенных детей ему трудно играть и общаться со сверстниками. Хотя, чтобы устроиться в эту школу на Кубани, Березкины специально переехали аж с самого Сахалина. Хотя понимали, что убежать от эпилепсии вряд ли удастся.

Наталья Колядникова, педагог-психолог школы интерната: «К сожалению, его основное заболевание часто обостряется, и он становится трудно управляемым, особенно когда мы приглашаем его в школу».

Каждый раз, когда случается припадок, Леша на несколько минут словно замирает, теряет ориентацию и подолгу глядит в одну точку. На вопросы отвечает невпопад, может внезапно закричать и расплакаться. Его беспомощность в такие минуты буквально приковала к нему маму и бабушку, которые полностью посвятили себя уходу за больным мальчиком.

Дорогие импортные таблетки, скорее для успокоения. После долгих лет лечения разными препаратами выяснилось, что в случае с Лешей лекарства бессильны.

Александр Второв, заведующий отделением хирургии нервных и психических заболеваний НИИ Бехтерева, врач-нейрохирург: «Все имеющиеся лекарственные средства не оказывают действия, как бы грустно это не звучало, шансов поправиться у таких пациентов нет вовсе».

О полном выздоровлении речи не идет. Но прекратить разрушительные процессы можно. Вживление стимулятора вагусного нерва - новая операция, которую проводят в НИИ им. Бехтерева позволит забыть о тяжелых последствиях приступов на несколько лет.

Наталья Березкина, бабушка Алеши: «Разрушается мозг, нельзя этого допустить, одна надежда осталась на эту операцию».

Юлия Березкина, мама Алеши: «Единственный шанс - это вот этот стимулятор, о котором я читала, что он дает хорошие результаты, но единственное, это то, что операцию нужно делать еще маленьким».

Саму операцию в клинике выполнят по федеральной квоте или вне очереди за 30 с небольшим тысяч рублей. Но на приобретение импланта, в России их еще не производят, нужно около миллиона.

Александр Второв, заведующий отделением хирургии нервных и психических заболеваний НИИ Бехтерева, врач-нейрохирург: «Чем быстрее оказать ему эту помощь, тем больше шансов, что он вернётся в нормальную физиологическую форму».

Хотя родные сбились с ног в поисках средств для Алеши, они поначалу не хотели сниматься, мол, мы не одни такие. Но согласились, когда узнали, что история их ребенка, рассказанная на всю страну, поможет собрать деньги и для других детей с тяжелыми заболеваниями.

Чтобы помочь Алексею, отправьте СМС на короткий номер 3242 . В тексте сообщения напишите цифрами сумму, которую вы готовы пожертвовать, она автоматически спишется с вашего мобильного счёта. Услуга доступна для абонентов «МТС», «Мегафон», «Билайн» и «ТЕЛЕ2».

Услуга доступна для абонентов сетей «Билайн», «Мегафон», «МТС», «TELE2», «ТинькоффМобайл», «Yota».

Отправьте сообщение на номер 3242 с суммой пожертвования, указывая в SMS только цифры - например «100». Допустимый размер пожертвования - от 10 до 15 000 рублей. В случае если число будет указано прописью или сообщение будет содержать только текст, суммой пожертвования будет автоматически считаться 100 рублей.

В ответ Абоненты «Билайн», «Мегафон», «МТС» и TELE2 получат SMS об успешности платежа. Отправляя SMS-пожертвование на номер 3242, Абоненты операторов связи «Билайн» и «Мегафон» автоматически соглашаются с условиями платежа и сумма пожертвования списывается со счета без дополнительного подтверждения со стороны Абонента.

Внимание: ни одна сумма не будет списана с вашего счета без Вашего запроса на короткий номер 3242 для Абонентов «Билайн», «Мегафон», «МТС» и TELE2.

Стоимость отправки сообщения: для Абонентов «Билайн», «МТС» и «Мегафон» бесплатно, для Абонентов ТЕLЕ2 согласно тарифному плану Оператора.

Минимальный остаток на счете после списания должен быть:

  • 1 рубль для абонентов «Мегафон»,
  • 10 рублей для абонентов «МТС»,
  • 20 рублей для абонентов «Билайн»,
  • 10 рублей для абонентов TELE2.

Комиссия агентов, провайдера и банка в общей сложности составляет 8% от платежа для Абонентов «МТС», «Билайн», «Мегафон» и TELE2. Обращаем ваше внимание, что у операторов сотовой связи существуют ограничения на минимальные и максимальные суммы платежа. Минимальная сумма платежа для Абонентов «Билайн», «МТС» и ТЕLЕ2 составляет 10 рублей, для абонентов «Мегафон» составляет 1 рубль.

Максимальная сумма платежа составляет:

  • 15 000 рублей для абонентов «Билайн» и «Мегафон»,
  • 5000 рублей для абонентов ТЕLЕ2,
  • 14 999 рублей для абонентов «МТС»,
  • Техническим партнером сервиса ежемесячных пожертвований является ООО «Платежи онлайн».

Отправляя пожертвование на номер 3242, Вы даете свое согласие на смс информирование от Благотворительного фонда помощи тяжелобольным детям «Линия жизни». Для отказа от смс информирования напишите на .

Абонентам Билайн:

Услуга доступна для абонентов тарифных планов любой системы расчетов, кроме линейки тарифов «Простая логика», «Правильный», а также абонентов, у которых подключены услуги «Безлимит внутри сети» или «Безумные дни». Оплата возможна только со специального авансового счета;

После списания суммы покупки на Вашем счете должно остаться не менее 20 руб.; услуга становится доступной с момента расходования вами 150 руб. за услуги связи с момента подключения к сети Билайн;

  • Минимальная сумма платежа 10 руб.;
  • Максимальный разовый - 15 000 руб.;
  • Максимальная сумма платежей за сутки - 30 000 руб. максимум 10 транзакций;
  • Максимальная сумма платежей за месяц - 30 000 руб.;

Если вы пользуетесь тарифом с постоплатной системой расчетов то:

  • Услуга становится доступной с момента расходования вами 150 руб. за услуги связи с момента подключения к сети «Билайн».

Абонентам Мегафон:

Абонентам МТС:

Стоимость подтверждения покупки составляет 10 рублей с НДС и взимается помимо комиссии за успешную транзакцию, вне зависимости от суммы платежа.

  • Минимальная разовая сумма платежа 10 руб.,
  • Максимальная разовая сумма платежа 14 999 руб.,
  • Количество платежей в сутки не более 5 платежей,
  • Максимальная сумма платежей в сутки 30 000 руб.,
  • Максимальная сумма платежей в месяц 40 000 руб.

Обязательный остаток на счете 10 руб.

* если нет других указаний от поставщика услуг.

** остаток собственных средств абонента, внесенных им на счет телефона.

1. Ваш контракт с «МТС» должен быть оформлен на физическое лицо (на тарифных планах «Супер Ноль», действующем с 11.05.2011 г., «Супер МТС 2011», «Супер МТС 2012» и «Супер МТС» данная услуга не предоставляется);

2. Действует ограничение по незавершенным операциям (вы не можете сделать новый запрос, если предыдущий не обработан);

3. На вашем номере обслуживания должны отсутствовать опции «Запрет возврата части аванса» и/или «Запрет передачи данных третьим лицам информации об абоненте»;

4. Невозможно использовать кредитные и бонусные средства, а также средства, начисленные по рекламным акциям, скидки, на услуги связи, предоставленные МТС, скидку на первоначальный объем услуг, предоставляемую при заключении договора (покупке комплекта) и т. п.

Абонентам ТЕLЕ2:

После списания суммы покупки на вашем счете должно остаться не менее 20 руб. Сервис доступен только физическим лицам, платежи с корпоративных тарифов не разрешены.

Невозможно использовать кредитные и бонусные средства, а также средства, начисленные по рекламным акциям, скидки, на услуги связи, предоставленные ТЕLЕ2, скидку на первоначальный объем услуг, предоставляемую при заключении договора (покупке комплекта) и т. п.

  • Минимальная сумма платежа: 10 рублей.
  • 10 рублей (20 рублей - для абонентов Санкт-Петербурга и Ленинградской области).
  • Максимальная сумма платежа 5000 рублей.
  • Максимальное число платежей в сутки/месяц: 10/50 рублей.
  • Максимальная сумма платежей в сутки/месяц: 5000/40 000 рублей.

Абонентам Yota:

  • Максимальная сумма единовременного Платежа - 15 000 руб.;
  • Максимальная сумма Платежей в сутки - 40 000 руб.;
  • Максимальная сумма Платежей в месяц - 40 000 руб.

«Мобильные платежи» доступны всем абонентам Yota - физическим лицам. Подробности подключения Мобильных платежей на персональном счете. Услугой не могут воспользоваться абоненты, обслуживающиеся по кредитной системе расчетов, а также при финансовой блокировке номера. Платеж невозможен за счет денежных средств, зачисленных на Лицевой счет в виде скидок на услуги связи Оператора, средств, полученных в рамках услуги «Мобильный перевод», а также за счет авансового платежа, вносимого Абонентом при заключении договора об оказании услуг связи с Оператором.

Абонентам ТинькоффМобайл:

Требования для абонентов:

  • Минимальная сумма одного Платежа - 1 руб.;
  • Максимальная сумма одного Платежа;

Короткий номер для подтверждения платежей 555.

Абонент не вправе осуществить Платеж за счет денежных средств, зачисленных на Лицевой счет в виде скидок на услуги связи Оператора или полученных от Абонентов Оператора в рамках услуги Мобильный перевод, а также за счет авансового платежа, вносимого Абонентом при заключении договора об оказании услуг связи с Оператором.

Отправьте SMS с суммой пожертвования на этот номер



Рассказать друзьям