public function pay(Request $request) { \Veritrans_Config::$serverKey = '597bed2a-b11c-4976-ba85-743f54fadaec'; \Veritrans_Config::$isProduction = false; \Veritrans_Config::$isSanitized = false; // Populate customer's billing address $billing_address = array('first_name' => $request->input('billingFirstName'), 'last_name' => $request->input('billingLastName'), 'address' => $request->input('billingAddress'), 'city' => $request->input('billingCity'), 'postal_code' => $request->input('billingPostalCode'), 'phone' => $request->input('billingPhone'), 'country_code' => 'IDN'); // Populate customer's shipping address $shipping_address = array('first_name' => $request->input('shipmentFirstName'), 'last_name' => $request->input('shipmentLastName'), 'address' => $request->input('shipmentAddress'), 'city' => $request->input('shipmentCity'), 'postal_code' => $request->input('shipmentPostalCode'), 'phone' => $request->input('shipmentPhone'), 'country_code' => 'IDN'); // Populate customer's info $customer_details = array('first_name' => $request->input('customerFirstName'), 'last_name' => $request->input('customerLastName'), 'email' => $request->input('customerEmail'), 'phone' => $request->input('customerPhone'), 'billing_address' => $billing_address, 'shipping_address' => $shipping_address); //Detail Items $detailItems = []; foreach (Cart::content() as $item) { $detailItems[] = ['id' => $item->id, 'price' => $item->price, 'quantity' => $item->qty, 'name' => $item->name]; } $params = array('customer_details' => $customer_details, 'item_details' => $detailItems, 'transaction_details' => array('order_id' => rand(), 'gross_amount' => Cart::total()), 'vtweb' => array('enabled_payments' => array($request->input('payment')), 'credit_card_3d_secure' => true, 'finish_redirect_url' => route('frontend.payment.finish'), 'unfinish_redirect_url' => route('frontend.payment.unFinish'), 'error_redirect_url' => route('frontend.payment.error'))); try { // Redirect to Veritrans VTWeb page return redirect(\Veritrans_Vtweb::getRedirectionUrl($params)); } catch (Exception $e) { echo $e->getMessage(); } }
public function execValidation($cart) { global $cookie; if ($cart->id_customer == 0 || $cart->id_address_delivery == 0 || $cart->id_address_invoice == 0 || !$this->active) { Tools::redirect('index.php?controller=order&step=1'); } // Check that this payment option is still available in case the customer changed his address just before the end of the checkout process $authorized = false; foreach (Module::getPaymentModules() as $module) { if ($module['name'] == 'veritranspay') { $authorized = true; break; } } if (!$authorized) { die($this->module->l('This payment method is not available.', 'validation')); } $customer = new Customer($cart->id_customer); if (!Validate::isLoadedObject($customer)) { Tools::redirect('index.php?controller=order&step=1'); } $usd = Configuration::get('VT_KURS'); $cf = Configuration::get('VT_CONVENIENCE_FEE') * 0.01; $list_enable_payments = array(); if (Configuration::get('ENABLED_CREDIT_CARD')) { $list_enable_payments[] = "credit_card"; } if (Configuration::get('ENABLED_CIMB')) { $list_enable_payments[] = "cimb_clicks"; } if (Configuration::get('ENABLED_MANDIRI')) { $list_enable_payments[] = "mandiri_clickpay"; } if (Configuration::get('ENABLED_PERMATAVA')) { $list_enable_payments[] = "bank_transfer"; } if (Configuration::get('ENABLED_BRIEPAY')) { $list_enable_payments[] = "bri_epay"; } if (Configuration::get('ENABLED_TELKOMSEL_CASH')) { $list_enable_payments[] = "telkomsel_cash"; } if (Configuration::get('ENABLED_XL_TUNAI')) { $list_enable_payments[] = "xl_tunai"; } if (Configuration::get('ENABLED_MANDIRI_BILL')) { $list_enable_payments[] = "echannel"; } if (Configuration::get('ENABLED_BBM_MONEY')) { $list_enable_payments[] = "bbm_money"; } if (Configuration::get('ENABLED_INDOMARET')) { $list_enable_payments[] = "cstore"; } if (Configuration::get('ENABLED_INDOSAT_DOMPETKU')) { $list_enable_payments[] = "indosat_dompetku"; } if (Configuration::get('ENABLED_MANDIRI_ECASH')) { $list_enable_payments[] = "mandiri_ecash"; } //error_log(print_r($list_enable_payments,TRUE)); $veritrans = new Veritrans_Config(); //SETUP Veritrans_Config::$serverKey = Configuration::get('VT_SERVER_KEY'); Veritrans_Config::$isProduction = Configuration::get('VT_ENVIRONMENT') == 'production' ? true : false; $url = Veritrans_Config::getBaseUrl(); if (version_compare(Configuration::get('PS_VERSION_DB'), '1.5') == -1) { $shipping_cost = $cart->getOrderShippingCost(); } else { $shipping_cost = $cart->getTotalShippingCost(); } $currency = new Currency($cookie->id_currency); $total = $cart->getOrderTotal(true, Cart::BOTH); $mailVars = array(); $billing_address = new Address($cart->id_address_invoice); $delivery_address = new Address($cart->id_address_delivery); if (Configuration::get('VT_3D_SECURE') == 'on' || Configuration::get('VT_3D_SECURE') == 1) { Veritrans_Config::$is3ds = true; } if (Configuration::get('VT_SANITIZED') == 'on' || Configuration::get('VT_SANITIZED') == 1) { Veritrans_Config::$isSanitized = true; } //error_log('sanitized '.Configuration::get('VT_SANITIZED')); // Billing Address $params_billing_address = array('first_name' => $billing_address->firstname, 'last_name' => $billing_address->lastname, 'address' => $billing_address->address1, 'city' => $billing_address->city, 'postal_code' => $billing_address->postcode, 'phone' => $this->determineValidPhone($billing_address->phone, $billing_address->phone_mobile), 'country_code' => 'IDN'); if ($cart->isVirtualCart()) { } else { if ($cart->id_address_delivery != $cart->id_address_invoice) { $params_shipping_address = array('first_name' => $delivery_address->firstname, 'last_name' => $delivery_address->lastname, 'address' => $delivery_address->address1, 'city' => $delivery_address->city, 'postal_code' => $delivery_address->postcode, 'phone' => $this->determineValidPhone($delivery_address->phone, $delivery_address->phone_mobile), 'country_code' => 'IDN'); } else { $params_shipping_address = $params_billing_address; } } $params_customer_details = array('first_name' => $billing_address->firstname, 'last_name' => $billing_address->lastname, 'email' => $customer->email, 'phone' => $this->determineValidPhone($billing_address->phone, $billing_address->phone_mobile), 'billing_address' => $params_billing_address, 'shipping_address' => $params_shipping_address); $items = $this->addCommodities($cart, $shipping_cost, $usd); // convert the currency $cart_currency = new Currency($cart->id_currency); if ($cart_currency->iso_code != 'IDR') { // check whether if the IDR is installed or not if (Currency::exists('IDR', null)) { // use default rate if (version_compare(Configuration::get('PS_VERSION_DB'), '1.5') == -1) { $conversion_func = function ($input) use($cart_currency) { return Tools::convertPrice($input, new Currency(Currency::getIdByIsoCode('IDR')), true); }; } else { $conversion_func = function ($input) use($cart_currency) { return Tools::convertPriceFull($input, $cart_currency, new Currency(Currency::getIdByIsoCode('IDR'))); }; } } else { // use rate $conversion_func = function ($input) { return $input * intval(Configuration::get('VT_KURS')); }; } foreach ($items as &$item) { $item['price'] = intval(round(call_user_func($conversion_func, $item['price']))); } } else { if ($cart_currency->iso_code == 'IDR') { foreach ($items as &$item) { $item['price'] = intval(round($item['price'])); } } } $this->validateOrder($cart->id, Configuration::get('VT_ORDER_STATE_ID'), $cart->getOrderTotal(true, Cart::BOTH), $this->displayName, NULL, $mailVars, (int) $currency->id, false, $customer->secure_key); $gross_amount = 0; unset($item); foreach ($items as $item) { $gross_amount += $item['price'] * $item['quantity']; } $isBniInstallment = Configuration::get('ENABLED_BNI_INSTALLMENT') == 1; $isMandiriInstallment = Configuration::get('ENABLED_MANDIRI_INSTALLMENT') == 1; $warning_redirect = false; $fullPayment = true; $installment_type_val = Configuration::get('VT_ENABLE_INSTALLMENT'); $param_required; switch ($installment_type_val) { case 'all_product': if ($isBniInstallment) { //$bni_term2 = $this->getTermInstallment('BNI'); $a = Configuration::get('VT_INSTALLMENTS_BNI'); $term = explode(',', $a); $bni_term = $term; //error_log(print_r($bni_term,true)); //error_log($bni_term,true); } if ($isMandiriInstallment) { $mandiri_term = $this->getTermInstallment('MANDIRI'); $a = Configuration::get('VT_INSTALLMENTS_MANDIRI'); $term = explode(',', $a); $mandiri_term = $term; //error_log($mandiri_term,true); //error_log(print_r($mandiri_term,true)); } $param_installment = array(); if ($isBniInstallment) { $param_installment['bni'] = $bni_term; } if ($isMandiriInstallment) { $param_installment['mandiri'] = $mandiri_term; } $param_required = "false"; $fullPayment = false; break; case 'certain_product': $param_installment = null; $products_cart = $cart->getProducts(); $num_product = count($products_cart); if ($num_product == 1) { $attr_product = explode(',', $products_cart[0]['attributes_small']); foreach ($attr_product as $att) { $att_trim = ltrim($att); $att_arr = explode(' ', $att_trim); //error_log(print_r($att_arr,true)); if (strtolower($att_arr[0]) == 'installment') { $fullPayment = false; $param_installment = array(); $param_installment[strtolower($att_arr[1])] = array($att_arr[2]); } } } else { $warning_redirect = true; $keys['message'] = 1; } $param_required = "true"; break; case 'off': $param_installment = null; break; } //error_log($param_installment,true); // $param_payment_option = array( // 'installment' => array( // 'required' => $param_required, // 'installment_terms' => $param_installment // ) // ); $params_all = array('payment_type' => Configuration::get('VT_PAYMENT_TYPE'), 'vtweb' => array('enabled_payments' => $list_enable_payments), 'transaction_details' => array('order_id' => $this->currentOrder, 'gross_amount' => $gross_amount), 'item_details' => $items, 'customer_details' => $params_customer_details); if ($gross_amount < 500000) { $warning_redirect = true; $keys['message'] = 2; } if (!$warning_redirect && ($isBniInstallment || $isMandiriInstallment) && !$fullPayment) { $params_all['vtweb']['payment_options'] = $param_payment_option; } if (Configuration::get('VT_API_VERSION') == 2 && Configuration::get('VT_PAYMENT_TYPE') != 'vtdirect') { try { // Redirect to Veritrans VTWeb page if ($this->isInstallmentCart($cart->getProducts()) || $installment_type_val == 'all_product') { $keys['isWarning'] = $warning_redirect; } else { $keys['isWarning'] = false; } $keys['redirect_url'] = Veritrans_Vtweb::getRedirectionUrl($params_all); } catch (Exception $e) { $keys['errors'] = $e->getMessage(); echo $e->getMessage(); } return $keys; } else { if (Configuration::get('VT_API_VERSION') == 2 && Configuration::get('VT_PAYMENT_TYPE') == 'vtdirect') { echo 'not yet implementation.'; exit; } else { echo 'The Veritrans API versions and the payment type is not valid.'; exit; } } }
/** * Called when a customer checkouts. * If it runs successfully, it will redirect to VT-Web payment page. */ public function process_order() { $this->load->model('payment/veritransbca'); $this->load->model('checkout/order'); $this->load->model('total/shipping'); $this->load->language('payment/veritransbca'); $data['errors'] = array(); $data['button_confirm'] = $this->language->get('button_confirm'); $order_info = $this->model_checkout_order->getOrder($this->session->data['order_id']); $this->model_checkout_order->addOrderHistory($this->session->data['order_id'], $this->config->get('veritransbca_vtweb_challenge_mapping')); $transaction_details = array(); $transaction_details['order_id'] = $this->session->data['order_id']; $transaction_details['gross_amount'] = $order_info['total']; $billing_address = array(); $billing_address['first_name'] = $order_info['payment_firstname']; $billing_address['last_name'] = $order_info['payment_lastname']; $billing_address['address'] = $order_info['payment_address_1']; $billing_address['city'] = $order_info['payment_city']; $billing_address['postal_code'] = $order_info['payment_postcode']; $billing_address['phone'] = $order_info['telephone']; $billing_address['country_code'] = strlen($order_info['payment_iso_code_3'] != 3) ? 'IDN' : $order_info['payment_iso_code_3']; if ($this->cart->hasShipping()) { $shipping_address = array(); $shipping_address['first_name'] = $order_info['shipping_firstname']; $shipping_address['last_name'] = $order_info['shipping_lastname']; $shipping_address['address'] = $order_info['shipping_address_1']; $shipping_address['city'] = $order_info['shipping_city']; $shipping_address['postal_code'] = $order_info['shipping_postcode']; $shipping_address['phone'] = $order_info['telephone']; $shipping_address['country_code'] = strlen($order_info['payment_iso_code_3'] != 3) ? 'IDN' : $order_info['payment_iso_code_3']; } else { $shipping_address = $billing_address; } $customer_details = array(); $customer_details['billing_address'] = $billing_address; $customer_details['shipping_address'] = $shipping_address; $customer_details['first_name'] = $order_info['payment_firstname']; $customer_details['last_name'] = $order_info['payment_lastname']; $customer_details['email'] = $order_info['email']; $customer_details['phone'] = $order_info['telephone']; $products = $this->cart->getProducts(); $item_details = array(); foreach ($products as $product) { if ($this->config->get('config_customer_price') && $this->customer->isLogged() || !$this->config->get('config_customer_price')) { $product['price'] = $this->tax->calculate($product['price'], $product['tax_class_id'], $this->config->get('config_tax')); } $item = array('id' => $product['product_id'], 'price' => $product['price'], 'quantity' => $product['quantity'], 'name' => $product['name']); $item_details[] = $item; } unset($product); $num_products = count($item_details); if ($this->cart->hasShipping()) { $shipping_info = $this->session->data['shipping_method']; if ($this->config->get('config_customer_price') && $this->customer->isLogged() || !$this->config->get('config_customer_price')) { $shipping_info['cost'] = $this->tax->calculate($shipping_info['cost'], $shipping_info['tax_class_id'], $this->config->get('config_tax')); } $shipping_item = array('id' => 'SHIPPING', 'price' => $shipping_info['cost'], 'quantity' => 1, 'name' => 'SHIPPING'); $item_details[] = $shipping_item; } // convert all item prices to IDR if ($this->config->get('config_currency') != 'IDR') { if ($this->currency->has('IDR')) { foreach ($item_details as &$item) { $item['price'] = intval($this->currency->convert($item['price'], $this->config->get('config_currency'), 'IDR')); } unset($item); $transaction_details['gross_amount'] = intval($this->currency->convert($transaction_details['gross_amount'], $this->config->get('config_currency'), 'IDR')); } else { if ($this->config->get('veritransbca_currency_conversion') > 0) { foreach ($item_details as &$item) { $item['price'] = intval($item['price'] * $this->config->get('veritransbca_currency_conversion')); } unset($item); $transaction_details['gross_amount'] = intval($transaction_details['gross_amount'] * $this->config->get('veritransbca_currency_conversion')); } else { $data['errors'][] = "Either the IDR currency is not installed or " . "the Veritrans currency conversion rate is valid. " . "Please review your currency setting."; } } } $total_price = 0; foreach ($item_details as $item) { $total_price += $item['price'] * $item['quantity']; } if ($total_price != $transaction_details['gross_amount']) { $coupon_item = array('id' => 'COUPON', 'price' => $transaction_details['gross_amount'] - $total_price, 'quantity' => 1, 'name' => 'COUPON'); $item_details[] = $coupon_item; } Veritrans_Config::$serverKey = $this->config->get('veritransbca_server_key_v2'); Veritrans_Config::$isProduction = $this->config->get('veritransbca_environment') == 'production' ? true : false; //Veritrans_Config::$is3ds = $this->config->get('veritrans_3d_secure') == 'on' ? true : false; Veritrans_Config::$is3ds = true; Veritrans_Config::$isSanitized = true; $payloads = array(); $payloads['transaction_details'] = $transaction_details; $payloads['item_details'] = $item_details; $payloads['customer_details'] = $customer_details; $threshold = $this->config->get('veritransbca_threshold'); try { $enabled_payments = array(); $enabled_payments[] = 'credit_card'; $payloads['vtweb']['enabled_payments'] = $enabled_payments; $payloads['vtweb']['credit_card']['bank'] = 'bca'; $payloads['vtweb']['credit_card']['channel'] = 'migs'; error_log(print_r($payloads, TRUE)); $redirUrl = Veritrans_VtWeb::getRedirectionUrl($payloads); // $this->cart->clear(); //$this->response->redirect($redirUrl); $this->response->setOutput($redirUrl); } catch (Exception $e) { $data['errors'][] = $e->getMessage(); error_log($e->getMessage()); echo $e->getMessage(); } }
/** * Charge Payment * Method ini digunakan untuk mendapatkan link halaman pembayaran Veritrans * dengan mengirimkan JSON yang berisi data transaksi */ function charge_payment($order_id) { global $woocommerce; $order_items = array(); $cart = $woocommerce->cart; $order = new WC_Order($order_id); // add discount // WC()->cart->add_discount( 'veritrans' ); $cart->add_discount('veritrans'); $order->add_coupon('veritrans', WC()->cart->get_coupon_discount_amount('veritrans'), WC()->cart->get_coupon_discount_tax_amount('veritrans')); $order->set_total(WC()->cart->shipping_total, 'shipping'); $order->set_total(WC()->cart->get_cart_discount_total(), 'cart_discount'); $order->set_total(WC()->cart->get_cart_discount_tax_total(), 'cart_discount_tax'); $order->set_total(WC()->cart->tax_total, 'tax'); $order->set_total(WC()->cart->shipping_tax_total, 'shipping_tax'); $order->set_total(WC()->cart->total); // $order->add_coupon('veritrans',10000); // end of add discount Veritrans_Config::$isProduction = $this->environment == 'production' ? true : false; Veritrans_Config::$serverKey = Veritrans_Config::$isProduction ? $this->server_key_v2_production : $this->server_key_v2_sandbox; Veritrans_Config::$is3ds = true; Veritrans_Config::$isSanitized = $this->enable_sanitization == 'yes' ? true : false; $params = array('transaction_details' => array('order_id' => $order_id, 'gross_amount' => 0), 'vtweb' => array()); $enabled_payments = array(); // if ($this->enable_credit_card == 'yes'){ // $enabled_payments[] = 'credit_card'; // } // check enabled payment if ($this->enable_credit_card == 'yes') { $params['vtweb']['enabled_payments'] = 'credit_card'; } if ($this->enable_permata_va == 'yes') { $params['vtweb']['enabled_payments'] = 'bank_transfer'; } // add bin filter $bins = $this->bin_filter; $bins = explode(',', $bins); $params['vtweb']['credit_card_bins'] = $bins; $customer_details = array(); $customer_details['first_name'] = $order->billing_first_name; $customer_details['last_name'] = $order->billing_last_name; $customer_details['email'] = $order->billing_email; $customer_details['phone'] = $order->billing_phone; $billing_address = array(); $billing_address['first_name'] = $order->billing_first_name; $billing_address['last_name'] = $order->billing_last_name; $billing_address['address'] = $order->billing_address_1; $billing_address['city'] = $order->billing_city; $billing_address['postal_code'] = $order->billing_postcode; $billing_address['phone'] = $order->billing_phone; $billing_address['country_code'] = strlen($this->convert_country_code($order->billing_country) != 3) ? 'IDN' : $this->convert_country_code($order->billing_country); $customer_details['billing_address'] = $billing_address; $customer_details['shipping_address'] = $billing_address; if (isset($_POST['ship_to_different_address'])) { $shipping_address = array(); $shipping_address['first_name'] = $order->shipping_first_name; $shipping_address['last_name'] = $order->shipping_last_name; $shipping_address['address'] = $order->shipping_address_1; $shipping_address['city'] = $order->shipping_city; $shipping_address['postal_code'] = $order->shipping_postcode; $shipping_address['phone'] = $order->billing_phone; $shipping_address['country_code'] = strlen($this->convert_country_code($order->shipping_country) != 3) ? 'IDN' : $this->convert_country_code($order->billing_country); $customer_details['shipping_address'] = $shipping_address; } $params['customer_details'] = $customer_details; //error_log(print_r($params,true)); $items = array(); if (sizeof($order->get_items()) > 0) { foreach ($order->get_items() as $item) { if ($item['qty']) { $product = $order->get_product_from_item($item); $veritrans_item = array(); $veritrans_item['id'] = $item['product_id']; $veritrans_item['price'] = $order->get_item_subtotal($item, false); $veritrans_item['quantity'] = $item['qty']; $veritrans_item['name'] = $item['name']; $items[] = $veritrans_item; } } } // Shipping fee if ($order->get_total_shipping() > 0) { $items[] = array('id' => 'shippingfee', 'price' => $order->get_total_shipping(), 'quantity' => 1, 'name' => 'Shipping Fee'); } // Tax if ($order->get_total_tax() > 0) { $items[] = array('id' => 'taxfee', 'price' => $order->get_total_tax(), 'quantity' => 1, 'name' => 'Tax'); } // Discount if ($order->get_cart_discount() > 0) { $items[] = array('id' => 'totaldiscount', 'price' => $order->get_cart_discount() * -1, 'quantity' => 1, 'name' => 'Total Discount'); } // Fees if (sizeof($order->get_fees()) > 0) { $fees = $order->get_fees(); $i = 0; foreach ($fees as $item) { $items[] = array('id' => 'itemfee' . $i, 'price' => $item['line_total'], 'quantity' => 1, 'name' => $item['name']); $i++; } } //calculate gross amount $total_amount = 0; // error_log('print r items[]' . print_r($items,true)); //debugan foreach ($items as $item) { $total_amount += $item['price'] * $item['quantity']; // error_log('|||| Per item[]' . print_r($item,true)); //debugan } $params['transaction_details']['gross_amount'] = $total_amount; // error_log('bni'.$this->enable_bni); // error_log('mandiri'.$this->enable_mandiri); // if($this->enable_bni == 'yes' || $this->enable_mandiri == 'yes') if (false) { $installment_terms = array(); $payment_options = array('installment' => array('required' => true, 'installment_terms' => new stdClass(), 'offline_installment_terms' => array())); // $term_bni = $this->bni_terms; // error_log('term bni '.$term_bni); // $term_bni_array = explode(',' , $term_bni); // if($term_bni == "yes" || $term_bni_array != null) // { // $installment_terms['bni'] = $term_bni_array; // } // $term_mandiri = $this->mandiri_terms; // error_log('term mandiri '.$term_mandiri); // $term_mandiri_array = explode(',' , $term_mandiri); // if($term_mandiri == "yes" || $term_mandiri_array != null) // { // $installment_terms['mandiri'] = $term_mandiri_array; // } $term = $this->installment_terms; error_log('============installment_terms ' . $term); $term_array = explode(',', $term); } // sift through the entire item to ensure that currency conversion is applied if (get_woocommerce_currency() != 'IDR') { foreach ($items as &$item) { $item['price'] = $item['price'] * $this->to_idr_rate; } unset($item); $params['transaction_details']['gross_amount'] *= $this->to_idr_rate; } $params['item_details'] = $items; // if($params['transaction_details']['gross_amount'] >= $this->min_amount) // { // $payment_options['installment']['offline_installment_terms'] = $term_array; // $params['vtweb']['payment_options'] = $payment_options; // } $woocommerce->cart->empty_cart(); error_log(print_r($params, TRUE)); // error_log(json_encode($params)); return Veritrans_VtWeb::getRedirectionUrl($params); }
/** * Called when a customer checkouts. * If it runs successfully, it will redirect to VT-Web payment page. */ public function process_order() { $this->load->model('payment/veritransbni'); $this->load->model('checkout/order'); $this->load->model('total/shipping'); $this->load->language('payment/veritransbni'); $data['errors'] = array(); $data['button_confirm'] = $this->language->get('button_confirm'); $order_info = $this->model_checkout_order->getOrder($this->session->data['order_id']); $this->model_checkout_order->addOrderHistory($this->session->data['order_id'], $this->config->get('veritransbni_vtweb_challenge_mapping')); $transaction_details = array(); $transaction_details['order_id'] = $this->session->data['order_id']; $transaction_details['gross_amount'] = $order_info['total']; $billing_address = array(); $billing_address['first_name'] = $order_info['payment_firstname']; $billing_address['last_name'] = $order_info['payment_lastname']; $billing_address['address'] = $order_info['payment_address_1']; $billing_address['city'] = $order_info['payment_city']; $billing_address['postal_code'] = $order_info['payment_postcode']; $billing_address['phone'] = $order_info['telephone']; $billing_address['country_code'] = strlen($order_info['payment_iso_code_3'] != 3) ? 'IDN' : $order_info['payment_iso_code_3']; if ($this->cart->hasShipping()) { $shipping_address = array(); $shipping_address['first_name'] = $order_info['shipping_firstname']; $shipping_address['last_name'] = $order_info['shipping_lastname']; $shipping_address['address'] = $order_info['shipping_address_1']; $shipping_address['city'] = $order_info['shipping_city']; $shipping_address['postal_code'] = $order_info['shipping_postcode']; $shipping_address['phone'] = $order_info['telephone']; $shipping_address['country_code'] = strlen($order_info['payment_iso_code_3'] != 3) ? 'IDN' : $order_info['payment_iso_code_3']; } else { $shipping_address = $billing_address; } $customer_details = array(); $customer_details['billing_address'] = $billing_address; $customer_details['shipping_address'] = $shipping_address; $customer_details['first_name'] = $order_info['payment_firstname']; $customer_details['last_name'] = $order_info['payment_lastname']; $customer_details['email'] = $order_info['email']; $customer_details['phone'] = $order_info['telephone']; $products = $this->cart->getProducts(); $item_details = array(); foreach ($products as $product) { if ($this->config->get('config_customer_price') && $this->customer->isLogged() || !$this->config->get('config_customer_price')) { $product['price'] = $this->tax->calculate($product['price'], $product['tax_class_id'], $this->config->get('config_tax')); } $item = array('id' => $product['product_id'], 'price' => $product['price'], 'quantity' => $product['quantity'], 'name' => $product['name']); $item_details[] = $item; } unset($product); $num_products = count($item_details); if ($this->cart->hasShipping()) { $shipping_info = $this->session->data['shipping_method']; if ($this->config->get('config_customer_price') && $this->customer->isLogged() || !$this->config->get('config_customer_price')) { $shipping_info['cost'] = $this->tax->calculate($shipping_info['cost'], $shipping_info['tax_class_id'], $this->config->get('config_tax')); } $shipping_item = array('id' => 'SHIPPING', 'price' => $shipping_info['cost'], 'quantity' => 1, 'name' => 'SHIPPING'); $item_details[] = $shipping_item; } // convert all item prices to IDR if ($this->config->get('config_currency') != 'IDR') { if ($this->currency->has('IDR')) { foreach ($item_details as &$item) { $item['price'] = intval($this->currency->convert($item['price'], $this->config->get('config_currency'), 'IDR')); } unset($item); $transaction_details['gross_amount'] = intval($this->currency->convert($transaction_details['gross_amount'], $this->config->get('config_currency'), 'IDR')); } else { if ($this->config->get('veritransbni_currency_conversion') > 0) { foreach ($item_details as &$item) { $item['price'] = intval($item['price'] * $this->config->get('veritransbni_currency_conversion')); } unset($item); $transaction_details['gross_amount'] = intval($transaction_details['gross_amount'] * $this->config->get('veritransbni_currency_conversion')); } else { $data['errors'][] = "Either the IDR currency is not installed or " . "the Veritrans currency conversion rate is valid. " . "Please review your currency setting."; } } } $total_price = 0; foreach ($item_details as $item) { $total_price += $item['price'] * $item['quantity']; } if ($total_price != $transaction_details['gross_amount']) { $coupon_item = array('id' => 'COUPON', 'price' => $transaction_details['gross_amount'] - $total_price, 'quantity' => 1, 'name' => 'COUPON'); $item_details[] = $coupon_item; } Veritrans_Config::$serverKey = $this->config->get('veritransbni_server_key_v2'); Veritrans_Config::$isProduction = $this->config->get('veritransbni_environment') == 'production' ? true : false; //Veritrans_Config::$is3ds = $this->config->get('veritrans_3d_secure') == 'on' ? true : false; Veritrans_Config::$is3ds = false; Veritrans_Config::$isSanitized = true; $payloads = array(); $payloads['transaction_details'] = $transaction_details; $payloads['item_details'] = $item_details; $payloads['customer_details'] = $customer_details; try { $enabled_payments = array(); $enabled_payments[] = 'credit_card'; $payloads['vtweb']['enabled_payments'] = $enabled_payments; $bins = $this->config->get('veritransbni_bin_number'); $bins = explode(',', $bins); $payloads['vtweb']['credit_card_bins'] = $bins; $is_installment = true; if ($this->config->get('veritransbni_installment_option') == 'all_product') { $payment_options = array('installment' => array('required' => true)); $installment_terms = array(); $term = $this->config->get('veritransbni_installment_bni_term'); $term_array = explode(',', $term); $installment_terms['bni'] = $term_array; $payment_options['installment']['installment_terms'] = $installment_terms; if ($transaction_details['gross_amount'] >= 500000) { $payloads['vtweb']['payment_options'] = $payment_options; } } else { if ($this->config->get('veritransbni_installment_option') == 'certain_product') { $payment_options = array('installment' => array('required' => true)); $installment_terms = array(); foreach ($products as $product) { //$options = $product['option']; foreach ($product['option'] as $option) { if ($option['name'] == 'Payment') { $installment_value = explode(' ', $option['value']); if (strtolower($installment_value[0]) == 'installment') { $is_installment = true; $installment_terms[strtolower($installment_value[1])] = array($installment_value[2]); } } } } if ($is_installment && $num_products == 1 && $transaction_details['gross_amount'] >= 500000) { $payment_options['installment']['installment_terms'] = $installment_terms; $payloads['vtweb']['payment_options'] = $payment_options; } } } $redirUrl = Veritrans_VtWeb::getRedirectionUrl($payloads); if ($is_installment) { $warningUrl = 'index.php?route=information/warning&redirLink='; if ($num_products > 1) { $redirUrl = $warningUrl . $redirUrl . '&message=1'; } else { if ($transaction_details['gross_amount'] < 500000) { $redirUrl = $warningUrl . $redirUrl . '&message=2'; } } } else { if ($this->config->get('veritransbni_installment_option') == 'all_product' && $transaction_details['gross_amount'] < 500000 && $option_flag == 0) { $warningUrl = 'index.php?route=information/warning&redirLink='; $redirUrl = $warningUrl . $redirUrl . '&message=2'; } } // $this->cart->clear(); //$this->response->redirect($redirUrl); $this->response->setOutput($redirUrl); } catch (Exception $e) { $data['errors'][] = $e->getMessage(); error_log($e->getMessage()); echo $e->getMessage(); } }
public function redirectAction() { $orderIncrementId = $this->_getCheckout()->getLastRealOrderId(); $order = Mage::getModel('sales/order')->loadByIncrementId($orderIncrementId); $sessionId = Mage::getSingleton('core/session'); /* send an order email when redirecting to payment page although payment has not been completed. */ $order->setState(Mage::getStoreConfig('payment/vtweb/'), true, 'New order, waiting for payment.'); $order->sendNewOrderEmail(); $order->setEmailSent(true); $payment_type = Mage::getStoreConfig('payment/vtweb/payment_types'); $enable_installment = Mage::getStoreConfig('payment/vtweb/enable_installment'); $is_enabled_bni = Mage::getStoreConfig('payment/vtweb/enable_installment_bni'); $is_enabled_mandiri = Mage::getStoreConfig('payment/vtweb/enable_installment_mandiri'); $bin_list = Mage::getStoreConfig('payment/vtwebbin/bin_number_list'); Veritrans_Config::$isProduction = Mage::getStoreConfig('payment/vtweb/environment') == 'production' ? true : false; Veritrans_Config::$serverKey = Mage::getStoreConfig('payment/vtweb/server_key_v2'); Veritrans_Config::$is3ds = Mage::getStoreConfig('payment/vtweb/enable_3d_secure') == '1' ? true : false; Veritrans_Config::$isSanitized = Mage::getStoreConfig('payment/vtweb/enable_sanitized') == '1' ? true : false; $transaction_details = array(); $transaction_details['order_id'] = $orderIncrementId; $order_billing_address = $order->getBillingAddress(); $billing_address = array(); $billing_address['first_name'] = $order_billing_address->getFirstname(); $billing_address['last_name'] = $order_billing_address->getLastname(); $billing_address['address'] = $order_billing_address->getStreet(1); $billing_address['city'] = $order_billing_address->getCity(); $billing_address['postal_code'] = $order_billing_address->getPostcode(); $billing_address['country_code'] = $this->convert_country_code($order_billing_address->getCountry()); $billing_address['phone'] = $order_billing_address->getTelephone(); $order_shipping_address = $order->getShippingAddress(); $shipping_address = array(); $shipping_address['first_name'] = $order_shipping_address->getFirstname(); $shipping_address['last_name'] = $order_shipping_address->getLastname(); $shipping_address['address'] = $order_shipping_address->getStreet(1); $shipping_address['city'] = $order_shipping_address->getCity(); $shipping_address['postal_code'] = $order_shipping_address->getPostcode(); $shipping_address['phone'] = $order_shipping_address->getTelephone(); $shipping_address['country_code'] = $this->convert_country_code($order_shipping_address->getCountry()); $customer_details = array(); $customer_details['billing_address'] = $billing_address; $customer_details['shipping_address'] = $shipping_address; $customer_details['first_name'] = $order_billing_address->getFirstname(); $customer_details['last_name'] = $order_billing_address->getLastname(); $customer_details['email'] = $order_billing_address->getEmail(); $customer_details['phone'] = $order_billing_address->getTelephone(); $items = $order->getAllItems(); $shipping_amount = $order->getShippingAmount(); $shipping_tax_amount = $order->getShippingTaxAmount(); $tax_amount = $order->getTaxAmount(); $item_details = array(); foreach ($items as $each) { $item = array('id' => $each->getProductId(), 'price' => $each->getPrice(), 'quantity' => $each->getQtyToInvoice(), 'name' => $each->getName()); if ($item['quantity'] == 0) { continue; } // error_log(print_r($each->getProductOptions(), true)); $item_details[] = $item; } $num_products = count($item_details); unset($each); if ($order->getDiscountAmount() != 0) { $couponItem = array('id' => 'DISCOUNT', 'price' => $order->getDiscountAmount(), 'quantity' => 1, 'name' => 'DISCOUNT'); $item_details[] = $couponItem; } if ($shipping_amount > 0) { $shipping_item = array('id' => 'SHIPPING', 'price' => $shipping_amount, 'quantity' => 1, 'name' => 'Shipping Cost'); $item_details[] = $shipping_item; } if ($shipping_tax_amount > 0) { $shipping_tax_item = array('id' => 'SHIPPING_TAX', 'price' => $shipping_tax_amount, 'quantity' => 1, 'name' => 'Shipping Tax'); $item_details[] = $shipping_tax_item; } if ($tax_amount > 0) { $tax_item = array('id' => 'TAX', 'price' => $tax_amount, 'quantity' => 1, 'name' => 'Tax'); $item_details[] = $tax_item; } // convert to IDR $current_currency = Mage::app()->getStore()->getCurrentCurrencyCode(); if ($current_currency != 'IDR') { $conversion_func = function ($non_idr_price) { return $non_idr_price * Mage::getStoreConfig('payment/vtweb/conversion_rate'); }; foreach ($item_details as &$item) { $item['price'] = intval(round(call_user_func($conversion_func, $item['price']))); } unset($item); } else { foreach ($item_details as &$each) { $each['price'] = (int) $each['price']; } unset($each); } $payloads = array(); $payloads['transaction_details'] = $transaction_details; $payloads['item_details'] = $item_details; $payloads['customer_details'] = $customer_details; $payloads['vtweb'] = array('enabled_payments' => 'credit_card'); $isWarning = false; $isInstallment = false; $totalPrice = 0; foreach ($item_details as $item) { $totalPrice += $item['price'] * $item['quantity']; } $bin_list = Mage::getStoreConfig('payment/vtwebbin/bin_number_list'); if ($bin_list) { $bin_list_array = explode(',', $bin_list); $payloads['vtweb']['credit_card_bins'] = $bin_list_array; Mage::log('bin list = ' . print_r($bin_list_array, true), null, 'vtweb.log', true); } //Mage::log('payloads:'.print_r($payloads,true),null,'vtweb.log',true); try { $redirUrl = Veritrans_VtWeb::getRedirectionUrl($payloads); if ($isWarning) { $this->_getCheckout()->setMsg($redirUrl); $this->_redirectUrl(Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_LINK) . 'vtweb/paymentwarning/warning/message/1'); } else { if ($totalPrice < 500000 && $isInstallment) { $this->_getCheckout()->setMsg($redirUrl); $this->_redirectUrl(Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_LINK) . 'vtweb/paymentwarning/warning/message/2'); } else { $this->_redirectUrl($redirUrl); } } } catch (Exception $e) { error_log($e->getMessage()); Mage::log('error:' . print_r($e->getMessage(), true), null, 'vtweb.log', true); } }
/** * Charge Payment * Method ini digunakan untuk mendapatkan link halaman pembayaran Veritrans * dengan mengirimkan JSON yang berisi data transaksi */ function charge_payment($order_id) { global $woocommerce; $order_items = array(); $cart = $woocommerce->cart; $order = new WC_Order($order_id); Veritrans_Config::$isProduction = $this->environment == 'production' ? true : false; Veritrans_Config::$serverKey = Veritrans_Config::$isProduction ? $this->server_key_v2_production : $this->server_key_v2_sandbox; Veritrans_Config::$is3ds = $this->enable_3d_secure == 'yes' ? true : false; Veritrans_Config::$isSanitized = $this->enable_sanitization == 'yes' ? true : false; $params = array('transaction_details' => array('order_id' => $order_id, 'gross_amount' => 0), 'vtweb' => array()); $enabled_payments = array(); if ($this->enable_credit_card == 'yes') { $enabled_payments[] = 'credit_card'; } if ($this->enable_mandiri_clickpay == 'yes') { $enabled_payments[] = 'mandiri_clickpay'; } if ($this->enable_cimb_clicks == 'yes') { $enabled_payments[] = 'cimb_clicks'; } if ($this->enable_permata_va == 'yes') { $enabled_payments[] = 'bank_transfer'; } if ($this->enable_bri_epay == 'yes') { $enabled_payments[] = 'bri_epay'; } if ($this->enable_telkomsel_cash == 'yes') { $enabled_payments[] = 'telkomsel_cash'; } if ($this->enable_xl_tunai == 'yes') { $enabled_payments[] = 'xl_tunai'; } if ($this->enable_mandiri_bill == 'yes') { $enabled_payments[] = 'echannel'; } if ($this->enable_bbmmoney == 'yes') { $enabled_payments[] = 'bbm_money'; } if ($this->enable_indomaret == 'yes') { $enabled_payments[] = 'cstore'; } if ($this->enable_indosat_dompetku == 'yes') { $enabled_payments[] = 'indosat_dompetku'; } if ($this->enable_mandiri_ecash == 'yes') { $enabled_payments[] = 'mandiri_ecash'; } $params['vtweb']['enabled_payments'] = $enabled_payments; $customer_details = array(); $customer_details['first_name'] = $order->billing_first_name; $customer_details['last_name'] = $order->billing_last_name; $customer_details['email'] = $order->billing_email; $customer_details['phone'] = $order->billing_phone; $billing_address = array(); $billing_address['first_name'] = $order->billing_first_name; $billing_address['last_name'] = $order->billing_last_name; $billing_address['address'] = $order->billing_address_1; $billing_address['city'] = $order->billing_city; $billing_address['postal_code'] = $order->billing_postcode; $billing_address['phone'] = $order->billing_phone; $billing_address['country_code'] = strlen($this->convert_country_code($order->billing_country) != 3) ? 'IDN' : $this->convert_country_code($order->billing_country); $customer_details['billing_address'] = $billing_address; $customer_details['shipping_address'] = $billing_address; if (isset($_POST['ship_to_different_address'])) { $shipping_address = array(); $shipping_address['first_name'] = $order->shipping_first_name; $shipping_address['last_name'] = $order->shipping_last_name; $shipping_address['address'] = $order->shipping_address_1; $shipping_address['city'] = $order->shipping_city; $shipping_address['postal_code'] = $order->shipping_postcode; $shipping_address['phone'] = $order->billing_phone; $shipping_address['country_code'] = strlen($this->convert_country_code($order->shipping_country) != 3) ? 'IDN' : $this->convert_country_code($order->billing_country); $customer_details['shipping_address'] = $shipping_address; } $params['customer_details'] = $customer_details; //error_log(print_r($params,true)); $items = array(); if (sizeof($order->get_items()) > 0) { foreach ($order->get_items() as $item) { if ($item['qty']) { $product = $order->get_product_from_item($item); $veritrans_item = array(); $veritrans_item['id'] = $item['product_id']; $veritrans_item['price'] = $order->get_item_subtotal($item, false); $veritrans_item['quantity'] = $item['qty']; $veritrans_item['name'] = $item['name']; $items[] = $veritrans_item; } } } // Shipping fee if ($order->get_total_shipping() > 0) { $items[] = array('id' => 'shippingfee', 'price' => $order->get_total_shipping(), 'quantity' => 1, 'name' => 'Shipping Fee'); } // Tax if ($order->get_total_tax() > 0) { $items[] = array('id' => 'taxfee', 'price' => $order->get_total_tax(), 'quantity' => 1, 'name' => 'Tax'); } // Discount if ($cart->get_cart_discount_total() > 0) { $items[] = array('id' => 'totaldiscount', 'price' => $cart->get_cart_discount_total() * -1, 'quantity' => 1, 'name' => 'Total Discount'); } // Fees if (sizeof($order->get_fees()) > 0) { $fees = $order->get_fees(); $i = 0; foreach ($fees as $item) { $items[] = array('id' => 'itemfee' . $i, 'price' => $item['line_total'], 'quantity' => 1, 'name' => $item['name']); $i++; } } $total_amount = 0; // error_log('print r items[]' . print_r($items,true)); //debugan foreach ($items as $item) { $total_amount += $item['price'] * $item['quantity']; // error_log('|||| Per item[]' . print_r($item,true)); //debugan } error_log('order get total = ' . $order->get_total()); error_log('total amount = ' . $total_amount); $params['transaction_details']['gross_amount'] = $total_amount; // sift through the entire item to ensure that currency conversion is applied if (get_woocommerce_currency() != 'IDR') { foreach ($items as &$item) { $item['price'] = $item['price'] * $this->to_idr_rate; } unset($item); $params['transaction_details']['gross_amount'] *= $this->to_idr_rate; } $params['item_details'] = $items; $woocommerce->cart->empty_cart(); return Veritrans_VtWeb::getRedirectionUrl($params); }
public function redirectAction() { $orderIncrementId = $this->_getCheckout()->getLastRealOrderId(); $order = Mage::getModel('sales/order')->loadByIncrementId($orderIncrementId); $sessionId = Mage::getSingleton('core/session'); /* send an order email when redirecting to payment page although payment has not been completed. */ $order->setState(Mage::getStoreConfig('payment/vtweb/'), true, 'New order, waiting for payment.'); $order->sendNewOrderEmail(); $order->setEmailSent(true); $api_version = Mage::getStoreConfig('payment/vtweb/api_version'); $payment_type = Mage::getStoreConfig('payment/vtweb/payment_types'); $enable_installment = Mage::getStoreConfig('payment/vtweb/enable_installment'); $is_enabled_bni = Mage::getStoreConfig('payment/vtweb/enable_installment_bni'); $is_enabled_mandiri = Mage::getStoreConfig('payment/vtweb/enable_installment_mandiri'); Veritrans_Config::$isProduction = Mage::getStoreConfig('payment/vtweb/environment') == 'production' ? true : false; Veritrans_Config::$serverKey = Mage::getStoreConfig('payment/vtweb/server_key_v2'); Veritrans_Config::$is3ds = Mage::getStoreConfig('payment/vtweb/enable_3d_secure') == '1' ? true : false; Veritrans_Config::$isSanitized = Mage::getStoreConfig('payment/vtweb/enable_sanitized') == '1' ? true : false; $transaction_details = array(); $transaction_details['order_id'] = $orderIncrementId; $order_billing_address = $order->getBillingAddress(); $billing_address = array(); $billing_address['first_name'] = $order_billing_address->getFirstname(); $billing_address['last_name'] = $order_billing_address->getLastname(); $billing_address['address'] = $order_billing_address->getStreet(1); $billing_address['city'] = $order_billing_address->getCity(); $billing_address['postal_code'] = $order_billing_address->getPostcode(); $billing_address['country_code'] = $this->convert_country_code($order_billing_address->getCountry()); $billing_address['phone'] = $order_billing_address->getTelephone(); $order_shipping_address = $order->getShippingAddress(); $shipping_address = array(); $shipping_address['first_name'] = $order_shipping_address->getFirstname(); $shipping_address['last_name'] = $order_shipping_address->getLastname(); $shipping_address['address'] = $order_shipping_address->getStreet(1); $shipping_address['city'] = $order_shipping_address->getCity(); $shipping_address['postal_code'] = $order_shipping_address->getPostcode(); $shipping_address['phone'] = $order_shipping_address->getTelephone(); $shipping_address['country_code'] = $this->convert_country_code($order_shipping_address->getCountry()); $customer_details = array(); $customer_details['billing_address'] = $billing_address; $customer_details['shipping_address'] = $shipping_address; $customer_details['first_name'] = $order_billing_address->getFirstname(); $customer_details['last_name'] = $order_billing_address->getLastname(); $customer_details['email'] = $order_billing_address->getEmail(); $customer_details['phone'] = $order_billing_address->getTelephone(); $items = $order->getAllItems(); $shipping_amount = $order->getShippingAmount(); $shipping_tax_amount = $order->getShippingTaxAmount(); $tax_amount = $order->getTaxAmount(); $item_details = array(); foreach ($items as $each) { $item = array('id' => $each->getProductId(), 'price' => $each->getPrice(), 'quantity' => $each->getQtyToInvoice(), 'name' => $each->getName()); if ($item['quantity'] == 0) { continue; } // error_log(print_r($each->getProductOptions(), true)); $item_details[] = $item; } $num_products = count($item_details); unset($each); if ($order->getDiscountAmount() != 0) { $couponItem = array('id' => 'DISCOUNT', 'price' => $order->getDiscountAmount(), 'quantity' => 1, 'name' => 'DISCOUNT'); $item_details[] = $couponItem; } if ($shipping_amount > 0) { $shipping_item = array('id' => 'SHIPPING', 'price' => $shipping_amount, 'quantity' => 1, 'name' => 'Shipping Cost'); $item_details[] = $shipping_item; } if ($shipping_tax_amount > 0) { $shipping_tax_item = array('id' => 'SHIPPING_TAX', 'price' => $shipping_tax_amount, 'quantity' => 1, 'name' => 'Shipping Tax'); $item_details[] = $shipping_tax_item; } if ($tax_amount > 0) { $tax_item = array('id' => 'TAX', 'price' => $tax_amount, 'quantity' => 1, 'name' => 'Tax'); $item_details[] = $tax_item; } // convert to IDR $current_currency = Mage::app()->getStore()->getCurrentCurrencyCode(); if ($current_currency != 'IDR') { $conversion_func = function ($non_idr_price) { return $non_idr_price * Mage::getStoreConfig('payment/vtweb/conversion_rate'); }; foreach ($item_details as &$item) { $item['price'] = intval(round(call_user_func($conversion_func, $item['price']))); } unset($item); } else { foreach ($item_details as &$each) { $each['price'] = (int) $each['price']; } unset($each); } $list_enable_payments = array(); if (Mage::getStoreConfig('payment/vtweb/enable_creditcard') == '1') { $list_enable_payments[] = 'credit_card'; } if (Mage::getStoreConfig('payment/vtweb/enable_cimbclick') == '1') { $list_enable_payments[] = 'cimb_clicks'; } if (Mage::getStoreConfig('payment/vtweb/enable_mandiriclickpay') == '1') { $list_enable_payments[] = 'mandiri_clickpay'; } if (Mage::getStoreConfig('payment/vtweb/enable_permatava') == '1') { $list_enable_payments[] = 'bank_transfer'; } if (Mage::getStoreConfig('payment/vtweb/enable_briepay') == '1') { $list_enable_payments[] = 'bri_epay'; } if (Mage::getStoreConfig('payment/vtweb/enable_tcash') == '1') { $list_enable_payments[] = 'telkomsel_cash'; } if (Mage::getStoreConfig('payment/vtweb/enable_xltunai') == '1') { $list_enable_payments[] = 'xl_tunai'; } if (Mage::getStoreConfig('payment/vtweb/enable_mandiribill') == '1') { $list_enable_payments[] = 'echannel'; } if (Mage::getStoreConfig('payment/vtweb/enable_bbmmoney') == '1') { $list_enable_payments[] = 'bbm_money'; } if (Mage::getStoreConfig('payment/vtweb/enable_indomaret') == '1') { $list_enable_payments[] = 'cstore'; } if (Mage::getStoreConfig('payment/vtweb/enable_dompetku') == '1') { $list_enable_payments[] = 'indosat_dompetku'; } $payloads = array(); $payloads['transaction_details'] = $transaction_details; $payloads['item_details'] = $item_details; $payloads['customer_details'] = $customer_details; $payloads['vtweb'] = array('enabled_payments' => $list_enable_payments); $isWarning = false; $isInstallment = false; $totalPrice = 0; foreach ($item_details as $item) { $totalPrice += $item['price'] * $item['quantity']; } if ($enable_installment == 'allProducts') { $installment_terms = array(); if ($is_enabled_bni == 1) { $bni_term = Mage::getStoreConfig('payment/vtweb/installment_bni_term'); $bni_term_array = explode(',', $bni_term); if (strlen($bni_term) != 0) { $isInstallment = true; $installment_terms['bni'] = $bni_term_array; } } if ($is_enabled_mandiri == 1) { $mandiri_term = Mage::getStoreConfig('payment/vtweb/installment_mandiri_term'); $mandiri_term_array = explode(',', $mandiri_term); if (strlen($mandiri_term) != 0) { $isInstallment = true; $installment_terms['mandiri'] = $mandiri_term_array; } } $payment_options = array('installment' => array('required' => false, 'installment_terms' => $installment_terms)); if ($isInstallment && $totalPrice >= 500000) { $payloads['vtweb']['payment_options'] = $payment_options; } } else { if ($enable_installment == 'certainProducts') { if ($num_products == 1) { $productOptions = $items[0]->getProductOptions(); if (array_key_exists('attributes_info', $productOptions)) { foreach ($productOptions['attributes_info'] as $attribute) { if (in_array('Payment', $attribute)) { $installment_value = explode(',', $attribute['value']); if (strtolower($installment_value[0]) == 'installment') { $installment_terms = array(); $installment_terms[strtolower($installment_value[1])] = array($installment_value[2]); $payment_options = array('installment' => array('required' => true, 'installment_terms' => $installment_terms)); $isInstallment = true; if ($totalPrice >= 500000) { $payloads['vtweb']['payment_options'] = $payment_options; } } } } unset($attribute); } } else { foreach ($items as $each) { $productOptions = $each->getProductOptions(); if (array_key_exists('attributes_info', $productOptions)) { foreach ($productOptions['attributes_info'] as $attribute) { if (in_array('Payment', $attribute)) { $installment_value = explode(',', $attribute['value']); if (strtolower($installment_value[0]) == 'installment') { $isWarning = true; } } } } } unset($each); } } } try { $redirUrl = Veritrans_VtWeb::getRedirectionUrl($payloads); if ($isWarning) { $this->_getCheckout()->setMsg($redirUrl); $this->_redirectUrl(Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_LINK) . 'vtweb/paymentwarning/warning/message/1'); } else { if ($totalPrice < 500000 && $isInstallment) { $this->_getCheckout()->setMsg($redirUrl); $this->_redirectUrl(Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_LINK) . 'vtweb/paymentwarning/warning/message/2'); } else { $this->_redirectUrl($redirUrl); } } } catch (Exception $e) { error_log($e->getMessage()); Mage::log('error:' . print_r($e->getMessage(), true), null, 'vtweb.log', true); } }
public function redirectAction() { $orderIncrementId = $this->_getCheckout()->getLastRealOrderId(); $order = Mage::getModel('sales/order')->loadByIncrementId($orderIncrementId); $sessionId = Mage::getSingleton('core/session'); /* send an order email when redirecting to payment page although payment has not been completed. */ $order->setState(Mage::getStoreConfig('payment/vtweb/'), true, 'New order, waiting for payment.'); $order->sendNewOrderEmail(); $order->setEmailSent(true); $enable_installment = Mage::getStoreConfig('payment/vtwebio/enable_installment'); Veritrans_Config::$isProduction = Mage::getStoreConfig('payment/vtweb/environment') == 'production' ? true : false; Veritrans_Config::$serverKey = Mage::getStoreConfig('payment/vtweb/server_key_v2'); Veritrans_Config::$is3ds = true; Veritrans_Config::$isSanitized = Mage::getStoreConfig('payment/vtweb/enable_sanitized') == '1' ? true : false; $transaction_details = array(); $transaction_details['order_id'] = $orderIncrementId; $order_billing_address = $order->getBillingAddress(); $billing_address = array(); $billing_address['first_name'] = $order_billing_address->getFirstname(); $billing_address['last_name'] = $order_billing_address->getLastname(); $billing_address['address'] = $order_billing_address->getStreet(1); $billing_address['city'] = $order_billing_address->getCity(); $billing_address['postal_code'] = $order_billing_address->getPostcode(); $billing_address['country_code'] = $this->convert_country_code($order_billing_address->getCountry()); $billing_address['phone'] = $order_billing_address->getTelephone(); $order_shipping_address = $order->getShippingAddress(); $shipping_address = array(); $shipping_address['first_name'] = $order_shipping_address->getFirstname(); $shipping_address['last_name'] = $order_shipping_address->getLastname(); $shipping_address['address'] = $order_shipping_address->getStreet(1); $shipping_address['city'] = $order_shipping_address->getCity(); $shipping_address['postal_code'] = $order_shipping_address->getPostcode(); $shipping_address['phone'] = $order_shipping_address->getTelephone(); $shipping_address['country_code'] = $this->convert_country_code($order_shipping_address->getCountry()); $customer_details = array(); $customer_details['billing_address'] = $billing_address; $customer_details['shipping_address'] = $shipping_address; $customer_details['first_name'] = $order_billing_address->getFirstname(); $customer_details['last_name'] = $order_billing_address->getLastname(); $customer_details['email'] = $order_billing_address->getEmail(); $customer_details['phone'] = $order_billing_address->getTelephone(); $items = $order->getAllItems(); $shipping_amount = $order->getShippingAmount(); $shipping_tax_amount = $order->getShippingTaxAmount(); $tax_amount = $order->getTaxAmount(); $item_details = array(); foreach ($items as $each) { $item = array('id' => $each->getProductId(), 'price' => $each->getPrice(), 'quantity' => $each->getQtyToInvoice(), 'name' => $each->getName()); if ($item['quantity'] == 0) { continue; } // error_log(print_r($each->getProductOptions(), true)); $item_details[] = $item; } $num_products = count($item_details); unset($each); if ($order->getDiscountAmount() != 0) { $couponItem = array('id' => 'DISCOUNT', 'price' => $order->getDiscountAmount(), 'quantity' => 1, 'name' => 'DISCOUNT'); $item_details[] = $couponItem; } if ($shipping_amount > 0) { $shipping_item = array('id' => 'SHIPPING', 'price' => $shipping_amount, 'quantity' => 1, 'name' => 'Shipping Cost'); $item_details[] = $shipping_item; } if ($shipping_tax_amount > 0) { $shipping_tax_item = array('id' => 'SHIPPING_TAX', 'price' => $shipping_tax_amount, 'quantity' => 1, 'name' => 'Shipping Tax'); $item_details[] = $shipping_tax_item; } if ($tax_amount > 0) { $tax_item = array('id' => 'TAX', 'price' => $tax_amount, 'quantity' => 1, 'name' => 'Tax'); $item_details[] = $tax_item; } // convert to IDR $current_currency = Mage::app()->getStore()->getCurrentCurrencyCode(); if ($current_currency != 'IDR') { $conversion_func = function ($non_idr_price) { return $non_idr_price * Mage::getStoreConfig('payment/vtweb/conversion_rate'); }; foreach ($item_details as &$item) { $item['price'] = intval(round(call_user_func($conversion_func, $item['price']))); } unset($item); } else { foreach ($item_details as &$each) { $each['price'] = (int) $each['price']; } unset($each); } $payloads = array(); $payloads['transaction_details'] = $transaction_details; $payloads['item_details'] = $item_details; $payloads['customer_details'] = $customer_details; $payloads['vtweb'] = array('enabled_payments' => 'credit_card'); $isWarning = false; $isInstallment = false; $totalPrice = 0; $threshold = Mage::getStoreConfig('payment/vtwebio/threshold'); Mage::log('$threshold = ' . print_r($threshold, true), null, 'vtwebmandiri.log', true); foreach ($item_details as $item) { $totalPrice += $item['price'] * $item['quantity']; } $bin_list = Mage::getStoreConfig('payment/vtwebio/bin_number_list'); if ($bin_list) { $bin_list_array = explode(',', $bin_list); $payloads['vtweb']['credit_card_bins'] = $bin_list_array; Mage::log('bin list = ' . print_r($bin_list_array, true), null, 'vtwebio.log', true); } $installment_terms = Mage::getStoreConfig('payment/vtwebio/installment_term'); $installment_terms = explode(',', $installment_terms); $payment_options = array('installment' => array('required' => true, 'installment_terms' => new stdClass(), 'offline_installment_terms' => $installment_terms)); if ($totalPrice >= $threshold) { $payloads['vtweb']['payment_options'] = $payment_options; } /* if ($enable_installment == 'allProducts') { $installment_terms = array(); $mandiri_term = Mage::getStoreConfig('payment/vtwebmandiri/installment_mandiri_term'); $mandiri_term_array = explode(',', $mandiri_term); if (strlen($mandiri_term) != 0) { $isInstallment = true; $installment_terms['mandiri'] = $mandiri_term_array; } // Mage::log('masuk allProducts \n installement terms:'.print_r($installment_terms,true),null,'vtwebmandiri.log',true); //debugan $payment_options = array( 'installment' => array( 'required' => true, 'installment_terms' => $installment_terms ) ); if ($isInstallment && ($totalPrice >= $threshold )) { $payloads['vtweb']['payment_options'] = $payment_options; } else{ $payloads['vtweb'] = array('enabled_payments'=> $this->enable_payment()); } } else if ($enable_installment == 'certainProducts') { if ($num_products == 1) { $productOptions = $items[0]->getProductOptions(); // Mage::log('productOptions:'.print_r($productOptions,true),null,'vtwebmandiri.log',true); //debug if (array_key_exists('attributes_info', $productOptions)) { foreach ($productOptions['attributes_info'] as $attribute) { if (in_array('Payment', $attribute)) { $installment_value = explode(' ', $attribute['value']); if (strtolower($installment_value[0]) == 'installment') { $installment_terms = array(); $installment_terms[strtolower($installment_value[1])] = array($installment_value[2]); if (strtolower($installment_value[1]) == 'bni') { Veritrans_Config::$is3ds = false; } else { Veritrans_Config::$is3ds = true; } $payment_options = array( 'installment' => array( 'required' => true, 'installment_terms' => $installment_terms ) ); $isInstallment = true; if ($totalPrice >= $threshold ) { $payloads['vtweb']['payment_options'] = $payment_options; } else{ $payloads['vtweb'] = array('enabled_payments'=> $this->enable_payment()); } } } } unset($attribute); } } else { foreach ($items as $each) { $productOptions = $each->getProductOptions(); if (array_key_exists('attributes_info', $productOptions)) { foreach ($productOptions['attributes_info'] as $attribute) { if (in_array('Payment', $attribute)) { $installment_value = explode(' ', $attribute['value']); if (strtolower($installment_value[0]) == 'installment') { $isWarning = true; } } } } } unset($each); } }*/ error_log(print_r($payloads, TRUE)); try { $redirUrl = Veritrans_VtWeb::getRedirectionUrl($payloads); error_log($redirUrl); if ($isWarning) { $this->_getCheckout()->setMsg($redirUrl); $this->_redirectUrl(Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_LINK) . 'vtwebio/paymentwarning/warning/message/1'); } else { if ($totalPrice < $threshold) { $this->_getCheckout()->setMsg($redirUrl); $this->_redirectUrl(Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_LINK) . 'vtwebio/paymentwarning/warning/message/2'); } else { $this->_redirectUrl($redirUrl); } } } catch (Exception $e) { error_log($e->getMessage()); Mage::log('error:' . print_r($e->getMessage(), true), null, 'vtwebio.log', true); } }
function pay() { $app_id = addslashes($_GET['app_id']); $app = new AppAccount(); $app->getByID($app_id); AppAccount::checkOwnership($app); $paket_id = addslashes($_GET['paket']); $paket = new Paket(); $paket->getByID($paket_id); global $db; //create new order $vpt = new VpTransaction(); $vpt->order_id = mt_rand() . $app->app_id . Account::getMyID(); $vpt->order_acc_id = Account::getMyID(); $vpt->order_app_id = $app->app_id; $vpt->order_date = leap_mysqldate(); $vpt->order_paket_id = $paket->paket_id; $vpt->order_value = $paket->paket_price; $vpt->order_status = 0; $vpt->order_status_from = 0; //hapus yang blom ada action apa2 $q = "DELETE FROM {$vpt->table_name} WHERE order_app_id = '{$app->app_id}' AND order_status = '0' AND order_status_from = '0'"; $db->query($q, 0); $arrVpt = $vpt->getWhere("order_app_id = '{$app->app_id}' AND order_status = '0' AND order_status_from != '0' "); if (count($arrVpt) > 0) { die("Please wait for the payment response"); } if ($vpt->save()) { // pr($paket); // pr($app); try { // Set our server key //live // Veritrans_Config::$serverKey = 'VT-server-3UfrS7tn0EDT99S2B18TnUh_'; //sandbox Veritrans_Config::$serverKey = $this->getKeyUsed(); } catch (Exception $e) { echo $e->getMessage(); } if ($this->isProd) { // Uncomment for production environment Veritrans_Config::$isProduction = true; // Uncomment to enable sanitization Veritrans_Config::$isSanitized = true; // Uncomment to enable 3D-Secure Veritrans_Config::$is3ds = true; } $acc = Account::getAccountObject(); $exp = explode(" ", $acc->admin_nama_depan); $billing_address = array('first_name' => $exp[0], 'last_name' => $exp[1], 'phone' => $acc->admin_phone, 'country_code' => 'IDN'); $customer_details = array('first_name' => $exp[0], 'last_name' => $exp[1], 'email' => $acc->admin_email, 'phone' => $acc->admin_phone, 'billing_address' => $billing_address); $item1_details = array('id' => $app->app_id, 'price' => $paket->paket_price, 'quantity' => 1, 'name' => $app->app_name . " " . $paket->paket_name . " 1 year"); $item_details = array($item1_details); $transaction = array('transaction_details' => array('order_id' => $vpt->order_id, 'gross_amount' => $paket->paket_price), 'customer_details' => $customer_details, 'item_details' => $item_details); try { // Redirect to Veritrans VTWeb page header('Location: ' . Veritrans_VtWeb::getRedirectionUrl($transaction)); } catch (Exception $e) { echo $e->getMessage(); if (strpos($e->getMessage(), "Access denied due to unauthorized")) { echo "<code>"; echo "<h4>Please set real server key from sandbox</h4>"; echo "In file: " . __FILE__; echo "<br>"; echo "<br>"; echo htmlspecialchars('Veritrans_Config::$serverKey = \'<your server key>\';'); die; } } } else { //if save die("Please contact admin"); } }