/** * 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")); }
function testArrayToObject() { $arr = array("test1" => "result1","test2"=>"result2"); $obj = ArrayData::array_to_object($arr); $objExpected = new stdClass(); $objExpected->test1 = "result1"; $objExpected->test2 = "result2"; $this->assertEquals($obj,$objExpected, "Two objects match"); }
/** * Generate a BSON representation of the given {@link SS_List}. * * @param SS_List $set * @param null $fields * * @return string BSON */ public function convertDataObjectSet(SS_List $set, $fields = null) { $this->checkForBson(); $items = []; foreach ($set as $do) { /** @var DataObject $do */ if (!$do->canView()) { continue; } $items[] = $this->convertDataObjectToJSONObject($do, $fields); } $serobj = ArrayData::array_to_object(["totalSize" => is_numeric($this->totalSize) ? $this->totalSize : null, "items" => $items]); /** @noinspection PhpUndefinedFunctionInspection */ return bson_encode($serobj); }
/** * 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); }
/** * Retrieve and process order data from the request */ public function callback($request) { $this->extend('onBeforeCallback'); $post_data = $this->request->postVars(); $get_data = $this->request->getVars(); $data = array_merge($post_data, $get_data); $status = "error"; $order_id = 0; $payment_id = 0; // Check if CallBack data exists and install id matches the saved ID if (isset($data) && array_key_exists('STATUS', $data) && array_key_exists('orderID', $data) && array_key_exists('PAYID', $data)) { $order_id = $data['orderID']; $payment_id = $data['PAYID']; switch ($data['STATUS']) { case "5": $status = "paid"; break; case "1": case "6": case "64": $status = "cancelled"; break; case "84": case "93": $status = "failed"; break; break; case "2": case "52": $status = "failed"; break; case "4": case "9": case "40": case "91": case "50": case "51": case "52": case "59": case "92": case "95": case "99": $status = "pending"; break; case "93": $status = "failed"; break; } } else { return $this->httpError(500); } $payment_data = ArrayData::array_to_object(array("OrderID" => $order_id, "PaymentProvider" => "Barclays EPQD", "PaymentID" => $payment_id, "Status" => $status, "GatewayData" => $data)); $this->setPaymentData($payment_data); $this->extend('onAfterCallback'); return; }
/** * 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; $gateway_data = array(); if (isset($data) && array_key_exists('cd_supplier_business', $data) && array_key_exists('cd_summary', $data) && array_key_exists('cd_response', $data) && array_key_exists('payment_reference', $data) && array_key_exists('tx_response', $data) && array_key_exists('no_receipt', $data)) { // Are our credentials correct if ($data['cd_supplier_business'] != $this->payment_gateway->Username) { return $this->httpError(500); } // Check Payment status switch ($data['cd_summary']) { case '0': $status = "paid"; break; case '1': $status = "failed"; break; case '3': $status = "failed"; break; } $order_id = $data['payment_reference']; $payment_id = $data['no_receipt']; $gateway_data = array("ResponseCode" => $data["cd_response"], "ResponseSummary" => $data["cd_summary"], "ResponseDesc" => $data["tx_response"], "RecieptNo" => $data["no_receipt"]); } else { return $this->httpError(500); } $payment_data = ArrayData::array_to_object(array("OrderID" => $order_id, "PaymentProvider" => "PayWay", "PaymentID" => $payment_id, "Status" => $status, "GatewayData" => $data)); $this->setPaymentData($payment_data); $this->extend('onAfterCallback'); return; }
/** * Action that gets called before we interface with our payment * method. * * This action is responsible for setting up an order and * saving it into the database (as well as a session) and then hands * the current request over to the relevent payment handler * for final processing. * * @param $request Current request object */ public function index($request) { $cart = ShoppingCart::get(); $data = array(); $payment_data = array(); $handler = $this->payment_handler; // If shopping cart doesn't exist, redirect to base if (!$cart->getItems()->exists() || $this->getPaymentHandler() === null) { return $this->redirect($cart->Link()); } // Get billing and delivery details and merge into an array $billing_data = Session::get("Checkout.BillingDetailsForm.data"); $delivery_data = Session::get("Checkout.DeliveryDetailsForm.data"); // If we have applied free shipping, set that up, else get if (Session::get('Checkout.PostageID') == -1) { $postage = Checkout::CreateFreePostageObject(); } else { $postage = PostageArea::get()->byID(Session::get('Checkout.PostageID')); } // If we are using a complex checkout and do not have correct // details redirect if (!Checkout::config()->simple_checkout && !$cart->isCollection() && (!$postage || !$billing_data || !$delivery_data)) { return $this->redirect(Checkout_Controller::create()->Link()); } if ($cart->isCollection() && !$billing_data) { return $this->redirect(Checkout_Controller::create()->Link()); } // Create an order number $data["OrderNumber"] = substr(chunk_split(Checkout::getRandomNumber(), 4, '-'), 0, -1); // Setup holder for Payment ID $data["PaymentID"] = 0; // Set status $data['Status'] = 'incomplete'; // Assign billing, delivery and postage data if (!Checkout::config()->simple_checkout) { $data = array_merge($data, $billing_data); $data = is_array($delivery_data) ? array_merge($data, $delivery_data) : $data; $checkout_data = Checkout::config()->checkout_data; if (!$cart->isCollection()) { $data['PostageType'] = $postage->Title; $data['PostageCost'] = $postage->Cost; $data['PostageTax'] = $postage->Tax ? $postage->Cost / 100 * $postage->Tax : 0; } if ($cart->getDiscount()) { $data['Discount'] = $cart->getDiscount()->Title; $data['DiscountAmount'] = $cart->DiscountAmount; } // Add full country names if needed if (in_array("CountryFull", $checkout_data)) { $data['CountryFull'] = Checkout::country_name_from_code($data["Country"]); } if (in_array("DeliveryCountryFull", $checkout_data) && array_key_exists("DeliveryCountry", $data)) { $data['DeliveryCountryFull'] = Checkout::country_name_from_code($data["DeliveryCountry"]); } foreach ($checkout_data as $key) { if (array_key_exists($key, $data)) { $payment_data[$key] = $data[$key]; } } } // Set our order data as a generic object $handler->setOrderData(ArrayData::array_to_object($payment_data)); return $handler->handleRequest($request, $this->model); }
/** * Generate a JSON representation of the given {@link SS_List}. * * @param SS_List $set * @param array $fields * @return String XML */ public function convertDataObjectSet(SS_List $set, $fields = null) { $items = array(); foreach ($set as $do) { if (!$do->canView()) { continue; } $items[] = $this->convertDataObjectToJSONObject($do, $fields); } $serobj = ArrayData::array_to_object(array("totalSize" => is_numeric($this->totalSize) ? $this->totalSize : null, "items" => $items)); return Convert::raw2json($serobj); }
/** * 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); }