} else { $_ph_a = substr($_phone, 0, 3); $_ph_b = substr($_phone, 3); } // US states if ($order_info['b_country'] == 'US') { $_b_state = $order_info['b_state']; // all other states } else { $_b_state = fn_get_state_name($order_info['b_state'], $order_info['b_country']); } $return_url = fn_url("payment_notification.return?payment=paypal&order_id={$order_id}", AREA, 'current'); $cancel_url = fn_url("payment_notification.cancel?payment=paypal&order_id={$order_id}", AREA, 'current'); $notify_url = fn_url("payment_notification.paypal_ipn", AREA, 'current'); $post_data = array('charset' => 'utf-8', 'cmd' => '_cart', 'custom' => $order_id, 'invoice' => $paypal_order_id, 'redirect_cmd' => '_xclick', 'rm' => 2, 'email' => $order_info['email'], 'first_name' => $order_info['b_firstname'], 'last_name' => $order_info['b_lastname'], 'address1' => $order_info['b_address'], 'address2' => $order_info['b_address_2'], 'country' => $order_info['b_country'], 'city' => $order_info['b_city'], 'state' => $_b_state, 'zip' => $order_info['b_zipcode'], 'day_phone_a' => $_ph_a, 'day_phone_b' => $_ph_b, 'day_phone_c' => $_ph_c, 'night_phone_a' => $_ph_a, 'night_phone_b' => $_ph_b, 'night_phone_c' => $_ph_c, 'business' => $paypal_account, 'item_name' => $paypal_item_name, 'amount' => $paypal_total, 'upload' => '1', 'currency_code' => $paypal_currency, 'return' => $return_url, 'cancel_return' => $cancel_url, 'notify_url' => $notify_url, 'shipping_1' => $paypal_shipping, 'bn' => 'ST_ShoppingCart_Upload_US'); list($products, $product_count) = fn_pp_standart_prepare_products($order_info, $paypal_currency); $post_data = array_merge($post_data, $products); if ($order_info['status'] == STATUS_INCOMPLETED_ORDER) { fn_change_order_status($order_id, 'O', '', false); } if (fn_allowed_for('MULTIVENDOR')) { if ($order_info['status'] == STATUS_PARENT_ORDER) { $child_orders = db_get_hash_single_array("SELECT order_id, status FROM ?:orders WHERE parent_order_id = ?i", array('order_id', 'status'), $order_id); foreach ($child_orders as $order_id => $order_status) { if ($order_status == STATUS_INCOMPLETED_ORDER) { fn_change_order_status($order_id, 'O', '', false); } } } } fn_create_payment_form($paypal_url, $post_data, 'PayPal server', false);
function fn_validate_paypal_order_info($data, $order_info) { if (empty($data) || empty($order_info)) { return false; } $errors = array(); if (!isset($data['num_cart_items']) || count($order_info['products']) != $data['num_cart_items']) { if (isset($order_info['payment_method']) && isset($order_info['payment_method']['processor_id']) && 'paypal.php' == db_get_field("SELECT processor_script FROM ?:payment_processors WHERE processor_id = ?i", $order_info['payment_method']['processor_id'])) { list(, $count) = fn_pp_standart_prepare_products($order_info); if ($count != $data['num_cart_items']) { $errors[] = __('pp_product_count_is_incorrect'); } } } if (!isset($order_info['payment_method']['processor_params']) || !isset($order_info['payment_method']['processor_params']['currency']) || !isset($data['mc_currency']) || $data['mc_currency'] != $order_info['payment_method']['processor_params']['currency']) { //if cureency defined in paypal settings do not match currency in IPN $errors[] = __('pp_currency_is_incorrect'); } elseif (!isset($data['mc_gross']) || !isset($order_info['total']) || (double) $data['mc_gross'] != (double) $order_info['total']) { //if currency is ok, check totals $errors[] = __('pp_total_is_incorrect'); } if (!empty($errors)) { $pp_response['ipn_errors'] = implode('; ', $errors); fn_update_order_payment_info($order_info['order_id'], $pp_response); return false; } return true; }