Покупка доступа к статье за деньги и юзерпоинты ( предлагаю модули)

Главные вкладки

Аватар пользователя gumk gumk 10 февраля 2011 в 19:15

Добрый день, уважаемые друпалеры!

Предлагаю вам два модифицированных модуля по покупке доступа к статьям:
1) модифицированный после покупки статьи деньги начисляются автору + возможность в настройках модуля указать комиссию магазина в %
2) Модифицированный модуль , который в настоящее время под 6 drupal абсолютно не работает.
В модифицированной версии изменена часть логики данного модуля по закрытию контента от не оплативших пользователей и + кое-какие доработки

оба модуля в alpha версии и нуждаются в тестировании и доработке, так что жду ваших комментариев.

В дальнейшем планирую написать универсальный модуль по покупки контента:

Модуль представляет собой единую систему покупки материалов, интегрированную и с userpoint и pgapi

Настройки:
1) Выбор типа материала
2) Включение/выключение способов доступа
3) Настройка цены (отдельно для userpoint и pgapi): a) администратор указывает фиксированную цену за статьи
б) пользователь сам может указать цену за свои стати (отдельное право доступа).
4) настойка комиссии сайта(отдельно для userpoint и pgapi).
5) выставляется курс денег pgapi к userpoint

Реализация:
При создании материала в форму добавляется выпадающий список (свободный, по userpoin-там, за деньги), при необходимости AHAH подгружается второе поле, в котором можно указать цену.

Пользователь может получить доступ к материалам в зависимости от выбранного автором способа оплаты.
При необходимости пользователь может купить userpoints через pgapi по курсу, установленному на сайте.
Автор статьи получает userpoins и деньги pgapi с учетом вычета комиссии сайта.
При смене автором способа оплаты или цены у уже оплативших доступ к статье сохраняется.

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

Кто заинтересован в создании такого модуля прошу помочь делом, советом, или денежкой (R346506327073)
Скорость разработки будет зависеть от вашей помощи.

ВложениеРазмер
Файл pg_userpay.rar11.71 КБ
Файл userpoints_nodeaccess.rar15.11 КБ

Комментарии

Аватар пользователя FreeDS FreeDS 4 марта 2011 в 13:03

Спасибо gumk, то что надо!
Возникает проблема - создателю (продавцу) ноды показывается ссылка на покупку, т.е. он может сам же купить доступ к своей ноде, что вызывает ошибку. Так же создатель ноды должен иметь возможность смотреть полное описание своей же ноды.
Для себя я это поправил неким своим костылем, но правильнее будет, если это будет сделано самим разработчиком.
Так же поправил проверку прав для Buy access, которые назначаются в Разрешениях ролей.
Для моего проекта необходимо, что бы нода продавалась только один раз, т.е. только одному покупателю. К сожалению, пока нет времени разобрать модуль - сделал просто скрытие ссылки Buy access, при уже купленной ноде. Но есть вероятность, что при одновременной покупке - купить ноду смогут оба. Надо делать проверку на купленность ноды перед покупкой.
Было бы замечательно, если бы в админке можно было задать сколько экземпляров ноды может быть продано, либо если 0 - то без ограничений. А во Views отсортировать не купленные ноды.
Если удастся это реализовать - готов немного проспонсировать.

Аватар пользователя FreeDS FreeDS 4 марта 2011 в 15:55

iNFerNo, я уже не помню точно - сидел ночью.
Сразу хочу сказать, что несмотря на большой опыт php разработки с друпалом общаюсь на Вы и только пару месяцев.
Постараюсь вспомнить, что я делал (смотрю на правленый модуль pg_userpay):

Исправил pg_userpay_link

Оригинал:

<?php
function pg_userpay_link($type$object$teaser FALSE) {
  
$links = array();
  if (!
user_access('free access')&& variable_get('pg_userpay_allowed_'$object->type0) && $object->pg_userpay_price && !pg_userpay_is_paid($object->nid)) {
    
$links['sample_link'] = array(
      
'title' => t('Buy access'),
      
'href' => 'simplepay/'.$object->nid,
      
'attributes' => array('title' => t('Buy access')),
    );
  }

  return 

$links;
}
?>

Моя:

<?php
function pg_userpay_link($type$object$teaser FALSE) {
  global 
$user;
  
$links = array();
  if (!
user_access('free access') && user_access('buy access') && $user->uid != $object->uid && $object->pg_userpay_price && !pg_userpay_is_paid($object->nid) && !pg_userpay_is_sold($object->nid)) {
    
$links['sample_link'] = array(
      
'title' => t('Buy access'),
      
'href' => 'simplepay/'.$object->nid,
      
'attributes' => array('title' => t('Buy access')),
    );
  }

  return 

$links;
}
?>

Так и не смог понять, что делает в проверке variable_get('pg_userpay_allowed_'. $object->type, 0).
Предположил, что проверку прав.
Заменил на user_access('buy access') - теперь работает как надо.

$user->uid != $object->uid - так мы скрываем Buy access от автора/создателя ноды.

На основе pg_userpay_is_paid добавил в модуль функцию pg_userpay_is_sold - проверки "проданности" ноды:

<?php
function pg_userpay_is_sold($nid){
  
$ret FALSE;
  
$pr db_fetch_object(db_query("SELECT * FROM {pg_userpay_payment} WHERE nid = '%d'"$nid));
  if(!empty(
$pr)){
    
$ret TRUE;
  };
  return 
$ret;
}
?>
Аватар пользователя gumk gumk 4 марта 2011 в 14:35

баг с отображением ссылки на покупку поправлю за праздники. с количеством раз покупки реализовать смогу по-позже.

Аватар пользователя iNFerNo iNFerNo 4 марта 2011 в 14:52

подскажите userpoints_nodeaccess
будет работать совместно с модулем доступа node_access

т.е. если нода не доступна для конкретной роли
покупать доступ нельзя будет?

а если для роли нет доступа а конкретному юзеру есть... (ACL модуль) Будет предлагаться покупка ноды?

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

Аватар пользователя FreeDS FreeDS 25 марта 2011 в 13:40

Eddie wrote:
А где указывать кошелек магазина, куда проценты уходить будут?

При приеме оплаты средства уже лежат в кошельке магазина.

Аватар пользователя Eddie Eddie 11 апреля 2011 в 19:43

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

Аватар пользователя FreeDS FreeDS 13 апреля 2011 в 13:43

Eddie wrote:
Комиссия магазина не работает, деньги целиком попадают в кошелек магазина, создателю ноды ничего не приходит.

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

Аватар пользователя iNFerNo iNFerNo 14 апреля 2011 в 9:11

кто сделает так что бы автор не платил за свой же материал.

пи.эс. нужно убрать оплату наликом. нужна оплата только с баланса. и тогда и проценты будут идти.

кинул на баланс в кашелек. пошел купил доступ к ноде.

Аватар пользователя Eddie Eddie 14 апреля 2011 в 17:38

Поставил галку "Simple pay purchase allowed", создал пробную ноду. Но полный вид ноды видно еще до оплаты... Перерыл все настройки... Как скрывать полный вид?

Аватар пользователя gumk gumk 14 апреля 2011 в 20:13

"Eddie" wrote:

Поставил галку "Simple pay purchase allowed", создал пробную ноду. Но полный вид ноды видно еще до оплаты... Перерыл все настройки... Как скрывать полный вид?


А не под админом смотреть пробовали?
"iNFerNo" wrote:

а еще бы был бы кошелек магазина для админа, что бы видеть все операции кто сколько и когда...


есть подмодуль pgapi показывает все операции

Аватар пользователя iNFerNo iNFerNo 15 апреля 2011 в 9:30

там косяки... удаляешь... операции, но все равно все видно.

"gumk" wrote:
есть подмодуль pgapi показывает все операции

я о другом. что бы общий был кошелек со всеми по сайту операциями...

Аватар пользователя Eddie Eddie 15 апреля 2011 в 12:50

"gumk" wrote:
А не под админом смотреть пробовали?

Да, конечно пробовал. Т.е, кроме этой галки "Simple pay purchase allowed" ничего больше не надо настраивать для скрытия?
А модули simplepay и userpay отличаются только наличием комиссии магазина?

Аватар пользователя iNFerNo iNFerNo 15 апреля 2011 в 13:05

нада только комисией...

так что за сколько можно доработать модуль что бы автор не платил и что бы нода полная не вылезала... для тех кто не купил еще...

Аватар пользователя Eddie Eddie 16 апреля 2011 в 12:22

to iNFerNo

FreeDS объяснил мне по поводу того, чтобы нода полная не вылезала до оплаты.
Я не там искал, это не CCK-поля скрываются! Это скрывается полное описание ноды в поле "Содержимое" при отделении анонса от полной версии, и до оплаты видно только анонс ноды.

Аватар пользователя iNFerNo iNFerNo 16 апреля 2011 в 18:50

я знаю что анонс.

а зачем он нужен... да еще с комментариями. кто мешает скопировать в комментарии публикацию...

как бы нужно что бы вылезала страница как минимум без комментариев а как макимум просто страница с кнопкой материал нужно купить....

а то человек подумает что тизер = материал полный... и ничего покупать не нужно.

или например... материал изночально равен тизеру а чел возмет и купит а там нифига нет нового?

Аватар пользователя iNFerNo iNFerNo 17 апреля 2011 в 0:58

"Eddie" wrote:
Комментарии можно отключить в настройках материала...

зачем их отключать то???

если они должны быть!!!

1. куплена нода
2. когда к ноде не применяется оплата...

Аватар пользователя FreeDS FreeDS 19 апреля 2011 в 15:18

iNFerNo wrote:
"Eddie" wrote:
Комментарии можно отключить в настройках материала...

зачем их отключать то???

если они должны быть!!!

1. куплена нода
2. когда к ноде не применяется оплата...

Ход ваших мыслей мне не ясен.
Так нужны комментарии или нет?
Если нужны - включаем, если нет - выключаем.
Если нужна какая то определенная логика в отображении комментариев, тогда лучше объясняйте, чего вы хотите получить на выходе.

Аватар пользователя iNFerNo iNFerNo 19 апреля 2011 в 15:42

Я уже написал давно (см выше) мысль.

1. Зачем показывать комменты если нода не куплена?

-- как минимум показывать тизер (но правильнее ничего не показывать (что бы не было путаницы т.к. я при попадани в ноду если вижу что я туда зашел, а если еще и комменты видны - ЯСНО ДЕЛО что в голову даже не придет мысль что еще что-то купить нужно что бы якобы увидеть еще больше) - а лишь сообщение типа - для просмотра ноды ее нужно купить. И кнопка с надписью желаете купить? и отмена ссылка - возвращает юзера на страницу с которой он попал сюда.

2. Зачем продавать ноду автору ноды?

Аватар пользователя FreeDS FreeDS 19 апреля 2011 в 22:09

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

2. Это бага, а может и фича. Для своего проекта я это поправил - см. выше.

Аватар пользователя iNFerNo iNFerNo 20 апреля 2011 в 8:36

Так если в комент можнослить всю ноду... (допустим тексты там) - не безопасно как бы... и зачем обсуждать ноду - тизер - 1 предложение ЧТО там обсуждать то?

Аватар пользователя iNFerNo iNFerNo 20 апреля 2011 в 8:38

"FreeDS" wrote:
На основе pg_userpay_is_paid добавил в модуль функцию pg_userpay_is_sold - проверки "проданности" ноды:

а что это значит проверка проданности?

пи.эс. у вас там выше не выводиться фраза купить ноду для автора или же... пускает в ноду если юзер автор?

Аватар пользователя iNFerNo iNFerNo 20 апреля 2011 в 9:14

Так как сделать так что бы автору ноду без покупки показывалась вся нода, а не тизер только.

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

и подпись бы в тизере (когда в ноде он показывается) сообщение - для просмотра полной версии нужн окупить ноду (как это в модулях типа ноде приватес или прениум контент) .

Аватар пользователя FreeDS FreeDS 21 апреля 2011 в 16:15

iNFerNo wrote:
Так как сделать так что бы автору ноду без покупки показывалась вся нода, а не тизер только.

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

и подпись бы в тизере (когда в ноде он показывается) сообщение - для просмотра полной версии нужн окупить ноду (как это в модулях типа ноде приватес или прениум контент) .

Надо лезть в код модуля и править права разрешения.

Аватар пользователя Mirocow Mirocow 5 мая 2011 в 3:01

variable_get('pg_userpay_allowed_'. $object->type, 0)

это включение/выключение в зависимости от типа. Если $object = $node, то от типа материала.
variable_get() - эта функция берет по ключу свойство переменной
variable_set() - эта устанавливает нужное свойство

Все переменные хранятся в таблице {variable}, и подгружается при первом обращении. (фактически на этапе инициализации)

Аватар пользователя tempo tempo 23 октября 2011 в 19:49

После переписки с автором, удалось заставить модуль работать. Оказалось, что warning-и сыпятся из-за новой версии php, как фиксить нашел вот тут: http://drupal.org/node/1004766
Мне нужен был еще вывод баланса в определенном блоке, это оказалось очень просто:

pg_account_balance_value($user->uid)

PS: изначально планировалась платная помощь, но в самый ответственный момент, автор перестал отвечать. Тем не менее в знак признательности хотел отправить 100 рублей на кошелек, но в "Связном" и в мультикассах для webmoney требуется кроме номера кошелька номер сотового телефона владельца кошелька... маразм...

PPS: так как при внедрении пришлось достаточно серьезно разбираться с модулем, могу теперь отвечать на вопросы Smile

Аватар пользователя kalahoo kalahoo 10 февраля 2012 в 23:43

Разобрался как скрывать отдельные сск поля, как ставить дефолтную цену (если кому надо - пишите в пм)

А вот как сделать так чтобы нода удалялась или снималась с публикации после, допустим, 3х покупок - не пойму. Есть у кого-нибудь идеи?

Аватар пользователя sibero sibero 12 февраля 2012 в 13:07

"kalahoo" wrote:
А вот как сделать так чтобы нода удалялась или снималась с публикации после, допустим, 3х покупок - не пойму. Есть у кого-нибудь идеи?

Включить складской учет, sql снипетом снимать ноду с публикации, когда товара на складе не останется.

Аватар пользователя kalahoo kalahoo 24 апреля 2012 в 12:00

В программировании не силен, по-этому не хотелось позориться) а да ладно... вдруг кому пригодится

Через phpmyadmin посмотрел таблицу variable. Нашел userpoints_allowed_ со значением i:1;
Создал новый тип материала, ну допустим material. Затем вручную добавил строчку в "variable" userpoints_allowed_material со значением i:1;
После просто поставил галку "userpoints nodeaccess allowed" и всё запахало (понятно, что только для этого типа).

p.s. камнями не кидать