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'; }
/** * Process an <order-state-change-notification>. */ function process_order_state_change_notification($google_response, $google_checkout) { list($root, $gc_data) = $google_response->GetParsedXML(); $new_financial_state = $gc_data[$root]['new-financial-order-state']['VALUE']; $new_fulfillment_state = $gc_data[$root]['new-fulfillment-order-state']['VALUE']; $previous_financial_state = $gc_data[$root]['previous-financial-order-state']['VALUE']; $previous_fulfillment_state = $gc_data[$root]['previous-fulfillment-order-state']['VALUE']; $google_order_number = $gc_data[$root]['google-order-number']['VALUE']; $google_order = tep_db_fetch_array(tep_db_query("select orders_id from " . $google_checkout->table_order . " where google_order_number = '" . gc_make_sql_string($google_order_number) . "'")); // Handle change in financial state. $do_financial_state_update = false; if ($previous_financial_state != $new_financial_state) { switch ($new_financial_state) { case 'REVIEWING': break; case 'CHARGEABLE': $do_financial_state_update = true; $orders_status_id = GC_STATE_NEW; $comments = GOOGLECHECKOUT_STATE_STRING_TIME . $gc_data[$root]['timestamp']['VALUE'] . "\n" . GOOGLECHECKOUT_STATE_STRING_NEW_STATE . $new_financial_state . "\n" . GOOGLECHECKOUT_STATE_STRING_ORDER_READY_CHARGE; $customer_notified = 0; break; case 'CHARGING': break; case 'CHARGED': $do_financial_state_update = true; $orders_status_id = GC_STATE_PROCESSING; $comments = GOOGLECHECKOUT_STATE_STRING_TIME . $gc_data[$root]['timestamp']['VALUE'] . "\n" . GOOGLECHECKOUT_STATE_STRING_NEW_STATE . $new_financial_state; $customer_notified = 0; break; case 'PAYMENT-DECLINED': $do_financial_state_update = true; $orders_status_id = GC_STATE_NEW; $comments = GOOGLECHECKOUT_STATE_STRING_TIME . $gc_data[$root]['timestamp']['VALUE'] . "\n" . GOOGLECHECKOUT_STATE_STRING_NEW_STATE . $new_financial_state . GOOGLECHECKOUT_STATE_STRING_PAYMENT_DECLINED; $customer_notified = 1; break; case 'CANCELLED': $do_financial_state_update = true; $orders_status_id = GC_STATE_CANCELED; $customer_notified = 1; $comments = GOOGLECHECKOUT_STATE_STRING_TIME . $gc_data[$root]['timestamp']['VALUE'] . "\n" . GOOGLECHECKOUT_STATE_STRING_NEW_STATE . $new_financial_state . "\n" . GOOGLECHECKOUT_STATE_STRING_ORDER_CANCELED; break; case 'CANCELLED_BY_GOOGLE': $do_financial_state_update = true; $orders_status_id = GC_STATE_CANCELED; $comments = GOOGLECHECKOUT_STATE_STRING_TIME . $gc_data[$root]['timestamp']['VALUE'] . "\n" . GOOGLECHECKOUT_STATE_STRING_NEW_STATE . $new_financial_state . "\n" . GOOGLECHECKOUT_STATE_STRING_ORDER_CANCELED_BY_GOOG; $customer_notified = 1; break; default: break; } } // Change financial state in table if required. if ($do_financial_state_update) { $sql_data_array = array('orders_id' => $google_order['orders_id'], 'orders_status_id' => $orders_status_id, 'date_added' => 'now()', 'customer_notified' => $customer_notified, 'comments' => $comments); tep_db_perform(TABLE_ORDERS_STATUS_HISTORY, $sql_data_array); tep_db_query("update " . TABLE_ORDERS . " set orders_status = '" . $orders_status_id . "' where orders_id = '" . gc_make_sql_integer($google_order['orders_id']) . "'"); } // Handle change in fulfillment state. $do_fulfillment_state_update = false; if ($previous_fulfillment_state != $new_fulfillment_state) { switch ($new_fulfillment_state) { case 'NEW': break; case 'PROCESSING': $google_request = new GoogleRequest($google_checkout->merchantid, $google_checkout->merchantkey, sandbox_or_prod(), 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 " . $google_checkout->table_order . " go\n inner join " . TABLE_ORDERS . " o on go.orders_id = o.orders_id\n inner join " . $google_checkout->table_name . " gc on gc.customers_id = o.customers_id\n WHERE go.orders_id = '" . (int) $google_order['orders_id'] . "'\n group by o.customers_id order by o.orders_id desc")); $first_order = tep_db_fetch_array(tep_db_query("SELECT customers_id, count(*) cant_orders\n FROM " . TABLE_ORDERS . "\n WHERE customers_id = '" . $google_answer['customers_id'] . "'\n group by customers_id")); // If this is the first time the buyer has used Google Checkout in the site, // send them their email and password(for the store). if ($first_order['cant_orders'] == 1) { list($http_status_code, ) = $google_request->sendBuyerMessage($google_answer['google_order_number'], sprintf(GOOGLECHECKOUT_NEW_CREDENTIALS_MESSAGE, STORE_NAME, $google_answer['customers_email_address'], $google_answer['buyer_id']), "true", 2); $comments = GOOGLECHECKOUT_STATE_STRING_TIME . $gc_data[$root]['timestamp']['VALUE'] . "\n" . GOOGLECHECKOUT_STATE_STRING_NEW_STATE . $new_fulfillment_state . "\n"; if ($http_status_code == 200) { $comments .= GOOGLECHECKOUT_SUCCESS_SEND_NEW_USER_CREDENTIALS . "\n"; $customer_notified = '1'; } else { $comments .= "\n" . GOOGLECHECKOUT_ERR_SEND_NEW_USER_CREDENTIALS . "\n"; $customer_notified = '0'; } $comments .= "Messsage:\n" . sprintf(GOOGLECHECKOUT_NEW_CREDENTIALS_MESSAGE, STORE_NAME, $google_answer['customers_email_address'], $google_answer['buyer_id']); $do_fulfillment_state_update = true; $orders_status_id = GC_STATE_PROCESSING; } // Send the internal order number to Google. $google_request->SendMerchantOrderNumber($google_answer['google_order_number'], $google_order['orders_id'], 2); break; case 'DELIVERED': $check_status = tep_db_fetch_array(tep_db_query("select orders_status from " . TABLE_ORDERS . "\n where orders_id = '" . $google_order['orders_id'] . "'")); switch ($check_status['orders_status']) { case GC_STATE_REFUNDED: $orders_status_id = GC_STATE_SHIPPED_REFUNDED; break; case GC_STATE_PROCESSING: default: $orders_status_id = GC_STATE_SHIPPED; break; } $do_fulfillment_state_update = true; $comments = GOOGLECHECKOUT_STATE_STRING_TIME . $gc_data[$root]['timestamp']['VALUE'] . "\n" . GOOGLECHECKOUT_STATE_STRING_NEW_STATE . $new_fulfillment_state . "\n" . GOOGLECHECKOUT_STATE_STRING_ORDER_DELIVERED . "\n"; $customer_notified = 1; break; case 'WILL_NOT_DELIVER': $do_fulfillment_state_update = false; $orders_status_id = GC_STATE_CANCELED; $customer_notified = 1; $comments = GOOGLECHECKOUT_STATE_STRING_TIME . $gc_data[$root]['timestamp']['VALUE'] . "\n" . GOOGLECHECKOUT_STATE_STRING_NEW_STATE . $new_fulfillment_state . "\n" . GOOGLECHECKOUT_STATE_STRING_ORDER_CANCELED; break; default: break; } } // Change fulfillment state in table if required. if ($do_fulfillment_state_update) { $sql_data_array = array('orders_id' => $google_order['orders_id'], 'orders_status_id' => $orders_status_id, 'date_added' => 'now()', 'customer_notified' => $customer_notified, 'comments' => $comments); tep_db_perform(TABLE_ORDERS_STATUS_HISTORY, $sql_data_array); tep_db_query("update " . TABLE_ORDERS . " set orders_status = '" . $orders_status_id . "' WHERE orders_id = '" . gc_make_sql_integer($google_order['orders_id']) . "'"); } $google_response->SendAck(); }
function process_order_state_change_notification($Gresponse, $googlepayment) { global $db; list($root, $data) = $Gresponse->GetParsedXML(); $new_financial_state = $data[$root]['new-financial-order-state']['VALUE']; $new_fulfillment_order = $data[$root]['new-fulfillment-order-state']['VALUE']; $previous_financial_state = $data[$root]['previous-financial-order-state']['VALUE']; $previous_fulfillment_order = $data[$root]['previous-fulfillment-order-state']['VALUE']; $google_order_number = $data[$root]['google-order-number']['VALUE']; $google_order = $db->Execute("SELECT orders_id from " . "" . $googlepayment->table_order . " where google_order_number = " . "'" . makeSqlString($google_order_number) . "'"); $update = false; if ($previous_financial_state != $new_financial_state) { switch ($new_financial_state) { case 'REVIEWING': break; case 'CHARGEABLE': $update = true; $orders_status_id = GC_STATE_NEW; $comments = GOOGLECHECKOUT_STATE_STRING_TIME . $data[$root]['timestamp']['VALUE'] . "\n" . GOOGLECHECKOUT_STATE_STRING_NEW_STATE . $new_financial_state . "\n" . GOOGLECHECKOUT_STATE_STRING_ORDER_READY_CHARGE; $customer_notified = 0; break; case 'CHARGING': break; case 'CHARGED': $update = true; $orders_status_id = GC_STATE_PROCESSING; $comments = GOOGLECHECKOUT_STATE_STRING_TIME . $data[$root]['timestamp']['VALUE'] . "\n" . GOOGLECHECKOUT_STATE_STRING_NEW_STATE . $new_financial_state; $customer_notified = 0; break; case 'PAYMENT-DECLINED': $update = true; $orders_status_id = GC_STATE_NEW; $comments = GOOGLECHECKOUT_STATE_STRING_TIME . $data[$root]['timestamp']['VALUE'] . "\n" . GOOGLECHECKOUT_STATE_STRING_NEW_STATE . $new_financial_state . GOOGLECHECKOUT_STATE_STRING_PAYMENT_DECLINED; $customer_notified = 1; break; case 'CANCELLED': $update = true; $orders_status_id = GC_STATE_CANCELED; $customer_notified = 1; $comments = GOOGLECHECKOUT_STATE_STRING_TIME . $data[$root]['timestamp']['VALUE'] . "\n" . GOOGLECHECKOUT_STATE_STRING_NEW_STATE . $new_financial_state . "\n" . GOOGLECHECKOUT_STATE_STRING_ORDER_CANCELED; break; case 'CANCELLED_BY_GOOGLE': $update = true; $orders_status_id = GC_STATE_CANCELED; $comments = GOOGLECHECKOUT_STATE_STRING_TIME . $data[$root]['timestamp']['VALUE'] . "\n" . GOOGLECHECKOUT_STATE_STRING_NEW_STATE . $new_financial_state . "\n" . GOOGLECHECKOUT_STATE_STRING_ORDER_CANCELED_BY_GOOG; $customer_notified = 1; break; default: break; } } if ($update) { $sql_data_array = array('orders_id' => $google_order->fields['orders_id'], 'orders_status_id' => $orders_status_id, 'date_added' => 'now()', 'customer_notified' => $customer_notified, 'comments' => $comments); zen_db_perform(TABLE_ORDERS_STATUS_HISTORY, $sql_data_array); $db->Execute("UPDATE " . TABLE_ORDERS . " SET orders_status = " . "'" . $orders_status_id . "' WHERE orders_id = " . "'" . makeSqlInteger($google_order->fields['orders_id']) . "'"); } $update = false; if ($previous_fulfillment_order != $new_fulfillment_order) { switch ($new_fulfillment_order) { case 'NEW': break; case 'PROCESSING': $Gresponse->SendAck(false); $Grequest = new GoogleRequest($googlepayment->merchantid, $googlepayment->merchantkey, MODULE_PAYMENT_GOOGLECHECKOUT_MODE == 'https://sandbox.google.com/checkout/' ? "sandbox" : "production", DEFAULT_CURRENCY); $Grequest->SetLogFiles(API_CALLBACK_ERROR_LOG, API_CALLBACK_MESSAGE_LOG); $google_answer = $db->Execute("SELECT go.google_order_number, go.order_amount, o.customers_email_address, gc.buyer_id, o.customers_id\n FROM " . $googlepayment->table_order . " go \n inner join " . TABLE_ORDERS . " o on go.orders_id = o.orders_id\n inner join " . $googlepayment->table_name . " gc on gc.customers_id = o.customers_id\n WHERE go.orders_id = '" . (int) $google_order->fields['orders_id'] . "'\n group by o.customers_id order by o.orders_id desc"); $first_order = $db->Execute("SELECT customers_id, count(*) cant_orders\n FROM " . TABLE_ORDERS . " \n WHERE customers_id = '" . $google_answer->fields['customers_id'] . "'\n group by customers_id"); // Send buyers email and password if new user and first buy with GC in the site if ($first_order->fields['cant_orders'] == 1) { list($status, ) = $Grequest->sendBuyerMessage($google_answer->fields['google_order_number'], sprintf(GOOGLECHECKOUT_NEW_CREDENTIALS_MESSAGE, STORE_NAME, $google_answer->fields['customers_email_address'], $google_answer->fields['buyer_id']), "true", 2); $comments = GOOGLECHECKOUT_STATE_STRING_TIME . $data[$root]['timestamp']['VALUE'] . "\n" . GOOGLECHECKOUT_STATE_STRING_NEW_STATE . $new_fulfillment_order . "\n"; if ($status != 200) { $comments .= "\n" . GOOGLECHECKOUT_ERR_SEND_NEW_USER_CREDENTIALS . "\n"; $customer_notified = '0'; } else { $comments .= GOOGLECHECKOUT_SUCCESS_SEND_NEW_USER_CREDENTIALS . "\n"; $customer_notified = '1'; } $comments .= "Messsage:\n" . sprintf(GOOGLECHECKOUT_NEW_CREDENTIALS_MESSAGE, STORE_NAME, $google_answer->fields['customers_email_address'], $google_answer->fields['buyer_id']); $update = true; $orders_status_id = GC_STATE_PROCESSING; } // Tell google witch is the Zencart's internal order Number $Grequest->SendMerchantOrderNumber($google_answer->fields['google_order_number'], $google_order->fields['orders_id'], 2); break; case 'DELIVERED': $check_status = $db->Execute("select orders_status, shipping_module_code from " . TABLE_ORDERS . "\n where orders_id = '" . $google_order->fields['orders_id'] . "'"); if ($check_status->fields['shipping_module_code'] == 'FreeGCDigital') { $orders_status_id = GC_STATE_DIGITAL_PROCESSED; } else { switch ($check_status->fields['orders_status']) { case GC_STATE_REFUNDED: $orders_status_id = GC_STATE_SHIPPED_REFUNDED; break; case GC_STATE_PROCESSING: default: $orders_status_id = GC_STATE_SHIPPED; break; } } $update = true; $comments = GOOGLECHECKOUT_STATE_STRING_TIME . $data[$root]['timestamp']['VALUE'] . "\n" . GOOGLECHECKOUT_STATE_STRING_NEW_STATE . $new_fulfillment_order . "\n" . GOOGLECHECKOUT_STATE_STRING_ORDER_DELIVERED . "\n"; $customer_notified = 1; break; case 'WILL_NOT_DELIVER': $update = false; $orders_status_id = GC_STATE_CANCELED; $customer_notified = 1; $comments = GOOGLECHECKOUT_STATE_STRING_TIME . $data[$root]['timestamp']['VALUE'] . "\n" . GOOGLECHECKOUT_STATE_STRING_NEW_STATE . $new_fulfillment_order . "\n" . GOOGLECHECKOUT_STATE_STRING_ORDER_CANCELED; break; default: break; } } if ($update) { $sql_data_array = array('orders_id' => $google_order->fields['orders_id'], 'orders_status_id' => $orders_status_id, 'date_added' => 'now()', 'customer_notified' => $customer_notified, 'comments' => $comments); // print_r($sql_data_array); zen_db_perform(TABLE_ORDERS_STATUS_HISTORY, $sql_data_array); $db->Execute("UPDATE " . TABLE_ORDERS . " SET orders_status = " . "'" . $orders_status_id . "' WHERE orders_id = " . "'" . makeSqlInteger($google_order->fields['orders_id']) . "'"); } $Gresponse->SendAck(); }