Перейти до

OpenPayz Приватбанк


Рекомендованные сообщения

Підкажіть, можливо хтось настроював, потрібно зараховувати платежі через термінали привата та приват24, що потрібно просити від банку? Поки з менеджером все глухо - толком нічого добитись не можна.... :(

Ссылка на сообщение
Поделиться на других сайтах

Підкажіть, можливо хтось настроював, потрібно зараховувати платежі через термінали привата та приват24, що потрібно просити від банку? Поки з менеджером все глухо - толком нічого добитись не можна.... :(

Підписуєте угоду, добазарюєтесь за процент, показуєте їм налаштовану морду з їхнім privat2 або privatx в залежності від протоколу, тестуєте, працюєте. Шо ніясна?

Ссылка на сообщение
Поделиться на других сайтах
  • 2 weeks later...

вот мое. даю все что было, разбирайся сам: (Debian)

база на firebird, но при наличии прямых рук подправить не проблема

из проблем:

1. они ХХХХХХХ (нехорошие человеки) твой сайт сразу переводят на IP и все обращения происходят по ИП адресу. т.е. никакие динамические адреса не проходят и каждая смена адреса сайта - очередной геморрой

2. если абон в терминале заплатит за себя, а потом повторит платеж за соседа, сотрет свой лицевой счет и запишет счет соседа,- в онлайне пройдет все-равно первый счет, а в реестре на следующий день придет "правильный счет", - готовься к постоянным перекидкам денег между абонами. я недавно сделал так: в онлайн-режиме я проставляю абону кредит на 7 дней, а на следующий день принимаю по элпочте реестр платежей привата и загоняю в базу деньги. пока тестирую, проблем стало на порядок меньше.

 

у меня "лицевой счет абона" это "группа" у STG :)

 

 

/etc/apache2/CA/ca.config:

[ ca ]
default_ca = CA_CLIENT  # При подписи сертификатов
# использовать секцию CA_CLIENT

[ CA_CLIENT ]
dir = ./db      # Каталог для служебных файлов
certs = $dir/certs      # Каталог для сертификатов
new_certs_dir = $dir/newcerts   # Каталог для новых сертификатов
database = $dir/index.txt       # Файл с базой данных

# подписанных сертификатов
serial = $dir/serial    # Файл содержащий серийный номер
# сертификата
# (в шестнадцатиричном формате)
certificate = ./ca.crt  # Файл сертификата CA
private_key = ./ca.key  # Файл закрытого ключа CA
default_days = 3650     # Срок действия подписываемого
# сертификата

default_crl_days = 7    # Срок действия CRL
default_md = md5        # Алгоритм подписи

policy = policy_anything        # Название секции с описанием
# политики в отношении данных
# сертификата

[ policy_anything ]
countryName = optional  # Код страны — не обязателен
stateOrProvinceName = optional  # ……
localityName = optional         # ……
organizationName = optional     # ……
organizationalUnitName = optional       # ……
commonName = supplied   # …… — обязателен
emailAddress = optional         # ……

/etc/apache2/CA/create:

CN=mysite.org.ua
SUBJroot=/C=UA/ST=qqq/L=www/O=eee/OU=Main/CN=$CN/emailAddress=rrr@gmail.com
SUBJcl=/C=UA/ST=qqq/L=www/O=$CN/OU=MySite/CN=user/emailAddress=rrr@gmail.com

DIR="./db"
mkdir "$DIR"
mkdir $DIR/certs
mkdir $DIR/newcerts
touch $DIR/index.txt
echo "01" > $DIR/serial

#Создание рутового сертификата CA
openssl req -new -newkey rsa:1024 -nodes -keyout ca.key -out ca.crt -x509 -days 3650 -subj $SUBJroot


#создание клиентского сертификата
openssl req -new -newkey rsa:1024 -nodes -keyout client01.key -out client01.csr -days 3650 -subj $SUBJcl
#подписываем клиентский сертифика
openssl ca -config ca.config -in client01.csr -out client01.crt -batch


#подготавливает сертификат для передачи пользователю
openssl pkcs12 -export -in client01.crt -inkey client01.key -certfile ca.crt -out client01.p12 -passout pass:12345678

запускаем ./create и файл client01.crt  и пароль 12345678 передается в приват

 

/etc/apache2/sites-enabled/privatbank.conf

<IfModule mod_ssl.c>
<VirtualHost _default_:443>
        ServerAdmin mysite@gmail.com

        DocumentRoot /var/www/html
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/html>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog ${APACHE_LOG_DIR}/ssl_access.log combined

        SSLEngine on

        #   A self-signed (snakeoil) certificate can be created by installing
        #   the ssl-cert package. See
        #   /usr/share/doc/apache2.2-common/README.Debian.gz for more info.
        #   If both key and certificate are stored in the same file, only the
        #   SSLCertificateFile directive is needed.
        SSLCertificateFile    /etc/apache2/CA/ca.crt
        SSLCertificateKeyFile /etc/apache2/CA/ca.key
        SSLCACertificateFile /etc/apache2/CA/ca.crt

<Location /pb>
    SSLRequireSSL
    SSLVerifyClient require
    SSLVerifyDepth 10
</Location>

        <FilesMatch "\.(cgi|shtml|phtml|php)$">
                SSLOptions +StdEnvVars
        </FilesMatch>
        <Directory /usr/lib/cgi-bin>
                SSLOptions +StdEnvVars
        </Directory>

        BrowserMatch "MSIE [2-6]" \
                nokeepalive ssl-unclean-shutdown \
                downgrade-1.0 force-response-1.0
        # MSIE 7 and newer should be able to use keepalive
        BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown

</VirtualHost>
</IfModule>

/var/www/html/pb/.htaccess

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R,L]

Options -Indexes
#Options +FollowSymLinks

/var/www/html/pb/dbfunc.php

<?php
$sgconf="/etc/stargazer/sgconf get -s 127.0.0.1 -p 5555 -a admin -w 123456 ";
$sgconfset="/etc/stargazer/sgconf set -s 127.0.0.1 -p 5555 -a admin -w 123456 ";

$db_host="localhost:/var/stargazer/stargazer.fdb";
$db_username="sysdba";
$db_password="123456";
$log_path='/var/stargazer/log';
$sgpay="/etc/stargazer/utils/_addcashname ";


function db_getuser($schet) {
    global $db_host;
    global $db_username;
    global $db_password;
    $res='';

    if (preg_match("/[^0-9_-]/", $schet)) {
      return "";
    }
    $dbh = ibase_connect($db_host, $db_username, $db_password);
    $stmt = "select first 1 tb_users.name from tb_users where (tb_users.grp='$schet')";
    $result = ibase_query($dbh, $stmt);
    if ($result==FALSE) {
        echo ("<B>Ошибка:".ibase_errmsg()."</B>");
    } else {
        if ($onerow = ibase_fetch_row($result)) {
            $res = $onerow[0];
        }
    }
    ibase_free_result($result);

    ibase_close($dbh);
    return $res;
}


function db_pay($user,$sum,$mess) {
    global $sgconfset;

#    $res=exec("$sgpay $user $sum $mess");
    $res=exec("$sgconfset -u $user -c $sum:$mess");

    logging("pb_money.log","$user has pay (res=$res) $sum $mess");

#    $expire = date('Y-m-d', strtotime("+7 day"));
#    $res=exec("$sgconfset -u $user -r $sum");
#    $res=exec("$sgconfset -u $user -E $expire");

    return $res;
}
function db_getcash($user) {
    global $db_host;
    global $db_username;
    global $db_password;
    $res=FALSE;

    $dbh = ibase_connect($db_host, $db_username, $db_password);
    $stmt = "select first 1 tb_stats.cash from tb_users, tb_stats where tb_users.pk_user=tb_stats.fk_user and tb_users.name='$user' order by tb_stats.pk_stat desc";
    $result = ibase_query($dbh, $stmt);
    if ($result==FALSE) {
        echo ("<B>Ошибка:".ibase_errmsg()."</B>");
    } else {
        if ($onerow = ibase_fetch_row($result)) {
            $res = $onerow[0];
        }
    }
    ibase_free_result($result);
    ibase_close($dbh);
    return $res;
}


function get_ip() {
  $ip_pattern="#(??:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)#";
  $ip="";
  foreach ($_SERVER as $k => $v) {
      if (substr($k,0,20)=="HTTP_X_FORWARDED_FOR" AND preg_match($ip_pattern,$v)) {
        $ip=$v;
        break;
      }
  }
  if ($ip == "") $ip=$_SERVER['REMOTE_ADDR'];
  return $ip;
}

function logging($file,$msg) {
    global $log_path;
    global $_SESSION;
    $f = @fopen("$log_path/$file", 'a+');
    $ip = get_ip();
    $log_line = date('d.m.y H:i:s').' '.$ip.' '.$msg."\n";
    fwrite($f, $log_line);
    fclose($f);
}
?>

/var/www/html/pb/paygate.php

<?php
require_once('dbfunc.php');
#exit;

$query_string = "";
if ($_POST) {
  $kv = array();
  foreach ($_POST as $key => $value) {
    $kv[] = "$key=$value";
  }
  $query_string = join("&", $kv);
}
else {
  $query_string = $_SERVER['QUERY_STRING'];
}

logging("pb.log","QUERY: $query_string");

$action=$_GET['action'];

switch ($action) {
    case "bill_search":
        $identifier=$_GET['bill_identifier'];
        $user=db_getuser($identifier);
        if ($user == '') {
          echo "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>
          <ResponseDebt>
            <errorResponse>
              <code>2</code>
              <message>Абонент не найден. Лицевой счет - шестизначный код. Например,для Ленина,43 кв.15: 043015</message>
            </errorResponse>
          </ResponseDebt>";
          logging("pb.log","bill_search error schet=$identifier");
        }
        else {
          $balance=db_getcash($user);
          $to_pay=0;
          echo "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>
          <ResponseDebt>
            <debtPayPack bill_identifier=\"$identifier\">
              <service>
                <ks company_code=\"2594611294\" service_code=\"1\" service=\"Интернет.\"/>
                <debt amount_to_pay=\"$to_pay\"/>
                <payer ls=\"$identifier\"/>
              </service>
              <message>Залишок коштiв на рахунку: $balance</message>
            </debtPayPack>
          </ResponseDebt>";
          logging("pb.log","bill_search ok schet=$identifier user=$user bal=$balance");
        }
        break;
    case "bill_input":
        $identifier=$_GET['bill_identifier'];
        $user=db_getuser($identifier);
        $sum=$_GET['sum'];
        $date=$_GET['date'];
        $pkey=$_GET['pkey'];
        $service=$_GET['service'];

        if (preg_match("/sum=([0-9.]+).*service_code=1/",$service,$match)) {
          $sum = $match[1];
        }

        $inner_ref = date("ymdGis");
        if ($user == '') {
          echo "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>
          <ResponseDebt>
            <errorResponse>
              <code>2</code>
              <message>Абонент не найден. Лицевой счет - шестизначный код. Например,для Ленина,43 кв.15: 043015</message>
            </errorResponse>
          </ResponseDebt>";
          logging("pb.log","bill_input error schet=$identifier not found PB:date=$date");
        }
        else {
          $ret=db_pay($user,$sum,"PrivatBank");
          echo "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>
          <ResponseExtInputPay>
            <extInputPay>
              <inner_ref>$inner_ref</inner_ref>
            </extInputPay>
          </ResponseExtInputPay>";
          logging("pb.log","bill_input ok schet=$identifier user=$user sum=$sum inner_ref=$inner_ref PB:date=$date pkey=$pkey");
          logging("pb_money.log","schet=$identifier summa=$sum user=$user inner_ref=$inner_ref PB:date=$date pkey=$pkey");
        }
        break;
    default:
          echo "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>
          <ResponseDebt>
            <errorResponse>
              <code>2</code>
              <message>Абонент не найден. Лицевой счет - шестизначный код. Например,для Ленина,43 кв.15: 043015</message>
            </errorResponse>
          </ResponseDebt>";
}

?>

привату сообщаешь что твой платежный шлюз: https://mysite.org.ua/pb/paygate.php

Відредаговано dummy
Ссылка на сообщение
Поделиться на других сайтах

 

 

1. они ХХХХХХХ (нехорошие человеки) твой сайт сразу переводят на IP и все обращения происходят по ИП адресу. т.е. никакие динамические адреса не проходят и каждая смена адреса сайта - очередной геморрой 2. если абон в терминале заплатит за себя, а потом повторит платеж за соседа, сотрет свой лицевой счет и запишет счет соседа,- в онлайне пройдет все-равно первый счет, а в реестре на следующий день придет "правильный счет", - готовься к постоянным перекидкам денег между абонами. я недавно сделал так: в онлайн-режиме я проставляю абону кредит на 7 дней, а на следующий день принимаю по элпочте реестр платежей привата и загоняю в базу деньги. пока тестирую, проблем стало на порядок меньше.

:facepalm:

Ссылка на сообщение
Поделиться на других сайтах
  • 1 year later...

Добого вечора!

вирішив додати кнопку оплати mypayprivat, у бекенді є index.php, і наскільки я зрозумів, налаштування потрібно дивитись за цим посиланням

https://my-payments.privatbank.ua/mypayments/customauth/identification/fp/static?staticToken=123456789

помилка сторінки

або я не так зрозумів.

що і потрібно змінити в даному посиланні?

Відредаговано revomix
Ссылка на сообщение
Поделиться на других сайтах
  • 3 years later...
В 18.05.2015 в 17:10, needhelp сказал:

Підкажіть, можливо хтось настроював, потрібно зараховувати платежі через термінали привата та приват24, що потрібно просити від банку? Поки з менеджером все глухо - толком нічого добитись не можна.... :(

https://privatbank.ua/ru/business/prijem-platezhej-ot-naselenija

Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

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

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Вхід

Уже зарегистрированы? Войдите здесь.

Войти сейчас
  • Зараз на сторінці   0 користувачів

    Немає користувачів, що переглядають цю сторінку.

  • Схожий контент

    • Від sanyadnepr
      Приветствую всех.
      Подскажите пожалуйста где копнуть и нет ли проблемы со стороны протокола взаимодействия сити24 или возможно не учтена необходимая проверка в модуле сити24 в Ubilling, пока писал понял что похоже в проверке payID, но это не точно.  
      Недавно обнаружилось с сити24 начали прилетать дубликаты платежей, в целом платежей мало, два одинаковых запроса Pay с одинаковым transactionID и payID в одну секунду одному платежному ID при этом биллинг "думает" примерно чуть больше минуты и отвечает одним ответом <result>0</result>, сити24 утверждает что ответ они не получили и по протоколу дальше повторяет запросы дублем, биллинг ответ и так по кругу, сити24 спрашивает каким образом с одинаковым payID от сити24 билл продолжает обрабатывать запросы и пополнять абоненту счет раз в 5 минут примерно, на одну и туже сумму, ведь этот payID уже был обработан предполагают сити24 согласно протоколу.
      Конечно есть вопрос к сити24 зачем они дублем присылают два запроса, но они отвечают что эта ситуация учтена в протоколе и проблема на стороне биллинга, потому что он пополняет счет по уже обработанному одинаковому payID.
      При этом transactionID в дублях одинаковый, но с каждым новым дублем разный.
      Если зафаерволить запросы от сити24, но оставить возможность отвечать то после блокировки билл отправляет 2-3 минуты 6 ответов <account>0001</account>  <result>0</result>.
      После снятия блокировки, дубли и платежи нескольких проблемных абонентов прилетают так же по кругу, при этом и с некоторыми новыми пополнениями происходит аналогичная ситуация.
      В openpayz в платежах transactionID и не видно payID.
    • Від vde
      День добрый!

      Тинькофф обновили форму оплаты, может уже кто написал готовый код (с формированием чека)? 
      https://www.tinkoff.ru/kassa/develop/widget/receipt/
    • Від Andy_km
      Добрый день, форумчане.
       
      Помогите, уже сломал голову.
       
      Фронтенд privatx несколько лет безотказно работал на старом сервере. Выполнили перенос биллинга на новый и фронтенд начал банку отправлять ответ следующего содержания:
       
      "DT":"2021.06.25 11:22:31.146" "REF":"SEARCH" URI":"http://billing_host/openpayz/frontend/privatx/index.php" "REQUEST_BODY": "<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <Transfer action="Search" interface="Debt" xmlns="http://debt.privatbank.ua/Transfer"> <Data xsi:type="Payer" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <Unit name="bill_identifier" value="5200000"/> </Data> </Transfer>" "RESPONSE_BODY": "<br /> <b>Fatal error</b>: Uncaught Error: [] operator not supported for strings in /usr/local/www/apache24/data/openpayz/libs/api.mysql.php:85Stack trace: #0 /usr/local/www/apache24/data/openpayz/libs/api.openpayz.php(201): simple_queryall('SELECT * from `...') #1 /usr/local/www/apache24/data/openpayz/frontend/privatx/index.php(304): op_CustomersGetAll() #2 /usr/local/www/apache24/data/openpayz/frontend/privatx/index.php(499): pbx_ReplySearch('5200000') #3 {main} thrown in <b>/usr/local/www/apache24/data/openpayz/libs/api.mysql.php</b> on line <b>85</b> <br />"  
      Помогите понять с чем связан Fatal error.
       
      Благодарен за любую помощь.
    • Від ProstoName
      Прикручиваю платежи через приват.
      Настроил фронтенд privatmulti и Openpayz по доке. Базы и вьюшка созданы.
      В дебаг режиме поиск работает. Но при проверке с привата, вылетает такая ошибка:
       
      Что мог не донастроить???
    • Від Vitaliy1984
      где искать файлы config/mysql.ini и config/openpayz.ini и где можно взять фронтпед  yndex деньги сбербанк  и tachcard и самое главное как это все запилить в убиллинг
       
×
×
  • Створити нове...