phpbar.de logo

Mailinglisten-Archive

[php] Demoskript zur Kreditkartenzahlung

[php] Demoskript zur Kreditkartenzahlung

=?iso-8859-1?Q?=22K=F6nigsb=FCscher=2CMoritz=22?= koenigsbuescher_(at)_allcash.de
Tue, 13 Feb 2001 10:38:44 +0100


Hallo liebe Liste,

hier ein Demoskript, das per cURL (http://curl.haxx.se) einen SSL-POST an
einen Zahlungsdienstleister macht. Sollte so bei allen denen klappen, die an
ein Poseidon IPS (von ATOS) posten wollen:

<?
include ("header.html");

function read_errortext($rc){
	$errortextdatei="returncodedatei.txt";
	$fd = fopen($errortextdatei, "r");
	$errorcode = 0;
    while (!feof($fd)) {
		$zeile = fgets($fd, 123);
		$line = explode("=", $zeile);
		if ($line[0]==$rc) {
			$errortext = $line[1];
			$errorcode = 1;
		} 
		if (!$errorcode) {
			$errortext = "No Error description available. Please
contact ALLCASH.";
		}
	}
	fclose($fd);
	return $errortext;
}

# getmicrotime ist nur fuer Geschwindigkeitstests
function getmicrotime(){ 
	$mtime = microtime(); 
	$mtime = explode(" ",$mtime); 
	$mtime = $mtime[1] + $mtime[0]; 
	return ($mtime); 
}

# cURL wird lokal gestartet
$path_to_curl = "/usr/local/bin/";
$path_to_ips =  "Pfad_zum_Zahlungsdienstleister";

$debug=1; #Debug-mode on

# We want the given Creditcard-no. to be Luhn-checked. Therefore we use the
ccval script. 
# This script does two things: Firstly, it does a classic Luhn-check.
Secondly, it checks if the given
# card-no. matches with the card-type. This is a good method to check if the
"cardholder" has knowledge 
# of the card-type....
include ("ccval.php");
# Here we set the CC-no for testing. The number will be forwarded to this
script in real life.
$creditc = "4111111111111111"; #Testnummer ACHTUNG: NUR zum testen erlaubt!
$expdat =  "0202";
$cctype = "vis";

# do the check...
$result = CCVal($creditc, "vis");
if (!$result) {
	echo ("<br>Kreditkarte ung&uuml;ltig");
	exit();
}
#echo ("<br>Kreditkarte g&uuml;ltig");

$path_exists = file_exists ($path_to_curl);
if (!$path_exists) {
	echo ("<br>Pfad zu cURL ung&uuml;ltig"); 
	exit();
} 
#echo ("<br>Pfad zu cURL OK");
$curl_exists = file_exists ($path_to_curl."curl");
if (!$curl_exists) {
	echo ("<br>cURL an angegebenem Pfad nicht gefunden"); 
	exit();
} 
#echo ("<br>cURL ist da");

$timestamp=date("YmdHis");
#echo ("<br>Timestamp: $timestamp");


# Hier wird $request_string zusammengebaut. Da das ALLCASH IPS ein
Lizenzprodukt ist, d&uuml;rfen genauere Parameter nur mit unterzeichneter
Vertraulichkeiterkl&auml;rung herausgegeben werden
$request_string="...";

#echo ("<br>Anfragestring: $request_string<br>");

$anfangszeit= getmicrotime();
echo ("<br><br><b>");

# Die Option -3 erzwingt SSLv3, ohne diese Option versucht es cURL mit TLS,
was nicht bei jedem Webserver klappt (z.B. IBM HTTPD :-( )
$ssl_post=$path_to_curl."curl -3 -d \"".$request_string."\" ".$path_to_ips;

# F&uuml;hre cURL aus und schreibe die Antwort in $antwort
$x = exec ("$ssl_post", $antwort);

$b = count($antwort);

# Erwartet wird eine Zeile als Antwort
if ($b > 1){
	echo ("<h2>No valid answer received:</h2><br>");
	for ($i=0; $i<=$b; $i++){
		echo $antwort[$i];
	}
}
		
# Separier den String nach dem Trennzeichen & und schreib ins Array
$eachline
$eachline = explode("&", $antwort[0]);
#$eachline = explode("&", $request_string);
for ($k=0; $k<count($eachline); $k++) 
{
	# Separier jetzt jede Zeile nach = und schreib die Werte in
$antwortarray
	$eachvalueinline = explode("=", $eachline[$k]);
	$antwortarray[$eachvalueinline[0]] = $eachvalueinline[1];
}
# OK, auch ohne Vertraulichkeitserkl&auml;rung: Da von der
zur&uuml;ckgegebenen Variable rc so viel abbh&auml;ngt, wird sie hier
verwendet:
$rc=$antwortarray["rc"];
switch ($rc) {
		case "000":
			echo ("<br><br>Transaktion autorisiert!!)";
		break;
	default:
			echo ("<br><b>Sorry, your transaction was not
authorized. Error no. ". ."</b>"); 
			echo ("Returncode no. ".$rc.":
".read_errortext($rc));
		break;
}

# Zum Spass und zum Einsch&uuml;chtern von
M&ouml;chtegern-Kreditkartenbetr&uuml;gern
echo ("<br>Your IP: $REMOTE_ADDR");

$endzeit= getmicrotime();#

$difzeit = $endzeit-$anfangszeit ;
echo ("<br>Dauer: $difzeit s<br>");

if ($debug) {
   		
	echo ("<hr><br><br>Posted request:<br>");
	$eachline2 = explode("&", $request_string);
	for ($k=0; $k<count($eachline2); $k++) 
	{
		# Separier jetzt jede Zeile nach = und schreib die Werte in
$antwortarray
		$jedeanfragezeile = explode("=", $eachline2[$k]);
		$antwortarray2[$jedeanfragezeile[0]] = $jedeanfragezeile[1];
	}
	#echo ("$request_string<br>");
	reset ($antwortarray2);
	while (list ($bez, $wert) = each ($antwortarray2)) {
	    echo "<font face=\"Courier,monospace\"> $bez =
$wert</font><br>";
	}
	
	echo "<br><br>Returned data:<br>";
	reset ($antwortarray);
	while (list ($bez, $wert) = each ($antwortarray)) {
	    echo "<font face=\"Courier,monospace\"> $bez =
$wert</font><br>";
	}
}

include ("footer.html");
?>

---
Moritz Königsbüscher
Junior Project Manager 

ALLCASH 
Trust & Service International GmbH
Eurotec-Ring 10
D-47445 Moers

Tel.   +49 (0)2841/1796-279
Fax    +49 (0)2841/1796-521
E-Mail koenigsbuescher_(at)_allcash.de
Web    www.allcash.de


php::bar PHP Wiki   -   Listenarchive