Работа с getUserBalance на примере работающего приложения

Темы только для ознакомления. Уроки по использованию старой версии ВКонтакте API и устаревших методов.

Работа с getUserBalance на примере работающего приложения

Сообщение Александр » 05 июн 2011, 19:40

Работа с getUserBalance на примере работающего приложения
JavaScript

ВНИМАНИЕ! В методах ВКонтакте API произошли изменения.
С 1 ноября 2012 года методы getUserBalance, secure.getBalance и secure.withdrawVotes будут отключены.
Используйте актуальный способ - Payments API.


В этом уроке я приведу часть кода, который используется в приложении «Реклама ссылок» http://vkontakte.ru/app1980660
Этот код только для клиентской части приложения. Серверная часть со списанием голосов здесь не описана.


В уроке показано:
- работа с методом getUserBalance
- алгоритм работы приложения в зависимости от баланса: если голосов на балансе хватает, то отправляем данные на сервер, если не хватает, то просим пользователя пополнить баланс и после этого снова автоматически проводим попытку отправки данных на сервер.
- отправка данные на сервер с помощью jQuery
- правильные окончания "1 голос, 2 голоса, 5 голосов"
- использование изображения предзагрузчика


code.js
  1. /*
  2.  
  3.  http://flapps.ru/forum - форум о создании приложений
  4.  
  5. */
  6.  
  7. $(document).ready(function(){
  8. var viewer_id;
  9. var auth_key;
  10. var wasPayBox = false; // было открыто окно "Внесите 1 голос", при нажатии на кнопку "Добавить"
  11.  
  12.     VK.init(function() {
  13.         VK.loadParams(document.location.href);
  14.         viewer_id = VK.params.viewer_id;
  15.         auth_key = VK.params.auth_key;
  16.         getBalance();
  17.         updateLinks();
  18.     });
  19.  
  20.  
  21. // функция обновления баланса
  22. function getBalance(){
  23.         VK.api("getUserBalance", function(data) {
  24.             // если баланс меньше 1 голоса, то выводим ссылку "пополнить"
  25.             votes = parseInt(data.response)/100;
  26.             if (votes<1) {
  27.                 $('#balance').html('Ваш баланс: ' + votes + ' ' + num_ending(votes));
  28.                 $('#addVotes').show();
  29.              } else {
  30.                 $('#balance').html('Ваш баланс: ' + votes + ' ' + num_ending(votes));
  31.              }  
  32.         });
  33. }
  34.  
  35.  
  36.  
  37. // клик по "Ваш баланс" - обновить
  38. $('#balance').click(function() {
  39.     getBalance();
  40.     return false;
  41. });
  42.  
  43. // клик по "Пополнить баланс"
  44. $('#addVotes').click(function() {
  45.     VK.callMethod("showPaymentBox");
  46.     return false;
  47. });
  48.  
  49. // баланс был изменен
  50. VK.addCallback("onBalanceChanged", onBalanceChanged);
  51. function onBalanceChanged(settings) {
  52.     getBalance();
  53.     if (wasPayBox) { // если вызывали окно пополнения, то вероятно пользователь пополнил баланс
  54.         wasPayBox = false;
  55.         // пробуем отправить данные снова
  56.         $('#addLink_btn').click();
  57.     }
  58. }
  59.  
  60.  
  61. // отправляем на сервер
  62. $('#addLink_btn').click(function() {
  63.     // проверяем баланс
  64.     VK.api("getUserBalance", function(data) {
  65.         // если баланс меньше 1 голоса, то выводим окно "пополнить на 1 голос"
  66.         if (data.response<100) {
  67.             VK.callMethod("showPaymentBox",1);
  68.             wasPayBox = true;
  69.         } else {
  70.                 var error = false;
  71.                 var t = ''; // текст ошибок
  72.                 var url = $('#url').val();
  73.                 var title = $('#title').val();
  74.  
  75.                 // проверяем ссылку
  76.                 if (url.indexOf('http://vkontakte.ru/app')!==0 && url.indexOf('http://vkontakte.ru/club')!==0 &&
  77.                     url.indexOf('http://vkontakte.ru/id')!==0 && url.indexOf('http://vkontakte.ru/video')!==0 &&
  78.                     url.indexOf('http://vkontakte.ru/photo')!==0 && url.indexOf('http://vkontakte.ru/note')!==0 &&
  79.                     url.indexOf('http://vkontakte.ru/public')!==0) {
  80.                     t += 'Вы можете добавить ссылку только на страницу сайта вконтакте.';
  81.                     error=true;
  82.                 }
  83.                 if (url.length>50) {
  84.                     // if (error) - проверка, содержит ли переменная с ошибками какой-то текст, чтобы не делать лишний перенос строки
  85.                     if (error) { t += '<br />';}
  86.                     t += 'Максимальная длина ссылки 50 символов!';
  87.                     error=true;
  88.                 }
  89.                 // проверяем заголовок
  90.                 if (title.length<5) {
  91.                     if (error) { t += '<br />';}
  92.                     t += 'Вы ввели слишком короткое описание!';
  93.                     error=true;
  94.                 }
  95.                 if (title.length>35) {
  96.                     if (error) { t += '<br />';}
  97.                     t += 'Максимальная длина описания ссылки 35 символов!';
  98.                     error=true;
  99.                 }
  100.                
  101.                 // если есть ошибки
  102.                 if (error) {
  103.                     $('.error').html(t);
  104.                     $('.success').slideUp();
  105.                     $('.error').slideDown();
  106.                 } else {
  107.                     $('.error').hide(); // скрываем блок с ошибкой (он мог быть открыт)
  108.                     // показываем предзагрузчик
  109.                     $('#loader').show();
  110.                     // отправляем данные на сервер
  111.                     $.post('http://flapps.ru/apps/test/addlink.php', { "title": title, "url": url, "viewer_id": viewer_id, "auth_key": auth_key },
  112.                         function(data){
  113.                             if (data.success) {
  114.                                 $('.success').html(data.success.msg);
  115.                                 $('.error').slideUp();
  116.                                 $('.success').slideDown();
  117.                             } else {
  118.                                 $('.error').html(data.error.msg);
  119.                                 $('.success').slideUp();
  120.                                 $('.error').slideDown();
  121.                             }
  122.                             // обновляем баланс
  123.                             getBalance();
  124.                             // скрываем предзагрузчик
  125.                             $('#loader').fadeOut(1000);
  126.                         }, "json");
  127.                 }
  128.              }
  129.         });
  130. return false;
  131. });
  132.        
  133. });
  134.  
  135. function num_ending(number) {
  136.     var endings = ['голосов','голос','голоса'];
  137.     var num100 = number % 100;
  138.     var num10 = number % 10;
  139.     if (num100 >= 5 && num100 <= 20) {
  140.         return endings[0];
  141.     } else if (num10 == 0) {
  142.         return endings[0];
  143.     } else if (num10 == 1) {
  144.         return endings[1];
  145.     } else if (num10 >= 2 && num10 <= 4) {
  146.         return endings[2];
  147.     } else if (num10 >= 5 && num10 <= 9) {
  148.         return endings[0];
  149.     } else {
  150.         return endings[2];
  151.     }
  152. }
  153.  
  154. /* flapps.ru */


style.css
  1. /*
  2.  
  3.  http://flapps.ru/forum - форум о создании приложений
  4.  
  5. */
  6. body {
  7.     font-family: Arial, Verdana, sans-serif;
  8.     font-size: 12px;
  9. }
  10.  
  11. /* изображение прелоадер */
  12. #loader {
  13.     width: 100%;
  14.     height: 100%;
  15.     position: fixed;
  16.     text-align: center;
  17.     z-index: 1000;
  18.     background-color: #fff;
  19.     opacity: 0.80;
  20. }
  21.  
  22. #loader img{
  23.     position: absolute;
  24.     left: 50%;
  25.     top: 50%;
  26.     margin: -40px 0 0 -40px;
  27. }
  28.  
  29. /* блоки с сообщениями */
  30. .success {
  31.     background-color: #EFFFE8;
  32.     border: 1px solid #9BE888;
  33.     font-size: 11px;
  34.     margin: 8px;
  35.     padding: 8px 11px;
  36. }
  37. .error {
  38.     background-color: #FFEFE8;
  39.     border: 1px solid #E89B88;
  40.     font-size: 11px;
  41.     margin: 8px;
  42.     padding: 8px 11px;
  43. }


index.html
  1. <html>
  2. <head>
  3. <script src="js/jquery-1.6.1.min.js" type="text/javascript"></script>
  4. <script src="js/code.js" type="text/javascript"></script>
  5. <link rel="stylesheet" href="css/style.css" type="text/css" />
  6. <script src="http://vkontakte.ru/js/api/xd_connection.js?2" type="text/javascript"></script>
  7.  
  8. </head>
  9. <body>
  10. <!-- это блок с изображением прелоадером -->
  11. <div id="loader" style="display:none;"><img src="http://vk.com/images/upload.gif" alt="" width="32" height="8" border="0" /></div>
  12.  
  13.  
  14. <h1 style="text-align:center; border:none;">Добавить ссылку</h1>
  15. <a href="#" id="balance" title="Кликните, чтобы обновить баланс">Ваш баланс:</a>
  16. <a href="#" id="addVotes" title="Кликните, чтобы пополнить баланс" style="display:none; font-style:italic;">(пополнить)</a><br />
  17. <br />
  18.  
  19.  
  20. Ссылка:<br />
  21. <input type="text" id="url" name="url" value="http://vkontakte.ru/" maxlength="50" /><br />
  22. Описание:<br />
  23. <input type="text" id="title" name="title" value="" maxlength="35" /><br />
  24. <a href="#" id="addLink_btn">Добавить</a><br /><br />
  25.  
  26.  
  27. <div class="error" style="display:none;"></div>
  28. <div class="success" style="display:none;"></div>
  29.  
  30. <br />
  31. <a href="http://flapps.ru/">http://flapps.ru/</a>
  32.  
  33. </body>
  34. </html>


addlink.php
  1. <?
  2. /*
  3.  
  4.  http://flapps.ru/forum - форум о создании приложений
  5.  
  6. */
  7.  
  8.  
  9. /*
  10.    Здесь нужно провести весь процесс проверки полученных переменных (ссылка, заголовок) и списание голоса,
  11.    проверку auth_key и баланса пользователя в приложении.
  12. */
  13.  
  14. // просто выводим сообщение
  15. echo '{"success":
  16.                 {
  17.                 "msg":"Всё прошло успешно!"
  18.                 }
  19.                 }';
  20.  
  21. // сообщение с ошибкой
  22. /*
  23. echo '{"error":
  24.                 {
  25.                 "msg":"Произошла ошибка!"
  26.                 }
  27.                 }';
  28. */             
  29.  
  30. ?>


Исходник: Чтобы увидеть ссылку - зарегистрируйтесь

За это сообщение автора Александр поблагодарил:
Noise Gate
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
 
Автор темы
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45
Откуда: Санкт-Петербург
Благодарил (а): 126 раз.
Поблагодарили: 771 раз.

Чтобы убрать блок с рекламой, зарегистрируйтесь на форуме или войдите.

Google
 



Re: Работа с getUserBalance на примере работающего приложения

Сообщение BORA » 05 июн 2011, 20:37

var viewer_id тут писать ид ?;
var auth_key а тут ключ ?;
http://flapps.ru/forum/topic3937.html - Продам домен вконтакте.ком
http://flapps.ru/forum/post29970.html#p29970 - Аренда серверов , очень дёшево
Аватара пользователя
BORA

 
Сообщения: 171
Зарегистрирован: 21 дек 2010, 20:05
Благодарил (а): 51 раз.
Поблагодарили: 7 раз.

Re: Работа с getUserBalance на примере работающего приложения

Сообщение Александр » 05 июн 2011, 21:04

BORA
Зачем?
Посмотри topic1350.html

За это сообщение автора Александр поблагодарил:
BORA
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
 
Автор темы
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45
Откуда: Санкт-Петербург
Благодарил (а): 126 раз.
Поблагодарили: 771 раз.

Re: Работа с getUserBalance на примере работающего приложения

Сообщение DenKrechetov » 26 авг 2011, 10:24

У меня вопрос в какой строке прописывать куда пойдут те данные которые отправил пользователь??? А можно что бы эти данные приходили мне на почту? :?: :?: :?:
DenKrechetov

 
Сообщения: 14
Зарегистрирован: 26 авг 2011, 10:19
Благодарил (а): 0 раз.
Поблагодарили: 3 раз.

Re: Работа с getUserBalance на примере работающего приложения

Сообщение [DIWMS] » 26 авг 2011, 10:29

DenKrechetov писал(а):А можно что бы эти данные приходили мне на почту? :?: :?: :?:

Можно данные отправить через функцию mail();
У тебя ещё нет аккаунта DropBox? Зарегистрируй и получи 2 GB!
Аватара пользователя
[DIWMS]

 
Сообщения: 98
Зарегистрирован: 10 мар 2011, 12:44
Откуда: Украина
Благодарил (а): 3 раз.
Поблагодарили: 5 раз.

Re: Работа с getUserBalance на примере работающего приложения

Сообщение DenKrechetov » 26 авг 2011, 15:39

[DIWMS] писал(а):Можно данные отправить через функцию mail();

А можете если не сложно дать код с этой функцией???
DenKrechetov

 
Сообщения: 14
Зарегистрирован: 26 авг 2011, 10:19
Благодарил (а): 0 раз.
Поблагодарили: 3 раз.

Re: Работа с getUserBalance на примере работающего приложения

Сообщение [DIWMS] » 28 авг 2011, 21:12

DenKrechetov писал(а):
[DIWMS] писал(а):Можно данные отправить через функцию mail();

А можете если не сложно дать код с этой функцией???


ru.php.net
Вот там читайте
У тебя ещё нет аккаунта DropBox? Зарегистрируй и получи 2 GB!
Аватара пользователя
[DIWMS]

 
Сообщения: 98
Зарегистрирован: 10 мар 2011, 12:44
Откуда: Украина
Благодарил (а): 3 раз.
Поблагодарили: 5 раз.

Re: Работа с getUserBalance на примере работающего приложения

Сообщение DenKrechetov » 31 авг 2011, 06:23

[DIWMS] писал(а):ru.php.net
Вот там читайте


Я ничего там не понял если вам не сложно можете дать готовый код с этой функцией?
DenKrechetov

 
Сообщения: 14
Зарегистрирован: 26 авг 2011, 10:19
Благодарил (а): 0 раз.
Поблагодарили: 3 раз.

Re: Работа с getUserBalance на примере работающего приложения

Сообщение [DIWMS] » 31 авг 2011, 07:04

DenKrechetov писал(а):
[DIWMS] писал(а):ru.php.net
Вот там читайте


Я ничего там не понял если вам не сложно можете дать готовый код с этой функцией?


http://ru.php.net/manual/en/function.mail.php

Там же и примеры там-же всё.
  1. <?php
  2. $to      = 'nobody@example.com';
  3. $subject = 'the subject';
  4. $message = 'hello';
  5. $headers = 'From: webmaster@example.com' . "\r\n" .
  6.     'Reply-To: webmaster@example.com' . "\r\n" .
  7.     'X-Mailer: PHP/' . phpversion();
  8.  
  9. mail($to, $subject, $message, $headers);
  10. ?>
  11.  


Данные подставляете и всё
У тебя ещё нет аккаунта DropBox? Зарегистрируй и получи 2 GB!
Аватара пользователя
[DIWMS]

 
Сообщения: 98
Зарегистрирован: 10 мар 2011, 12:44
Откуда: Украина
Благодарил (а): 3 раз.
Поблагодарили: 5 раз.

Re: Работа с getUserBalance на примере работающего приложения

Сообщение DenKrechetov » 01 сен 2011, 05:57

Народ че то скрипт перестал работать не знаю это у меня че наверное то но КТО НИБУДЬ ПЛИЗЗЗ ПРОВЕРЬТЕ ЕГО РАБОТОСПОСОБНОСТЬ????? :cry: :cry: :?: :?:
DenKrechetov

 
Сообщения: 14
Зарегистрирован: 26 авг 2011, 10:19
Благодарил (а): 0 раз.
Поблагодарили: 3 раз.

След.

Вернуться в Неактуальные уроки (API 2.0 и устаревшие методы)



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0

cron