public function HandleNotifyUrl($eShopId, $status, $ip, $rawPostStream = 'php://input') { $shop_id = static::DecryptShopId($eShopId); $notification = new SofortLibNotification(); $success = $notification->getNotification(file_get_contents($rawPostStream)); if ($success === false) { throw new SofortLibNotificationException($notification); } $transaction = $notification->getTransactionId(); $time = $notification->getTime(); App::uses('SofortComNotification', 'SofortCom.Model'); $SofortComNotification = new SofortComNotification(); $SofortComNotification->Add($transaction, $status, $time, $ip); $transactionData = new SofortLibTransactionData($this->Config['configkey']); $transactionData->addTransaction($transaction); $transactionData->sendRequest(); $transactionData->setNumber(1); call_user_func_array(array($this->Controller, $this->Config['notifyCallback']), array($shop_id, $status, $transaction, $time, $transactionData)); }
/** * (non-PHPdoc) * @see IActionController::executeAction() */ public function executeAction($parameters) { $configKey = trim($this->_websoccer->getConfig("sofortcom_configkey")); if (!strlen($configKey)) { throw new Exception("Sofort.com configuration key is not configured."); } // verify user $userId = $parameters['u']; $result = $this->_db->querySelect("id", $this->_websoccer->getConfig("db_prefix") . "_user", "id = %d", $userId); $user = $result->fetch_array(); $result->free(); if (!$user) { throw new Exception("illegal user id"); } // read the notification from php://input (http://php.net/manual/en/wrappers.php.php) $SofortLib_Notification = new SofortLibNotification(); $TestNotification = $SofortLib_Notification->getNotification(file_get_contents('php://input')); // read data $SofortLibTransactionData = new SofortLibTransactionData($configKey); $SofortLibTransactionData->addTransaction($TestNotification); // verify transaction data $SofortLibTransactionData->sendRequest(); if ($SofortLibTransactionData->isError()) { EmailHelper::sendSystemEmail($this->_websoccer, $this->_websoccer->getConfig("systememail"), "Failed Sofort.com payment notification", "Error: " . $SofortLibTransactionData->getError()); throw new Exception($SofortLibTransactionData->getError()); } else { // verify status if ($SofortLibTransactionData->getStatus() != 'received') { EmailHelper::sendSystemEmail($this->_websoccer, $this->_websoccer->getConfig("systememail"), "Failed Sofort.com payment notification: invalid status", "Status: " . $SofortLibTransactionData->getStatus()); throw new Exception("illegal status"); } // credit amount $amount = $SofortLibTransactionData->getAmount(); PremiumDataService::createPaymentAndCreditPremium($this->_websoccer, $this->_db, $userId, $amount, "sofortcom-notify"); } return null; }
/** * Process the callback data from the payment provider */ public function callback($request) { $this->extend('onBeforeCallback'); $data = $this->request->postVars(); $status = "error"; $key = $this->payment_gateway->ConfigKey; $content = file_get_contents('php://input'); // Check if CallBack data exists and install id matches the saved ID if (isset($content)) { $notification = new SofortLibNotification(); $transaction_id = $notification->getNotification($content); $sofort = new SofortLibTransactionData($key); $sofort->addTransaction($transaction_id); $sofort->sendRequest(); switch ($sofort->getStatus()) { case 'received': $status = "paid"; break; case 'loss': $status = "failed"; break; case 'pending': $status = "pending"; break; case 'refunded': $status = "refunded"; break; default: $status = "error"; } $payment_data = ArrayData::array_to_object(array("OrderID" => 0, "PaymentProvider" => "Sofort", "PaymentID" => $notification->getTransactionId(), "Status" => $status, "GatewayData" => $data)); $this->setPaymentData($payment_data); $this->extend('onAfterCallback'); return $this->renderWith(array("Sofort_callback", "Checkout", "Page")); } return $this->httpError(500); }
// this class should be used as a callback function // $SofortLib_Notification = new SofortLibNotification(); // $TestNotification = $SofortLib_Notification->getNotification(file_get_contents('php://input')); // echo $SofortLib_Notification->getTransactionId(); // echo '<br />'; // echo $SofortLib_Notification->getTime(); // echo '<br />'; $SofortLibTransactionData = new SofortLibTransactionData($configkey); // If SofortLib_Notification returns a transaction_id: //$SofortLibTransactionData->addTransaction($TestNotification); //$SofortLibTransactionData->addTransaction(array('00907-01222-50F00112-D86E', '00907-01222-50EFFC79-7E33')); //$SofortLibTransactionData->addTransaction(array('00907-37660-51D2CD5E-8182')); $SofortLibTransactionData->addTransaction('00907-01222-51ADD8C9-86C8'); //$SofortLibTransactionData->setTime('2012-11-14T18:00+02:00', '2012-12-13T00:00+02:00'); //$SofortLibTransactionData->setNumber(5, 1); $SofortLibTransactionData->sendRequest(); $output = array(); $methods = array('getAmount' => '', 'getAmountRefunded' => '', 'getCount' => '', 'getPaymentMethod' => '', 'getConsumerProtection' => '', 'getStatus' => '', 'getStatusReason' => '', 'getStatusModifiedTime' => '', 'getLanguageCode' => '', 'getCurrency' => '', 'getTransaction' => '', 'getReason' => array(0, 0), 'getUserVariable' => 0, 'getTime' => '', 'getProjectId' => '', 'getRecipientHolder' => '', 'getRecipientAccountNumber' => '', 'getRecipientBankCode' => '', 'getRecipientCountryCode' => '', 'getRecipientBankName' => '', 'getRecipientBic' => '', 'getRecipientIban' => '', 'getSenderHolder' => '', 'getSenderAccountNumber' => '', 'getSenderHolder' => '', 'getSenderBankCode' => '', 'getSenderCountryCode' => '', 'getSenderBankName' => '', 'getSenderBic' => '', 'getSenderIban' => ''); foreach ($methods as $method => $params) { if (count($params) == 2) { $output[] = $method . ': ' . $SofortLibTransactionData->{$method}($params[0], $params[1]); } else { if ($params !== '') { $output[] = $method . ': ' . $SofortLibTransactionData->{$method}($params); } else { $output[] = $method . ': ' . $SofortLibTransactionData->{$method}(); } } } if ($SofortLibTransactionData->isError()) { echo $SofortLibTransactionData->getError();