Пример #1
0
 function googlecheckout()
 {
     global $order, $messageStack;
     global $language;
     require_once DIR_FS_CATALOG . 'includes/languages/' . $language . '/googlecheckout.php';
     require DIR_FS_CATALOG . '/googlecheckout/library/shipping/merchant_calculated_methods.php';
     require DIR_FS_CATALOG . '/googlecheckout/library/shipping/carrier_calculated_methods.php';
     require_once DIR_FS_CATALOG . '/googlecheckout/library/configuration/google_configuration.php';
     require_once DIR_FS_CATALOG . '/googlecheckout/library/configuration/google_configuration_keys.php';
     require_once DIR_FS_CATALOG . '/googlecheckout/library/configuration/google_options.php';
     $config = new GoogleConfigurationKeys();
     $this->code = 'googlecheckout';
     $this->title = MODULE_PAYMENT_GOOGLECHECKOUT_TEXT_TITLE;
     $this->description = MODULE_PAYMENT_GOOGLECHECKOUT_TEXT_DESCRIPTION;
     $this->sort_order = MODULE_PAYMENT_GOOGLE_SORT_ORDER;
     $this->mode = MODULE_PAYMENT_GOOGLECHECKOUT_STATUS;
     if (MODULE_PAYMENT_GOOGLECHECKOUT_MODE == 'https://sandbox.google.com/checkout/') {
         $this->merchantid = trim(MODULE_PAYMENT_GOOGLECHECKOUT_MERCHANTID_SNDBOX);
         $this->merchantkey = trim(MODULE_PAYMENT_GOOGLECHECKOUT_MERCHANTKEY_SNDBOX);
     } else {
         $this->merchantid = trim(MODULE_PAYMENT_GOOGLECHECKOUT_MERCHANTID);
         $this->merchantkey = trim(MODULE_PAYMENT_GOOGLECHECKOUT_MERCHANTKEY);
     }
     $this->mode = MODULE_PAYMENT_GOOGLECHECKOUT_MODE;
     $this->enabled = MODULE_PAYMENT_GOOGLECHECKOUT_STATUS == 'True' ? true : false;
     if (gc_configuration_table_ready()) {
         $this->continue_url = gc_get_configuration_value($config->continueShoppingUrl());
     } else {
         // TODO(eddavisson)
     }
     // These are the flat shipping methods. Add any other that is not merchant calculated.
     $this->shipping_support = array("flat", "item", "itemint", "table");
     $this->schema_url = "http://checkout.google.com/schema/2";
     $this->base_url = $this->mode . "cws/v2/Merchant/" . $this->merchantid;
     $this->checkout_url = $this->base_url . "/checkout";
     $this->checkout_diagnose_url = $this->base_url . "/checkout/diagnose";
     $this->request_url = $this->base_url . "/request";
     $this->request_diagnose_url = $this->base_url . "/request/diagnose";
     $this->variant = 'text';
     // TODO(eddavisson): Revise this comment.
     // These are all the available methods for each shipping provider,
     // see that you must set flat methods too!}
     // CONSTRAINT: Method's names MUST be UNIQUE
     // Script to create new shipping methods
     // http://ur-site/googlecheckot/shipping_generator/
     // to manually edit, /googlecheckout/shipping/merchant_calculated_methods.php
     $this->mc_shipping_methods = $mc_shipping_methods;
     $this->mc_shipping_methods_names = $mc_shipping_methods_names;
     // Carrier Calculated shipping methods.
     $this->cc_shipping_methods = $cc_shipping_methods;
     $this->cc_shipping_methods_names = $cc_shipping_methods_names;
     $this->ignore_order_total = array('ot_subtotal', 'ot_shipping', 'ot_coupon', 'ot_tax', 'ot_gv', 'ot_total');
     $this->hash = NULL;
     $this->gc_order_states = array('100' => GOOGLECHECKOUT_CUSTOM_ORDER_STATE_NEW, '101' => GOOGLECHECKOUT_CUSTOM_ORDER_STATE_PROCESSING, '102' => GOOGLECHECKOUT_CUSTOM_ORDER_STATE_SHIPPED, '103' => GOOGLECHECKOUT_CUSTOM_ORDER_STATE_REFUNDED, '104' => GOOGLECHECKOUT_CUSTOM_ORDER_STATE_SHIPPED_REFUNDED, '105' => GOOGLECHECKOUT_CUSTOM_ORDER_STATE_CANCELED);
     // TODO(eddavisson): Factor out into function.
     $is_sandbox = MODULE_PAYMENT_GOOGLECHECKOUT_MODE == 'https://sandbox.google.com/checkout/';
     if (isset($messageStack) && $is_sandbox) {
         $messageStack->add_session(GOOGLECHECKOUT_STRING_WARN_USING_SANDBOX, 'warning');
     }
 }
Пример #2
0
    }
    if (function_exists('session_name')) {
        session_name($sess_name);
    }
}
include_once 'includes/application_top.php';
include_once 'includes/modules/payment/googlecheckout.php';
if (tep_session_is_registered('cart') && is_object($cart)) {
    $cart->restore_contents();
} else {
    $google_response->SendServerErrorStatus("Shopping cart not obtained from session.");
}
$google_checkout = new googlecheckout();
$google_response->SetMerchantAuthentication($google_checkout->merchantid, $google_checkout->merchantkey);
// Check if this is CGI-installed; if so .htaccess is needed.
$htaccess = gc_get_configuration_value($config->htaccessAuthMode()) == 'True';
if ($htaccess) {
    $google_response->HttpAuthentication();
}
switch ($root) {
    case "request-received":
        process_request_received_response($google_response);
        break;
    case "error":
        process_error_response($google_response);
        break;
    case "diagnosis":
        process_diagnosis_response($google_response);
        break;
    case "checkout-redirect":
        process_checkout_redirect($google_response);
Пример #3
0
function google_checkout_state_change($check_status, $status, $oID, $cust_notify, $notify_comments)
{
    global $db, $messageStack, $orders_statuses;
    define('API_CALLBACK_ERROR_LOG', DIR_FS_CATALOG . "/googlecheckout/logs/response_error.log");
    define('API_CALLBACK_MESSAGE_LOG', DIR_FS_CATALOG . "/googlecheckout/logs/response_message.log");
    include_once DIR_FS_CATALOG . '/includes/modules/payment/googlecheckout.php';
    include_once DIR_FS_CATALOG . '/googlecheckout/library/googlerequest.php';
    require_once DIR_FS_CATALOG . '/googlecheckout/library/configuration/google_configuration.php';
    require_once DIR_FS_CATALOG . '/googlecheckout/library/configuration/google_configuration_keys.php';
    $config = new GoogleConfigurationKeys();
    $googlecheckout = new googlecheckout();
    $google_request = new GoogleRequest($googlecheckout->merchantid, $googlecheckout->merchantkey, MODULE_PAYMENT_GOOGLECHECKOUT_MODE == 'https://sandbox.google.com/checkout/' ? "sandbox" : "production", DEFAULT_CURRENCY);
    $google_request->SetLogFiles(API_CALLBACK_ERROR_LOG, API_CALLBACK_MESSAGE_LOG);
    $google_answer = tep_db_fetch_array(tep_db_query("SELECT go.google_order_number, go.order_amount, o.customers_email_address, gc.buyer_id, o.customers_id\n                                  FROM " . $googlecheckout->table_order . " go \n                                  inner join " . TABLE_ORDERS . " o on go.orders_id = o.orders_id\n                                  inner join " . $googlecheckout->table_name . " gc on gc.customers_id = o.customers_id\n                                  WHERE go.orders_id = '" . (int) $oID . "'\n                                  group by o.customers_id order by o.orders_id desc"));
    $google_order = $google_answer['google_order_number'];
    $amount = $google_answer['order_amount'];
    // If status update is from Google New -> Google Processing on the Admin UI
    // this invokes the processing-order and charge-order commands
    // 1->Google New, 2-> Google Processing
    if ($check_status['orders_status'] == GC_STATE_NEW && $status == GC_STATE_PROCESSING && $google_order != '') {
        list($curl_status, ) = $google_request->SendChargeOrder($google_order, $amount);
        if ($curl_status != 200) {
            $messageStack->add_session(GOOGLECHECKOUT_ERR_SEND_CHARGE_ORDER, 'error');
        } else {
            $messageStack->add_session(GOOGLECHECKOUT_SUCCESS_SEND_CHARGE_ORDER, 'success');
        }
        list($curl_status, ) = $google_request->SendProcessOrder($google_order);
        if ($curl_status != 200) {
            $messageStack->add_session(GOOGLECHECKOUT_ERR_SEND_PROCESS_ORDER, 'error');
        } else {
            $messageStack->add_session(GOOGLECHECKOUT_SUCCESS_SEND_PROCESS_ORDER, 'success');
        }
    } else {
        if (($check_status['orders_status'] == GC_STATE_PROCESSING || $check_status['orders_status'] == GC_STATE_REFUNDED) && ($status == GC_STATE_SHIPPED || $status == GC_STATE_SHIPPED_REFUNDED) && $google_order != '') {
            $carrier = $tracking_no = "";
            // Add tracking Data
            if (isset($_POST['carrier_select']) && $_POST['carrier_select'] != 'select' && isset($_POST['tracking_number']) && !empty($_POST['tracking_number'])) {
                $carrier = $_POST['carrier_select'];
                $tracking_no = $_POST['tracking_number'];
                $comments = GOOGLECHECKOUT_STATE_STRING_TRACKING . "\n" . GOOGLECHECKOUT_STATE_STRING_TRACKING_CARRIER . $_POST['carrier_select'] . "\n" . GOOGLECHECKOUT_STATE_STRING_TRACKING_NUMBER . $_POST['tracking_number'] . "";
                tep_db_query("insert into " . TABLE_ORDERS_STATUS_HISTORY . "\n                  (orders_id, orders_status_id, date_added, customer_notified, comments)\n                  values ('" . (int) $oID . "',\n                  '" . tep_db_input($check_status['orders_status'] == GC_STATE_REFUNDED ? GC_STATE_SHIPPED_REFUNDED : GC_STATE_SHIPPED) . "',\n                  now(),\n                  '" . tep_db_input($cust_notify) . "',\n                  '" . tep_db_input($comments) . "')");
            }
            list($curl_status, ) = $google_request->SendDeliverOrder($google_order, $carrier, $tracking_no, $cust_notify == 1 ? "true" : "false");
            if ($curl_status != 200) {
                $messageStack->add_session(GOOGLECHECKOUT_ERR_SEND_DELIVER_ORDER, 'error');
            } else {
                $messageStack->add_session(GOOGLECHECKOUT_SUCCESS_SEND_DELIVER_ORDER, 'success');
            }
            list($curl_status, ) = $google_request->SendArchiveOrder($google_order);
            if ($curl_status != 200) {
                $messageStack->add_session(GOOGLECHECKOUT_ERR_SEND_ARCHIVE_ORDER, 'error');
            } else {
                $messageStack->add_session(GOOGLECHECKOUT_SUCCESS_SEND_ARCHIVE_ORDER, 'success');
            }
        } else {
            if ($check_status['orders_status'] != GC_STATE_CANCELED && $status == GC_STATE_CANCELED && $google_order != '') {
                if ($check_status['orders_status'] != GC_STATE_NEW) {
                    list($curl_status, ) = $google_request->SendRefundOrder($google_order, 0, GOOGLECHECKOUT_STATE_STRING_ORDER_CANCELED);
                    if ($curl_status != 200) {
                        $messageStack->add_session(GOOGLECHECKOUT_ERR_SEND_REFUND_ORDER, 'error');
                    } else {
                        $messageStack->add_session(GOOGLECHECKOUT_SUCCESS_SEND_REFUND_ORDER, 'success');
                    }
                } else {
                    // Tell google witch is the OSC's internal order Number
                    list($curl_status, ) = $google_request->SendMerchantOrderNumber($google_order, $oID);
                    if ($curl_status != 200) {
                        $messageStack->add_session(GOOGLECHECKOUT_ERR_SEND_MERCHANT_ORDER_NUMBER, 'error');
                    } else {
                        $messageStack->add_session(GOOGLECHECKOUT_SUCCESS_SEND_MERCHANT_ORDER_NUMBER, 'success');
                    }
                }
                // Is the order is not archive, I do it
                if ($check_status['orders_status'] != GC_STATE_SHIPPED && $check_status['orders_status'] != GC_STATE_SHIPPED_REFUNDED) {
                    list($curl_status, ) = $google_request->SendArchiveOrder($google_order);
                    if ($curl_status != 200) {
                        $messageStack->add_session(GOOGLECHECKOUT_ERR_SEND_ARCHIVE_ORDER, 'error');
                    } else {
                        $messageStack->add_session(GOOGLECHECKOUT_SUCCESS_SEND_ARCHIVE_ORDER, 'success');
                    }
                }
                // Cancel the order
                list($curl_status, ) = $google_request->SendCancelOrder($google_order, GOOGLECHECKOUT_STATE_STRING_ORDER_CANCELED, $notify_comments);
                if ($curl_status != 200) {
                    $messageStack->add_session(GOOGLECHECKOUT_ERR_SEND_CANCEL_ORDER, 'error');
                } else {
                    $messageStack->add_session(GOOGLECHECKOUT_SUCCESS_SEND_CANCEL_ORDER, 'success');
                }
            } else {
                if ($google_order != '' && $check_status['orders_status'] != $status) {
                    $statuses = array();
                    foreach ($orders_statuses as $status_array) {
                        $statuses[$status_array['id']] = $status_array['text'];
                    }
                    $messageStack->add_session(sprintf(GOOGLECHECKOUT_ERR_INVALID_STATE_TRANSITION, $statuses[$check_status['orders_status']], $statuses[$status], $statuses[$check_status['orders_status']]), 'error');
                }
            }
        }
    }
    // Send Buyer's message
    if ($cust_notify == 1 && isset($notify_comments) && !empty($notify_comments)) {
        $cust_notify_ok = '0';
        $use_cart_messaging = gc_get_configuration_value($config->useCartMessaging()) == 'True';
        if (!(strlen(htmlentities(strip_tags($notify_comments))) > GOOGLE_MESSAGE_LENGTH && $use_cart_messaging)) {
            list($curl_status, ) = $google_request->sendBuyerMessage($google_order, $notify_comments, "true");
            if ($curl_status != 200) {
                $messageStack->add_session(GOOGLECHECKOUT_ERR_SEND_MESSAGE_ORDER, 'error');
                $cust_notify_ok = '0';
            } else {
                $messageStack->add_session(GOOGLECHECKOUT_SUCCESS_SEND_MESSAGE_ORDER, 'success');
                $cust_notify_ok = '1';
            }
            if (strlen(htmlentities(strip_tags($notify_comments))) > GOOGLE_MESSAGE_LENGTH) {
                $messageStack->add_session(sprintf(GOOGLECHECKOUT_WARNING_CHUNK_MESSAGE, GOOGLE_MESSAGE_LENGTH), 'warning');
            }
        }
        // Cust notified
        return $cust_notify_ok;
    }
    // Cust notified
    return '0';
}
Пример #4
0
 */
chdir("./..");
require_once DIR_WS_LANGUAGES . $language . '/googlecheckout.php';
require_once DIR_FS_CATALOG . '/googlecheckout/library/configuration/google_configuration.php';
require_once DIR_FS_CATALOG . '/googlecheckout/library/configuration/google_configuration_keys.php';
$config = new GoogleConfigurationKeys();
$payment_value = MODULE_PAYMENT_GOOGLECHECKOUT_TEXT_TITLE;
$num_rows = tep_db_num_rows(tep_db_query("select google_order_number from google_orders where orders_id= " . (int) $oID));
if ($num_rows != 0) {
    $customer_notified = google_checkout_state_change($check_status, $status, $oID, @$_POST['notify'] == 'on' ? 1 : 0, @$_POST['notify_comments'] == 'on' ? $comments : '');
}
$customer_notified = isset($customer_notified) ? $customer_notified : '0';
if (isset($_POST['notify']) && $_POST['notify'] == 'on') {
    $notify_comments = '';
    if (isset($HTTP_POST_VARS['notify_comments']) && $HTTP_POST_VARS['notify_comments'] == 'on') {
        $notify_comments = sprintf(EMAIL_TEXT_COMMENTS_UPDATE, $comments) . "\n\n";
    }
    $force_email = false;
    $use_cart_messaging = gc_get_configuration_value($config->useCartMessaging()) == 'True';
    if ($num_rows != 0 && (strlen(htmlentities(strip_tags($notify_comments))) > GOOGLE_MESSAGE_LENGTH && $user_cart_messaging)) {
        $force_email = true;
        $messageStack->add_session(GOOGLECHECKOUT_WARNING_SYSTEM_EMAIL_SENT, 'warning');
    }
    if ($num_rows == 0 || $force_email) {
        // send emails, not a google order or configured to use both messaging systems
        $email = STORE_NAME . "\n" . EMAIL_SEPARATOR . "\n" . EMAIL_TEXT_ORDER_NUMBER . ' ' . $oID . "\n" . EMAIL_TEXT_INVOICE_URL . ' ' . tep_catalog_href_link(FILENAME_CATALOG_ACCOUNT_HISTORY_INFO, 'order_id=' . $oID, 'SSL') . "\n" . EMAIL_TEXT_DATE_ORDERED . ' ' . tep_date_long($check_status['date_purchased']) . "\n\n" . $notify_comments . sprintf(EMAIL_TEXT_STATUS_UPDATE, $orders_status_array[$status]);
        tep_mail($check_status['customers_name'], $check_status['customers_email_address'], EMAIL_TEXT_SUBJECT, $email, STORE_OWNER, STORE_OWNER_EMAIL_ADDRESS);
        $customer_notified = '1';
        // send extra emails
    }
}