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 – "готовые к употреблению" проекты, которые можно поставить, запустить и посмотреть, как они работают.