Форум

Добро пожаловать, гость 

Показать / спрятать

Добро пожаловать, гость! Для участия в форуме требуется регистрация.





Страниц: [1]
Автор Тема: робокасса
lb
Новичок
Сообщения: 5
Permalink
Сообщение робокасса
 June 28, 2012, 13:28
Цитата

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

lb
Новичок
Сообщения: 5
Permalink
Сообщение Ответ на: робокасса
 June 28, 2012, 15:50
Цитата

Разобрался.
1. include/compiled/manage_system_pay.php - дописываем в админке форму для ввода данных робокассы или другого сервиса.
2. include/compiled/oreder_check.php - добавляем для пользователся радиобаттон при выборе оплаты.
3. include/configure/robo.php - создаем файл в котором будут настроки из формы пункт 1, название берем от название платежной системы.
4. include/function/configure.php - в keys дописываем название сервиса.
5. order/paybank.php - дописал название сервиса.
6. include/function/pay.php - дописываем функцию генерации формы для оплаты.
7. include/tamplate/block_pay_robo.html - создаем файл и в нем форму из которой будет идти запрос к платежной системе.

все пункты делают наподобие уже существующих. на данный момент имею в админке поля для ввода нужных данных для платежной системы. При оплате появляется нужный пункт и открывается нужная форма. Осталось записать в форму нужные данные и вроде все. Рабочий день закончился поэтому завтра. Если не забуду отпишу.

lb
Новичок
Сообщения: 5
Permalink
Сообщение Ответ на: робокасса
 June 29, 2012, 09:51
Цитата

Так же
8. я еще изменил файл перевода, что бы подписать кнопку как надо.
9. order/ содержатся папки с разными системами, для резлуьтатов. я создал там папку для робокассы и в ней файл result.php В который приходит ответ от робокассы

//Считываем данные из ответа
$out_summ = $_REQUEST["OutSum"];
$inv_id = $_REQUEST["InvId"];
$crc = $_REQUEST["SignatureValue"];
$mrh_pass2 = $INI['robo']['mrh_pass2'];

$in_userField_1 = $_REQUEST["shp_userField_1"];

$crc = strtoupper($crc);
//генерируем проверочную подпись
$my_crc = strtoupper(md5("$out_summ:$inv_id:$mrh_pass2:shp_userField_1=$in_userField_1"));
проверяем подписи если совпали, то оплачено и все ок и делаем дальше что надо.
if ($my_crc == $crc) {

lb
Новичок
Сообщения: 5
Permalink
Сообщение Ответ на: робокасса
 June 29, 2012, 14:24
Цитата

http://test.robokassa.ru/Index.aspx прохожу хорошо. осталось запустить с реальными данными.

lb
Новичок
Сообщения: 5
Permalink
Сообщение Ответ на: робокасса
 June 30, 2012, 08:35
Цитата

в файле function/pay.php
для оплаты купона добавил функцию

function pay_team_robo($total_money, $order) {
    global $INI, $login_user;

    if ($total_money <= 0 || !$order)
        return null;
    $team = Table::Fetch('team', $order['team_id']);
    $partner_id = $team['partner_id'];
    $partner = Table::Fetch('partner', $partner_id);

    $condition = array(
        'partner_id' => $partner_id
    );

    $payme = DB::LimitQuery('payment', array(
                'condition' => $condition,
                'order' => 'ORDER BY id DESC',
            ));
    $payment = array();
    foreach ($payme as $paym) {
        $INI[$paym['service']][$paym['param']] = $paym['value'];
    }

    $inv_id = $order['id']; //ид заказа
    $mrh_login = $INI['robo']['mrh_login']; //логин робокассы
    $mrh_pass1 = $INI['robo']['mrh_pass1']; //первый пароль 
    $inv_desc = $team['title']; //описание из названия купона
    $out_summ = $total_money; //сколько денег
    $recipientCurrency = $INI['system']['currencyname']; //валюта, но не используется для робокасы

    $shp_userField_1 = $order['pay_id']; //спец код
    $crc  = md5("$mrh_login:$out_summ:$inv_id:$mrh_pass1:shp_userField_1=$shp_userField_1"); //хеш
    
//отправляем все в форму
    return render('block_pay_robo', array(
                'inv_id' => $inv_id, //ид заказ
                'mrh_login' => $mrh_login, //логин магазина в робокассе
                'inv_desc' => $inv_desc, //описанние из названия
                'out_summ' => $out_summ, //сумма
                'recipientCurrency' => $recipientCurrency, //валюта
                'crc' => $crc, //хеш
                'successUrl' => $successUrl, //ответ
                'failUrl' => $failUrl, //ответ не успешшен
                'shp_userField_1' => $shp_userField_1, // пример значения go-75-1-extl
            ));
}

для пополнения баланса на сайте в том же файле

function pay_charge_robo($total_money, $charge_id, $title) {
    global $INI, $login_user;
    if ($total_money <= 0 || !$title)
        return null;

    $inv_id = '265489546';   ///в робокассу только цифру в ид можно отдавать.
    $mrh_login = $INI['robo']['mrh_login']; 
    $mrh_pass1 = $INI['robo']['mrh_pass1']; 
    $inv_desc = $title;
    $out_summ = $total_money;

    $recipientCurrency = $INI['system']['currencyname'];
    $successUrl = $INI['system']['wwwprefix'] . '/order/index.php';
    $failUrl = $INI['system']['wwwprefix'] . '/order/index.php';

    $shp_userField_1 = $charge_id;
    $crc  = md5("$mrh_login:$out_summ:$inv_id:$mrh_pass1:shp_userField_1=$shp_userField_1"); 
    
    return render('block_pay_robo', array(
                'inv_id' => $inv_id, //ид заказ
                'mrh_login' => $mrh_login, //логин магазина в робокассе
                'inv_desc' => $inv_desc, //описанние из названия
                'out_summ' => $out_summ, //сумма
                'recipientCurrency' => $recipientCurrency, //валюта
                'crc' => $crc, //хеш
                'successUrl' => $successUrl, //ответ
                'failUrl' => $failUrl, //ответ не успешшен
                'shp_userField_1' => $shp_userField_1, // пример значения go-75-1-extl
            ));
}

в tamplate создал файл block_pay_robo.html

//реальная
<!--<form action='https://merchant.roboxchange.com/Index.aspx' method=POST>-->

//для теста
<form action='http://test.robokassa.ru/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_userField_1' value='{$shp_userField_1}'/>
   <input type='hidden' name='IncCurrLabel' value=''>
   <input type='hidden' name='Culture' value='ru'>
   <input type='hidden' value='{$successUrl}' name='successUrl'/>
   <input type='hidden' value='{$failUrl}' name='failUrl'/>
   <input type='submit'class="formbutton gotopay" value='${_lang_pay_robo}'>
</form>

файл order/robo/result.php

<?
// zergos: файл обработки ответа от платежной системы
require_once(dirname(dirname(dirname(__FILE__))) . '/app.php');
global $INI;
if($_SERVER['REMOTE_ADDR']!='ip'){ //ip сервера хз зачем
    $f = @fopen(dirname(__FILE__) . "/orders.txt", "a+") or
        die("error");
fputs($f, "Try connect from ".$_SERVER['REMOTE_ADDR']." !\n"
);
fclose($f);
}
      //Считываем данные из ответа
      $out_summ = $_REQUEST["OutSum"]; //денег
      $inv_id = $_REQUEST["InvId"]; //ид
      $crc = $_REQUEST["SignatureValue"]; //хеш

      $mrh_pass2 = $INI['robo']['mrh_pass2']; //второй пароль из системы     
      $in_userField_1 = $_REQUEST["shp_userField_1"]; //код 

  $crc = strtoupper($crc);
  //генерируем проверочную подпись
$my_crc = strtoupper(md5("$out_summ:$inv_id:$mrh_pass2:shp_userField_1=$in_userField_1"));
     
if ($my_crc == $crc) {
    $checksum = true;
} else {
    $checksum = false;
}
//сам скрипт дублирует записи в текстовый файл
$f = @fopen(dirname(__FILE__) . "/orders.txt", "a+") or
        die("error");
fputs($f, date("d:m:Y H:i:s") . //data now
        " orderId: $inv_id;" . //ид заказа
        " Amount: $out_summ;" . //сумма оплачено
        " in_userField_1: $in_userField_1;" . //in_userField_1
        " Checksum: " . ($checksum == true ? 1 : 0) . "\n" //1 прошли/ 0 нет
);
fclose($f);
if (!$checksum) {
    echo "bad sign\n";
    exit(); //если хеши не совпали то выход
}
//если совпали то дальше
echo "OK$inv_id\n";
    if ($inv_id == '265489546') { //если пополнение баланса
        $pars = explode('-', $in_userField_1);
        $userid = $pars[1];
        $time = $pars[2];
        $f = @fopen(dirname(__FILE__) . "/orders.txt", "a+") or
                die("error");
        fputs($f, "ZFlow::CreateFromCharge($out_summ, $userid, $time, 'robo')\n" .
                print_r($_REQUEST, true) . "\n\n\n"
        );
        fclose($f);

//отправляем данные кудато, так и не понял куда идут, но работает
        ZFlow::CreateFromCharge($out_summ, $userid, $time, 'robo');
    } else {
//если оплата, то тоже отправляем 
        ZOrder::OnlineIt($inv_id, $in_userField_1, $out_summ, 'RUR', 'robo', 'ROBOKASSA');
    }
?>

основные моменты описал. Так же не забудьте в файлах
include/compiled/oreder_check.php - добавляем для пользователся радиобаттон при выборе оплаты.
include/compiled/manage_system_pay.php - дописываем в админке форму для ввода данных робокассы или другого сервиса.
include/compiled/credit_charge.php - добавляем для пользователся радиобаттон при выборе пополнения баланса.

Страниц: [1]
Mingle Forum by cartpauj
Версия: 1.0.34 ; Страница загружена за 0.061 секунд.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

This blog is kept spam free by WP-SpamFree.