Робокасса для платных подписок

Дмитрий Кесаев

Проверенные
Сообщения
129
Реакции
387
Баллы
11,070
Робокасса для платных подписок!

Мои наработки. Дальше нет времени заниматься.
Если кто допишет - молодец. Если нет, то позже сам допишу)))

1. Создаем файл Listener.php следующего содержания:
Код:
<?php
class Blablabla_Listener
{
    public static function templateHook($hookName, &$contents, $params, XenForo_Template_Abstract $template)
    {
        {
            if($hookName == 'phpcode')
            {
            ob_start();
            require_once('robo.php');
            $contents .= ob_get_contents();
            ob_end_clean();
            }
        }
    }
}

и robo.php
PHP:
<?php
$out_summ = $_GET['OutSum'];
$inv_id = $_GET['InvId'];
$mrh_login = "userzzzzzzz"; // логин в робокассе
$mrh_pass1 = "123456789zzzzz"; // пасс №1 в робокассе
$inv_desc = "Perehod v vip gruppu";
$shp_item = 1;
$in_curr = "WMZM";
$culture = "ru";
$encoding = "utf-8";
$crc  = md5("$mrh_login:$out_summ:$inv_id:$mrh_pass1:Shp_item=$shp_item");
print "<form action='https://merchant.roboxchange.com/Index.aspx' method=POST>".
      "<input type=hidden name=MrchLogin value=$mrh_login>".
      "<input type=hidden name=OutSum value=$out_summ>".
      "<input type=hidden name=InvId value=$inv_id>".
      "<input type=hidden name=Desc value='$inv_desc'>".
      "<input type=hidden name=SignatureValue value=$crc>".
      "<input type=hidden name=Shp_item value='$shp_item'>".
      "<input type=hidden name=IncCurrLabel value=$in_curr>".
      "<input type=hidden name=Culture value=$culture>".
      "<input type=submit value='Оплатить повышение'>".
      "</form>";

?>
2. Берем этот Listener.php и наш robo.php и ложим в папку Robo (надо создать) в www/libary/

3. Переводим форум в режим отладки.
$config['debug'] = true;

4. Идем в админку, -> разработка -> создать дополнение.

5. Заполняем всё как на рисунке, жмем "Сохранить дополнение".
FireShotSc_8206915_9270649.png

6. Теперь в админке по сути у нас есть плагин, который включается и выключается. Идем дальше.
Админка -> Разработка -> Обработчики событий -> Создать новый обработчик события.

7. Заполняем всё как на рисунке, сохраняем
FireShotSc_2310410_9270653.png
8. В шаблон robo_main вставляем этот код (шаблон появится после установки отдельного дополнения - оно в низу статьи):
Код:
<xen:hook name="phpcode">
</xen:hook>

9.Затем открываем шаблон account_upgrades заменяем на
PHP:
<xen:title>{xen:phrase account_upgrades}</xen:title>

<xen:require css="account_upgrades.css" />

<xen:if is="{$available}">
    <div class="section">
        <h3 class="subHeading">{xen:phrase available_upgrades}</h3>
        <ul>
        <xen:foreach loop="$available" value="$upgrade">
            <li class="primaryContent upgrade">
                    <form action="/robo/" method="get" class="upgradeForm">
                        <div class="cost">{$upgrade.costPhrase}</div>
                        <xen:if is="{$upgrade.length_unit} AND {$upgrade.recurring}">
                       
                            <input type="hidden" name="cmd" value="_xclick-subscriptions" />
                            <input type="hidden" name="a3" value="{$upgrade.cost_amount}" />
                            <input type="hidden" name="p3" value="{$upgrade.length_amount}" />
                            <input type="hidden" name="t3" value="{$upgrade.lengthUnitPP}" />
                            <input type="hidden" name="src" value="1" />
                            <input type="hidden" name="sra" value="1" />
                   
                        <xen:else />
                            <input type="hidden" name="InvId" value="309" />
<input type="hidden" name="OutSum" value="{$upgrade.cost_amount}" />
<input type="hidden" name="$shp_item" value="{$visitor.user_id}" />
<input type="hidden" name="_xfToken" value="{$visitor.user_id},{$upgrade.user_upgrade_id},token,{$visitor.csrf_token_page}" />
<input type="submit" value="{xen:phrase purchase}" class="button" />
                        </xen:if>
               
                        <input type="hidden" name="business" value="{$xenOptions.payPalPrimaryAccount}" />
                        <input type="hidden" name="currency_code" value="{$upgrade.currency}" />
                        <input type="hidden" name="item_name" value="{xen:phrase account_upgrade}: {$upgrade.title} ({$visitor.username})" />
                        <input type="hidden" name="quantity" value="1" />
                        <input type="hidden" name="no_note" value="1" />
                        <input type="hidden" name="no_shipping" value="1" />
                        <input type="hidden" name="custom" value="{$visitor.user_id},{$upgrade.user_upgrade_id},token,{$visitor.csrf_token_page}" />
               
                        <input type="hidden" name="charset" value="utf-8" />
                        <input type="hidden" name="email" value="{$visitor.email}" />
               
                        <input type="hidden" name="return" value="{$requestPaths.fullBasePath}{xen:link account/upgrade-purchase}" />
                        <input type="hidden" name="cancel_return" value="{$requestPaths.fullBasePath}{xen:link index}" />
                        <input type="hidden" name="notify_url" value="{$xenOptions.boardUrl}/payment_callback.php" />
                    </form>
           
                    <div class="upgradeMain">
                        <h4 class="title">{$upgrade.title}</h4>
                        <xen:if is="{$upgrade.description}">
                            <div class="description">{xen:raw $upgrade.description}</div>
                        </xen:if>
                    </div>
            </li>
        </xen:foreach>
        </ul>
    </div>
</xen:if>

<xen:if is="{$purchased}">
    <div class="section">
        <h3 class="subHeading">{xen:phrase purchased_upgrades}</h3>
        <ul>
        <xen:foreach loop="$purchased" value="$upgrade">
            <li class="primaryContent">
                <div class="upgrade">           
                    <div class="upgradeForm">
                        <xen:if is="{$upgrade.record.end_date}">
                            <div>{xen:phrase expires}: <xen:datetime time="$upgrade.record.end_date" /></div>
                        </xen:if>
                        <xen:if is="{$upgrade.length_unit} AND {$upgrade.recurring}">
                            <a href="{$payPalUrl}?cmd=_subscr-find&amp;alias={xen:urlencode $xenOptions.payPalPrimaryAccount}" class="button">{xen:phrase cancel_subscription}</a>
                        </xen:if>
                    </div>
           
                    <div class="upgradeMain">
                        <h4 class="title">{$upgrade.title}</h4>
                        <xen:if is="{$upgrade.description}">
                            <div class="description">{xen:raw $upgrade.description}</div>
                        </xen:if>
                    </div>
                </div>
            </li>
        </xen:foreach>
        </ul>
    </div>
</xen:if>

<input type="hidden" name="InvId" value="309" /> - как пример номера заказа, значение подставите сами от paypal (номер покупки)

Дополнение скачать: robo.rar

Должна заработать приемка денег!

ПРОДОЛЖЕНИЕ СЛЕДУЕТ.
Статья не дописана!!!


[DOUBLEPOST=1380954025,1380951851][/DOUBLEPOST]
+++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++



или попробуйте установить аддон.
Потом включить в настройках его и попробовать тестово подписку.

Готово на 80%

Велосипед пока огромный получился (8,3 КБ)- но все лишнее удалится, поставятся условия на проверку и потом нужно сделать корректный прием данных с робокассы! - не проверял, не делал!!![DOUBLEPOST=1380958689][/DOUBLEPOST]1png_8360698_9271453.png



=======================


2png_7692414_9271455.png

============================

3png_6265872_9271462.png

=============================

4png_7733228_9271465.png
 

Вложения

  • robo_addon.zip
    8.3 KB · Просмотры: 21
  • robo.rar
    4.9 KB · Просмотры: 12
Последнее редактирование модератором:
80%... дописали бы уже, много спасибок было бы
 
Предупреждаю сразу: не рискуйте проверять на своих пользователях. Мало ли что не так пойдёт. :-D
Как сказал ТС:
Статья не дописана!!!
[DOUBLEPOST=1380969248,1380969165][/DOUBLEPOST]
много спасибок было бы
При чём тут это? :laugh: Человек проделал огромнейшую работу и поделился на халяву тем, что у него есть. :) У всех есть дела в реале: семья, работа и т.п. Он же написал, что:
Если кто допишет - молодец. Если нет, то позже сам допишу)))
 
Если хотите вообще все облегчить - то в корне создали файл robo.php с тем же содержимым + в строчке шаблона account_upgrades <form action="/robo/" method="get" class="upgradeForm">

заменили на <form action="robo.php" method="POST" class="upgradeForm">
Потом создаем файл в корне roboresult.php - теоретический пример кода (на основе моего кода vbulletin)!!!

Дописать код нужно, все будет работать.
PHP:
 <?
if(isset($_REQUEST['OutSum']))
{
mysql_connect("localhost", "имя_владельца_db", "pass_db")
or die ("<FONT COLOR=\"#FF0000\"><B>Error:</B></FONT> Unable to connect to the database.");
mysql_select_db("имя_вашей_db")
or die ("<FONT COLOR=\"#FF0000\"><B>Error:</B></FONT> Databases do not exist.");
mysql_query("SET NAMES cp1251");
$mrh_pass2 = "robopass_#2"; // registration info (пароль #2 в робокассе)

$tm=getdate(time()+9*3600);
$date="$tm[year]-$tm[mon]-$tm[mday] $tm[hours]:$tm[minutes]:$tm[seconds]";
// read parameters - robo
$out_summ = $_REQUEST["OutSum"]; // присваиваем переменной $out_summ - сумму оплаты
$inv_id = $_REQUEST["InvId"];
$shp_item = $_REQUEST["Shp_item"];
$crc = $_REQUEST["SignatureValue"];
$crc = strtoupper($crc);
$user_group_id = "4"; // номер группы куда будет переведен юзер
$my_crc = strtoupper(md5("$out_summ:$inv_id:$mrh_pass2:Shp_item=$shp_item"));
if ($my_crc !=$crc)
{
  echo "bad sign\n";
  //exit();
}
  // save order info to file - НУЖНО ЗАДАТЬ УСЛОВИЕ... если сумма, ID и пр. совпадают - то юзера обновляем $db = mysql_query("UPDATE (отправляем в др. группу)
$f=@fopen("order.txt","a+") or
  die("error");
fputs($f,"order_num :$inv_id;Summ :$out_summ;Date :$date\n");
fclose($f);
$query19 = mysql_query("SELECT *  FROM `schet` WHERE `id` = $inv_id");
$dow = mysql_fetch_array($query19);
$userid = $dow['userid'];
$credits = $dow['kredit'];
$db = mysql_query("UPDATE `xf_user` SET `user_group_id` = '".$user_group_id."' WHERE `user_id` = '".$userid."'");
echo "OK$inv_id\n";
}
?>
Затем обратку с робокассы указываем на на _
метод передачи POST


Написал примерно на коленке!!!


По идее это все имеется на ксене только реквесты нужно заменить на paypal`овские
КАК ПРИМЕР:

$paypal_summ = $_REQUEST["OutSum"];
$paypal_am_id = $_REQUEST["InvId"];
$paypal_item = $_REQUEST["Shp_item"];
$crc = $_REQUEST["SignatureValue"];
 
при установке адона выдаёт Пожалуйста, введите корректное имя метода обработчика (robo_Listener::templateHook).
 
Угу, не дописано ещё. :(
 
Если хотите вообще все облегчить - то в корне создали файл robo.php с тем же содержимым + в строчке шаблона account_upgrades <form action="/robo/" method="get" class="upgradeForm">

заменили на <form action="robo.php" method="POST" class="upgradeForm">
Потом создаем файл в корне roboresult.php - теоретический пример кода (на основе моего кода vbulletin)!!!

Дописать код нужно, все будет работать.
PHP:
 <?
if(isset($_REQUEST['OutSum']))
{
mysql_connect("localhost", "имя_владельца_db", "pass_db")
or die ("<FONT COLOR=\"#FF0000\"><B>Error:</B></FONT> Unable to connect to the database.");
mysql_select_db("имя_вашей_db")
or die ("<FONT COLOR=\"#FF0000\"><B>Error:</B></FONT> Databases do not exist.");
mysql_query("SET NAMES cp1251");
$mrh_pass2 = "robopass_#2"; // registration info (пароль #2 в робокассе)

$tm=getdate(time()+9*3600);
$date="$tm[year]-$tm[mon]-$tm[mday] $tm[hours]:$tm[minutes]:$tm[seconds]";
// read parameters - robo
$out_summ = $_REQUEST["OutSum"]; // присваиваем переменной $out_summ - сумму оплаты
$inv_id = $_REQUEST["InvId"];
$shp_item = $_REQUEST["Shp_item"];
$crc = $_REQUEST["SignatureValue"];
$crc = strtoupper($crc);
$user_group_id = "4"; // номер группы куда будет переведен юзер
$my_crc = strtoupper(md5("$out_summ:$inv_id:$mrh_pass2:Shp_item=$shp_item"));
if ($my_crc !=$crc)
{
  echo "bad sign\n";
  //exit();
}
  // save order info to file - НУЖНО ЗАДАТЬ УСЛОВИЕ... если сумма, ID и пр. совпадают - то юзера обновляем $db = mysql_query("UPDATE (отправляем в др. группу)
$f=@fopen("order.txt","a+") or
  die("error");
fputs($f,"order_num :$inv_id;Summ :$out_summ;Date :$date\n");
fclose($f);
$query19 = mysql_query("SELECT *  FROM `schet` WHERE `id` = $inv_id");
$dow = mysql_fetch_array($query19);
$userid = $dow['userid'];
$credits = $dow['kredit'];
$db = mysql_query("UPDATE `xf_user` SET `user_group_id` = '".$user_group_id."' WHERE `user_id` = '".$userid."'");
echo "OK$inv_id\n";
}
?>
Затем обратку с робокассы указываем на на _
метод передачи POST


Написал примерно на коленке!!!


По идее это все имеется на ксене только реквесты нужно заменить на paypal`овские
КАК ПРИМЕР:

$paypal_summ = $_REQUEST["OutSum"];
$paypal_am_id = $_REQUEST["InvId"];
$paypal_item = $_REQUEST["Shp_item"];
$crc = $_REQUEST["SignatureValue"];
Было бы очень здорово с webmany такое проделать)) через робокассу 50% у юзера полюбому снимает.
 
  • Мне нравится
Реакции: Hope
В целом идея понятна, а у меня вопрос с Интеркассой кто-нить работал ?

Нужен-ли там персональный аттестат, если нет попробую сделать плагин доната с интеркассой, ну и по примеру как здесь систему повышений, но имеет это смысл, если подтверждать сайты там легче чем в робокассе.
 
Для приёма денег через WebMoney в любом случае нужен перс.
А для работы без WebMoney в интеркассе аттестат не требуется никакой![DOUBLEPOST=1386337348,1386337204][/DOUBLEPOST]
robokassa1.jpg
 
Современный облачный хостинг провайдер | Aéza
Назад
Сверху Снизу