Revision 404 (by ahitrov, 2014/01/16 13:03:34) |
Debug
|
<?xml version="1.0" encoding="UTF-8"?>
<response>
<result><% $code %></result>
<description><% $codes{$code} %></description>
<fields>
<id><% $id %></id>
<order><% $v1 %></order>
<amount><% $amount %></amount>
<currency><% $currency %></currency>
<datetime><% $datetime %></datetime>
<sign><% $sign %></sign>
</fields>
</response>
<%doc>
сommand Признак того, что идет оповещение о платеже
id Уникальный id операции в системе «Иксолла»
v1 Уникальный идентификатор заказа, полученный от проекта. В XML-ответе значение этого параметра следует передававть в параметре order.
amount Стоимость заказа. Разделитель “.” (2 знака после точки)
currency Валюта заказа. Используется трехбуквенное обозначение валюты согласно стандарту ISO 4217
datetime Дата в формате ГГГГММДДЧЧММСС
test Признак тестовой транзакции. test=1 – система проводит тестовую транзакцию. Реального платежа не было. test=0 – реальный платеж
sign Подпись для предотвращения несанкционированного доступа
user_sum Размер платежа, совершенного пользователем. Разделитель “.” (2 знака после точки)
user_currency Валюта платежа, совершенного пользователем. Используется трехбуквенное обозначение валюты согласно стандарту ISO 4217
transfer_sum Сумма выплаты проекту. Разделитель “.” (2 знака после точки)
transfer_currency Валюта выплаты проекту. Используется трехбуквенное обозначение валюты согласно стандарту ISO 4217
pid Идентификационный номер платежной системы
id_geotype id валюты платежной системы
</%doc>
<%once>
use Digest::MD5;
my @valid_ips = @{$state->{payments}{xsolla_valid_ips}};
my %codes = (
'0' => 'Success',
'10' => 'Another delivery attempt',
'20' => 'Wrong parameters',
'30' => 'Temporary error',
'40' => 'Fatal error',
);
</%once>
<%args>
$id => undef
$v1 => ''
$v2 => ''
$v3 => ''
$amount => undef
$currency => undef
$datetime => undef
$test => undef
$sign => undef
$user_sum => undef
$user_currency => undef
$transfer_sum => undef
$transfer_currency => undef
$pid => undef
$id_geotype => undef
</%args>
<%init>
my $DEBUG = 1;
warn Dumper \%ARGS if $DEBUG;
my $str = $v1.$amount.$currency.$id.$state->{payments}{xsolla_app_secret};
my $md5 = Digest::MD5::md5_hex ( $str );
warn "MD5 Check: $md5\n" if $DEBUG;
my $code = 0;
my $ip = $r->header_in('X-Real-IP');
warn "From IP=$ip\n" if $DEBUG;
my $transaction;
if ( $md5 eq $sign && grep { $ip eq $_ } @valid_ips ) {
my $last = $keeper->{payments}->check( $v1 );
if ( $last->name eq 'cancel' ) {
$code = 40;
} elsif ( $last->name eq 'suspend' ) {
$code = 20;
}
unless ( $code ) {
($transaction) = $keeper->get_documents(
class => 'payments::Transaction',
order_id => $v1,
operation_id => $id,
provider => 'xsolla',
limit => 1,
);
if ( ref $transaction ) {
$code = 10;
} else {
my $dt = $datetime =~ /^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/ ? "$1-$2-$3 $4:$5:$6" : '';
$transaction = payments::Transaction->new( $keeper );
$transaction->status( $test || 0 );
$transaction->provider( 'xsolla' );
$transaction->order_id( $v1 );
$transaction->operation_id( $id );
$transaction->sum( $amount );
$transaction->currency_code( $currency );
$transaction->dtime( $dt ) if $dt;
$transaction->custom1( $v2 );
$transaction->custom2( $v3 );
$transaction->name( $v2 || $v3 );
$transaction->store();
if ( $keeper->can('_xsolla_handler') ) {
unless ( $keeper->_xsolla_handler( $transaction ) ) {
$code = 30;
}
}
}
}
} else {
warn "Wrong transaction parameters: IP=$ip. Available ip list [".Dumper(\@valid_ips)."]. String: $str. MD5: $md5. Sign: $sign\n";
$code = 20;
}
</%init>
Небольшая справка по веткам
cnddist – контейнер, в котором хранятся все дистрибутивы всех библиотек и программных пакетов, которые использовались при построении различных версий Contenido. Если какой-то библиотеки в данном хранилище нет, инсталлятор сделает попытку "подтянуть" ее с веба (например, с CPAN). Если библиотека слишком старая, есть очень большая вероятность, что ее там уже нет. Поэтому мы храним весь хлам от всех сборок. Если какой-то дистрибутив вдруг отсутствует в cnddist - напишите нам, мы положим его туда.
koi8 – отмирающая ветка, чей код, выдача и все внутренние библиотеки заточены на кодировку KOI8-R. Вносятся только те дополнения, которые касаются внешнего вида и функционала админки, баги ядра, обязательные обновления портов и мелочи, которые легко скопипастить. В дальнейшем планируется полная остановка поддержки по данной ветке.
utf8 – актуальная ветка, заточенная под UTF-8.
Внутри каждой ветки: core – исходники ядра; install – скрипт установки инсталляции; plugins – плагины; samples – "готовые к употреблению" проекты, которые можно поставить, запустить и посмотреть, как они работают.