diff --git a/copri4/main/src/Mod/APIjsonserver.pm b/copri4/main/src/Mod/APIjsonserver.pm index 2497f65..df82dd0 100755 --- a/copri4/main/src/Mod/APIjsonserver.pm +++ b/copri4/main/src/Mod/APIjsonserver.pm @@ -71,7 +71,7 @@ my $response = { apiserver => "$apiserver", response => "$respreq", uri_primary => "$dbt->{primary}->{sharee_primary}->{primaryApp}", - copri_version => "4.1.23.24", + copri_version => "4.1.23.26", user_id => "", authcookie => "", new_authcoo => "0", diff --git a/copri4/main/src/Mod/APIpayone.pm b/copri4/main/src/Mod/APIpayone.pm index 7a12d32..f320ec2 100755 --- a/copri4/main/src/Mod/APIpayone.pm +++ b/copri4/main/src/Mod/APIpayone.pm @@ -77,7 +77,7 @@ sub handler { #primary payonelink prepaid transaction-status - #TODO live tests if aid matches + #payone subaccount aid:55218 if($q->param('aid') eq "55218"){ print FILE "TeilRad payonelink transaction on $dbt->{primary}->{sharee_primary}->{database}->{dbname}\n"; @@ -132,6 +132,7 @@ sub handler { }; my $operator_prefix = ""; + my $ctadr_refid = 0; foreach(@keywords){ my $val = $q->param($_); @@ -142,8 +143,9 @@ sub handler { $receivable = $val if($_ eq "receivable"); $txid = $val if($_ eq "txid"); if($_ eq "reference"){ - $update_ctt->{txt25} = $val; + #oprefix-C/S-invoicenr reference for preauth/capture if($val =~ /^(\w+)-/){ + $update_ctt->{txt25} = $val; $operator_prefix = $1; if($operator_prefix ne $oprefix){ my $operator_conf = $dbt->get_operator_conf($operator_prefix); @@ -153,6 +155,10 @@ sub handler { } } } + #userid_epoche reference for payment_ack + elsif($val =~ /^(\d+)_\d+/){ + $ctadr_refid = $1; + } } $update_ctt->{int16} = $val if($_ eq "balance"); $update_ctt->{int18} = $val if($_ eq "sequencenumber"); @@ -162,8 +168,24 @@ sub handler { $update_adr->{int24} = $val if($_ eq "cardexpiredate"); } - #do updates on invoice by payone transaction data on matching TXID - if($txid && looks_like_number($update_ctt->{int19}) && looks_like_number($update_ctt->{int16})){ + #update on contentadr called payment_ack + if($ctadr_refid > 0){ + my $fetch_ctadr = { + table => "contentadr", + fetch => "one", + c_id => $ctadr_refid, + }; + my $ctadr = { c_id => 0 }; + $ctadr = $dbt->fetch_tablerecord($dbh,$fetch_ctadr); + if($ctadr->{c_id}){ + $update_adr->{int18} = $txid || 0;#in payment_ack contentadr context int18=txid + $dbt->update_record($dbh,$update_adr,$ctadr); + $dbt->update_operatorsloop($varenv{dbname},$ctadr->{c_id},"update"); + print FILE "payment_ack ctadr_refid:$ctadr_refid \n" . Dumper($update_adr) . "\n"; + } + } + #updates on contentttrans invoice by payone transaction data on matching TXID + elsif($txid && looks_like_number($update_ctt->{int19}) && looks_like_number($update_ctt->{int16})){ my $ctt = { c_id => 0 }; my $ctadr = { c_id => 0 }; my $fetch_ctt = { diff --git a/copri4/main/src/Mod/Basework.pm b/copri4/main/src/Mod/Basework.pm index 16d3130..58db0d3 100755 --- a/copri4/main/src/Mod/Basework.pm +++ b/copri4/main/src/Mod/Basework.pm @@ -122,21 +122,22 @@ sub battery_percent { } #payable_check and rentable_check -#int03==1 if sepa, 2 if CC, 3 if prepaid -#int04==1 if email Ack -#int13==1 if sms Ack -#int12==1|2|3|4 then Vde +#int03==1 if SEPA, 2 if CC, 3 if Prepaid +#int04==1 if emailAck +#int13==1 if smsAck +#int12==1|2|3|4 than Vde #int14==1 if AGB +#int18>=1 if payAck (must be only set on SEPA and CC) sub isuser_rentable { my $self = shift; my $auth = shift; my $varenv = shift || ""; my $rentable_check=0; - if($auth->{int03} && $auth->{ct_name} && ($auth->{int03} == 1 && $auth->{ct_name} =~ /^\w{2}-\d+/) || ($auth->{int03} == 2 && length($auth->{ct_name}) >= 19) || ($auth->{int03} == 3 && $auth->{ct_name} =~ /Prepaid-\d+/i)){ - $rentable_check=1; - if($auth->{txt08} && $auth->{int04} == 1 && $auth->{int13} == 1 && !$auth->{int12} && $auth->{int14}){ - $rentable_check=2;#if 2 then everything should be alright. rental is enabled + if($auth->{int03} && $auth->{ct_name} && ($auth->{int18} && (($auth->{int03} == 1 && $auth->{ct_name} =~ /^\w{2}-\w+/) || ($auth->{int03} == 2 && length($auth->{ct_name}) >= 19))) || ($auth->{int03} == 3 && $auth->{ct_name} =~ /Prepaid-\d+/i)){ + $rentable_check=1;#Account is payable + if(!$auth->{int12} && $auth->{txt08} && $auth->{int04} == 1 && $auth->{int13} == 1 && $auth->{int14}){ + $rentable_check=2;#Account is rentalable, with all Ack's and Vde=0 } } return $rentable_check; diff --git a/copri4/main/src/Mod/Buttons.pm b/copri4/main/src/Mod/Buttons.pm index db56b13..3657c5d 100755 --- a/copri4/main/src/Mod/Buttons.pm +++ b/copri4/main/src/Mod/Buttons.pm @@ -367,7 +367,7 @@ sub radiobox2(){ my $b_checked = ""; my $c_checked = ""; $a_checked = "checked" if(!$val); - $b_checked = "checked" if($val==1); + $b_checked = "checked" if($val==1 || length($val) > 8);#8 for payAck txid $c_checked = "checked" if($val==2); my $checkb = ""; $checkb .= " $a_name " if($a_name); diff --git a/copri4/main/src/Mod/DBtank.pm b/copri4/main/src/Mod/DBtank.pm index 5b0356f..36f8a32 100755 --- a/copri4/main/src/Mod/DBtank.pm +++ b/copri4/main/src/Mod/DBtank.pm @@ -683,7 +683,7 @@ sub collect_post(){ } }elsif($key =~ /ct\.close_time|ct\.state|ct\.int04|ct\.int14/ && $value){#used to get open invoices if($key =~ /ct\.state/ && $value eq "null"){ - $ct_where .= " and (ct.int04 is $value OR ct.int14 >= 1)";#all un-booked or opos + $ct_where .= " and (ct.int04 is null OR ct.int04=0 OR ct.int14 >= 1)";#all un-booked or opos }else{ $ct_where .= " and $key $op $value"; } @@ -747,6 +747,7 @@ sub fetch_cms { $langfield = "txt01" if($lang eq "de"); $langfield = "txt02" if($lang eq "en"); $langfield = "txt03" if($lang eq "fr"); + $langfield = "txt04" if($lang eq "es"); my $wand = ""; $wand = "and ct_name like '$fetch->{ct_name}%'" if($fetch->{ct_name}); @@ -782,7 +783,7 @@ sub fetch_record(){ $where .= " and rel.$key $op $value" if($key =~ /^(parent_id|main_id|template_id|rel_id)$/ && $value); if($key =~ /^(ct_name$|txt\d+|uri\d+|state)$/ && $value){ if($key eq "state" && $value eq "payment_fault"){ - $where .= " and (ct.int14 >= 1 || ct.int14 == 7)";#OPOS or Zahlungsausfall + $where .= " and (ct.int14 >= 1 OR ct.int14 = 7)";#OPOS or Zahlungsausfall }elsif($value =~ /length/){ $where .= " and $value"; }elsif($value eq "null"){ @@ -904,7 +905,7 @@ sub fetch_tablerecord(){ my $rc = $sth->execute(); #debug $fetch->{table} eq "contenttranspos" on Failure 758 - $bw->log("DBtank fetch_tablerecord source-dbname $source:",$sql,"") if($debug && $fetch->{table} eq "contenttranspos"); + #$bw->log("DBtank fetch_tablerecord source-dbname $source:",$sql,"") if($debug && $fetch->{table} eq "contenttranspos"); my $record = { c_id => 0 }; if($fetch->{fetch} eq "all" && $fetch->{keyfield}){ @@ -1622,8 +1623,9 @@ sub insert_contenttrans(){ $doc_name = "Tagesabschluss" if($tpl_id == 209); $doc_name = "Prepaid Account" if($tpl_id == 219); $owner="0" if(!$owner); - my $paymenttype = $ctadr->{int03} || 0; - #keep in mind int10 will be mainly used by Prelogic and Printpreview, thats because we save it also + my $paymenttype = 0; + $paymenttype = $ctadr->{int03} if($ctadr->{int03} =~ /^\d+$/); + my $sth = $dbh->prepare("INSERT INTO contenttrans (ct_name,txt00,int10,int03,txt02,txt01,txt03,txt06,txt07,txt08,txt10,txt11,owner,itime) VALUES('$invoice_nr','$doc_name','$ctadr->{c_id}','$paymenttype','$ctadr->{txt02}','$ctadr->{txt01}','$ctadr->{txt03}','$ctadr->{txt06}','$ctadr->{txt07}','$ctadr->{txt08}','$ctadr->{txt10}','$ctadr->{txt11}','$owner','now()') RETURNING c_id"); my $rows = $sth->execute(); diff --git a/copri4/main/src/Mod/Indexsharee.pm b/copri4/main/src/Mod/Indexsharee.pm index 08ed32b..5751558 100755 --- a/copri4/main/src/Mod/Indexsharee.pm +++ b/copri4/main/src/Mod/Indexsharee.pm @@ -600,10 +600,9 @@ sub handler { }; my $vde_on_fail = $users_sharee->{int12} || 1;#keep last or set 1 - #SEPA, done in payone Payment + #SEPA, done by Shareework managemandate #CC if($R::pseudocardpan && length($R::pseudocardpan) >= 19){#done by payone AJAX return - #if($R::status eq "APPROVED") $now_dt = strftime "%Y-%m-%d %H:%M:%S", localtime; $update_adr->{txt22} = ""; $update_adr->{txt23} = ""; @@ -615,31 +614,15 @@ sub handler { $update_adr->{int24} = "null";#cpdate reset $dbt->update_record($dbh,$update_adr,$users_sharee) if($users_sharee->{c_id} > 0); ($api_return,$users_sharee) = $apif->auth_verify($q,$coo,""); + + #payment_ack + system("$dbt->{copri_conf}->{basedir}/$varenv{syshost}/src/scripts/payment_ack.pl '$varenv{syshost}' 'payment_ackCC' '$users_sharee->{c_id}' '$aowner'"); - #define fictiv invoice to get 1 € test - my $epoche = time(); - my $ctt = { - c_id => 1, - int01 => 0,#capture amount - int15 => 1,#preauth amount - txt16 => "", - reference => "$users_sharee->{c_id}_$epoche", - payone_reset => '' - }; - - my $payone_txid = ""; - ##preauthorization and/or capture needs to much time, must be done async! - #$payone_txid = $payone->preauthorizationCC_main(\%varenv,$users_sharee,$ctt,$aowner); - #if($payone_txid) - if(1==1){ + if(1==1){ open(FILE,">>$varenv{logdir}/confirm.log") if($debug); print FILE "\n\n*--> $now_dt done by $0\n" if($debug); print FILE "trigger confirm-code request by pseudocardpan\n" if($debug); - #$ctt->{txt16} = "$payone_txid"; - #$payone_txid = $payone->captureCC_main(\%varenv,$users_sharee,$ctt,$aowner); - #int12=0 should be set after capture success in payment module - if(($users_sharee->{int04} != 1) && ($users_sharee->{txt08} =~ /\w\@\w/)){ $shwo->emailack(\%varenv,$users_sharee->{c_id}); } @@ -647,10 +630,7 @@ sub handler { $shwo->smsack($users_sharee); } close(FILE) if($debug); - }else{ - $dbt->update_one($dbh,$update_adr,"int12=$vde_on_fail");#Vde } - $dbt->update_operatorsloop($varenv{dbname},$users_sharee->{c_id},"update"); print redirect("$varenv{wwwhost}/$varenv{mandant}/Account/$varenv{accounting_3}?$returnwww$session_and"); diff --git a/copri4/main/src/Mod/Payment.pm b/copri4/main/src/Mod/Payment.pm index df99057..5e42f05 100755 --- a/copri4/main/src/Mod/Payment.pm +++ b/copri4/main/src/Mod/Payment.pm @@ -111,7 +111,6 @@ sub book_payment { my $sum_operatorcredit = "null"; my $sumgeb_teil = "null"; my $sumgeb_bank = "null"; - my $sum_prepaid = "null"; $update_ctt->{int04} = $R::int04 if(looks_like_number($R::int04));#set payment-type by "buchen" $update_ctt->{int14} = 2;#set OPOS @@ -141,12 +140,6 @@ sub book_payment { $sumgeb_teil =~ s/,/\./; $update_ctt->{int08} = $sumgeb_teil; } - #maybe, we don't need it - if($R::sum_prepaid){ - $sum_prepaid = $R::sum_prepaid; - $sum_prepaid =~ s/,/\./; - #$update_ctt->{int09} = $sum_prepaid; - } $feedb->{u_rows} = $dbt->update_record($dbh,$update_ctt,$ctt); @@ -193,7 +186,7 @@ sub book_payment { $feedb->{message} = "failure::Fehler, OPOS Automatik konnte nicht ausgeführt werden."; } if($update_ctt->{int04} == 7){ - $update_adr->{int12} = 2;#vde + $update_adr->{int12} = 2;#vde on payment fault $dbt->update_record($dbh,$update_adr,$ctadr); my $dbh_primary = $dbt->dbconnect_extern($dbt->{primary}->{sharee_primary}->{database}->{dbname}); $dbt->update_record($dbh_primary,$update_adr,$ctadr); @@ -526,7 +519,7 @@ sub preauthorizationSEPA_main { #for testing payment-data if($ctt_rec->{c_id} && $ctt_rec->{c_id} == 1 && $ctt_rec->{reference}){ $ctt = $ctt_rec; - $preauth_amount = $ctt->{int15};#int15 should only used for testing payment-data + $preauth_amount = $ctt_rec->{int15};#int15 should only used for testing payment-data $reference = $ctt_rec->{reference}; }else{ $preauth_amount = $ctt->{int01}; @@ -665,7 +658,7 @@ sub preauthorizationCC_main { #for testing payment-data if($ctt_rec->{c_id} && $ctt_rec->{c_id} == 1 && $ctt_rec->{reference}){ $ctt = $ctt_rec; - $preauth_amount = $ctt->{int15};#int15 should only used for testing payment-data + $preauth_amount = $ctt_rec->{int15};#int15 should only used for testing payment-data $reference = $ctt_rec->{reference}; }else{ $preauth_amount = $ctt->{int01}; @@ -746,8 +739,13 @@ sub captureCC_main { my $sequence = 1; $sequence = $ctt_rec->{sequence} if($ctt_rec->{sequence}); + #for 1€ preauth_amount capture 0€ + if($ctt_rec->{c_id} && $ctt_rec->{c_id} == 1 && $ctt_rec->{reference}){ + $ctt = $ctt_rec; + } + if($ctt->{c_id} && (!$ctt->{int04} || $ctt->{int14} || $ctt_rec->{payone_reset})){ - my $amount = 0;#if payone_reset capture 0 + my $amount = 0;#yes capture 0 will delete preauth amount $amount = $ctt->{int01} * 100 if(looks_like_number($ctt->{int01}) && !$ctt_rec->{payone_reset}); my $preauth_request = { request => 'capture', @@ -823,7 +821,6 @@ sub rpc { $ua->agent("sharee payone POST API"); #payone API URL - my $payoneLive = 1; my $httpReqServer = "https://api.pay1.de/post-gateway/"; my $req = HTTP::Request->new(POST => "$httpReqServer"); @@ -914,9 +911,11 @@ sub rpc { $update_ctt->{txt26} = $ctadr->{ct_name};#Mandat/pseudocp $update_adr->{int12} = 0; $update_adr->{int17} = $useridval if($useridval); + $update_adr->{int18} = $txidval;#set payment_ack }elsif($ctadr->{c_id}){ $update_ctt->{int14} = 1;#OPOS $update_adr->{int12} = $vde_on_fail;#Vde + $update_adr->{int18} = 0;#delete payment_ack } #2022-12-15 save log for any $update_ctt->{txt28} = $now_dt . " $todo\n" . $res->content . "\n" . $update_ctt->{txt28}; @@ -929,7 +928,6 @@ sub rpc { print FILE "payone CAPTURE $now_dt\n $todo: txid=$txidval && ctt.c_id=$ctt->{c_id} && ctadr.c_id=$ctadr->{c_id}\n" if($debug); if($txidval && $ctt->{c_id} && $ctadr->{c_id} && $res->content =~ /settleaccount=/){ - #int01 and state will be set by "buchen" via Prelogic or via payone_cron/Payment payone_capture $update_ctt->{int14} = "null"; $update_adr->{int12} = 0; }else{#because of Prelogic logic set it empty if no capture @@ -944,20 +942,17 @@ sub rpc { print FILE "NOT APPROVED $now_dt\n $todo: ctt.c_id=$ctt->{c_id} && ctadr.c_id=$ctadr->{c_id}" . $res->content . "\n" if($debug); $update_ctt->{int14} = 1 if($ctt->{int04});#OPOS - #errormessage=Reference number already exists --> disabled - #errormessage=Amount no longer available --> disabled if($res->content !~ /errorcode=911/){ - - if($payoneLive == 1 && $ctadr->{c_id}){ + if($ctadr->{c_id}){ $update_ctt->{txt28} = $now_dt . " $todo\n" . $res->content . "\nVde.\n" . $update_ctt->{txt28}; $update_adr->{txt28} = $now_dt . " $todo\n" . $res->content . "\nVde.\n" . $update_adr->{txt28}; - #never delete on state=occupied, in this case ist must delete it on available + $update_adr->{int18} = 0;#delete payment_ack if($res->content !~ /errorcode=80/){ - $update_adr->{int12} = $vde_on_fail;#Vde + $update_adr->{int12} = $vde_on_fail;#Vde } } }else{ - if($payoneLive == 1 && $ctt->{c_id}){ + if($ctt->{c_id}){ $update_ctt->{txt28} = $now_dt . " $todo\n" . $res->content . "\n" . $update_ctt->{txt28}; $update_adr->{txt28} = $now_dt . " $todo\n" . $res->content . "\n" . $update_adr->{txt28}; } @@ -977,9 +972,6 @@ sub rpc { if($ctadr->{c_id} > 0){ $dbt->update_record($dbh,$update_adr,$ctadr); print FILE Dumper($update_adr) . "\n" if($debug); - #2023-04-11 set it global by update adr also on primary - #disabled, because isuser_rentable will be only used by operator rental - #2024-01-08 enabled again, also done in APIpayone after payone feedback my $dbh_primary = $dbt->dbconnect_extern($dbt->{primary}->{sharee_primary}->{database}->{dbname}); $dbt->update_record($dbh_primary,$update_adr,$ctadr); } diff --git a/copri4/main/src/Mod/Prelib.pm b/copri4/main/src/Mod/Prelib.pm index 5c89b63..a9f0c3f 100755 --- a/copri4/main/src/Mod/Prelib.pm +++ b/copri4/main/src/Mod/Prelib.pm @@ -77,12 +77,13 @@ sub prepaid_request { $pref_ctt->{c_id} = $ct_id; $ctt_prepaid = $dbt->fetch_record($dbh,$pref_ctt) if($pref_ctt->{c_id}); my $update_adr = { - table => "contentadr", - mtime => "now()", - owner => "$owner", - c_id => "$ctadr->{c_id}", + table => "contentadr", + mtime => "now()", + owner => $owner, + int18 => 3,#pay_ack + ct_name => "Prepaid-$ctt_prepaid->{c_id}", }; - $dbt->update_one($dbh,$update_adr,"ct_name='Prepaid-$ctt_prepaid->{c_id}'"); + $feedb->{u_rows} = $dbt->update_record($dbh,$update_adr,$ctadr); } my $pos_id = 0; diff --git a/copri4/main/src/Mod/Shareework.pm b/copri4/main/src/Mod/Shareework.pm index ece25e8..681b39c 100755 --- a/copri4/main/src/Mod/Shareework.pm +++ b/copri4/main/src/Mod/Shareework.pm @@ -539,15 +539,10 @@ sub save_account(){ $ctadr = $dbt->fetch_record($dbh,$authref); } - #payone only if SEPA Mandat checked - #Testbuchhung mit 1 € preauthorization and 0 € capture - #print FILE "+++ $R::request && $ctadr->{int03} == 1 && $ctadr->{ct_name} eq $ctadr->{c_id} \n" if($debug); - #if($R::request eq "managemandate" && $ctadr->{int03} == 1 && $ctadr->{ct_name} eq $ctadr->{c_id}) - #fraud workaround my $iban = $ctadr->{txt22} || ""; $iban =~ s/\s//g; my $iban_reject = 0; - $iban_reject = 1 if($iban =~ /DE33700202700000091600/i); + $iban_reject = 1 if($iban =~ /DE33700202700000091600/i);#fraud if($R::request eq "managemandate" && $ctadr->{int03} == 1 && !$iban_reject){ my $vde_on_fail = $ctadr->{int12} || 3;#keep last or set 3 @@ -569,43 +564,19 @@ sub save_account(){ }else{ my $payone_mival = $payone->managemandate_main(\%varenv,$ctadr,"",$owner); - if($payone_mival && $payone_mival =~ /\w{2}-\d+/){ - #define fictiv invoice to get 1 € test - my $epoche = time(); - my $ctt = { - c_id => 1, - int01 => 0, - int15 => 1, - txt16 => "", - reference => "$ctadr->{c_id}_$epoche", - payone_reset => '' - }; + if($payone_mival && $payone_mival =~ /\w{2}-\w+/){ - my $payone_txid = ""; - ##preauthorization and/or capture needs to much time, must be done async! - #$payone_txid = $payone->preauthorizationSEPA_main(\%varenv,$ctadr,$ctt,$owner); - #if($payone_txid) - if(1==1){ + #payment_ack + system("$dbt->{copri_conf}->{basedir}/$varenv{syshost}/src/scripts/payment_ack.pl '$varenv{syshost}' 'payment_ackSEPA' '$ctadr->{c_id}' '$owner'"); - $ctt->{txt16} = "$payone_txid"; $vde_on_fail = 0 if($vde_on_fail != 2); $u_rows = $dbt->update_one($dbh,$update_adr,"int12=$vde_on_fail");#Vde - #$payone_txid = $payone->captureSEPA_main(\%varenv,$ctadr,$ctt,$owner); - #int12=0 should be set after capture success in payment module - - }else{ - $u_rows = $dbt->update_one($dbh,$update_adr,"int12=$vde_on_fail");#Vde - } - }else{ - $u_rows = $dbt->update_one($dbh,$update_adr,"int12=$vde_on_fail");#Vde - } + }else{ + $u_rows = $dbt->update_one($dbh,$update_adr,"int12=$vde_on_fail");#Vde + } } } - #prepaid, will be requested in PayoneLink.pm - #elsif($ctadr->{int03} == 3){ - # $feedb = $pl->prepaid_request($dbh,$ctadr,$owner); - #} if($R::txt04 && $R::confirm_txt04 && $R::txt04 ne $R::confirm_txt04){ $ret = "failure::confirm_txt04#top"; diff --git a/copri4/main/src/Tpl/BaseEdit.pm b/copri4/main/src/Tpl/BaseEdit.pm index bee6401..e02547d 100755 --- a/copri4/main/src/Tpl/BaseEdit.pm +++ b/copri4/main/src/Tpl/BaseEdit.pm @@ -524,21 +524,21 @@ EOF print $q->td({-class=>'left_italic_cms'},"$des"),"\n"; print $q->td({-class=>'content1_cms',-nowrap=>"1"},"$gesamt €"); }elsif($key eq "txt24"){ - if($cttpos->{$key} && $users_dms->{int03} > 1){ + if($cttpos->{$key} && $users_dms->{int03} >= 1){ $cttpos->{$key} = $q->unescapeHTML("$cttpos->{$key}"); $cttpos->{$key} = $lb->newline($cttpos->{$key},"",""); print $q->Tr(),"\n"; print $q->td({-class=>'content1_cms',-colspan=>2},"appapi-log
$cttpos->{$key}"),"\n"; } }elsif($key eq "txt25"){ - if($cttpos->{$key} && $users_dms->{int03} > 1){ + if($cttpos->{$key} && $users_dms->{int03} >= 1){ $cttpos->{$key} = $q->unescapeHTML("$cttpos->{$key}"); $cttpos->{$key} = $lb->newline($cttpos->{$key},"",""); print $q->Tr(),"\n"; print $q->td({-class=>'content1_cms',-colspan=>2},"sigapi-log
$cttpos->{$key}"),"\n"; } }elsif($key eq "txt29"){ - if($cttpos->{$key} && $users_dms->{int03} > 1){ + if($cttpos->{$key} && $users_dms->{int03} >= 1){ $cttpos->{$key} = $q->unescapeHTML("$cttpos->{$key}"); $cttpos->{$key} = $lb->newline($cttpos->{$key},"",""); print $q->Tr(),"\n"; diff --git a/copri4/main/src/scripts/Ilockit_cloud.pl b/copri4/main/src/scripts/Ilockit_cloud.pl index 80ff26b..83bf9f1 100755 --- a/copri4/main/src/scripts/Ilockit_cloud.pl +++ b/copri4/main/src/scripts/Ilockit_cloud.pl @@ -412,7 +412,6 @@ sub get_positions { int03 => "$theftmove_count", int07 => "$resp->{speed}", int08 => "$resp->{attributes}->{distance}", - int09 => "$resp->{attributes}->{totalDistance}", int05 => "8",#gps position marker int13 => "$resp->{deviceId}", int10 => "$record_cc->{$id}->{int10}", diff --git a/copri4/main/src/scripts/payment_ack.pl b/copri4/main/src/scripts/payment_ack.pl new file mode 100755 index 0000000..4f554c5 --- /dev/null +++ b/copri4/main/src/scripts/payment_ack.pl @@ -0,0 +1,94 @@ +#!/usr/bin/perl +# +# +# SPDX-License-Identifier: AGPL-3.0-or-later +# Copyright (c) Rainer Gümpelein, TeilRad GmbH +# + +use vars qw($syshost); + +BEGIN { + $syshost = $ARGV[0] || exit 1; +} + +use lib "/var/www/copri-bike/$syshost/src"; +use strict; +use warnings; +use POSIX; +use Scalar::Util qw(looks_like_number); +use Lib::Config; +use Mod::DBtank; +use Mod::Payment; +use Data::Dumper; + +my $cf = new Config; +my %varenv = $cf->envonline(); +my $dbt = new DBtank; +my $pay = new Payment; +my $now_dt = strftime("%Y-%m-%d %H:%M:%S",localtime(time)); + +my $todo = $ARGV[1] || ""; +my $adrc_id = $ARGV[2] || ""; +my $aowner = $ARGV[3] || "196"; + + +open(FILE,">>$varenv{logdir}/payment_ack.log"); +print FILE "\n*** $now_dt todo:$todo|adrc_id:$adrc_id|aowner:$aowner \n"; + +my $dbh = $dbt->dbconnect(); +my $authref = { + table => "contentadr", + fetch => "one", + template_id => "202", + c_id => "$adrc_id", +}; +my $ctadr = { c_id => 0 }; +$ctadr = $dbt->fetch_record($dbh,$authref) if($adrc_id); + + +#preauthorization 1€ and after success async capture 0 for deletion +#define fictiv invoice to get 1 € test +my $epoche = time(); +if($ctadr->{c_id}){ + my $ctt = { + c_id => 1, + int01 => 0,#will delete preauth_amount by capture 0€ + int04 => 0, + int15 => 1,#preauth_amount + txt16 => "", + reference => "$ctadr->{c_id}_$epoche", + payone_reset => '' + }; + + print FILE "fictiv invoice ctt:" . Dumper($ctt) . "\n"; + + my $payone_txid = ""; + if($todo eq "payment_ackCC"){ + $payone_txid = $pay->preauthorizationCC_main(\%varenv,$ctadr,$ctt,$aowner); + print FILE "preauthorizationCC_main txid:$payone_txid\n"; + + $ctt->{txt16} = $payone_txid; + if($ctt->{txt16}){ + sleep 2; + my $payone_txid_captured = $pay->captureCC_main(\%varenv,$ctadr,$ctt,$aowner); + print FILE "captureCC_main returns txid:$payone_txid_captured\n"; + }else{ + print FILE "Failure, No preauthorizationCC_main txid!\n"; + } + }elsif($todo eq "payment_ackSEPA"){ + $payone_txid = $pay->preauthorizationSEPA_main(\%varenv,$ctadr,$ctt,$aowner); + print FILE "preauthorizationSEPA_main txid:$payone_txid\n"; + + $ctt->{txt16} = $payone_txid; + if($ctt->{txt16}){ + sleep 2; + my $payone_txid_captured = $pay->captureSEPA_main(\%varenv,$ctadr,$ctt,$aowner); + print FILE "captureSEPA_main returns txid:$payone_txid_captured\n"; + }else{ + print FILE "Failure, No preauthorizationSEPA_main txid!\n"; + } + } +} + +close(FILE); + diff --git a/copri4/shareeapp-operator/src/Tpl/PayoneCCclient.pm b/copri4/shareeapp-operator/src/Tpl/PayoneCCclient.pm index 44f6344..394d9da 100755 --- a/copri4/shareeapp-operator/src/Tpl/PayoneCCclient.pm +++ b/copri4/shareeapp-operator/src/Tpl/PayoneCCclient.pm @@ -42,12 +42,16 @@ sub tpl(){ $bgcolor1 = $dbt->{website}->{$varenv->{syshost}}->{bgcolor1} if($dbt->{website}->{$varenv->{syshost}}->{bgcolor1}); $bgcolor1 = $dbt->{merchant_ids}->{$varenv->{merchant_id}}->{bgcolor1} if($dbt->{merchant_ids}->{$varenv->{merchant_id}}->{bgcolor1}); + my $red = "#c83434"; print "
\n"; print $q->div({-class=>'content_title3'},"$varenv->{cms}->{'iframe-credit-card-data'}->{txt}"),"\n"; - print $q->div({-class=>'content2'},"$varenv->{cms}->{'iframe-creditcard-data-info'}->{txt}"),"\n"; + if($users_sharee->{int03} == 2 && length($users_sharee->{ct_name}) >= 19 && !$users_sharee->{int18}){ + print $q->div({-class=>'content2',-style=>"color:$red"}, "$varenv->{cms}->{'iframe-payAck-failure'}->{txt}"),"\n"; + } + if($users_sharee->{int03} && $users_sharee->{int03} == 2 && length($users_sharee->{ct_name}) >= 19 && $users_sharee->{txt28} && $users_sharee->{txt28} =~ /pseudocardpan=\d{19}/ && $users_sharee->{txt28} =~ /(\d{4}-\d{2}-\d{2}\s\d{2}:\d{2})/){ my $cc_datetime = $1 || ""; $cc_datetime = $lb->time4de($cc_datetime,"1") if($cc_datetime); diff --git a/copri4/shareeapp-operator/src/Tpl/PayoneSEPA.pm b/copri4/shareeapp-operator/src/Tpl/PayoneSEPA.pm index a215a7c..be232b6 100755 --- a/copri4/shareeapp-operator/src/Tpl/PayoneSEPA.pm +++ b/copri4/shareeapp-operator/src/Tpl/PayoneSEPA.pm @@ -41,6 +41,7 @@ sub tpl(){ my $bgcolor1 = "009899";#sharee $bgcolor1 = $dbt->{website}->{$varenv->{syshost}}->{bgcolor1} if($dbt->{website}->{$varenv->{syshost}}->{bgcolor1}); $bgcolor1 = $dbt->{merchant_ids}->{$varenv->{merchant_id}}->{bgcolor1} if($dbt->{merchant_ids}->{$varenv->{merchant_id}}->{bgcolor1}); + my $red = "#c83434"; my $coo = $q->cookie(-name=>'domcookie') || $R::sessionid; my $ctadr = $users_sharee if(ref($users_sharee) eq "HASH" && $users_sharee->{c_id}); @@ -58,14 +59,16 @@ sub tpl(){ print $q->div({-class=>'content_title3'},"$varenv->{cms}->{'iframe-bank-account'}->{txt}"),"\n"; print $q->div({-class=>'content2'}, "$varenv->{cms}->{'iframe-sepa-mandat-prolog'}->{txt}"),"\n"; - #print $q->div({-class=>'content2'}, "Zur Validierung Ihrer Zahlungsdaten wird eine 1,- € Testbuchung vorgenommen. Wir werden nach erfolgreicher Abbuchung den Betrag als Mietgutschrift in Ihrem Account hinterlegen."),"\n"; + if($ctadr->{int03} == 1 && $ctadr->{ct_name} =~ /^\w{2}-\w+/ && !$ctadr->{int18}){ + print $q->div({-class=>'content2',-style=>"color:$red"}, "$varenv->{cms}->{'iframe-payAck-failure'}->{txt}"),"\n"; + } foreach (@tpl_order){ my ($key,$des,$size) = split /=/,$_; $ctadr->{$key} = $q->unescapeHTML("$ctadr->{$key}"); my $label_des=""; - my $red = "#c83434"; + $red = "#c83434"; my $required="required"; if($key eq "txt22"){ if($R::IBAN){ diff --git a/copri4/shareeapp-operator/src/Tpl/RentalData.pm b/copri4/shareeapp-operator/src/Tpl/RentalData.pm index 44b9830..c92faeb 100755 --- a/copri4/shareeapp-operator/src/Tpl/RentalData.pm +++ b/copri4/shareeapp-operator/src/Tpl/RentalData.pm @@ -101,9 +101,6 @@ sub tpl { my $bonus_ak = "$varenv->{cms}->{'iframe-bonusnumber-accepted'}->{txt}"; $bonus_ak = "$varenv->{cms}->{'iframe-activation-code-info'}->{txt}" if($project eq "Freiburg"); - my $payable_check=0; - $payable_check = $bw->isuser_rentable($ctadr,$varenv); - print "
\n"; #subMenue-------- @@ -167,6 +164,11 @@ sub tpl { }#end confirm code manage else{ + my $payable_check=0; + $payable_check = $bw->isuser_rentable($ctadr,$varenv); + if($payable_check <= 1){ + print $q->div({-class=>'content2',-style=>"color:$red"}, "$varenv->{cms}->{'iframe-payAck-failure'}->{txt}"),"\n"; + } print $q->start_form(-name=>'accountscreen', -action=>"/$varenv->{mandant}/Account/$varenv->{accounting_3}$session"),"\n"; print $q->hidden(-name=>"sessionid",-override=>1,-value=>"$R::sessionid"); diff --git a/copri4/shareeconf/examples/apikeys.cfg b/copri4/shareeconf/examples/apikeys.cfg index df14c50..6dd8ec5 100755 --- a/copri4/shareeconf/examples/apikeys.cfg +++ b/copri4/shareeconf/examples/apikeys.cfg @@ -1,11 +1,18 @@ + + username = "xxxxxxxxxx" + passwd = "xxxxxxxx" + + - gtx_key = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" + gtx_key = "xxxxxxxxxxxxxxxxxxxxxxxxx" - pkey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" + pkey = "xxxxxxxxxxxxxxxxxxxxxxxx" - - xxxkey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - + + endpoint = "https://shareedms-operator.example.tld/APIshareeio" + sharee_api_key = "xxxxxxxxxxxxxxxxxxxxxxx" + + diff --git a/copri4/shareeconf/examples/global.cfg b/copri4/shareeconf/examples/global.cfg index 48dec0e..591edfd 100755 --- a/copri4/shareeconf/examples/global.cfg +++ b/copri4/shareeconf/examples/global.cfg @@ -254,6 +254,14 @@ speed = 1 meter = 50 + + 0 = "" + 1 = "Aufwand TeilRad Fibu Gebühr" + 2 = "Payone Gebühr" + 3 = "Zahlungseingang Teilzahlung" + 4 = "Zahlungseingang Prepaid/Vorkasse" + 5 = "Operator Prepaid Abbuchung" + jsscript = "js/mobile_script.js" style_bootstrap_icons = "external/bootstrap-icons-1.10.2/bootstrap-icons.css" diff --git a/copri4/shareeconf/examples/sharee_operator.sql.gz b/copri4/shareeconf/examples/sharee_operator.sql.gz index 248c2d5..5481a07 100755 Binary files a/copri4/shareeconf/examples/sharee_operator.sql.gz and b/copri4/shareeconf/examples/sharee_operator.sql.gz differ