public function doContinue($data) { Session::set('Checkout.PaymentMethodID', $data['PaymentMethodID']); Session::set("Checkout.PostageID", $data["PostageID"]); $url = Controller::join_links(Director::absoluteBaseUrl(), Payment_Controller::config()->url_segment); return $this->controller->redirect($url); }
/** * Retrieve and process order data from the request */ public function callback($request) { $this->extend('onBeforeCallback'); $data = $this->request->postVars(); $status = "error"; $order_id = 0; $payment_id = 0; $success_url = Controller::join_links(Director::absoluteBaseURL(), Payment_Controller::config()->url_segment, 'complete'); $error_url = Controller::join_links(Director::absoluteBaseURL(), Payment_Controller::config()->url_segment, 'complete', 'error'); $vars = array("SiteConfig" => SiteConfig::current_site_config(), "RedirectURL" => $error_url); // Check if CallBack data exists and install id matches the saved ID if (isset($data) && (isset($data['instId']) && isset($data['cartId']) && isset($data['transStatus']) && isset($data["callbackPW"])) && $this->payment_gateway->InstallID == $data['instId'] && $this->payment_gateway->ResponsePassword == $data["callbackPW"]) { $order_id = $data['cartId']; $payment_id = $data['transId']; $status = $data['transStatus']; if ($data['transStatus'] == 'Y') { $status = 'paid'; $vars["RedirectURL"] = $success_url; } else { $status = 'failed'; } } else { return $this->httpError(500); } $payment_data = ArrayData::array_to_object(array("OrderID" => $order_id, "PaymentProvider" => "WorldPay", "PaymentID" => $payment_id, "Status" => $status, "GatewayData" => $data)); $this->setPaymentData($payment_data)->customise($vars); $this->extend('onAfterCallback'); return $this->renderWith(array("Worldpay_callback")); }
/** * Process the callback data from the payment provider */ public function callback($request) { if (Director::isDev()) { $secret_key = StripePayment::config()->test_secret_key; $publish_key = StripePayment::config()->test_publish_key; } else { $secret_key = StripePayment::config()->live_secret_key; $publish_key = StripePayment::config()->live_publish_key; } Stripe::setApiKey($secret_key); $site = SiteConfig::current_site_config(); $order = $this->getOrderData(); $cart = ShoppingCart::get(); $this->extend('onBeforeCallback'); $error_url = Controller::join_links(Director::absoluteBaseURL(), Payment_Controller::config()->url_segment, 'complete', 'error'); $data = $this->request->postVars(); $status = "error"; // Get the credit card details submitted by the form $token = $data['stripeToken']; $order_no = Session::get("StripePayment.OrderNumber"); $order = Estimate::get()->filter("OrderNumber", $order_no)->first(); if ($order_no && $order) { // Create the charge on Stripe's servers - this will charge // the user's card try { $success_url = Controller::join_links(Director::absoluteBaseURL(), Payment_Controller::config()->url_segment, 'complete', $order_no); $charge = StripeCharge::create(array("amount" => round($order->Total->Value * 100), "currency" => strtolower(Checkout::config()->currency_code), "source" => $token, "metadata" => array("Order" => $order_no))); $order->convertToOrder(); $order->write(); $order = Order::get()->byID($order->ID); $order->Status = "paid"; $order->PaymentProvider = "Stripe"; $order->PaymentNo = $charge->id; $order->write(); return $this->redirect($success_url); } catch (Exception $e) { $order->Status = "failed"; $order->write(); return $this->redirect($error_url); } } else { return $this->redirect($error_url); } }
public function index($request) { $this->extend('onBeforeIndex'); // Setup payment gateway form $site = SiteConfig::current_site_config(); $order = $this->getOrderData(); $cart = ShoppingCart::get(); $pw = $this->payment_gateway->SHA; $sha_data = ""; // Setup the gateway URL if (Director::isDev()) { $gateway_url = "https://mdepayments.epdq.co.uk/ncol/test/orderstandard.asp"; } else { $gateway_url = "https://payments.epdq.co.uk/ncol/prod/orderstandard.asp"; } $success_url = Controller::join_links(Director::absoluteBaseURL(), Payment_Controller::config()->url_segment, 'complete'); $error_url = Controller::join_links(Director::absoluteBaseURL(), Payment_Controller::config()->url_segment, 'complete', 'error'); $back_url = Controller::join_links(Director::absoluteBaseURL(), Checkout_Controller::config()->url_segment, "finish"); $template_url = Controller::join_links(Director::absoluteBaseURL(), "BarclaycardEpdqDynamicTemplate"); // Get an array of details, so we can generate a hash and convert // to hidden fields $data = array("PSPID" => $this->payment_gateway->PSPID, "ORDERID" => $order->OrderNumber, "AMOUNT" => round($cart->TotalCost * 100), "CURRENCY" => Checkout::config()->currency_code, "LANGUAGE" => i18n::get_locale(), "CN" => $order->FirstName . " " . $order->Surname, "EMAIL" => $order->Email, "OWNERADDRESS" => $order->Address1, "OWNERTOWN" => $order->City, "OWNERZIP" => $order->PostCode, "OWNERCTY" => $order->Country, "TITLE" => $site->Title, "BGCOLOR" => $this->payment_gateway->Background, "TXTCOLOR" => $this->payment_gateway->Text, "TBLBGCOLOR" => $this->payment_gateway->TableBackground, "TBLTXTCOLOR" => $this->payment_gateway->TableText, "BUTTONBGCOLOR" => $this->payment_gateway->ButtonBackground, "BUTTONTXTCOLOR" => $this->payment_gateway->ButtonText, "ACCEPTURL" => $success_url, "DECLINEURL" => $error_url, "EXCEPTIONURL" => $error_url, "CANCELURL" => $error_url, "TP" => $template_url); // Account for the fact the phone number might not be set if ($order->PhoneNumber) { $data["OWNERTELNO"] = $order->PhoneNumber; } $fields = FieldList::create(); ksort($data); // Generate our SHA Key and add fields foreach ($data as $k => $v) { $fields->push(HiddenField::create($k, null, $v)); $sha_data .= sprintf("%s=%s%s", $k, $v, $pw); } $hashed_data = strtoupper(hash("sha1", $sha_data)); // Finally add out hashed data $fields->push(HiddenField::create("SHASign", null, $hashed_data)); $actions = FieldList::create(LiteralField::create('BackButton', '<a href="' . $back_url . '" class="btn btn-red checkout-action-back">' . _t('Checkout.Back', 'Back') . '</a>'), FormAction::create('Submit', _t('Checkout.ConfirmPay', 'Confirm and Pay'))->addExtraClass('btn')->addExtraClass('btn-green')); $form = Form::create($this, 'Form', $fields, $actions)->addExtraClass('forms')->setFormMethod('POST')->setFormAction($gateway_url); $this->customise(array("Title" => _t('Checkout.Summary', "Summary"), "MetaTitle" => _t('Checkout.Summary', "Summary"), "Form" => $form, "Order" => $order)); $this->extend("onAfterIndex"); return $this->renderWith(array("BarclaysEpqd", "Payment", "Checkout", "Page")); }
public function index($request) { $this->extend("onBeforeIndex"); $site = SiteConfig::current_site_config(); $order = $this->getOrderData(); $cart = ShoppingCart::get(); $key = $this->payment_gateway->ConfigKey; $merchant_id = Director::isDev() ? "TEST" : $this->payment_gateway->MerchantID; $callback_url = Controller::join_links(Director::absoluteBaseURL(), Payment_Controller::config()->url_segment, "callback", $this->payment_gateway->ID); $return_url = Controller::join_links(Director::absoluteBaseURL(), Payment_Controller::config()->url_segment, 'complete'); $back_url = Controller::join_links(Director::absoluteBaseURL(), Checkout_Controller::config()->url_segment, "finish"); $payment_details = array('username' => $this->payment_gateway->Username, 'password' => $this->payment_gateway->Password, 'biller_code' => $this->payment_gateway->BillerCode, 'merchant_id' => $merchant_id, 'receipt_address' => $order->Email, 'payment_amount' => number_format($cart->TotalCost, 2), 'payment_reference' => $order->OrderNumber, 'payment_reference_minimum_length' => 10, 'payment_reference_maximum_length' => 20, 'payment_reference_text' => _t("PayWay.PaymentReferenceText", "Order Number"), 'return_link_url' => $return_url, 'reply_link_url' => $callback_url, 'reply_link_email' => $this->payment_gateway->PaymentReplyEmail, 'reply_link_post_type' => 'extended'); foreach ($cart->getItems() as $item) { $payment_details[$item->Title] = $item->Quantity . ',' . number_format($item->Price, 2); } if (!Checkout::config()->simple_checkout) { $payment_details[$order->PostageType] = number_format($cart->PostageCost, 2); } // Add tax (if needed) else just total if ($cart->TaxCost) { $payment_details[_t("PayWay.Tax", 'Tax')] = number_format($cart->TaxCost, 2); } // If we cannot get payway's token, generate a friendly error try { $token = $this->get_token($payment_details); } catch (Exception $e) { error_log("Exception caught: " . $e->getMessage()); $content = "<p>"; $content = _t("PayWay.UnableToPayContent", "Please return to the previous page and try again"); $content = "</p>"; $content = '<p><a href="' . $back_url . '" class="btn">Back</a></p>'; $this->customise(array("Title" => _t("PayWay.UnableToPay", "Unable to take payment"), "MetaTitle" => _t("PayWay.UnableToPay", "Unable to take payment"), "Content" => $content)); return $this->renderWith(array("Page")); } $hand_off_url = Controller::join_links($this->config()->gateway_url, "MakePayment"); $hand_off_url .= "?biller_code=" . $this->payment_gateway->BillerCode; $hand_off_url .= "&token=" . urlencode($token); $this->extend('onAfterIndex'); return $this->redirect($hand_off_url); }
public function index($request) { $this->extend('onBeforeIndex'); $site = SiteConfig::current_site_config(); $order = $this->getOrderData(); $cart = ShoppingCart::get(); $key = $this->payment_gateway->ConfigKey; $sofort = new SofortMultipayPayment($key); $sofort->setAmount(number_format($cart->TotalCost, 2)); $sofort->setCurrencyCode(Checkout::config()->currency_code); $callback_url = Controller::join_links(Director::absoluteBaseURL(), Payment_Controller::config()->url_segment, "callback", $this->payment_gateway->ID); $success_url = Controller::join_links(Director::absoluteBaseURL(), Payment_Controller::config()->url_segment, 'complete', $order->OrderNumber); $error_url = Controller::join_links(Director::absoluteBaseURL(), Payment_Controller::config()->url_segment, 'complete', 'error'); $back_url = Controller::join_links(Director::absoluteBaseURL(), Checkout_Controller::config()->url_segment, "finish"); $sofort->setSuccessUrl($success_url, true); $sofort->setAbortUrl($error_url); $sofort->setNotificationUrl($callback_url); $desc_string = ""; foreach ($cart->getItems() as $item) { $desc_string .= $item->Title . ' x ' . $item->Quantity . ', '; } $sofort->setReason($desc_string); $sofort->sendRequest(); $fields = new FieldList(); $i = 1; $actions = FieldList::create(LiteralField::create('BackButton', '<a href="' . $back_url . '" class="btn btn-red checkout-action-back">' . _t('Checkout.Back', 'Back') . '</a>')); $form = Form::create($this, 'Form', $fields, $actions)->addExtraClass('forms')->setFormMethod('GET'); if ($sofort->getPaymentUrl()) { $actions->add(FormAction::create('Submit', _t('Checkout.ConfirmPay', 'Confirm and Pay'))->addExtraClass('btn')->addExtraClass('btn-green')); $form->setFormAction($sofort->getPaymentUrl()); // Set the Payment No to our order data (accessable by // onAfterIndex) $order->PaymentID = $sofort->getTransactionId(); } else { $actions->add(LiteralField::create('BackButton', '<strong class="error">' . _t('Sofort.TransactionError', 'Error with transaction') . '</strong>')); } $this->customise(array("Title" => _t('Checkout.Summary', "Summary"), "MetaTitle" => _t('Checkout.Summary', "Summary"), "Form" => $form, "Order" => $order)); $this->extend("onAfterIndex"); return $this->renderWith(array("Sofort", "Payment", "Checkout", "Page")); }
public function getCMSFields() { $fields = parent::getCMSFields(); $fields->removeByName('ParentConfigID'); // Setup Payment Gateway type $payments = ClassInfo::subclassesFor('CommercePaymentMethod'); // Remove parent class from list unset($payments['CommercePaymentMethod']); // Check if any payment types have been hidden and unset foreach ($payments as $payment_type) { if ($payment_type::$hidden) { unset($payments[$payment_type]); } } $classname_field = DropdownField::create('ClassName', 'Type of Payment', $payments)->setHasEmptyDefault(true)->setEmptyString('Select Gateway'); $fields->addFieldToTab('Root.Main', $classname_field); if ($this->ID) { $fields->addFieldToTab("Root.Main", TextField::create('Summary', 'Summary message to appear on website')); $fields->addFieldToTab("Root.Main", TextField::create('URL', 'Payment gateway URL')); $fields->addFieldToTab("Root.Main", CheckboxField::create('Default', 'Default payment method?')); $fields->addFieldToTab("Root.Main", TextareaField::create('GatewayMessage', 'Message to appear when user user is directed to payment provider')); $fields->addFieldToTab("Root.Main", HTMLEditorField::create("PaymentInfo", "Message to appear on payment summary page")); // Setup response URL field $callback_url = Controller::join_links(Director::absoluteBaseURL(), Payment_Controller::config()->url_segment, "callback", $this->ID); // Setup completed URL $complete_url = Controller::join_links(Director::absoluteBaseURL(), Payment_Controller::config()->url_segment, "complete"); // Setup error URL $error_url = Controller::join_links(Director::absoluteBaseURL(), Payment_Controller::config()->url_segment, "complete", "error"); $url_field = ToggleCompositeField::create("PaymentURLS", "Payment integration URLs", FieldList::create(ReadonlyField::create('ResponseURL', 'Response URL')->setValue($callback_url), ReadonlyField::create('CompletedURL', 'Completed URL')->setValue($complete_url), ReadonlyField::create('ErrorURL', 'Error URL')->setValue($error_url))); $fields->addFieldToTab("Root.Main", $url_field); } else { $fields->removeByName('URL'); $fields->removeByName('Summary'); $fields->removeByName('Default'); $fields->removeByName('GatewayMessage'); $fields->removeByName('PaymentInfo'); } return $fields; }
/** * Retrieve and process order data from the request */ public function callback() { $data = $this->request->postVars(); $success_url = Controller::join_links(Director::absoluteBaseURL(), Payment_Controller::config()->url_segment, 'complete'); $error_url = Controller::join_links(Director::absoluteBaseURL(), Payment_Controller::config()->url_segment, 'complete', 'error'); $vars = array("SiteConfig" => SiteConfig::current_site_config(), "RedirectURL" => $error_url); // Check if CallBack data exists and install id matches the saved ID if (isset($data) && (isset($data['instId']) && isset($data['cartId']) && isset($data['transStatus']) && isset($data["callbackPW"])) && $this->payment_gateway->InstallID == $data['instId'] && $this->payment_gateway->ResponsePassword == $data["callbackPW"]) { $order = Order::get()->filter('OrderNumber', $data['cartId'])->first(); $order_status = $data['transStatus']; if ($order) { if ($order_status == 'Y') { $order->Status = 'paid'; $vars["RedirectURL"] = $success_url; } else { $order->Status = 'failed'; } // Store all the data sent from the gateway in a json $order->GatewayData = json_encode($data); $order->write(); } } return $this->renderWith(array("Payment_WorldPay"), $vars); }
/** * Process the callback data from the payment provider */ public function callback() { $data = $this->request->postVars(); $success_url = Controller::join_links(Director::absoluteBaseURL(), Payment_Controller::config()->url_segment, 'complete'); $error_url = Controller::join_links(Director::absoluteBaseURL(), Payment_Controller::config()->url_segment, 'complete', 'error'); // Check if CallBack data exists and install id matches the saved ID if (isset($data) && isset($data['custom']) && isset($data['payment_status'])) { $order = Order::get()->filter("OrderNumber", $data['custom'])->first(); if ($order) { $request = 'cmd=_notify-validate'; foreach ($data as $key => $value) { $request .= '&' . $key . '=' . urlencode(html_entity_decode($value, ENT_QUOTES, 'UTF-8')); } if (Director::isDev()) { $paypal_url = "https://www.sandbox.paypal.com/cgi-bin/webscr"; } else { $paypal_url = "https://www.paypal.com/cgi-bin/webscr"; } $curl = curl_init($paypal_url); curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_POSTFIELDS, $request); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_HEADER, false); curl_setopt($curl, CURLOPT_TIMEOUT, 30); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); $response = curl_exec($curl); if (!$response) { return false; } if ((strcmp($response, 'VERIFIED') == 0 || strcmp($response, 'UNVERIFIED') == 0) && isset($data['payment_status'])) { switch ($data['payment_status']) { case 'Canceled_Reversal': $order->Status = "canceled"; break; case 'Completed': $order->Status = "paid"; break; case 'Denied': $order->Status = "failed"; break; case 'Expired': $order->Status = "failed"; break; case 'Failed': $order->Status = "failed"; break; case 'Pending': $order->Status = "pending"; break; case 'Processed': $order->Status = "pending"; break; case 'Refunded': $order->Status = "canceled"; break; case 'Reversed': $order->Status = "canceled"; break; case 'Voided': $order->Status = "canceled"; break; } } curl_close($curl); // Store all the data sent from the gateway in a json $order->GatewayData = json_encode($data); $order->PaymentID = $data["txn_id"]; $order->write(); } } return array(); }
/** * Process the callback data from the payment provider */ public function callback($request) { $this->extend('onBeforeCallback'); $data = $this->request->postVars(); $status = "error"; $order_id = 0; $payment_id = 0; $error_url = Controller::join_links(Director::absoluteBaseURL(), Payment_Controller::config()->url_segment, 'complete', 'error'); // Check if CallBack data exists and install id matches the saved ID if (isset($data) && isset($data['custom']) && isset($data['payment_status'])) { $order_id = $data['custom']; $paypal_request = 'cmd=_notify-validate'; $final_response = ""; // If the transaction ID is set, keep it if (array_key_exists("txn_id", $data)) { $payment_id = $data["txn_id"]; } $listener = new IpnListener(); if (Director::isDev()) { $listener->use_sandbox = true; } try { $verified = $listener->processIpn(); } catch (Exception $e) { error_log("Exception caught: " . $e->getMessage()); return $this->httpError(500); } if ($verified) { // IPN response was "VERIFIED" switch ($data['payment_status']) { case 'Canceled_Reversal': $status = "canceled"; break; case 'Completed': $status = "paid"; break; case 'Denied': $status = "failed"; break; case 'Expired': $status = "failed"; break; case 'Failed': $status = "failed"; break; case 'Pending': $status = "pending"; break; case 'Processed': $status = "pending"; break; case 'Refunded': $status = "refunded"; break; case 'Reversed': $status = "canceled"; break; case 'Voided': $status = "canceled"; break; } } else { error_log("Invalid payment status"); return $this->httpError(500); } } else { error_log("No payment details set"); return $this->httpError(500); } $payment_data = ArrayData::array_to_object(array("OrderID" => $order_id, "PaymentProvider" => "PayPal", "PaymentID" => $payment_id, "Status" => $status, "GatewayData" => $data)); $this->setPaymentData($payment_data); $this->extend('onAfterCallback'); return $this->httpError(200); }
/** * Retrieve and process order data from the request * * @var $data request data * @var $success_data initial success vars * @var $error_data initial success vars */ public function callback() { $controller = Controller::curr(); $data = $this->request->getVars(); $successs_url = Controller::join_links(Director::absoluteBaseURL(), Payment_Controller::config()->url_segment, 'complete'); $error_url = Controller::join_links(Director::absoluteBaseURL(), Payment_Controller::config()->url_segment, 'complete', 'error'); // Check if CallBack data exists and install id matches the saved ID if (isset($data) && isset($data['crypt'])) { // Clear Sagepay '@' symbol (denotes encrypted data) if (substr($data['crypt'], 0, 1) == "@") { $data['crypt'] = substr($data['crypt'], 1); } // Now decode the Crypt field and extract the results $crypt_decoded = StringDecryptor::create($data['crypt'])->setHash($this->payment_gateway->EncryptedPassword)->setEncryption('MCRYPT')->decrypt()->get(); $values = $this->get_token($crypt_decoded); $order = Order::get()->filter(array('OrderNumber' => $values['VendorTxCode'], 'Status' => 'incomplete'))->first(); $order_status = $values['Status']; if ($order) { $order->Status = $order_status == 'OK' || $order_status == 'AUTHENTICATED' ? 'paid' : 'failed'; $order->PaymentID = $values['VPSTxId']; // Store all the data sent from the gateway in a json $order->GatewayData = json_encode($values); $order->write(); if ($order_status == 'OK' || $order_status == 'AUTHENTICATED') { return $controller->redirect($successs_url); } else { return $controller->redirect($error_url); } } else { return $controller->redirect($error_url); } } return $controller->redirect($error_url); }
/** * Retrieve and process order data from the request */ public function callback() { $vars = array(); $data = $this->request->postVars(); $success_url = Controller::join_links(Director::absoluteBaseURL(), Payment_Controller::config()->url_segment, 'complete'); $error_url = Controller::join_links(Director::absoluteBaseURL(), Payment_Controller::config()->url_segment, 'complete', 'error'); // Check if CallBack data exists and install id matches the saved ID if (isset($data) && isset($data['VendorTxCode']) && isset($data['Status'])) { $order = Order::get()->filter(array('OrderNumber' => $data['VendorTxCode'], 'Status' => 'incomplete'))->first(); $order_status = $data['Status']; if ($order && trim($order->PaymentID) == trim($data['VPSTxId'])) { $order->Status = $order_status == 'OK' || $order_status == 'AUTHENTICATED' ? 'paid' : 'failed'; // Store all the data sent from the gateway in a json $order->GatewayData = json_encode($data); $order->write(); if ($order_status == 'OK' || $order_status == 'AUTHENTICATED') { $vars['Status'] = "OK"; $vars['StatusDetail'] = _t('Commerce.OrderComplete', "Order Complete"); $vars['RedirectURL'] = $success_url; } } else { $vars['Status'] = "INVALID"; $vars['StatusDetail'] = _t('Commerce.OrderError', "An error occured, Order ID's do not match"); $vars['RedirectURL'] = $error_url; } } else { $vars['Status'] = "ERROR"; $vars['StatusDetail'] = _t('Commerce.OrderError', "An error occured, Order ID's do not match"); $vars['RedirectURL'] = $error_url; } return $this->renderWith(array("Payment_SagePayServer"), $vars); }