mirror of
https://gitlab.com/t6353/sharee.bike.git
synced 2024-11-15 23:26:34 +01:00
273 lines
7.6 KiB
Perl
Executable file
273 lines
7.6 KiB
Perl
Executable file
package PayoneCCclient;
|
|
#
|
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
# Copyright (c) Rainer Gümpelein, TeilRad GmbH
|
|
#
|
|
use strict;
|
|
use warnings;
|
|
use CGI ':standard';
|
|
use Config::General;
|
|
use Mod::Libenz;
|
|
use Mod::DBtank;
|
|
|
|
|
|
sub new {
|
|
my $class = shift;
|
|
my $self = {};
|
|
bless($self,$class);
|
|
return $self;
|
|
}
|
|
|
|
#Template
|
|
sub tpl(){
|
|
my $self = shift;
|
|
my $tpl_id = shift;
|
|
my $node_meta = shift;
|
|
my $users_dms = shift || "";
|
|
my $mode = shift || "";
|
|
my $varenv = shift;
|
|
my $users_sharee = shift || "";
|
|
my $return = shift || "";
|
|
|
|
my $q = new CGI;
|
|
my $lb = new Libenz;
|
|
my $dbt = new DBtank;
|
|
|
|
my $globalconf_file = "/var/www/copri4/shareeconf/global.cfg";
|
|
my $conf = Config::General->new($globalconf_file);
|
|
my %globalconf = $conf->getall;
|
|
my $payone_conf = $globalconf{payone_conf};
|
|
|
|
my $bgcolor1 = "009899";#sharee
|
|
#my $bgcolor1 = "e2001a";
|
|
|
|
$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});
|
|
|
|
print "<div class='form-group' style='clear:both;'>\n";
|
|
|
|
print $q->div({-class=>'content_title3'},"Kreditkartendaten"),"\n";
|
|
|
|
print $q->div({-class=>'content2'},"Kreditkartendaten werden von uns nicht gespeichert sondern direkt an unseren Zahlungsdienstleister Payone übermittelt. Deshalb sehen Sie hier nur leere Eingabefelder."),"\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($users_sharee->{int03} && $users_sharee->{int03} == 2 && $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);
|
|
print $q->div({-class=>'content2', -style=>'color:#009899;'},"Am $cc_datetime wurden Ihre Kreditkartendaten von unserem Zahlungsdienstleister Payone erfolgreich angenommen."),"\n";
|
|
}else{
|
|
#print $q->div({-class=>'content2', -style=>'color:#c83434;'},"Ihre Kreditkartendaten konnten nicht erfolgreich validiert werden. Bitte überprüfen Sie Ihre Eingaben."),"\n";
|
|
}
|
|
|
|
print "<style type='text/css'>div#ccerror {color:#c83434;} </style>\n";
|
|
print "<div id='ccerror'></div>\n";
|
|
|
|
if(1==1){
|
|
|
|
print<<EOF
|
|
<style type="text/css" media="screen, projection">
|
|
fieldset {
|
|
color:black;
|
|
padding: 1em;
|
|
border: 1px solid #$bgcolor1;
|
|
width: 275px;
|
|
margin: 10px;
|
|
}
|
|
label {
|
|
margin-right: 10px;
|
|
float: left;
|
|
width: 80px;
|
|
padding-top: 0.3em;
|
|
text-align: left;
|
|
}
|
|
input, select{
|
|
font-size: 1em;
|
|
border: 1px solid black;
|
|
padding: 0.1em;
|
|
}
|
|
select {
|
|
margin-right: 10px;
|
|
}
|
|
input, .inputIframe, select {
|
|
display: block;
|
|
margin-bottom: 10px;
|
|
}
|
|
input {
|
|
width: 175px;
|
|
}
|
|
#paymentsubmit {
|
|
width: 100%;
|
|
font-size:1.2em;
|
|
padding: 5px;
|
|
margin-top:20px;
|
|
color:#FFF;
|
|
background-color:#$bgcolor1;
|
|
}
|
|
#errorOutput {
|
|
text-align: center;
|
|
color: #ff0000;
|
|
display: block;
|
|
}
|
|
</style>
|
|
|
|
<script type="text/javascript" src="https://secure.pay1.de/client-api/js/v1/payone_hosted_min.js"></script>
|
|
EOF
|
|
;
|
|
|
|
print<<EOF
|
|
<form name="paymentform" action="" method="post">
|
|
<fieldset>
|
|
|
|
<input type="hidden" name="pseudocardpan" id="pseudocardpan">
|
|
<input type="hidden" name="truncatedcardpan" id="truncatedcardpan">
|
|
|
|
<!-- place your input fields -->
|
|
<label for="cardtypeInput">Kreditkartentyp:</label>
|
|
<span id="cardtype" class="inputIframe"></span>
|
|
|
|
<label for="cardpanInput">Kreditkartennummer:</label>
|
|
<span id="cardpan" class="inputIframe"></span>
|
|
|
|
<label for="cvcInput">CVC:</label>
|
|
<span id="cardcvc2" class="inputIframe"></span>
|
|
|
|
<label for="expireInput">gültig bis:</label>
|
|
<span id="expireInput" class="inputIframe">
|
|
<span id="cardexpiremonth"></span>
|
|
<span id="cardexpireyear"></span>
|
|
</span>
|
|
|
|
<label for="firstnameInput">Vorname:</label>
|
|
<input id="firstname" type="text" name="firstname" value="">
|
|
|
|
<label for="lastnameInput">Name:</label>
|
|
<input id="lastname" type="text" name="lastname" value="">
|
|
|
|
<div id="errorOutput"></div>
|
|
|
|
<input id="paymentsubmit" type="button" value="Speichern" onclick="check();">
|
|
|
|
</fieldset>
|
|
<input type="hidden" name="sessionid" value="$R::sessionid">
|
|
|
|
</form>
|
|
|
|
<div id="paymentform"></div>
|
|
<script>
|
|
var request, config;
|
|
config = {
|
|
|
|
fields: {
|
|
|
|
cardtype: {
|
|
selector: "cardtype", // put name of your div-container here
|
|
cardtypes: ["V", "M"] // define possible cardtypes in PAYONE iFrame
|
|
},
|
|
|
|
cardpan: {
|
|
selector: "cardpan", // put name of your div-container here
|
|
type: "text", // text (default), password, tel
|
|
style: "font-size: 1em; border: 1px solid black;"
|
|
},
|
|
|
|
cardcvc2: {
|
|
selector: "cardcvc2", // put name of your div-container here
|
|
type: "password", // select(default), text, password, tel
|
|
style: "font-size: 1em; border: 1px solid black;",
|
|
size: "4",
|
|
maxlength: "4", // set max. length for CVC input; empty values possible
|
|
length: {
|
|
"A": 4, "V": 3, "M": 3, "J": 0
|
|
} // set required CVC length per cardtype
|
|
// if set exact length required; 0=CVC input disabled
|
|
},
|
|
|
|
cardexpiremonth: {
|
|
selector: "cardexpiremonth", // put name of your div-container here
|
|
type: "select", // select(default), text, password, tel
|
|
size: "2",
|
|
maxlength: "2",
|
|
|
|
iframe: {
|
|
width: "50px"
|
|
}
|
|
},
|
|
|
|
cardexpireyear: {
|
|
selector: "cardexpireyear", // put name of your div-container here
|
|
type: "select", // select(default), text, password, tel
|
|
|
|
iframe: {
|
|
width: "80px"
|
|
}
|
|
}
|
|
|
|
},
|
|
|
|
defaultStyle: {
|
|
input: "font-size: 1em; border: 1px solid black; width: 175px;",
|
|
select: "font-size: 1em; border: 1px solid black;",
|
|
iframe: {
|
|
height: "33px",
|
|
width: "280px"
|
|
},
|
|
error: "errorOutput",
|
|
language: Payone.ClientApi.Language.de
|
|
// area to display error-messages (optional)
|
|
// Language to display error-messages
|
|
// (default: Payone.ClientApi.Language.en)
|
|
}};
|
|
|
|
request = {
|
|
aid: '$payone_conf->{aid}', // your AID
|
|
encoding: '$payone_conf->{encoding}', // desired encoding
|
|
mid: '$payone_conf->{mid}', // your MID
|
|
mode: '$payone_conf->{mode}', // desired mode
|
|
portalid: '$payone_conf->{portalid}', // your PortalId
|
|
request: 'creditcardcheck', // fixed value
|
|
responsetype: '$payone_conf->{responsetype}', // fixed value
|
|
storecarddata: '$payone_conf->{storecarddata}',// fixed value
|
|
hash: '$payone_conf->{hash}' // hash calculated over your request-parameter-values (alphabetical request-order) plus PMI portal key
|
|
// see Chapter 3.1.5.3
|
|
};
|
|
|
|
var iframes = new Payone.ClientApi.HostedIFrames(config, request);
|
|
|
|
function check() {
|
|
// Function called by submitting PAY-button
|
|
|
|
if (iframes.isComplete()) {
|
|
iframes.creditCardCheck('checkCallback');
|
|
// Perform "CreditCardCheck" to create and get a
|
|
// PseudoCardPan; then call your function
|
|
"checkCallback"
|
|
} else {
|
|
//\$('#ccerror').html('Die Kreditkartendaten konnten nicht validiert werden.');
|
|
console.debug("not complete");
|
|
}
|
|
}
|
|
|
|
function checkCallback(response) {
|
|
console.debug('xxxxx' + response);
|
|
|
|
if (response.status === "VALID") {
|
|
document.getElementById("pseudocardpan").value = response.pseudocardpan;
|
|
document.getElementById("truncatedcardpan").value = response.truncatedcardpan;
|
|
document.paymentform.submit();
|
|
}else{
|
|
//\$('#ccerror').html('Die Kreditkartendaten konnten nicht validiert werden.');
|
|
const element = document.getElementById("ccerror");
|
|
element.innerHTML = Date() + " Ihre Kreditkartendaten konnten nicht validiert werden.";
|
|
console.debug("not complete 2");
|
|
}
|
|
}
|
|
|
|
</script>
|
|
|
|
EOF
|
|
;
|
|
}
|
|
print "</div>\n";
|
|
|
|
|
|
}
|
|
1;
|