Revision 691

Date:
2018/07/30 21:57:08
Author:
ahitrov
Revision Log:
Bug fixes

Files:

Legend:

 
Added
 
Removed
 
Modified
  • utf8/plugins/payments/config.proto

     
    47 47 ############################################################
    48 48 # /payture.ru
    49 49
    50 # sberbank.ru
    51 ############################################################
    52 SBER_LOGIN =
    53 SBER_PASSWORD = 123
    54 SBER_TOKEN =
    55 SBER_RETURN_URL =
    56 SBER_FAIL_URL =
    57 SBER_SESSION_TIMEOUT_SECS = 1200 # Время в секундах, отводимое на оплату заказа
    58 SBER_CURRENCY_CODE = 643
    59 SBER_TEST_MODE = 1 # 0 - для боевого режима
    60
    61 # Авторизация логин-паролем или через токен. Два варианта:
    62 REWRITE += SBER_LOGIN SBER_PASSWORD SBER_RETURN_URL SBER_FAIL_URL SBER_TEST_MODE SBER_SESSION_TIMEOUT_SECS
    63 REWRITE += SBER_TOKEN SBER_RETURN_URL SBER_FAIL_URL SBER_TEST_MODE SBER_SESSION_TIMEOUT_SECS
    64 ############################################################
    65 # /sberbank.ru
    66
  • utf8/plugins/payments/lib/payments/Provider/Sber.pm

     
    22 22 $self->{app_id} = $state->{payments}{$prefix."_app_id"};
    23 23 $self->{secret} = $state->{payments}{$prefix."_app_secret"};
    24 24 $self->{token} = $state->{payments}{$prefix."_app_token"};
    25 $self->{session_timeout} = exists $params{session_timeout} ? $params{session_timeout} : $state->{payments}->{$prefix."_session_timeout"};
    25 26 $self->{test_mode} = exists $params{test_mode} ? $params{test_mode} : $state->{payments}->{$prefix."_test_mode"};
    26 27 $self->{return_url} = $params{return_url} || $state->{payments}{$prefix."_return_url"};
    27 28 $self->{fail_url} = $params{fail_url} || $state->{payments}{$prefix."_fail_url"};
     
    37 38 status => "$host/payment/rest/getOrderStatusExtended.do", # Получение статуса заказа
    38 39 is3ds => "$host/payment/rest/verifyEnrollment.do", # Запрос проверки вовлеченности карты в 3DS
    39 40 };
    40 $self->{return_url} =
    41 # $self->{return_url} = '';
    41 42
    42 43 $self->{result} = {};
    43 44
     
    93 94 if ( !exists $opts->{failUrl} && $self->{fail_url} ) {
    94 95 $opts->{failUrl} = $self->{fail_url};
    95 96 }
    97 if ( !exists $opts->{sessionTimeoutSecs} && $self->{session_timeout} ) {
    98 $opts->{sessionTimeoutSecs} = $self->{session_timeout};
    99 }
    96 100
    97 101 my $uid = delete $opts->{uid};
    98 102 unless ( $uid ) {
     
    114 118 $opts->{jsonParams}{uid} = $uid;
    115 119
    116 120 warn "Sberbank init args: ".Dumper($opts) if $DEBUG;
    117 my $operation = $self->payment_operation_register(
    121 my $operation = $self->payment_operation_register({
    118 122 order_id => $opts->{orderNumber},
    119 123 name => 'create',
    120 124 uid => $uid,
    121 125 sum => $opts->{amount},
    122 );
    126 });
    123 127 return $self unless ref $operation;
    124 128
    125 129 my $transaction = $self->get_transaction_by_order_id( $opts->{orderNumber} );
    126 if ( ref $transaction ) {
    130 if ( ref $transaction && $transaction->name eq 'Init' ) {
    127 131 ### Transaction already exists
    128 132 $self->{result}{success} = 1;
    129 133 $self->{result}{session_id} = $transaction->session_id;
    130 134 $self->{result}{transaction} = $transaction;
    131 135 } else {
    136 if ( ref $transaction && $transaction->name eq 'Expired' ) {
    137 $transaction->delete;
    138 }
    132 139 my $req = $self->_createRequestGet( $method, $opts );
    133 140 my $ua = LWP::UserAgent->new;
    134 141 $ua->agent('Mozilla/5.0');
    135 142 my $result = $ua->get( $req );
    136 143 if ( $result->code == 200 ) {
    137 144 warn "Sberbank Init result: [".$result->decoded_content."]\n" if $DEBUG;
    138 my $content = decode_json $result->decoded_content;
    145 my $content = JSON::XS->new->decode( $result->decoded_content );
    139 146 warn Dumper $content if $DEBUG;
    140 147
    141 148 if ( ref $content && exists $content->{orderId} ) {
    142 149 my $now = Contenido::DateTime->new;
    143 my $transaction = payments::Transaction->new( $keeper );
    150 $transaction = payments::Transaction->new( $keeper );
    144 151 $transaction->dtime( $now->ymd('-').' '.$now->hms );
    145 152 $transaction->provider( $self->{payment_system} );
    146 153 $transaction->session_id( $content->{orderId} );
     
    158 165 $self->{result}{session_id} = $content->{orderId};
    159 166 $self->{result}{transaction} = $transaction;
    160 167 } elsif ( ref $content && exists $content->{errorCode} && $content->{errorCode} ) {
    161 $self->{result}{error} = $content->{errorMessage};
    162 warn "[$content]\n";
    168 $self->{result}{error} = Encode::encode('utf-8', $content->{errorMessage});
    169 warn "[".$result->decoded_content."]\n";
    163 170 } else {
    164 171 $self->{result}{error} = 'Sberbank Init failed';
    165 $self->{result}{responce} = $content;
    172 $self->{result}{responce} = $result->decoded_content;
    166 173 warn $self->{result}{error}."\n";
    167 warn "[$content]\n";
    174 warn "[".$result->decoded_content."]\n";
    168 175 }
    169 176 } else {
    170 $self->{result}{error} = 'PayTure Init failed';
    177 $self->{result}{error} = 'Sberbank Init failed';
    171 178 $self->{result}{responce} = $result->status_line;
    172 179 warn $self->{result}{error}.": ".$result->status_line."\n";
    173 180 warn Dumper $result;
     
    217 224 my $self = shift;
    218 225 my $opts = shift // {};
    219 226
    220 unless ( %$opts && (exists $opts->{orderNumber} || exists $self->{result} && exists $self->{result}{transaction} && ref $self->{result}{transaction}) ) {
    227 unless ( exists $opts->{orderNumber} || exists $self->{result} && exists $self->{result}{transaction} && ref $self->{result}{transaction} ) {
    221 228 $self->{result}{error} = 'Не указан обязательный параметр orderNumber или не получена транзакция';
    222 229 return $self;
    223 230 }
     
    242 249 my $result = $ua->get( $req );
    243 250 my $return_data = {};
    244 251 if ( $result->code == 200 ) {
    245 warn "Sberbank Status result: [".$result->content."]\n" if $DEBUG;
    246 my $content = decode_json $result->decoded_content;
    252 warn "Sberbank Status: [".$result->decoded_content."]\n" if $DEBUG;
    253 my $content = JSON::XS->new->decode( $result->decoded_content );
    247 254 warn Dumper $content if $DEBUG;
    248 255
    249 if ( ref $content && exists $content->{orderStatus} && exists $content->{orderId} ) {
    256 if ( ref $content && exists $content->{orderStatus} && exists $content->{orderNumber} ) {
    250 257 $self->{result} = {
    251 258 success => 1,
    252 259 status => $content->{orderStatus},
    253 260 action => $content->{actionCode},
    254 action_description => $content->{actionCodeDescription},
    261 action_description => Encode::encode('utf-8', $content->{actionCodeDescription}),
    255 262 amount => $content->{amount},
    256 263 time_ms => $content->{date},
    257 264 ip => $content->{ip},
     
    259 266 };
    260 267 } elsif ( ref $content && exists $content->{errorCode} && $content->{errorCode} ) {
    261 268 $self->{result}{error} = $content->{errorMessage};
    262 warn "[$content]\n";
    269 warn "[".$result->decoded_content."]\n";
    263 270 } else {
    264 271 $self->{result}{error} = 'Sberbank Status failed';
    265 $self->{result}{responce} = $content;
    272 $self->{result}{responce} = $result->decoded_content;
    266 273 warn $self->{result}{error}."\n";
    267 warn "[$content]\n";
    274 warn "[".$result->decoded_content."]\n";
    268 275 }
    269 276 } else {
    270 277 $self->{result}{error} = 'Sberbank Status failed';
     
    318 325 }
    319 326
    320 327 warn "Sberbank refund args: ".Dumper($opts) if $DEBUG;
    321 my $operation = $self->payment_operation_register(
    328 my $operation = $self->payment_operation_register({
    322 329 order_id => $opts->{orderNumber},
    323 330 name => 'refund',
    324 331 uid => $uid,
    325 332 sum => $opts->{amount},
    326 );
    333 });
    327 334 return $self unless ref $operation;
    328 335
    329 336 my $transaction = $self->get_transaction_by_order_id( $opts->{orderNumber} );
     
    336 343 my $result = $ua->get( $req );
    337 344 if ( $result->code == 200 ) {
    338 345 warn "Sberbank Refund result: [".$result->decoded_content."]\n" if $DEBUG;
    339 my $content = decode_json $result->decoded_content;
    346 my $content = JSON::XS->new->decode( $result->decoded_content );
    340 347 warn Dumper $content if $DEBUG;
    341 348
    342 349 if ( ref $content && exists $content->{orderId} ) {
     
    358 365 $self->{result}{session_id} = $content->{orderId};
    359 366 $self->{result}{transaction} = $transaction;
    360 367 } elsif ( ref $content && exists $content->{errorCode} && $content->{errorCode} ) {
    361 $self->{result}{error} = $content->{errorMessage};
    362 warn "[$content]\n";
    368 $self->{result}{error} = Encode::encode('utf-8', $content->{errorMessage});
    369 warn "[".$result->decoded_content."]\n";
    363 370 } else {
    364 371 $self->{result}{error} = 'Sberbank Refund failed';
    365 $self->{result}{responce} = $content;
    372 $self->{result}{responce} = $result->decoded_content;
    366 373 warn $self->{result}{error}."\n";
    367 warn "[$content]\n";
    374 warn "[".$result->decoded_content."]\n";
    368 375 }
    369 376 } else {
    370 $self->{result}{error} = 'PayTure Init failed';
    377 $self->{result}{error} = 'Sberbank Refund failed';
    371 378 $self->{result}{responce} = $result->status_line;
    372 379 warn $self->{result}{error}.": ".$result->status_line."\n";
    373 380 warn Dumper $result;
  • utf8/plugins/payments/lib/payments/State.pm.proto

     
    84 84 $self->{sber_app_token} = '@SBER_TOKEN@';
    85 85 $self->{sber_return_url} = '@SBER_RETURN_URL@';
    86 86 $self->{sber_fail_url} = '@SBER_FAIL_URL@';
    87 $self->{sber_session_timeout} = int('@SBER_SESSION_TIMEOUT_SECS@' || 0);
    87 88 $self->{sber_test_mode} = int('@SBER_TEST_MODE@' || 0);
    88 89 $self->{sber_currency_code} = int('@SBER_CURRENCY_CODE@' || 643);
    89 90

Небольшая справка по веткам

cnddist – контейнер, в котором хранятся все дистрибутивы всех библиотек и программных пакетов, которые использовались при построении различных версий Contenido. Если какой-то библиотеки в данном хранилище нет, инсталлятор сделает попытку "подтянуть" ее с веба (например, с CPAN). Если библиотека слишком старая, есть очень большая вероятность, что ее там уже нет. Поэтому мы храним весь хлам от всех сборок. Если какой-то дистрибутив вдруг отсутствует в cnddist - напишите нам, мы положим его туда.

koi8 – отмирающая ветка, чей код, выдача и все внутренние библиотеки заточены на кодировку KOI8-R. Вносятся только те дополнения, которые касаются внешнего вида и функционала админки, баги ядра, обязательные обновления портов и мелочи, которые легко скопипастить. В дальнейшем планируется полная остановка поддержки по данной ветке.

utf8 – актуальная ветка, заточенная под UTF-8.

Внутри каждой ветки: core – исходники ядра; install – скрипт установки инсталляции; plugins – плагины; samples – "готовые к употреблению" проекты, которые можно поставить, запустить и посмотреть, как они работают.