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: acceptance.php 760 2011-10-12 14:04:01Z tiefland $

    require_once "creditcard.interface.php";

    class acceptance implements creditcard
    {
        protected $ini;

        function __construct()
        {
            if ( !is_array( $_SESSION["INI"] ) )
            {
                $this->ini = $GLOBALS["INI"];
            }
            else
            {
                $this->ini = $_SESSION["INI"];
            }
        }
        function getCreditcardStatus( $bestellId )
        {
            switch ( $this->ini["kreditkarte"]["mode"] )
            {
                case "direct":
                    $operation = "SAL";
                    break;
                case "auth":
                default:
                    $operation = "RES";
                    break;
            }
            $sha_arr = array();
            $sha = "";
            define( "PSPID", $this->ini["kreditkarte"]["zugang"] );
            define( "SECRET", $this->ini["kreditkarte"]["secret"] );
            if ( USE_TRANSLATION2 === true )
            {
                $title = $GLOBALS["langstrings"]["buy"]["your_order_at"];
            } elseif ( $_SESSION["languageException"] )
            {
                $title = "Your order at ";
            }
            else
            {
                $title = "Ihre Bestellung bei ";
            }
            $title .= $_SERVER["SERVER_NAME"];
            $name = $_SESSION["SHOP"]["buy"]["Persdata"]["Vorname"] . " " .
                $_SESSION["SHOP"]["buy"]["Persdata"]["Nachname"];
            $b_url = $this->ini["absoluteURL"];
            $b_url_s = ( $this->ini["ssl_buy"] ) ? str_replace( "http://",
                "https://", $b_url ) : $b_url;
            $cancelurl = $b_url_s . "/cancel_" . $bestellId . ".html";
            $declineurl = $b_url_s . "/decline_" . $bestellId . ".html";
            $accepturl = $b_url_s . "/accept_" . $bestellId . ".html";
            $exceptionurl = $b_url_s . "/except_" . $bestellId . ".html";
            $email = $_SESSION["SHOP"]["buy"]["Persdata"]["email"];

            $summe = round( getBasketSummeBrutto(), 2 ) * 100;

            switch ( $_SESSION["sprache"] )
            {
                case "uk":
                    $locale = "en_US";
                    break;
                default:
                    $locale = "de_DE";
                    break;
            }
            $currency = $_SESSION["real_currency"];
            if ( !$currency )
            {
                $currency = "EUR";
            }
            switch ( $this->ini["kreditkarte"]["version"] )
            {
                case "1":
                    $erg = '
                        <form method="post" action="https://secure.paytool.de/ncol/prod/orderstandard.asp" id="zahlung" name="creditcard">
                            <input type="hidden" name="PSPID" value="' .
                        PSPID . '">
                            <input type="hidden" name="orderID" value="' . $bestellId .
                        '">
                            <input type="hidden" name="amount" value="' . $summe .
                        '">
                            <input type="hidden" name="currency" value="' .
                        $currency . '">
                            <input type="hidden" name="language" value="' .
                        $locale . '">
                            <!-- lay out information -->
                            <input type="hidden" name="TITLE" value="' . $title .
                        '">
                            <input type="hidden" name="LOGO" value="logo.gif"> 
                            <!-- post-payment redirection -->
                            <input type="hidden" name="accepturl" value="' .
                        $accepturl . '">
                            <input type="hidden" name="declineurl" value="' .
                        $declineurl . '">
                            <input type="hidden" name="exceptionurl" value="' .
                        $exceptionurl . '">
                            <input type="hidden" name="cancelurl" value="' .
                        $cancelurl . '">
                            <!-- miscellanous -->
                            <input type="hidden" name="homeurl" value="' . $b_url .
                        '">
                            <input type="hidden" name="catalogurl" value="' .
                        $b_url . '">
                            <input type="hidden" name="CN" value="' . $name .
                        '">
                            <input type="hidden" name="EMAIL" value="' . $email .
                        '">
                            <input type="hidden" name="PM" value="">
                            <input type="hidden" name="BRAND" value="">
                            <input type="hidden" name="ownerZIP" value="">
                            <input type="hidden" name="owneraddress" value="">
                            <input type="hidden" name="SHASign" value="">
                            <input type="hidden" name="Alias" value="">
                            <input type="hidden" name="AliasUsage" value="">
                            <input type="hidden" name="OPERATION" value="' .
                        $operation . '">
                            <input type="hidden" name="COM" value="">
                            <input type="hidden" name="COMPLUS" value="">
                            <input type="hidden" name="PARAMPLUS" value="">
                            <input type="hidden" name="USERID" value="">
                            <input type="submit" value="per Kreditkarte bezahlen" id="submit2" name="submit2">
                        </form>
                    ';
                    break;
                case "2":
                    $sha = $bestellId . $summe . "EUR" . PSPID . SECRET;
                    $shaSign = sha1( $sha );
                    $erg = '
                        <form method="post" action="https://secure.paytool.de/ncol/prod/orderstandard.asp" id="zahlung" name="creditcard">
                            <input type="hidden" name="PSPID" value="' .
                        PSPID . '">
                            <input type="hidden" name="orderID" value="' . $bestellId .
                        '">
                            <input type="hidden" name="amount" value="' . $summe .
                        '">
                            <input type="hidden" name="currency" value="' .
                        $currency . '">
                            <input type="hidden" name="language" value="' .
                        $locale . '">
                            <!-- lay out information -->
                            <input type="hidden" name="TITLE" value="' . $title .
                        '">
                            <input type="hidden" name="LOGO" value="logo.gif"> 
                            <!-- post-payment redirection -->
                            <input type="hidden" name="accepturl" value="' .
                        $accepturl . '">
                            <input type="hidden" name="declineurl" value="' .
                        $declineurl . '">
                            <input type="hidden" name="exceptionurl" value="' .
                        $exceptionurl . '">
                            <input type="hidden" name="cancelurl" value="' .
                        $cancelurl . '">
                            <!-- miscellanous -->
                            <input type="hidden" name="homeurl" value="' . $b_url .
                        '">
                            <input type="hidden" name="catalogurl" value="' .
                        $b_url . '">
                            <input type="hidden" name="CN" value="' . $name .
                        '">
                            <input type="hidden" name="EMAIL" value="' . $email .
                        '">
                            <input type="hidden" name="PM" value="">
                            <input type="hidden" name="BRAND" value="">
                            <input type="hidden" name="ownerZIP" value="">
                            <input type="hidden" name="owneraddress" value="">
                            <input type="hidden" name="SHASign" value="' . $shaSign .
                        '">
                            <input type="hidden" name="Alias" value="">
                            <input type="hidden" name="AliasUsage" value="">
                            <input type="hidden" name="OPERATION" value="' .
                        $operation . '">
                            <input type="hidden" name="COM" value="">
                            <input type="hidden" name="COMPLUS" value="">
                            <input type="hidden" name="PARAMPLUS" value="">
                            <input type="hidden" name="USERID" value="">
                            <input type="submit" value="per Kreditkarte bezahlen" id="submit2" name="submit2">
                        </form>
                    ';
                    break;
                case "3":
                    $sha_arr[] = "ACCEPTURL=" . $accepturl;
                    $sha_arr[] = "AMOUNT=" . $summe;
                    $sha_arr[] = "CANCELURL=" . $cancelurl;
                    $sha_arr[] = "CATALOGURL=" . $url;
                    $sha_arr[] = "CN=" . $name;
                    $sha_arr[] = "CURRENCY=" . $currency;
                    $sha_arr[] = "DECLINEURL=" . $declineurl;
                    $sha_arr[] = "EMAIL=" . $email;
                    $sha_arr[] = "EXCEPTIONURL=" . $exceptionurl;
                    $sha_arr[] = "HOMEURL=" . $url;
                    $sha_arr[] = "LANGUAGE=de_DE";
                    $sha_arr[] = "OPERATION=" . $operation;
                    $sha_arr[] = "ORDERID=" . $bestellId;
                    $sha_arr[] = "PSPID=" . PSPID;
                    $sha_arr[] = "TITLE=" . $title;

                    //SHA-String bauen
                    $sha = implode( SECRET, $sha_arr ) . SECRET;
                    $shaSign = sha1( $sha );
                    $erg = '
                        <form method="post" action="https://secure.paytool.de/ncol/prod/orderstandard.asp" id="zahlung" name="creditcard">
                            <input type="hidden" name="PSPID" value="' .
                        PSPID . '">
                            <input type="hidden" name="ORDERID" value="' . $bestellId .
                        '">
                            <input type="hidden" name="AMOUNT" value="' . $summe .
                        '">
                            <input type="hidden" name="CURRENCY" value="' .
                        $currency . '">
                            <input type="hidden" name="HOMEURL" value="' . $b_url .
                        '">
                            <input type="hidden" name="CATALOGURL" value="' .
                        $b_url . '">
                            <input type="hidden" name="CN" value="' . $name .
                        '">
                            <input type="hidden" name="EMAIL" value="' . $email .
                        '">
                            <!-- post-payment redirection -->
                            <input type="hidden" name="ACCEPTURL" value="' .
                        $accepturl . '">
                            <input type="hidden" name="CANCELURL" value="' .
                        $cancelurl . '">
                            <input type="hidden" name="DECLINEURL" value="' .
                        $declineurl . '">
                            <input type="hidden" name="EXCEPTIONURL" value="' .
                        $exceptionurl . '">
                            <!-- lay out information -->
                            <input type="hidden" name="LANGUAGE" value="' .
                        $locale . '">
                            <input type="hidden" name="TITLE" value="' . $title .
                        '">
                            <!-- miscellanous -->
                            <input type="hidden" name="OPERATION" value="' .
                        $operation . '">
                            <input type="hidden" name="SHASign" value="' . $shaSign .
                        '">
                            <input type="submit" value="per Kreditkarte bezahlen" id="submit2">
                        </form>
                    ';
                    break;
                case "4":
                    $sha_arr[] = "ACCEPTURL=" . $accepturl;
                    $sha_arr[] = "AMOUNT=" . $summe;
                    $sha_arr[] = "CANCELURL=" . $cancelurl;
                    $sha_arr[] = "CATALOGURL=" . $b_url;
                    $sha_arr[] = "CN=" . $name;
                    $sha_arr[] = "CURRENCY=" . $currency;
                    $sha_arr[] = "DECLINEURL=" . $declineurl;
                    $sha_arr[] = "EMAIL=" . $email;
                    $sha_arr[] = "EXCEPTIONURL=" . $exceptionurl;
                    $sha_arr[] = "HOMEURL=" . $b_url;
                    $sha_arr[] = "LANGUAGE=" . $locale;
                    $sha_arr[] = "OPERATION=" . $operation;
                    $sha_arr[] = "ORDERID=" . $bestellId;
                    $sha_arr[] = "PSPID=" . PSPID;
                    $sha_arr[] = "TITLE=" . $title;

                    //SHA-String bauen
                    $sha = implode( SECRET, $sha_arr ) . SECRET;
                    $shaSign = $this->genCheckSum( $sha );
                    $erg = '
                        <form method="post" action="https://secure.paytool.de/ncol/prod/orderstandard.asp" id="zahlung" name="creditcard">
                            <input type="hidden" name="PSPID" value="' .
                        PSPID . '">
                            <input type="hidden" name="ORDERID" value="' . $bestellId .
                        '">
                            <input type="hidden" name="AMOUNT" value="' . $summe .
                        '">
                            <input type="hidden" name="CURRENCY" value="' .
                        $currency . '">
                            <input type="hidden" name="HOMEURL" value="' . $b_url .
                        '">
                            <input type="hidden" name="CATALOGURL" value="' .
                        $b_url . '">
                            <input type="hidden" name="CN" value="' . $name .
                        '">
                            <input type="hidden" name="EMAIL" value="' . $email .
                        '">
                            <!-- post-payment redirection -->
                            <input type="hidden" name="ACCEPTURL" value="' .
                        $accepturl . '">
                            <input type="hidden" name="CANCELURL" value="' .
                        $cancelurl . '">
                            <input type="hidden" name="DECLINEURL" value="' .
                        $declineurl . '">
                            <input type="hidden" name="EXCEPTIONURL" value="' .
                        $exceptionurl . '">
                            <!-- lay out information -->
                            <input type="hidden" name="LANGUAGE" value="' .
                        $locale . '">
                            <input type="hidden" name="TITLE" value="' . $title .
                        '">
                            <!-- miscellanous -->
                            <input type="hidden" name="OPERATION" value="' .
                        $operation . '">
                            <input type="hidden" name="SHASign" value="' . $shaSign .
                        '">
                            <input type="submit" value="per Kreditkarte bezahlen" id="submit2">
                        </form>
                    ';
                    break;
                default:
                    $erg = false;
                    break;
            }
            return $erg;
        }

        function getCreditcardReturnStatus( $bestellId )
        {
            $sha = "";
            if ( $this->ini["kreditkarte"]["version"] == 4 )
            {
                /*
                admin_debug( $_SERVER["QUERY_STRING"] );
                admin_debug( $_GET );

                $data["ACCEPTANCE"] = "ACCEPTANCE=" . $_GET["ACCEPTANCE"];
                $data["AMOUNT"] = "AMOUNT=" . sprintf( "%.02f", $_GET["amount"] );
                $data["BRAND"] = "BRAND=" . $_GET["BRAND"];
                $data["CARDNO"] = "CARDNO=" . $_GET["CARDNO"];
                $data["CN"] = "CN=" . ( $_GET["CN"] );
                $data["CURRENCY"] = "CURRENCY=" . $_GET["currency"];
                $data["ED"] = "ED=" . $_GET["ED"];
                $data["IP"] = "IP=" . $_GET["IP"];
                if ( $_GET["NCERROR"] )
                {
                $data["NCERROR"] = "NCERROR=" . $_GET["NCERROR"];
                }
                else
                {
                $data["NCERROR"] = "NCERROR=0";
                }
                $data["ORDERID"] = "ORDERID=" . $_GET["orderID"];
                $data["PAYID"] = "PAYID=" . $_GET["PAYID"];
                $data["PM"] = "PM=" . $_GET["PM"];
                $data["STATUS"] = "STATUS=" . $_GET["STATUS"];
                $data["TRXDATE"] = "TRXDATE=" . $_GET["TRXDATE"];
                sort( $data );
                admin_debug( $data );
                define( "PSPID", $this->ini["kreditkarte"]["zugang"] );
                define( "SECRET", $this->ini["kreditkarte"]["secret"] );
                $sha = implode( SECRET, $data ) . SECRET;
                admin_debug( $sha );
                $shasign = strtoupper($this->genCheckSum( $sha ));
                admin_debug( $shasign );
                exit;*/
            }
            $table = ( $this->ini["dbConnect"]["order_db"] ) ? $this->ini["dbConnect"]["order_db"] .
                "." : "";
            $table .= "Bestellung";
            if ( $_GET["action"] )
            {
                $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":
                    // Kreditkartenzahlung
                    $bemerkung .=
                        "Die Zahlung über acceptance wurde vom Kunden am " .
                        date( "d.m.Y" ) . " um " . date( "H:i" ) .
                        " Uhr abgebrochen!\n";
                    $kk_info["code"] = "";
                    $kk_info["status"] = "abgebrochen";
                    $res = false;
                    break;
                case "accept":
                    // Kreditkartenzahlung
                    $bemerkung .=
                        "Die Zahlung wurde von der Kreditkartenorganisation am " .
                        date( "d.m.Y" ) . " um " . date( "H:i" ) .
                        " Uhr genehmigt!\n";
                    $kk_info["code"] = "";
                    $kk_info["status"] = "offen";
                    $res = true;
                    if ( USE_TRANSLATION2 === true )
                    {
                        $msg = $GLOBALS["langstrings"]["buy"]["cc_accepted"];
                    } elseif ( $_SESSION["languageException"] )
                    {
                        $msg =
                            "Your credit card organization confirmed the successful payment";
                    }
                    else
                    {
                        $msg =
                            "Ihre Kreditkartenorganisation hat die erfolgreiche Bezahlung bestätigt!";
                    }
                    break;
                case "decline":
                    $bemerkung .=
                        "Die Zahlung wurde von der Kreditkartenorganisation am " .
                        date( "d.m.Y" ) . " um " . date( "H:i" ) .
                        " Uhr abgelehnt!\n";
                    $kk_info["code"] = "";
                    $kk_info["status"] = "abgelehnt";
                    $res = false;
                    $_SESSION["zahlarten"]["kreditkarte"] = false;
                    break;
                case "except":
                    $bemerkung .=
                        "Der Status der Zahlung wurde von der Kreditkartenorganisation am " .
                        date( "d.m.Y" ) . " um " . date( "H:i" ) .
                        " Uhr als unklar definiert!\n";
                    $kk_info["code"] = "";
                    $kk_info["status"] = "unklar";
                    $res = false;
                    $_SESSION["zahlarten"]["kreditkarte"] = false;
                    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 "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;
        }
    }
    if ( !function_exists( "getBasketSummeBrutto" ) )
    {
        /**
         * getBasketSummeBrutto()
         *
         * @param integer $mwst
         * @return
         */
        function getBasketSummeBrutto( $mwst = 19, $noVersand = false, $no_gutschein = false )
        {

            if ( $GLOBALS["INI"]["netto_preise"] == 1 )
            {
                $ret = getBasketSumme( $noVersand, $no_gutschein );
                if ( is_array( $ret ) )
                {
                    $ret = $ret["total"];
                }
                $ret += getBasketSummeMWST( $mwst, $noVersand, $no_gutschein );
            }
            else
            {
                $ret = getBasketSumme( $noVersand, $no_gutschein );
                if ( is_array( $ret ) )
                {
                    $ret = $ret["total"];
                }
            }
            return $ret;
        }
    }
?>