Работа с Payments API.(as3,php)

Только готовые уроки по использованию ВКонтакте API. Flash + PHP + API. НЕ IFrame!

Работа с Payments API.(as3,php)

Сообщение 112 » 31 окт 2012, 23:29

Пример использования Payments API
ActionScript 3.0 (Adobe Flash CS5)

Понадобится свой сервер с поддержкой php и cURL.


Некоторым сложно разобраться с пошаговым руководством по Payments Api. В этом уроке, вы узнаете как можно принимать платежи в флэш приложении.

1. Создаём Новый документ Flash File (ActionScript 3.0)
Добавляем на сцену текстовое поле и называем его result_tf.
И кнопку votes_er.

2. Скачиваем APIConnection.zip
http://vkontakte.ru/source/APIConnection.zip
Папку vk из архива vk_api_connection\src\ кладем в папку с сохраненным fla.

3. Пишем код в приложении
Заходим в первый кадр
 Как найти кадр
Изображение

И пишем код
  1.  
  2. import flash.display.Sprite;
  3. import flash.events.*;
  4. import vk.APIConnection;
  5. import vk.events.*;
  6.  //Переменные
  7.              var api_id:Number;
  8.              var viewer_id:Number;
  9.              var sid:String;
  10.              var secret:String;
  11. //Заполняем переменные данными
  12. var flashVars:Object = stage.loaderInfo.parameters as Object;
  13. api_id = flashVars['api_id'];
  14. viewer_id = flashVars['viewer_id'];
  15. sid = flashVars['sid'];
  16. secret = flashVars['secret'];
  17.  
  18. var VK:APIConnection = new APIConnection(flashVars);
  19. VK.api('getProfiles', { uids: flashVars['viewer_id']}, onProfileLoaded, onError);//Узнаем имя и фамилию пользователя
  20.        
  21. function onProfileLoaded(data: Object):void{
  22. result_tf.text ='Привет ' + data[0]['first_name'] + ' ' + data[0]['last_name'] + ' ,это тестовое приложение в котором показан пример работы с payments Api';
  23. }
  24. //добавляем три слушателя событии
  25. VK.addEventListener('onOrderSuccess', onSuccess); //если все прошло удачно
  26. VK.addEventListener('onOrderCancel', onCanc); //если пользователь отменил передачу
  27. VK.addEventListener('onOrderFail', onError); //если произошла ошибка
  28.            
  29. votes_er.addEventListener(MouseEvent.CLICK, function(event:MouseEvent) { //надатие на кнопку
  30. VK.callMethod('showOrderBox', { type:'item',item:'item1'});//вызов окна перевода голосов ;type:'item' - окно покупки товара(возможно также окно вызова офферов или окно пополнения голосов),item:'item1'- номер товара
  31. })
  32. //три функции ,которые срабатывают при :
  33. //удачнои покупки
  34.         function onSuccess(data: Object):void
  35.         {
  36.             result_tf.text = "Голоса переведены";
  37.         }
  38. //при отмене      
  39.         function onCanc(data: Object):void
  40.         {
  41.             result_tf.text = "Вы отменили перевод";
  42.         }
  43. //при ошибке
  44.          function onError(data: Object):void
  45.         {
  46.             result_tf.text = data.error_msg;
  47.         }
  48.  
  49.  


4. Загружаем приложение в контакт
Приложение должно быть включено.
Без использования контейнера.

5. Подготовка серверной части к обработке платежных уведомлений
Надо реализовать обработку уведомлений от платежной системы ВКонтакте.А именно:
-Получение информации о товаре. ВКонтакте запрашивает информацию о товаре для его отображения в диалоге покупки.
-Изменение статуса заказа. В параметрах уведомления передается новый статус заказа. При статусе заказа chargeable необходимо оформить товар пользователю внутри приложения.

Вконтакте также дает пример обработчика уведомлений на языке PHP.
Им мы и воспользуемся.Я его немного изменил.

Так же нам понадобится создать пустой файл,который будет лежать в папке вместе с этим скриптом, назовем его file.txt
В него будут записываться id плательщика и id покупки.

Создадим скрипт ,который и будет указываться как адрес обратного вызова,ниже написано содержание этого скрипта

  1. <?php
  2. header("Content-Type: application/json; encoding=utf-8");
  3.  
  4. $secret_key = ''; // Защищенный ключ приложения
  5.  
  6. $input = $_POST;
  7.  
  8. // Проверка подписи
  9. $sig = $input['sig'];
  10. unset($input['sig']);
  11. ksort($input);
  12. $str = '';
  13. foreach ($input as $k => $v) {
  14.   $str .= $k.'='.$v;
  15. }
  16.  
  17. if ($sig != md5($str.$secret_key)) {
  18.   $response['error'] = array(
  19.     'error_code' => 10,
  20.     'error_msg' => 'Несовпадение вычисленной и переданной подписи запроса.',
  21.     'critical' => true
  22.   );
  23. } else {
  24.   // Подпись правильная
  25.   switch ($input['notification_type']) {
  26.     case 'get_item':
  27.       // Получение информации о товаре
  28.       $item = $input['item']; // наименование товара
  29.  
  30. if ($item == 'item1') {
  31.         $response['response'] = array(
  32.           'item_id' => 1, //id товара
  33.           'title' => '10 монеток', //наименование
  34.           'photo_url' => '', //фотография товара,если оставить поле пустым,то будет выведена иконка приложения
  35.           'price' => 1 //цена товара в голосах
  36.         );
  37.       }
  38.       break;
  39.  
  40. case 'get_item_test':
  41.       // Получение информации о товаре в тестовом режиме
  42.       $item = $input['item'];
  43.       if ($item == 'item1') {
  44.         $response['response'] = array(
  45.           'item_id' => 1, //id товара
  46.           'title' => '10 монеток(test mode)', //наименование
  47.           'photo_url' => '', //фотография товара,если оставить поле пустым,то будет выведена иконка приложения
  48.           'price' => 1 //цена товара в голосах
  49.         );
  50.       }
  51.       break;
  52.  
  53. case 'order_status_change':
  54.       // Изменение статуса заказа
  55.       if ($input['status'] == 'chargeable') {
  56.         $order_id = intval($input['order_id']);
  57.         $user_id  = intval($input['user_id']);
  58. // Код проверки товара, включая его стоимость
  59.  
  60. //Вконтакте может несколько раз отправлять уведомления типа Изменения статуса заказа
  61. //(с тем же order_id) и ответ должен в точности повторять ответ для исходного уведомления.
  62.  
  63. $handle = fopen("file.txt","a+"); // ОТкрываем фаил,чтобы записать туда ид плтельщика и ид покупки
  64. fwrite($handle,"\n".user_id."\n".$order_id); // Записываем
  65. fclose($handle); // Закрываем фаил
  66.  
  67.  
  68. $response['response'] = array(
  69.           'order_id' => $order_id,
  70.         );
  71.       } else {
  72.         $response['error'] = array(
  73.           'error_code' => 100,
  74.           'error_msg' => 'Передано непонятно что вместо chargeable.',
  75.           'critical' => true
  76.         );
  77.       }
  78.       break;
  79.  
  80. case 'order_status_change_test':
  81.       // Изменение статуса заказа в тестовом режиме
  82.       if ($input['status'] == 'chargeable') {
  83.         $order_id = intval($input['order_id']);
  84.         $user_id  = intval($input['user_id']);
  85.  
  86. $handle = fopen("file.txt","a+"); // ОТкрываем фаил,чтобы записать туда ид плтельщика и ид покупки
  87. fwrite($handle,"\n".$user_id."\n".$order_id); // Записываем
  88. fclose($handle); // Закрываем фаил
  89.  
  90. $response['response'] = array(
  91.           'order_id' => $order_id,
  92.         );
  93.       } else {
  94.         $response['error'] = array(
  95.           'error_code' => 100,
  96.           'error_msg' => 'Передано непонятно что вместо chargeable.',
  97.           'critical' => true
  98.         );
  99.       }
  100.       break;
  101.   }
  102. }
  103.  
  104. echo json_encode($response);
  105. ?>


Теперь необходимо указать в пункте Адрес обратного вызова(Вкладка платежи)
Ссылку на скрипт который у вас получился.

6. Тестирование приложения
Если у ваше приложение не проверено ,то платежи могут проходить только в тестовом режиме .
Для этого в Пункте Тестеры платежей выберите себя.
Как таковые голоса переводится не будут.Вы сможете только посмотреть то, что у вас получилось.

Если же ваше приложение прошло проверку,то пользователи смогут пополнять баланс приложения.

Исходник

Наверно это и все.
Задавайте вопросы ,буду пробовать на них отвечать
Если ты дебил ,оставайся им!
Я бы изменил мир,но Бог не дает исходники!
Изображение

За это сообщение автора 112 поблагодарили - 4:
Abarmotina, Апчхи, Александр, Emeltil
Аватара пользователя
112
Модератор
Модератор
 
Автор темы
Сообщения: 2215
Зарегистрирован: 02 фев 2010, 21:53
Благодарил (а): 51 раз.
Поблагодарили: 80 раз.

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

Google
 



Re: Работа с Payments API.(as3,php)

Сообщение Abarmotina » 01 ноя 2012, 16:46

:) Спасибо
Пока они пили водку и катались на скейтах, мы строили бизнес и делали деньги!
Аватара пользователя
Abarmotina

 
Сообщения: 469
Зарегистрирован: 21 апр 2012, 19:34
Благодарил (а): 16 раз.
Поблагодарили: 19 раз.

Re: Работа с Payments API.(as3,php)

Сообщение agni » 12 ноя 2012, 16:11

скорее всего - очевидно, :D но всё таки спрошу:
этот урок с учетом "Обновлённого платежного API для приложений"? который полностью заменил с 31 октября работу с голосами в приложении?
http://vk.com/topic-1_27042222
скайп: consacrer
agni

 
Сообщения: 100
Зарегистрирован: 07 июн 2010, 11:04
Благодарил (а): 12 раз.
Поблагодарили: 0 раз.

Re: Работа с Payments API.(as3,php)

Сообщение 112 » 12 ноя 2012, 17:39

agni
Да,это и есть тот самый урок по новому платежному API
Если ты дебил ,оставайся им!
Я бы изменил мир,но Бог не дает исходники!
Изображение
Аватара пользователя
112
Модератор
Модератор
 
Автор темы
Сообщения: 2215
Зарегистрирован: 02 фев 2010, 21:53
Благодарил (а): 51 раз.
Поблагодарили: 80 раз.

Re: Работа с Payments API.(as3,php)

Сообщение catamount5 » 13 ноя 2012, 22:25

Добрый день!
У меня есть несколько вопросов.
Здорово, что вы создаете file.txt и записываете в него id плательщика и id покупки. А если покупки будут следовать одни за другими одновременно от разных пользователей, и все они будут перезаписываться в файл file.txt? И смысл этого файла, если вы туда только записываете, а от туда ничего не считываете? Если я что-то недопонимаю, то буду признательна за объяснение.

Скачала исходник, в файле payment указала защищенный ключ приложения, выложила 2 файла на сервер, в контакте поменяла ссылку, загрузила приложение вконтакт - и не работает :(

И почему Вы не дописали код в APIConnection.as ?

А дополнительные методы проверки статуса заказа? http://vk.com/developers.php?oid=-1&p=%D0%9E%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%B2_Payments_API Они нужны как таковые?

В своем коде, который сделала на основе прочитанного вконтакте, не понятно одно. В тестовом режиме: вот у меня 3 голоса, пытаюсь списать 5. Пишет - списалось успешно! Бред какой-то.
catamount5

 
Сообщения: 63
Зарегистрирован: 10 авг 2010, 13:37
Благодарил (а): 22 раз.
Поблагодарили: 6 раз.

Re: Работа с Payments API.(as3,php)

Сообщение 112 » 13 ноя 2012, 23:44

catamount5 писал(а):Здорово, что вы создаете file.txt и записываете в него id плательщика и id покупки. А если покупки будут следовать одни за другими одновременно от разных пользователей, и все они будут перезаписываться в файл file.txt? И смысл этого файла, если вы туда только записываете, а от туда ничего не считываете? Если я что-то недопонимаю, то буду признательна за объяснение.

Это всего лишь урок в котором показан Пример использования Payments API.Цель была показать как данный метод работает вообщем.Чтобы данные метод работал ,не надо больше ничего считывать.
Если вы хотите оттуда что-то считывать ,то лучше вообще записывать id юзера и заказа в бд ,а не в текстовый файл :)

catamount5 писал(а):А дополнительные методы проверки статуса заказа? http://vk.com/developers.php?oid=-1&p=% ... yments_API Они нужны как таковые?

Это скорее как дополнительные методы.Как таковые они не обязательны.

catamount5 писал(а):В своем коде, который сделала на основе прочитанного вконтакте, не понятно одно. В тестовом режиме: вот у меня 3 голоса, пытаюсь списать 5. Пишет - списалось успешно! Бред какой-то.


У вас на счету в реале 3 голоса ,а в тестовом режиме пытаетесь списать 5 и все списывается(т.е пишет об успешном списывание голосов),а на самом деле вообще ничего не списалось в т.ч и те 3 голоса которые у вас были,так я понял?Если да ,то у меня также ,это ж тестовый режим :)
Если ты дебил ,оставайся им!
Я бы изменил мир,но Бог не дает исходники!
Изображение

За это сообщение автора 112 поблагодарил:
catamount5
Аватара пользователя
112
Модератор
Модератор
 
Автор темы
Сообщения: 2215
Зарегистрирован: 02 фев 2010, 21:53
Благодарил (а): 51 раз.
Поблагодарили: 80 раз.

Re: Работа с Payments API.(as3,php)

Сообщение javist » 16 ноя 2012, 10:20

Добрый день,112!
Почему то в окне диалога оплаты в тестовом режиме, если делать подтверждение оплаты/отмену с первого раза отрабатывает не корректно, только со второго.
Например, при первом подтверждении отрабатывает onOrderCancel(в логе платежных уведомлений ответ приходит корректный), при повторном, корректно отрабатывает onOrderSuccess. Скрипт и вызов уведомлений не менялись и раньше корректно отрабатывало с первого раза.
У Вас были подобные проблемы? Писал админам VK, но они пока молчат.:(
javist

 
Сообщения: 8
Зарегистрирован: 21 сен 2012, 10:00
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.

Re: Работа с Payments API.(as3,php)

Сообщение 112 » 16 ноя 2012, 23:10

javist
Здравствуйте.Когда приложение еще было в тестовом режиме у себя таких проблем не замечал.
Если ты дебил ,оставайся им!
Я бы изменил мир,но Бог не дает исходники!
Изображение
Аватара пользователя
112
Модератор
Модератор
 
Автор темы
Сообщения: 2215
Зарегистрирован: 02 фев 2010, 21:53
Благодарил (а): 51 раз.
Поблагодарили: 80 раз.

Re: Работа с Payments API.(as3,php)

Сообщение javist » 19 ноя 2012, 11:12

Ясно. Спасибо. Буду пытать админов дальше.
javist

 
Сообщения: 8
Зарегистрирован: 21 сен 2012, 10:00
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.

Re: Работа с Payments API.(as3,php)

Сообщение XELAD » 20 ноя 2012, 15:25

Представим ситуацию, что это всё связано с БД, в №1 будут вноситься заказы, в №2 (там, где сохранение игроков) будут изменено кол-во монет на счету.
Как я понимаю:
1) Новую запись в БД №1 нужно создавать при case 'get_item'
- Внести user_id, item, order_id, а также app_order_id в виде счетчика. ПЛЮС одна графа, где мы укажем, сколько уведомлений пришло от ВК (подробности ниже), сейчас укажем ноль.
2) При case 'order_status_change' найти в БД №1 строку с теми же user_id, item, order_id....
Вспоминаем, что ВК может несколько раз отправлять уведомления типа Изменения статуса заказа с тем же order_id, смотрим на счетчик в той самой графе. И только если он равен нулю, прибавляем монеток в БД №2! И увеличиваем счетчик в той графе.
Всё это сделано, чтобы при каждом таком уведомлении от ВК, монеты не прибавлялись.
А если мы не находим такую запись в БД №1, то выдаем критическую ошибку.
3) В самом flash получаем событие onOrderSuccess, и загружаем данные пользователя из БД №2 для получения актуальной информации.

Поправьте меня, если я не прав, и если всё намного проще :)
XELAD

 
Сообщения: 205
Зарегистрирован: 17 июл 2012, 05:25
Благодарил (а): 13 раз.
Поблагодарили: 24 раз.

След.

Вернуться в Уроки по использованию ВКонтакте API



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

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