Страница 1 из 5
Настроить механизм покупки валюты в IFrame приложении
Добавлено: 02 фев 2013, 11:22
Roman99
Здравствуйте. Хотелось бы узнать, как настроить механизм покупки валюты в IFrame приложении. При клике на кнопку купить - предлагалось списать голос, и прибавить к значению в базе данных +1000 монет.
Помогите пожалуйста.
. Если можно, то кодом.
Re: По поводу покупки валюты.
Добавлено: 02 фев 2013, 14:56
Alazaur
Как сделать "с чистого листа" долго разжевывать. Посмотрите здесь на форуме есть уроки.
Могу показать как сделать, если подключить вот этот класс
http://flapps.ru/forum/post42616.html#p42616
HTML:
Код: Выделить всё
<html> <head> <script src="http://vkontakte.ru/js/api/xd_connection.js?2" type="text/javascript"></script> <script type="text/javascript"> VK.addCallback('onOrderSuccess', function(order_id){alert("Платеж "+order_id+" успешно проведен");}); VK.addCallback('onOrderCancel', function(order_id){alert("Пользователь отменил покупку");}); VK.addCallback('onOrderFail', function(order_id){alert("При проведении платежа возникла ошибка");}); function bymoney(count){VK.callMethod('showOrderBox', { type:'item',item:'money_'+count});} </script> </head> <body> <a href="#" onclick="bymoney(10)">Купить 10 монет</a> <a href="#" onclick="bymoney(20)">Купить 20 монет</a> </body></html>
Серверный скрипт, адрес которого надо указать в настройках приложения:
Код: Выделить всё
<?php require_once("Payments.php"); //Подключаем класс header("Content-Type: text/html; charset=utf-8"); //Устанавливаем кодировку $secret_key = "fd6767hjhkdfjhf444"; //Секретный ключ приложения $items = array( array('item_name'=>'money_10', 'item_title'=>'Десять монет', 'item_price'=>1, 'money'=>10), array('item_name'=>'money_20', 'item_title'=>'Двадцать монет', 'item_price'=>2, 'money'=>20) ); $payments = new Payments($secret_key, $items); $payments->process($_POST, 'handler'); function handler($data) { //Добавление монет пользователю. Подключение к БД я опустил полагаю вы знаете как его сделать if(mysql_query("UPDATE users SET money = money + " . $data['item']['money'] . " WHERE userid = " . $data['request']['user_id'])) return $data['request']['order_id']; else return FALSE; }?>
Не проверял, но должно работать. Здесь я показал самую простую реализацию, но рекомендую дополнительно сделать учет заказов и перед тем как добавлять пользователю денег проверять не было ли такого заказа ранее. А то мало-ли всякое бывает, ответ до ВК с первого раза не дойдет и покупка продублируется.
Re: По поводу покупки валюты.
Добавлено: 02 фев 2013, 16:02
Roman99
Может я что-то не так сделал, может и вправду не работает, но при клике на ссылку, сначала долго грузится Ожидание информации о товаре, а потом При проведении платежа возникла ошибка. Ваш запрос не был обработан. Попробуйте повторить его позднее.
Лог платежных уведомлений
Дата Режим Тип Текст
Тестовый Ответ п»їп»ї{"response":{"item_id":null, "title":"Десять монет", "price":1, "photo_url":null}}<style type="text/css"> #follow1{ margin: 0px; z-index: 2; position: absolute; top: 0px; right: 0px;} </style> <div id="follow1"> </div> <a href="
http://мойсайт.ru/" target="_blank"></a>
Дата Режим Тип Текст
Тестовый Запрос app_id=1111&item=money_10&lang=ru_RU¬ification_type=get_item_test&order_id=109728&receiver_id=1111111&user_id=1111111
и примерно так во всех, только там еще 20 монет. Что не работает???
Сделал вот так
Код: Выделить всё
<?php //Прописал переменные для коннекта с базой require_once("Payments.php"); //Подключаем класс header("Content-Type: text/html; charset=utf-8"); //Устанавливаем кодировку $secret_key = "fd6767hjhkdfjhf444"; //Секретный ключ приложения $items = array( array('item_name'=>'money_10', 'item_title'=>'Десять монет', 'item_price'=>1, 'money'=>10), array('item_name'=>'money_20', 'item_title'=>'Двадцать монет', 'item_price'=>2, 'money'=>20) ); $payments = new Payments($secret_key, $items); $payments->process($_POST, 'handler'); function handler($data) { mysql_connect($db_host, $db_user, $db_password) or die (mysql_error()); mysql_select_db($db_name) or die (mysql_error()); mysql_query("SET NAMES 'utf8'"); if(mysql_query("UPDATE users SET money = money + " . $data['item']['money'] . " WHERE userid = " . $data['request']['user_id'])) return $data['request']['order_id']; else return FALSE; }?>
Кстати 1 код html вставил в файл где выводится кол-во монет. Файл php. Я думаю может поэтому.
Re: По поводу покупки валюты.
Добавлено: 03 фев 2013, 00:52
Alazaur
откуда у вас в ответе сервера html
Ответ п»їп»ї{"response":{"item_id":null, "title":"Десять монет", "price":1, "photo_url":null}}
<style type="text/css"> #follow1{ margin: 0px; z-index: 2; position: absolute; top: 0px; right: 0px;} </style> <div id="follow1"> </div> <a href="http://мойсайт.ru/" target="_blank"></a>
В серверном скрипте кроме вышеуказанного ничего не должно быть. HTML отдельно в другом файле.
И вот это
п»їп»ї намекает, что у вас файлы с серверным скриптом и/или c моим классом в неправильной кодировке. пересохраните их в utf8.
Re: По поводу покупки валюты.
Добавлено: 03 фев 2013, 09:31
Roman99
Re: По поводу покупки валюты.
Добавлено: 03 фев 2013, 09:49
Alazaur
В приведенном вами логе
Код: Выделить всё
{"response":{"item_id":null, "title":"Десять монет", "price":1, "photo_url":null}}
Это правильный ответ скрипта, он работает, и класс подключен нормально. Проблема из-за того что с нужным ответом цеплялся html и
п»їп»ї. HTML вы говорите уже убрали.
А вот это п»їп»ї очень похоже на BOM сигнатуру. Видимо у вас файл сохранен в UTF8 с BOM. А нужно без нее. Воспользуйтесь нормальным редактором. Например Notepad++. Там в кодировках есть буквально такое: "Кодировать в UTF-8 без BOM"
Re: По поводу покупки валюты.
Добавлено: 03 фев 2013, 13:57
Roman99
Re: По поводу покупки валюты.
Добавлено: 04 фев 2013, 08:00
Roman99
Да вы были правы на счет кодировки. Скачал Notepad++ и изменил. Но все тоже самое. Все непонятные буквы исчезли (в начале), но html остался. Я думаю все из-за того что сервер бесплатный. И после выполнения скрипта он внизу обязательно приписывает ссылку на главный сайт. Отсюда и html. И я так подозреваю что он у меня работать не будет.
Вот что он мне в последний раз вернул
Код: Выделить всё
{"response":{"item_id":null, "title":"Десять монет", "price":1, "photo_url":null}}<style type="text/css"> #follow1{ margin: 0px; z-index: 2; position: absolute; top: 0px; right: 0px;} </style> <div id="follow1"> </div> <a href="http://myfreehosting.ru/" target="_blank"> myFREEhosting.ru :)</a>
А вот это вот
</style> <div id="follow1"> </div> <a href="http://myfreehosting.ru/" target="_blank"> myFREEhosting.ru </a> он приписывает сам (сервер). Подскажите будет работать или нет???
Re: По поводу покупки валюты.
Добавлено: 04 фев 2013, 09:08
Casperovskii
Поидее, контакт интересует только объект {response}, а что там дальше, его не волнует. Поэтому должно работать.
Re: По поводу покупки валюты.
Добавлено: 04 фев 2013, 12:41
Alazaur
Неа, скорее всего не будет работать, ВК просто не распарсит входящую строку в объект.