s2dpayyp.php /// Art: Payment /// Inhalt: Transaktionsscript für PostFinance/Yellowpay /// Beschreibung: Nimmt die Rückmeldung von yellowpay entgegen und wertet diese entsprechend aus. /// Benötigt: normal /// CCML-Parsing: notwendig /// //////////////////////////////////////////////////////////////////////////// /// /// Letzte Änderungen: /// //////////////////////////////////////////////////////////////////////////// ///<14.01.2009/6.0.3.5/> define('ROOT', './'); define('ASSETS', ROOT.'assets/'); require(ASSETS.'s2diconf.php'); require(CC_INCLUDE_INIT); $log = handle_transaction(); // Log speichern if (LOG_PAYMENT) save_to_file(FILE_PAYMENTLOG, "\nYellowpay ".time()."\n".($log ? $log : 'OK')); // Ggf. 403 Header setzen für sofortueberweisung.de if ($log) { header(HTTP_FORBIDDEN); script_die(CC_RESSOURCE_FORBIDDEN, __FILE__, __LINE__); } //////////////////////////////////////////////////////////////////////////// function handle_transaction() { // Bezahlmethode einlesen $payment_id = is_post(PARAMETER_ID) ? post(PARAMETER_ID) : null; $payment = new payment(); if (!$pm = $payment->get($payment_id)) return "Cannot open payment $payment_id\n"; // Hash-Prüfung $fields = array( 'orderID', 'currency', 'amount', 'PM', 'ACCEPTANCE', 'STATUS', 'CARDNO', 'PAYID', 'NCERROR', 'BRAND' ); foreach($fields as $field) $data .= isset($_POST[$field]) ? $_POST[$field] : ''; $data .= $pm->parameter[4]; $hash = sha1($data); if (!is_post('SHASIGN') || post('SHASIGN') != strtoupper($hash)) return "Hash mismatch $hash statt ".post('SHASIGN'); //////////////////////////////////////////////////////////////////////////// Überprüfungen // Status überprüfen, falls nicht fertig abbrechen $status = floor(post('STATUS')); if ($status != 9 && $status != 5) return "Invalid status $status\n"; // Bestellnummer überprüfen und Bestellung laden $order_id = is_post('orderID') ? floor(post('orderID')) : null; $myorder = new order($order_id); if ($myorder->order_id != $order_id) return "No such order $order_id\n"; // Schlüssel überprüfen $key = is_post(PARAMETER_KEY) ? post(PARAMETER_KEY) : null; if ($myorder->generate_key() != $key) return "Key mismatch: '$key' and '".$myorder->generate_key()."' \n"; // Gesamtpreis überprüfen $total = is_post('amount') ? floatval(post('amount')) : 0; if ($total != $myorder->get_totalprice()) return "Total mismatch: '$total' and '".$myorder->get_totalprice()."' \n"; // Währung überprüfen $currency_code = is_post('currency') ? post('currency') : null; if ($currency_code != $pm->parameter[2]) return "Currency mismatch: '$currency_code' and '".$pm->parameter[2]."' \n"; //////////////////////////////////////////////////////////////////////////// Zahlung abschliessen // Falls Sofortspeicherung aktiviert ist, neuen Status eintragen if ($pm->autocharge) { $myorder->set_status(CC_RESSOURCE_ORDERSTATUSSHORT_WAITINGITEMS, true); $myorder->send_status_email(); } } ?>