function fn_generate_rss($items_data, $additional_data = array()) { if (empty($additional_data['title']) || empty($additional_data['description']) || empty($additional_data['link'])) { return ''; } $default_additional_data = array('copyright' => fn_date_format(time(), '%Y') != Registry::get('settings.Company.company_start_year') ? Registry::get('settings.Company.company_start_year') . ' - ' . fn_date_format(time(), '%Y') . ' ' . Registry::get('settings.Company.company_name') : '', 'language' => CART_LANGUAGE, 'managingEditor' => Registry::get('settings.rss_feed.general.managing_editor'), 'ttl' => 30, 'image' => fn_get_company_logo_url($additional_data), 'lastBuildDate' => time()); $channel_data = array_merge($default_additional_data, $additional_data); $channel_data['lastBuildDate'] = fn_format_rss_time($channel_data['lastBuildDate']); $rss = '<?xml version="1.0" encoding="utf-8" ?>' . "\n"; $rss .= '<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">' . "\n"; $rss .= '<channel>' . "\n"; $rss .= '<atom:link href="' . Registry::get('config.current_location') . '/' . urlencode(Registry::get('config.current_url')) . '" rel="self" type="application/rss+xml" />' . "\n"; $rss .= fn_array_to_xml($channel_data) . "\n"; if (!empty($items_data)) { foreach ($items_data as $item) { $rss .= '<item>' . "\n"; $rss .= fn_array_to_xml($item); $rss .= '</item>' . "\n"; } } else { $rss .= '<item>' . "\n"; $rss .= '<title>' . __('no_data_found', '', $channel_data['language']) . '</title>'; $rss .= '<description>' . __('no_data_found', '', $channel_data['language']) . '</description>'; $rss .= '</item>' . "\n"; } $rss .= '</channel>' . "\n"; $rss .= '</rss>'; return $rss; }
function fn_array_to_xml(&$array, $name) { $xml = "<{$name}>"; $subname = 'item'; foreach ($array as $k => $v) { if (!is_array($v)) { $param = is_int($k) ? $subname : $k; $id = is_int($k) ? " id=\"{$k}\"" : ''; $xml .= "<{$param}{$id}>"; $xml .= htmlspecialchars($v); $xml .= "</{$param}>"; } else { $param = is_int($k) ? $subname : $k; $xml .= fn_array_to_xml($v, $param); } } $xml .= "</{$name}>\n"; return $xml; }
} else { $tax_table_id = 'tax_default'; } $item = array('CallbackOrderItemId' => $sku, 'TaxTableId' => $tax_table_id, 'ShippingMethodIds' => $items_shipping); $callback_response['Response']['CallbackOrders']['CallbackOrder']['CallbackOrderItems']['CallbackOrderItem'][] = $item; } $callback_response['CartPromotionId'] = 'cart-discount'; // Update the tax info if ($tax_calculation_type == 'default' && $tax_subtotal > 0) { $tax = array('SKU' => 'taxes', 'MerchantId' => $processor_data['processor_params']['merchant_id'], 'Title' => substr($tax_description, 0, 250), 'Price' => array('Amount' => fn_format_price($tax_subtotal), 'CurrencyCode' => $processor_data['processor_params']['currency']), 'Quantity' => 1, 'UpdateType' => 'REMOVE'); $callback_response['Response']['CallbackOrders']['CallbackOrder']['UpdatedCartItems']['UpdatedCartItem'][] = $tax; $tax = array('SKU' => 'taxes', 'MerchantId' => $processor_data['processor_params']['merchant_id'], 'Title' => __('taxes') . ': ' . substr($tax_description, 0, 240), 'Price' => array('Amount' => fn_format_price($tax_subtotal), 'CurrencyCode' => $processor_data['processor_params']['currency']), 'Quantity' => 1, 'ShippingMethodIds' => $items_shipping, 'UpdateType' => 'ADD'); $callback_response['Response']['CallbackOrders']['CallbackOrder']['UpdatedCartItems']['UpdatedCartItem'][] = $tax; } // Generate the full XML response $callback_response = '<?xml version="1.0" encoding="UTF-8"?>' . '<OrderCalculationsResponse xmlns="http://payments.amazon.com/checkout/2009-05-15/">' . fn_array_to_xml($callback_response) . '</OrderCalculationsResponse>'; $_return = 'order-calculations-response=' . urlencode($callback_response); if ($processor_data['processor_params']['aws_access_public_key']) { $sign = urlencode(fn_amazon_calculate_signature($callback_response, $processor_data['processor_params']['aws_secret_access_key'])); $aws_access_key = urlencode($processor_data['processor_params']['aws_access_public_key']); $_return .= '&Signature=' . $sign; $_return .= '&aws-access-key-id=' . $aws_access_key; } echo $_return; exit; } elseif ($message_recognizer == 'NewOrderNotification') { // Order was placed by Amazon checkout. We need to proceed the callback. list($amazon_sess_id, $payment_id) = explode(';', base64_decode((string) $xml->ProcessedOrder->ProcessedOrderItems->ProcessedOrderItem->CartCustomData->ClientRequestId)); $processor_data = fn_get_payment_method_data($payment_id); // If we use the signed cart, validate the request if (!fn_amazon_validate_request($processor_data, $_POST)) {
public static function registerLicense($license_data) { $request = array('Request@action=registerLicense@api=2' => array('product_type' => PRODUCT_EDITION, 'domain' => Registry::get('config.http_host'), 'first_name' => $license_data['first_name'], 'last_name' => $license_data['last_name'], 'email' => $license_data['email'])); $request = '<?xml version="1.0" encoding="UTF-8"?>' . fn_array_to_xml($request); $data = Http::get(Registry::get('config.resources.updates_server') . '/index.php?dispatch=licenses_remote.add', array('request' => $request), array('timeout' => 10)); if (empty($data)) { $data = fn_get_contents(Registry::get('config.resources.updates_server') . '/index.php?dispatch=licenses_remote.create&request=' . urlencode($request)); } $result = $messages = $license = ''; if (!empty($data)) { // Check if we can parse server response if (strpos($data, '<?xml') !== false) { $xml = simplexml_load_string($data); $result = (string) $xml->Result; $messages = $xml->Messages; $license = (array) $xml->License; } } self::processMessages($messages, true); return array($result, $license, $messages); }
$pp_response["reason_text"] = __('text_transaction_cancelled'); if (fn_check_payment_script('piraeus.php', $order_id)) { fn_finish_payment($order_id, $pp_response, false); } fn_order_placement_routines('route', $order_id); } } else { $ticketing_data = array('AcquirerId' => $processor_data['processor_params']['acquirerid'], 'MerchantId' => $processor_data['processor_params']['merchantid'], 'PosId' => $processor_data['processor_params']['posid'], 'Username' => $processor_data['processor_params']['username'], 'Password' => md5($processor_data['processor_params']['password']), 'RequestType' => $processor_data['processor_params']['requesttype'], 'CurrencyCode' => $processor_data['processor_params']['currencycode'], 'MerchantReference' => $order_info['repaid'] ? $order_id . '_' . $order_info['repaid'] : $order_id, 'Amount' => $order_info['total'], 'Installments' => 0, 'Bnpl' => 0, 'ExpirePreauth' => $processor_data['processor_params']['requesttype'] == '00' ? $processor_data['processor_params']['expirepreauth'] : '0', 'Parameters' => ''); $str = <<<EOT <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <IssueNewTicket xmlns="http://piraeusbank.gr/paycenter/redirection"> <Request> EOT; $str .= fn_array_to_xml($ticketing_data); $str .= <<<EOT </Request> </IssueNewTicket> </soap:Body> </soap:Envelope> EOT; $str = str_replace(array("\t", "\n", "\r"), '', $str); $response_data = Http::post("https://paycenter.piraeusbank.gr/services/tickets/issuer.asmx", $str, array('headers' => array('Content-type: text/xml; charset=utf-8', 'SOAPAction: http://piraeusbank.gr/paycenter/redirection/IssueNewTicket'))); $resultcode = true; $pp_response = array(); if (strpos($response_data, '<ResultCode') !== false) { if (preg_match('!<ResultCode[^>]*>([^>]+)</ResultCode>!', $response_data, $matches)) { $resultcode = $matches[1]; } }
function fn_array_to_xml($data) { if (!is_array($data)) { return fn_html_escape($data); } $return = ''; foreach ($data as $key => $value) { $attr = ''; if (is_array($value) && is_numeric(key($value))) { foreach ($value as $k => $v) { $arr = array($key => $v); $return .= fn_array_to_xml($arr); unset($value[$k]); } unset($data[$key]); continue; } if (strpos($key, '@') !== false) { $data = explode('@', $key); $key = $data[0]; unset($data[0]); if (count($data) > 0) { foreach ($data as $prop) { if (strpos($prop, '=') !== false) { $prop = explode('=', $prop); $attr .= ' ' . $prop[0] . '="' . $prop[1] . '"'; } else { $attr .= ' ' . $prop . '=""'; } } } } $return .= '<' . $key . $attr . '>' . fn_array_to_xml($value) . '</' . $key . '>'; } return $return; }
if (!empty($product['product_options'])) { $_options = fn_get_selected_product_options_info($cart['products'][$key]['product_options']); foreach ($_options as $opt) { $item_options .= $opt['option_name'] . ': ' . $opt['variant_name'] . '; '; } $item_options = ' [' . trim($item_options, '; ') . ']'; } $amazon_order['Cart']['Items']['Item'][] = array('SKU' => empty($product['product_code']) ? 'pid_' . $product['product_id'] : substr(strip_tags($product['product_code']), 0, 250), 'MerchantId' => $processor_data['processor_params']['merchant_id'], 'Title' => substr(strip_tags($product['product']), 0, 250) . $item_options, 'Price' => array('Amount' => fn_format_price($product['price']), 'CurrencyCode' => $_currency), 'Quantity' => $product['amount'], 'ItemCustomData' => array('CartID' => $key)); } $amazon_order['Cart']['CartCustomData'] = array('ClientRequestId' => base64_encode(Tygh::$app['session']->getID() . ';' . $_payment_id)); // Activate the Amazon callbacks functionality $amazon_order['ReturnUrl'] = Registry::get('config.http_location') . '/' . Registry::get('config.customer_index') . '?dispatch=payment_notification.placement&payment=amazon_checkout'; $amazon_order['CancelUrl'] = fn_url('checkout.cart'); $amazon_order['OrderCalculationCallbacks'] = array('CalculateTaxRates' => 'true', 'CalculatePromotions' => 'true', 'CalculateShippingRates' => 'true', 'OrderCallbackEndpoint' => Registry::get('config.origin_http_location') . '/app/payments/amazon_checkout.php', 'ProcessOrderOnCallbackFailure' => $processor_data['processor_params']['process_on_failure'] == 'Y' ? 'true' : 'false'); $amazon_order['DisablePromotionCode'] = 'true'; $amazon_cart = '<?xml version="1.0" encoding="UTF-8"?>' . '<Order xmlns="http://payments.amazon.com/checkout/2009-05-15/">' . fn_array_to_xml($amazon_order) . '</Order>'; // Calculate cart signature if (!empty($processor_data['processor_params']['aws_access_public_key'])) { $sign = fn_amazon_calculate_signature($amazon_cart, $processor_data['processor_params']['aws_secret_access_key']); $sign = ';signature:' . $sign . ';aws-access-key-id:' . $processor_data['processor_params']['aws_access_public_key']; $order_type = 'merchant-signed-order/aws-accesskey/1'; } else { $sign = ''; $order_type = 'unsigned-order'; } $base64cart = base64_encode($amazon_cart); // The necessary Amazon scripts if ($processor_data['processor_params']['test'] == 'Y') { if ($processor_data['processor_params']['currency'] == 'USD') { $scripts = '<script type="text/javascript" src="https://static-na.payments-amazon.com/cba/js/us/sandbox/PaymentWidgets.js"></script>'; } elseif ($processor_data['processor_params']['currency'] == 'EUR') {
function fn_yml_array_to_yml($data, $level = 0) { if (!is_array($data)) { return $data; } $return = ''; foreach ($data as $key => $value) { $attr = ''; if (is_array($value) && is_numeric(key($value))) { foreach ($value as $k => $v) { $arr = array($key => $v); $return .= fn_array_to_xml($arr); unset($value[$k]); } unset($data[$key]); continue; } if (strpos($key, '@') !== false) { $data = explode('@', $key); $key = $data[0]; unset($data[0]); if (count($data) > 0) { foreach ($data as $prop) { if (strpos($prop, '=') !== false) { $prop = explode('=', $prop); $attr .= ' ' . $prop[0] . '="' . $prop[1] . '"'; } else { $attr .= ' ' . $prop . '=""'; } } } } if (strpos($key, '+') !== false) { list($key) = explode('+', $key, 2); } $tab = str_repeat(' ', $level); if (empty($value)) { $return .= $tab . "<" . $key . $attr . "/>\n"; } elseif (is_array($value)) { $return .= $tab . "<" . $key . $attr . ">\n" . fn_yml_array_to_yml($value, $level + 1) . '</' . $key . ">\n"; } else { $return .= $tab . "<" . $key . $attr . '>' . fn_yml_array_to_yml($value, $level + 1) . '</' . $key . ">\n"; } } return $return; }
foreach ($order_info['products'] as $v) { $payment_description .= preg_replace('/[^\\w\\s]/i', '', $v['product']) . "; amount=" . $v['amount'] . ";"; } } // Gift Certificates if (!empty($order_info['gift_certificates'])) { foreach ($order_info['gift_certificates'] as $v) { $payment_description .= $v['gift_cert_code'] . "; amount=1;"; } } $post = array('ewaygateway' => array('ewayCustomerID' => $processor_data['processor_params']['client_id'], 'ewayTotalAmount' => 100 * $order_info['total'], 'ewayCustomerFirstName' => $order_info['b_firstname'], 'ewayCustomerLastName' => $order_info['b_lastname'], 'ewayCustomerEmail' => $order_info['email'], 'ewayCustomerAddress' => $order_info['b_address'], 'ewayCustomerPostcode' => $order_info['b_zipcode'], 'ewayCustomerInvoiceDescription' => $payment_description, 'ewayCustomerInvoiceRef' => $_order_id, 'ewayCardHoldersName' => $order_info['payment_info']['cardholder_name'], 'ewayCardNumber' => $order_info['payment_info']['card_number'], 'ewayCardExpiryMonth' => $order_info['payment_info']['expiry_month'], 'ewayCardExpiryYear' => $order_info['payment_info']['expiry_year'], 'ewayTrxnNumber' => '', 'ewayOption1' => '', 'ewayOption2' => '', 'ewayOption3' => $test_mode)); if ($processor_data['processor_params']['include_cvn'] == 'true' && !empty($order_info['payment_info']['cvv2'])) { $post['ewaygateway']['ewayCVN'] = $order_info['payment_info']['cvv2']; } Registry::set('log_cut_data', array('ewayCardNumber', 'ewayCardExpiryMonth', 'ewayCardExpiryYear')); $return = Http::post("https://www.eway.com.au/" . $request_script, fn_array_to_xml($post), array('headers' => array('Content-type: text/xml'))); preg_match("/<ewayTrxnStatus>(.*)<\\/ewayTrxnStatus>/", $return, $result); preg_match("/<ewayReturnAmount>(.*)<\\/ewayReturnAmount>/", $return, $amount); if ($result[1] == "True" && fn_format_price($amount[1]) == fn_format_price($order_info['total'] * 100)) { $pp_response['order_status'] = 'P'; preg_match("/<ewayAuthCode>(.*)<\\/ewayAuthCode>/", $return, $authno); $pp_response["reason_text"] = "AuthNo: " . $authno[1]; } else { $pp_response['order_status'] = 'F'; preg_match("/<ewayTrxnError>(.*)<\\/ewayTrxnError>/", $return, $error); if (!empty($error[1])) { $pp_response["reason_text"] = "Error:" . $error[1]; } } preg_match("/<ewayTrxnNumber>(.*)<\\/ewayTrxnNumber>/", $return, $transaction_id); if (!empty($transaction_id[1])) {
$xml .= fn_array_to_xml($products, 'products'); } // // View product details // if ($mode == 'get_product') { $_REQUEST['product_id'] = empty($_REQUEST['product_id']) ? 0 : $_REQUEST['product_id']; $product = fn_get_product_data($_REQUEST['product_id'], $auth, CART_LANGUAGE); if (!empty($product)) { if (!empty($_REQUEST['combination'])) { $product['combination'] = $combination; } fn_gather_additional_product_data($product, true, true); $xml .= fn_array_to_xml($product, 'product_data'); } } if ($mode == 'get_categories') { $_REQUEST['category_id'] = empty($_REQUEST['category_id']) ? 0 : $_REQUEST['category_id']; $params = array('category_id' => $_REQUEST['category_id'], 'visible' => false, 'plain' => !empty($_REQUEST['format']) && $_REQUEST['format'] == 'plain' ? true : false); list($categories, ) = fn_get_categories($params, CART_LANGUAGE); $xml .= fn_array_to_xml($categories, 'categories'); } if ($mode == 'get_category') { $_REQUEST['category_id'] = empty($_REQUEST['category_id']) ? 0 : $_REQUEST['category_id']; $category_data = fn_get_category_data($_REQUEST['category_id'], CART_LANGUAGE, '*'); if (!empty($category_data)) { $xml .= fn_array_to_xml($category_data, 'category_data'); } } echo $xml; exit;