Как сделать платеж ВКОНТАКТЕ

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

Как сделать платеж ВКОНТАКТЕ

Сообщение newArray 01 июл 2013, 19:51

Самый функциональный платеж для iframe приложений - т е для наших. Этот то что на сайте в примере.
Оно там вроде все написано в документации - но в исходникам пару символов исправить надо. Пока допрешь до этого немало времени пройдет.В том числе и с русским шрифтом. Поэтому записываю чисто рабочие для теста. Это платеж из их же примера на сайте http://vk.com/developers.php?o=-1&p=Payments_API&s=0


Для теста можно использовать следующую html страницу:

Код: Выделить всё
<html>
<head>
<script src="http://vk.com/js/api/xd_connection.js?2" type="text/javascript"></script>     //  !!!


<script type='text/javascript'>

  function order() {
    var params = {
      type: 'item',
      item: 'item_25new'
    };
    VK.callMethod('showOrderBox', params);
  }

  var callbacksResults = document.getElementById('callbacks');

  VK.addCallback('onOrderSuccess', function(order_id) {
    callbacksResults.innerHTML += '
onOrderSuccess '+order_id;
  });
  VK.addCallback('onOrderFail', function() {
    callbacksResults.innerHTML += '
onOrderFail';
  });
  VK.addCallback('onOrderCancel', function() {
    callbacksResults.innerHTML += '
onOrderCancel';
  });

</script>


</head>
<body>
<input type='button' value='Нажми на меня' onclick='order()' />
</body>
</html>

html для теста ложится по адресу вашего приложения.

php из примера тоже просто так не вставишь. Надо менять имя товара item1 на item_25 как они указали в примере. Потом уберем весь русский текст из переменных. И везде где стоит http адрес дайте какую то ссылку на картинку. А также где указано вставьте свой секретный ключ для приложения, который вам дали.
В итоге такая должна быть рабочая версия:

Обработчик уведомлений php скрипт

Код: Выделить всё
<?php
header("Content-Type: application/json; encoding=utf-8");

$secret_key = 'HuNasdgasgagnj5'; //Вставить свой  Защищенный ключ приложения

$input = $_POST;


// Проверка подписи
$sig = $input['sig'];
unset($input['sig']);
ksort($input);
$str = '';
foreach ($input as $k => $v) {
  $str .= $k.'='.$v;
}

if ($sig != md5($str.$secret_key)) {
  $response['error'] = array(
    'error_code' => 10,
    'error_msg' => 'notnot',
    'critical' => true
  );
} else {

//здесь выполняется любой код после того, что подпись проверена успешно

  // Подпись правильная
  switch ($input['notification_type']) {
    case 'get_item':
      // Получение информации о товаре
      $item = $input['item']; // наименование товара

if ($item == 'item_25new') {
        $response['response'] = array(
          'item_id' => 25,
          'title' => '300 rrrrrrr',
          'photo_url' => 'http://3dsocialnettest.ru/1.jpg',
          'price' => 5
        );
      } elseif ($item == 'item2') {
        $response['response'] = array(
          'item_id' => 27,
          'title' => '500 rrrrrrrr',
          'photo_url' => 'http://3dsocialnettest.ru/1.jpg',
          'price' => 10
        );
      } else {
        $response['error'] = array(
          'error_code' => 20,
          'error_msg' => 'not',
          'critical' => true
        );
      }
      break;

case 'get_item_test':
      // Получение информации о товаре в тестовом режиме

      $item = $input['item'];
      if ($item == 'item_25new') {
        $response['response'] = array(
          'item_id' => 125,
          'title' => '300 ggggggggggg',
          'photo_url' => 'http://3dsocialnettest.ru/1.jpg',
          'price' => 5
        );
      } elseif ($item == 'item2') {
        $response['response'] = array(
          'item_id' => 127,
          'title' => '500 gggggggggg',
          'photo_url' => 'http://3dsocialnettest.ru/1.jpg',
          'price' => 10
        );
      } else {
        $response['error'] = array(
          'error_code' => 20,
          'error_msg' => 'notnot',
          'critical' => true
        );
      }
      break;

case 'order_status_change':
      // Изменение статуса заказа
      if ($input['status'] == 'chargeable') {
        $order_id = intval($input['order_id']);

// Код проверки товара, включая его стоимость
        $app_order_id = 1; // Получающийся у вас идентификатор заказа.

$response['response'] = array(
          'order_id' => $order_id,
          'app_order_id' => $app_order_id,
        );
      } else {
        $response['error'] = array(
          'error_code' => 100,
          'error_msg' => 'wwwwwwwwchargeable.',
          'critical' => true
        );
      }
      break;

case 'order_status_change_test':
      // Изменение статуса заказа в тестовом режиме
      if ($input['status'] == 'chargeable') {
        $order_id = intval($input['order_id']);

$app_order_id = 1; // Тут фактического заказа может не быть - тестовый режим.

$response['response'] = array(
          'order_id' => $order_id,
          'app_order_id' => $app_order_id,
        );
      } else {
        $response['error'] = array(
          'error_code' => 100,
          'error_msg' => 'wwwwwwwwwchargeable.',
          'critical' => true
        );
      }
      break;
  }
}

echo json_encode($response);
?>



Также объясню суть его работы. Вот та функция order() из html (функция api вконтакте) сама на автомате обращается к нашему скрипту php - так называемому скрипту обработки уведомлений - как "ОНИ" его называют. И путь к нему мы должны задать вот здесь
http://vk.com/developers.php?oid=-1&p=% ... %D0%B5_PHP


ИзображениеИзображение

Короче для теста этого примера - вы ложите html файл и php скрипт где нибудь на своем хосте. php скрипт называете как угодно - они например советуют vk_callback.php И вот в том окошечке на картинке указываете путь к этому php скрипту на своем хосте. И все. А html естественно у вас должен быть по тому пути который вы задали для своего приложения

Также незабудьте что если вы используете его в юнити сначала выполните команду спрятать веб плеер
Синтаксис:
Используется javascript
Application.ExternalEval(" document.getElementById('unityPlayer').style.visibility = 'hidden';");

 


Если кому надо будет свисните - я могу записать потом одной строчкой как выполнить вызов окна из юнити а не из веб страницы - просто тот код функции ордер переписывается сюда в Application.ExternalEval(

P.S.
Но допустим вы скажете - это все фигня по сравнению в мировой революцией - как нам получить в пхп скрипт id вконтакта юсера - что говорит о том что вы точно также не понимаете этого API как и я. Ну что отвечу (якобы авторитетно) - на вопросы надо поширше смотреть. Видимо при такой кухне можно обращаться ко всем доступным переменным API контакта. То есть по идее вы банально можете получить ай ди следующим кодом в этом же скрипте

$ids = $input['user_id']; ------ инпут этот метод POST - смотрите выше $input = $_POST;

и затем преспокойно работать с вашей базой.
newArray
Адепт
 
Сообщения: 1226
Зарегистрирован: 14 фев 2013, 07:03
Откуда: оттуда

Re: Как сделать платеж ВКОНТАКТЕ

Сообщение newArray 02 июл 2013, 15:33

Продолжим наши упражнения. Допустим после последнего P.S. вы сказали - по любому. Ну то есть "все равно не работает". Ну что сказать? - это стандарт. Действительно Даже если мы со скрипта обработчика и записали в нашу БД данные что с того - нам надо получить подтверждение в юнити, иначе особого смысла не имеет. Прямого общения скрипта обработчика с юнити нет. Но если внимательно почитаем API контакта у них там все предусмотрено и вот следущая ересь из html страницы примера, которая на 1 взгляд нафиг не нужна за это отвечает. Читаем подробно тут
http://vk.com/developers.php?oid=-1&p=I ... 0%B8%D0%B8 VK.addCallback
Синтаксис:
Используется javascript
var callbacksResults = document.getElementById('callbacks');

 VK.addCallback('onOrderSuccess', function(order_id) {callbacksResults.innerHTML += 'onOrderSuccess '+order_id; });
  VK.addCallback('onOrderFail', function() {callbacksResults.innerHTML += 'onOrderFail'; });
  VK.addCallback('onOrderCancel', function() {callbacksResults.innerHTML += 'onOrderCancel'; });
 

Что там за адреса понаписаны я и сам не понимаю - но главное что эти события реально возвращаются нам при том или ином действии юсера с окном покупки. Короче перепишем первное событие по человечески и удалим ересь:
(сам метод смотрите в таблице по ссылке)
Синтаксис:
Используется javascript
 VK.addCallback('onOrderSuccess', onOrderSuccess});

function onOrderSuccess()
{
   document.getElementById('unityPlayer').style.visibility = 'visible';
   
}

Вот таким образом на событии осуществления покупки - мы включим обратно наш веб плеер. Что нам 100 проц необходимо сделать. А также можно конечно в этой функции передавать уже любые мессаги юнити о успешном совершении покупки. А также для тех кто ни в зуб ногой в веб программировании (как я), для понимания напишу как это же открытие веб плеера можно сделать 1 строчкой:

VK.addCallback('onOrderFail', function() {document.getElementById('unityPlayer').style.visibility = 'visible';});

Итого - в конечном итоге приведу пример того же самого что в 1 мессаге но с обратным сообщением в юнити. Скрипт php оставляем как был. html файл переписыввааем под юнити - там всего 2 вставки - они указаны:
(Только в скрипте везде поменяйте имя веб плеера на свое)
Синтаксис:
Используется javascript
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
        <head>
                <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
                <title>Unity Web Player | New Unity Project 5</title>
                <script type='text/javascript' src='https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js'></script>
               

//-----------------1 my paste-------------------
<script src="http://vk.com/js/api/xd_connection.js?2" type="text/javascript"></script>
//-----------------------------------------------



<script type="text/javascript">
                <!--
                var unityObjectUrl = "http://webplayer.unity3d.com/download_webplayer-3.x/3.0/uo/UnityObject2.js";
                if (document.location.protocol == 'https:')
                        unityObjectUrl = unityObjectUrl.replace("http://", "https://ssl-");
                document.write('<script type="text\/javascript" src="' + unityObjectUrl + '"><\/script>');
                -->
                </script>



//--------------------2 my paste---------------------------

<script type='text/javascript'>

var u = new UnityObject2();             //переменные для обратной мессаги в юнити
u.initPlugin(jQuery("#unityPlayer")[0], "WebPlayer.unity3d");

  function order() {
    var params = {
      type: 'item',
      item: 'item_25new'
    };
    VK.callMethod('showOrderBox', params);
 //   document.getElementById('unityPlayer').style.visibility = 'visible';
//Say();

  }

  var callbacksResults = document.getElementById('callbacks');

  VK.addCallback('onOrderSuccess', onOrderSuccess);
  VK.addCallback('onOrderFail', onOrderFail);
  VK.addCallback('onOrderCancel', onOrderCancel);





function onOrderSuccess()
{
   document.getElementById('unityPlayer').style.visibility = 'visible';
   u.getUnity().SendMessage("Object", "MyFunction", "Hello Order success!");
}


function onOrderFail()
{
   document.getElementById('unityPlayer').style.visibility = 'visible';
   u.getUnity().SendMessage("Object", "MyFunction", "Hello Order fail!");  

}

function onOrderCancel()
{
   document.getElementById('unityPlayer').style.visibility = 'visible';
   u.getUnity().SendMessage("Object", "MyFunction", "Hello Order cancel!");  

}



</script>


//-------------------------------------------------------------



                <script type="text/javascript">
                <!--
                        var config = {
                                width: 960,
                                height: 600,
                                params: { enableDebugging:"0" }
                               
                        };
                        var u = new UnityObject2(config);

                        jQuery(function() {

                                var $missingScreen = jQuery("#unityPlayer").find(".missing");
                                var $brokenScreen = jQuery("#unityPlayer").find(".broken");
                                $missingScreen.hide();
                                $brokenScreen.hide();
                               
                                u.observeProgress(function (progress) {
                                        switch(progress.pluginStatus) {
                                                case "broken":
                                                        $brokenScreen.find("a").click(function (e) {
                                                                e.stopPropagation();
                                                                e.preventDefault();
                                                                u.installPlugin();
                                                                return false;
                                                        });
                                                        $brokenScreen.show();
                                                break;
                                                case "missing":
                                                        $missingScreen.find("a").click(function (e) {
                                                                e.stopPropagation();
                                                                e.preventDefault();
                                                                u.installPlugin();
                                                                return false;
                                                        });
                                                        $missingScreen.show();
                                                break;
                                                case "installed":
                                                        $missingScreen.remove();
                                                break;
                                                case "first":
                                                break;
                                        }
                                });
                                u.initPlugin(jQuery("#unityPlayer")[0], "WebPlayer.unity3d");
                        });
                -->
                </script>
               
        </head>


        <body>


                <p class="header"><span>Unity Web Player | </span>New Unity Project 5</p>
                <div class="content">
                        <div id="unityPlayer">
                                <div class="missing">
                                        <a href="http://unity3d.com/webplayer/" title="Unity Web Player. Install now!">
                                                <img alt="Unity Web Player. Install now!" src="http://webplayer.unity3d.com/installation/getunity.png" width="193" height="63" />
                                        </a>
                                </div>
                                <div class="broken">
                                        <a href="http://unity3d.com/webplayer/" title="Unity Web Player. Install now! Restart your browser after install.">
                                                <img alt="Unity Web Player. Install now! Restart your browser after install." src="http://webplayer.unity3d.com/installation/getunityrestart.png" width="193" height="63" />
                                        </a>
                                </div>
                        </div>
                </div>
               
        </body>
</html>

 

И далее как видно из скрипта для передачи мессаги в юнити вам надо на ГО с именем Object повесить следующий скрипт для приема, обязательно имеющий функцию MyFunction:
Синтаксис:
Используется javascript
var x : String;

function OnGUI () {

 if (GUILayout.Button("Купить за "+ " голосов"))
    Application.ExternalEval(" document.getElementById('unityPlayer').style.visibility = 'hidden'; order(); ");

 GUILayout.Label(x);
 
}


function MyFunction(param : String)
{
    x = param;
    Debug.Log(param);
    Application.ExternalEval(" document.getElementById('unityPlayer').style.visibility = 'visible';");
   
   
}

 

В результате работы этого скрипта мы будем получать в гуи юнити сообшения что покупка либо была совершена либо была отменена

И в случае чего исходник этого скрипта примера на юнити в атачменте.
У вас нет доступа для просмотра вложений в этом сообщении.
newArray
Адепт
 
Сообщения: 1226
Зарегистрирован: 14 фев 2013, 07:03
Откуда: оттуда

Re: Как сделать платеж ВКОНТАКТЕ

Сообщение kolya9898 10 авг 2013, 17:55

Всё сделал по инструкции, пишет "Ваш запрос не был обработан, попробуйте позднее"
вот лог

18:50:46 Тестовый Ответ
{"response":{"item_id":127, "title":null, "photo_url":"http://somesite/images/coin.jpg", "price":10}}

18:50:46 Тестовый Запрос
app_id=1&item=money2&lang=ru_RU&notification_type=get_item_test&order_id=269584&receiver_id=1&user_id=1
Изображение
Аватара пользователя
kolya9898
UNITрон
 
Сообщения: 333
Зарегистрирован: 15 июл 2013, 19:28
Откуда: Челябинск
Skype: kolyan9898

Re: Как сделать платеж ВКОНТАКТЕ

Сообщение proton667 10 авг 2013, 18:41

Блин ну че непонятного. Если ты в одноц строчке где то стопронул код как ты хочешь чтоб он выполнился. Он у тебя стопронул на этой строчке

http://somesite/images/coin.jpg" у тебя что домен сайта somesites. Только не спрашивай потом почему у тебя еще и title не приходит. Я ж писал не для полных нубов а чтоб помочь разобраться. Для полных нубов я бы по другому писал.

Я там даже в пхп скрипте вставил свои адреса. Проверь еще внимательно там где сказано куда в контакте вставляется путь к пхп скрипту и также название скрипта - чтоб он хоть прочитал его. Всю инфу апи платежа принимает только из этого скрипта.
Скрытый текст:
но вино будет
.
proton667
UNIт
 
Сообщения: 144
Зарегистрирован: 20 июл 2013, 12:40

Re: Как сделать платеж ВКОНТАКТЕ

Сообщение kolya9898 10 авг 2013, 19:23

какая разница какая ссылка на фото? ну поменял я ссылку и что изменилось что-то?
нет ничего не изменилось!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
и да почему title пустой?
Изображение
Аватара пользователя
kolya9898
UNITрон
 
Сообщения: 333
Зарегистрирован: 15 июл 2013, 19:28
Откуда: Челябинск
Skype: kolyan9898

Re: Как сделать платеж ВКОНТАКТЕ

Сообщение trololoid 10 авг 2013, 19:31

Очень печально, что в rss ленте не работает чс..
Тебе намекнули, что у тебя нет домена и, собственно, хостинга, куда ты тянешь свои маленькие ручонки.
Аватара пользователя
trololoid
Старожил
 
Сообщения: 712
Зарегистрирован: 15 сен 2011, 19:18
Откуда: Туапсе, Краснодарский край, Россия

Оптимизация доходов от рекламы Вконтакте.

Сообщение newArray 23 авг 2013, 08:56

Для инфы. Как получить с creara-media.ru код кол бека. Они давали эту мессагу в профиле но потом ее удалили

Возможность выкупа трафбека

Уважаемый партнер!

Ваши инициативы совпали с нашими планами по реализации трафбека с помощью второй рекламной системы. Предлагаем Вам способ настроить показ рекламного блока от SocialTank на заглушке в том случае, если реклама в блоках Pre-loader или Mid-roll отсутствует.

Код pre-loader и/или mid-roll, доступный в разделе «Код блока», необходимо дополнить функцией, в которую нужно вставить скрипт рекламного блока SocialTank. Его можно получить в личном кабинете на сайте http://www.socialtank.ru.

Функция основана на коллбеке, который вызывается блоком Creara Media, если для конкретного пользователя рекламы нет. Функция выглядит следующим образом:
function cmPreloadNoAdvCallback() {
//код SocialTank
}
Если у Вас появились дополнительные вопросы, обратитесь в Службу заботы о партнерах Creara Media.

С уважением,
Команда Creara Media


Может ли быть польза если при отсутствии рекламы от креара показывать по кол беку код социалтанка? Ведь его можно показывать на странице без всякого кол бека. Возможно и будет польза. Написано в хелпе еще вот это
Также рекомендуем для увеличения Вашего дохода, настроить показ рекламного блока от SocialTank на заглушке в том случае, если реклама в блоке Mid-roll отсутствует, для увеличения Вашего дохода (исследования показали, что CTR доходит до 25%).

ИМХО это вполне вероятно хотя я еще не пробовал.
А вообще тоб я попробую сегодня код социалтанка на заглушке и скажу че там с CTR

Итого в результате в конце дня я не очень понял дало оно что то или нет. Реально заработок такой же как и вчера. единственное что как только я ее поставил у меня какой то высокий стр показывало и было такое что цена за клик была 2 рубля. Такого я никогда не видел - обычно только рубль. Но под конец дня это стр упало и в итоге заработок ничем не отличается как если бы не ставить кол бек. вобщем это результат первого дн такой - что будет дальше не знаю.
newArray
Адепт
 
Сообщения: 1226
Зарегистрирован: 14 фев 2013, 07:03
Откуда: оттуда

Re: Как сделать платеж ВКОНТАКТЕ

Сообщение newArray 27 авг 2013, 16:20

Это кабздец .Сегодня поставил 2 банера социалтанка на заглушку креары как сказано в предыдущей месаге - в расчете повысить СТР. Так короче оплата в 2 раза упала. Фигня все это - ниче заглушка СТР не повышает. У меня еше никогда такой как сегодня низкой платы за клик не было. 50 коп.
newArray
Адепт
 
Сообщения: 1226
Зарегистрирован: 14 фев 2013, 07:03
Откуда: оттуда

Re: Как сделать платеж ВКОНТАКТЕ

Сообщение Golandez 27 авг 2013, 16:32

Было бы очень полезно, если бы вы оформляли свои выводы в одном посте, например первом- в виде шагов. Эта вытяжка была бы эффективнее чем растянутый на несколько страниц тред.
Ты нужен только тогда,когда нужен.(С)
Сказать спасибо
Аватара пользователя
Golandez
Пилигрим
 
Сообщения: 1637
Зарегистрирован: 06 авг 2009, 13:55
Откуда: Харьков
Skype: lestardigital

Re: Как сделать платеж ВКОНТАКТЕ

Сообщение Sergasteam 07 сен 2013, 14:14

Мне не ясен один момент,а как должен называться html файл про который речь выше шла,типа вызов окна платежа?
И как обращаться к этому файлу,точнее откуда?

Но почему то когда я пытаюсь открыть окно платежей у меня появляется "ошибка доступа",хотя я являюсь тестером приложения.
Последний раз редактировалось Sergasteam 07 сен 2013, 15:37, всего редактировалось 1 раз.
Sergasteam
UNIт
 
Сообщения: 68
Зарегистрирован: 16 янв 2011, 00:04

Re: Как сделать платеж ВКОНТАКТЕ

Сообщение DbIMok 07 сен 2013, 14:26

html файл генерирует (копирует из папки установки юнити) при билде. и называет его так же как называется билд. в файл нужно дописать свои ф-ии. лежит он обычно рядом с unity3d файлом, на него ссылается фрейм вконтакта. логи попыток платежей можно посмотреть на соотв. страничке-вкладке админки приложения вконтакта.
правильный вопрос - половина ответа. учитесь формулировать вопросы понятно.
Новости > _Telegram чат @unity3d_ru (11.6k/4.8k online) > _Telegram канал @unity_news (4.6k подписчиков) > Телеграм тема > "Спасибо"
Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6372
Зарегистрирован: 31 июл 2009, 14:05

Re: Как сделать платеж ВКОНТАКТЕ

Сообщение Sergasteam 07 сен 2013, 16:18

да! все получилось спасибо за подсказку!) :ymparty:

Но не могли бы подсказать как в юнити можно получить имя пользователя вк?
Sergasteam
UNIт
 
Сообщения: 68
Зарегистрирован: 16 янв 2011, 00:04

Re: Как сделать платеж ВКОНТАКТЕ

Сообщение Nicloay 07 сен 2013, 19:23

Не забываем про UsingWebPlayertemplates где можно кастомизировать веббилд файлы. плюс PostprocessBuildPlayer скрипт в котором можн после сборки выполнить какие то инструкции (не уверен правда как он работает на Win платформах)
If you wish to make an apple pie from scratch, you must first invent the universe.(Carl Sagan, Cosmos)
| My Asset Store | coloring book | github | _wiki.unity3d.com | twitter | linkedin |
Аватара пользователя
Nicloay
Адепт
 
Сообщения: 1288
Зарегистрирован: 31 май 2012, 09:27
Откуда: Альпс
  • Сайт

Re: Как сделать платеж ВКОНТАКТЕ

Сообщение newArray 07 сен 2013, 20:28

Имя получаем вот так viewtopic.php?f=13&t=3894&st=0&sk=t&sd=a&hilit=%D0%B2%D0%BA%D0%BE%D0%BD%D1%82%D0%B0%D0%BA%D1%82%D0%B5&start=60#p126285 это тоже с веб страницы. Просто для получения имени мы обязательно должны знать ай ди игрока контактовский. без ай ди как бы имя не узнаешь.

вот это такая фича контактовская VK.init(function() она даже реально работает на веб странице. но можно пихнуть этот кусок кода естественно в обычную джавва скрипт функцию. обязательно на присказку в конце сообщения обрати внимание.
newArray
Адепт
 
Сообщения: 1226
Зарегистрирован: 14 фев 2013, 07:03
Откуда: оттуда

Re: Как сделать платеж ВКОНТАКТЕ

Сообщение Sergasteam 07 сен 2013, 20:35

newArray

Но это же через враппер,а я своими ручками пытаюсь делать :)
у вас выше описано как выполнять через браузер команды vk, а есть ли html код, который делает запрос на получение имени и фамилии,а потом передает в юнити из html'я?
Sergasteam
UNIт
 
Сообщения: 68
Зарегистрирован: 16 янв 2011, 00:04

След.

Вернуться в Исходники (Копилка)

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

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