Subversion-Projekte lars-tiefland.php_share

Revision

Blame | Letzte Änderung | Log anzeigen | RSS feed

<?php

    /**
     * @package   php_share
     * @author    Lars Tiefland <tiefland@weban.de>
     * @copyright 2010 Webagentur Niewerth
     * @license   propietary http://www.weban.de
     * @version   $Rev: 760 $
     * @filesource
     * 
     */

    /**
     * 
     * @package   php_share
     * @author    Lars Tiefland <tiefland@weban.de>
     * @copyright 2010 Webagentur Niewerth
     */

    // SVN: $Id: saferpay.php 760 2011-10-12 14:04:01Z tiefland $

    require_once "creditcard.interface.php";

    class saferpay implements creditcard
    {
        protected $ini;

        function __construct()
        {
            if ( !is_array( $_SESSION["INI"] ) )
            {
                $this->ini = $GLOBALS["INI"];
            }
            else
            {
                $this->ini = $_SESSION["INI"];
            }
        }
        function getCreditcardStatus( $bestellId )
        {
            $summe = getBasketSumme() * 100;
            if ( $_SESSION["brutto"] == true && $this->ini["netto_preise"] ==
                1 )
            {
                $summe = round( getBasketSummeBrutto(), 2 ) * 100;
            }
            $b_url = $this->ini["absoluteURL"];
            $b_url_s = ( $this->ini["ssl_buy"] ) ? str_replace( "http://",
                "https://", $b_url ) : $b_url;
            $links = "SUCCESSLINK=" . $b_url_s . "/accept_$bestellId.html";
            $links .= "&BACKLINK=" . $b_url_s . "/cancel_$bestellId.html";
            $links .= "&FAILLINK=" . $b_url_s . "/decline_$bestellId.html";
            $orderid = "Bestellung: " . $bestellId; // The length is limited to 12 characters.
            $btext = urlencode( htmlentities( "SaferPay Einkauf von " . $_SESSION['Persdata']['Vorname'] .
                " " . $_SESSION['Persdata']['Nachname'] ) );
            $url =
                "https://www.saferpay.com/hosting/CreatePayInit.asp?AMOUNT=" .
                $summe . "&ORDERID=$bestellId&CURRENCY=EUR&DESCRIPTION=$btext&ACCOUNTID=" .
                $this->ini["kreditkarte"]["zugang"] . "&" . $links;
            $c = file_get_contents( $url );
            if ( strpos( $c, "DATA" ) !== false )
            {
                $erg = '
                    <form action="' . $c .
                    '" method="post" id="zahlung" name="creditcard">
                        <input type="submit" value="per Kreditkarte bezahlen" style="cursor:pointer;" />
                    </form>
                ';
            }
            else
            {
                $_SESSION["zahlarten"]["kreditkarte"] = false;
                $ret["error"] = true;
                $erg = $this->_getMsg( $ret, "init_fehler", $bestellId );
            }
            return $erg;
        }

        function getCreditCardReturnStatus( $bestellId )
        {
            $table = ( $this->ini["dbConnect"]["order_db"] ) ? $this->ini["dbConnect"]["order_db"] .
                "." : "";
            $table .= "Bestellung";
            $query = "SELECT Bemerkung FROM $table WHERE id=$bestellId";
            $res = mysql_query( $query, $GLOBALS["order_dbh"] );
            $row = mysql_fetch_assoc( $res );
            $bemerkung = $row["Bemerkung"];

            switch ( $_GET["action"] )
            {
                case "cancel":
                    $res = false;
                    $bemerkung .=
                        "Die Zahlung über saferpay wurde vom Kunden am " .
                        date( "d.m.Y" ) . " um " . date( "H:i" ) .
                        " Uhr abgebrochen!\n";
                    $kk_info["code"] = "";
                    $kk_info["status"] = "abgebrochen";
                    break;
                case "accept":
                    $len = strpos( $_SERVER['QUERY_STRING'], "&DATA=" ) + 1;
                    $query = substr( $_SERVER['QUERY_STRING'], $len );
                    $url =
                        "https://www.saferpay.com/hosting/VerifyPayConfirm.asp?$query";
                    $c = file_get_contents( $url );
                    if ( strpos( $c, "ID" ) !== false )
                    {
                        $start = strpos( $c, "ID=" );
                        $len = strpos( $c, "&TOKEN=" );
                        $bemerkung = $row["Bemerkung"];
                        $bemerkung .=
                            "Die Zahlung wurde von der Kreditkartenorganisation am " .
                            date( "d.m.Y" ) . " um " . date( "H:i" ) .
                            " Uhr genehmigt!\n";
                        $kk_info["code"] = substr( $c, $start, $len - $start );
                        $kk_info["status"] = "offen";
                        if ( USE_TRANSLATION2 === true )
                        {
                            $msg = $GLOBALS["langstrings"]["buy"]["cc_accepted"];
                        } elseif ( $_SESSION["languageException"] )
                        {

                        }
                        else
                        {
                            $msg =
                                "Ihre Kreditkartenorganisation hat die erfolgreiche Bezahlung bestätigt!";
                        }
                    }
                    break;
                case "decline":
                    $res = false;
                    $kk_info["code"] = "";
                    $kk_info["status"] = "abgelehnt";
                    $bemerkung .=
                        "Die Zahlung wurde von der Kreditkartenorganisation am " .
                        date( "d.m.Y" ) . " um " . date( "H:i" ) .
                        " Uhr abgelehnt!\n";
                    break;
            }
            $kk_info_str = serialize( $kk_info );
            $query = "
                UPDATE
                    $table
                SET
                    Bemerkung='$bemerkung',
                    kk_info='$kk_info_str'
                WHERE
                    id=$bestellId
            ";
            mysql_query( $query, $GLOBALS["order_dbh"] );
            $ret = array( "error" => !$res );
            if ( $ret["error"] )
            {
                $msg = $this->_getMsg( $ret, $kk_info["status"], $bestellId );
            }
            $ret["meld"] = $msg;
            return $ret;
        }
        function genCheckSum( $src )
        {
            switch ( $this->ini["kreditkarte"]["sha_algo"] )
            {
                case "sha512":
                    $data = hash( "sha512", $src );
                    break;
                case "sha256":
                    $data = hash( "sha256", $src );
                    break;
                case "sha1":
                default:
                    $data = sha1( $src );
                    break;
            }
            return $data;
        }
        private function _getMsg( $ret, $status, $bestellId )
        {
            if ( USE_TRANSLATION2 === true )
            {
                if ( $this->ini["change_order"] )
                {
                    $abschluss = $GLOBALS["langstrings"]["buy"]["click_button"];
                }
                else
                {
                    $abschluss = $GLOBALS["langstrings"]["buy"]["cancel_order"];
                }
            } elseif ( $_SESSION["languageException"] )
            {
                if ( $this->ini["change_order"] )
                {
                    $abschluss =
                        "Click on the button to choose an other payment method.";
                }
                else
                {
                    $abschluss = "Therefore we will now cancel your order.";
                }
            }
            else
            {
                if ( $this->ini["change_order"] )
                {
                    $abschluss =
                        "Klicken Sie auf den Button, um eine andere Zahlweise auszuwählen.";
                }
                else
                {
                    $abschluss =
                        "Deshalb werden wir nun Ihre Bestellung nun stornieren.";
                }
            }
            switch ( $status )
            {
                case "init_fehler";
                    if ( USE_TRANSLATION2 === true )
                    {
                        $msg = $GLOBALS["langstrings"]["buy"]["saferpay_not_avail"];
                    } elseif ( $_SESSION["languageException"] )
                    {
                        $msg =
                            "Unfourtunately the payment via Saferpay is not available at the moment. ";
                    }
                    else
                    {
                        $msg =
                            "Leider steht die Zahlung über Saferpay zur Zeit nicht zur Verfügung. ";
                    }
                    break;
                case "abgebrochen":
                    if ( USE_TRANSLATION2 === true )
                    {
                        $msg = $GLOBALS["langstrings"]["buy"]["order_canceled"];
                    } elseif ( $_SESSION["languageException"] )
                    {
                        $msg = "You have canceled the payment. ";
                    }
                    else
                    {
                        $msg = "Sie haben die Zahlung abgebrochen. ";
                    }
                    break;
                case "abgelehnt":
                    if ( USE_TRANSLATION2 === true )
                    {
                        $msg = $GLOBALS["langstrings"]["buy"]["cc_declined"];
                    } elseif ( $_SESSION["languageException"] )
                    {
                        $msg =
                            "Unfortunately your creditcard organization refused the payment. ";
                    }
                    else
                    {
                        $msg =
                            "Leider hat Ihre Kreditkartenorganisation die Bezahlung verweigert. ";
                    }
                    break;
                case "unklar":
                    if ( USE_TRANSLATION2 === true )
                    {
                        $msg = $GLOBALS["langstrings"]["buy"]["cc_excepted"];
                    } elseif ( $_SESSION["languageException"] )
                    {
                        $msg =
                            "The status of the payment was defined as unclear by your credit card organization. ";
                    }
                    else
                    {
                        $msg =
                            "Der Status der zahlung wurde von der Kreditkartenorganisation als unklar definiert. ";
                    }
                    break;
            }
            $msg .= $abschluss;
            if ( $ret["error"] && $this->ini["change_order"] )
            {
                $msg .= '
                    <form method="post" action="/">
                        <input type="hidden" name="best_id" value="' . $bestellId .
                    '">
                        <input type="hidden" name="email" value="' . $_SESSION["SHOP"]["buy"]["Persdata"]["email"] .
                    '">
                        <input type="hidden" name="mode" value="change_order">
                        <input type="submit" value="Zahlart / Bestellung &auml;ndern">
                    </form>
                ';
            }
            return $msg;
        }
    }
?>