Пример #1
0
 protected function _foxycart($API, $Integrator, $foxycart_config, $foxydata)
 {
     $FOXYCART_FEED = date('Y-m-d H:i:s');
     $FOXYCART_NOW = date('Y-m-d H:i:s');
     $FOXYCART_USER = $API->user();
     $FOXYCART_KEY = null;
     // Check the username
     $errnum = null;
     $errmsg = null;
     $check = $Integrator->fetch($Integrator->query("SELECT * FROM " . QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_TABLE_USER . " WHERE foxycart_user_name = '" . $Integrator->escape($FOXYCART_USER) . "' ", $errnum, $errmsg));
     if (!$check) {
         $msg = 'Could not locate a user account for: [' . $FOXYCART_USER . ']';
         $this->_log($msg, $FOXYCART_USER, $FOXYCART_FEED);
         die($msg);
     }
     if (empty($foxycart_config['foxycart_secret_key'])) {
         // Look it up from the QuickBooks config table
         // @todo Ecccchhhh should I be doing this?
         $tmp1 = null;
         $tmp2 = null;
         $FOXYCART_KEY = $API->configRead(QUICKBOOKS_SERVER_INTEGRATOR_MODULE_FOXYCART, 'foxycart_secret_key', $tmp1, $tmp2);
         // If not found, look it up in the foxycart_user table
         if (!$FOXYCART_KEY) {
             $errnum = 0;
             $errmsg = null;
             $res = $Integrator->query("SELECT * FROM " . QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_TABLE_USER . " WHERE foxycart_user_name = '" . $Integrator->escape($FOXYCART_USER) . "' ", $errnum, $errmsg);
             $arr = $Integrator->fetch($res);
             $FOXYCART_KEY = $arr['foxycart_user_key'];
         }
     } else {
         $FOXYCART_KEY = $foxycart_config['foxycart_secret_key'];
     }
     if ($FOXYCART_KEY) {
         //$xml = rc4crypt::decrypt(FOXY_SECRET_KEY, urldecode($_POST['FoxyData']));
         $crypt = QuickBooks_Encryption_Factory::create('RC4');
         $xml = $crypt->decrypt($FOXYCART_KEY, urldecode($foxydata));
     } else {
         $xml = $foxydata;
     }
     if ($xml[0] != '<') {
         $msg = 'Could not process data with key: [' . $FOXYCART_KEY . '], data: ' . $xml;
         $this->_log($msg, $FOXYCART_USER, $FOXYCART_FEED);
         die($msg);
     }
     $map = array('customer_id' => array(QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_TABLE_CUSTOMER, QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_TABLE_TRANSACTION), 'customer_first_name' => array(QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_TABLE_CUSTOMER, QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_TABLE_TRANSACTION), 'customer_last_name' => array(QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_TABLE_CUSTOMER, QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_TABLE_TRANSACTION), 'customer_company' => array(QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_TABLE_CUSTOMER, QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_TABLE_TRANSACTION), 'customer_address1' => array(QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_TABLE_CUSTOMER, QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_TABLE_TRANSACTION), 'customer_address2' => array(QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_TABLE_CUSTOMER, QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_TABLE_TRANSACTION), 'customer_city' => array(QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_TABLE_CUSTOMER, QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_TABLE_TRANSACTION), 'customer_state' => array(QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_TABLE_CUSTOMER, QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_TABLE_TRANSACTION), 'customer_postal_code' => array(QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_TABLE_CUSTOMER, QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_TABLE_TRANSACTION), 'customer_country' => array(QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_TABLE_CUSTOMER, QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_TABLE_TRANSACTION), 'customer_phone' => array(QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_TABLE_CUSTOMER), 'customer_email' => array(QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_TABLE_CUSTOMER), 'customer_ip' => array(QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_TABLE_CUSTOMER), 'shipping_first_name' => array(QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_TABLE_CUSTOMER, QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_TABLE_TRANSACTION), 'shipping_last_name' => array(QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_TABLE_CUSTOMER, QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_TABLE_TRANSACTION), 'shipping_company' => array(QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_TABLE_CUSTOMER, QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_TABLE_TRANSACTION), 'shipping_address1' => array(QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_TABLE_CUSTOMER, QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_TABLE_TRANSACTION), 'shipping_address2' => array(QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_TABLE_CUSTOMER, QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_TABLE_TRANSACTION), 'shipping_city' => array(QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_TABLE_CUSTOMER, QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_TABLE_TRANSACTION), 'shipping_state' => array(QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_TABLE_CUSTOMER, QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_TABLE_TRANSACTION), 'shipping_postal_code' => array(QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_TABLE_CUSTOMER, QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_TABLE_TRANSACTION), 'shipping_country' => array(QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_TABLE_CUSTOMER, QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_TABLE_TRANSACTION), 'shipping_phone' => array(QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_TABLE_CUSTOMER), 'id' => array(QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_TABLE_TRANSACTION), 'transaction_date' => array(QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_TABLE_TRANSACTION), 'purchase_order' => array(QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_TABLE_TRANSACTION), 'product_total' => array(QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_TABLE_TRANSACTION), 'tax_total' => array(QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_TABLE_TRANSACTION), 'shipping_total' => array(QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_TABLE_TRANSACTION), 'order_total' => array(QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_TABLE_TRANSACTION), 'processor_response' => array(QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_TABLE_TRANSACTION), 'payment_gateway_type' => array(QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_TABLE_TRANSACTION));
     $primaries = array(QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_TABLE_CUSTOMER => 'customer_id', QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_TABLE_TRANSACTION => 'id');
     $foxyusers = array(QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_TABLE_CUSTOMER => 'foxycart_customer_user', QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_TABLE_TRANSACTION => 'foxycart_transaction_user');
     // Parse the XML
     $errnum = null;
     $errmsg = null;
     $Parser = new QuickBooks_XML_Parser($xml);
     if ($Doc = $Parser->parse($errnum, $errmsg)) {
         $Root = $Doc->getRoot();
         // Log the datafeed
         $record = array('foxydata' => $xml, 'datafeed_version' => $Root->getChildDataAt('foxydata datafeed_version'), 'foxycart_datafeed_datetime' => $FOXYCART_FEED, 'foxycart_datafeed_user' => $FOXYCART_USER);
         $Integrator->insert(QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_TABLE_DATAFEED, $record, false);
         // Loop through all of the transactions
         $Transactions = $Root->getChildAt('foxydata transactions');
         foreach ($Transactions->children() as $Transaction) {
             $tables = array(QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_TABLE_CUSTOMER => array(), QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_TABLE_TRANSACTION => array());
             foreach ($Transaction->children() as $Data) {
                 $name = $Data->name();
                 if (isset($map[$name])) {
                     foreach ($map[$name] as $table) {
                         $tables[$table][$name] = $Data->data();
                     }
                 }
             }
             //print_r($tables);
             foreach ($tables as $table => $data) {
                 $key = $primaries[$table];
                 $foxyuser = $foxyusers[$table];
                 if ($record = $Integrator->get($table, array($key => $tables[$table][$key], $foxyuser => $FOXYCART_USER))) {
                     // Update
                     //print('update');
                     //exit;
                     switch ($table) {
                         case QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_TABLE_TRANSACTION:
                             break;
                     }
                 } else {
                     // Insert
                     //print_r($data);
                     //exit;
                     switch ($table) {
                         case QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_TABLE_CUSTOMER:
                             $data['foxycart_customer_discovered_datetime'] = $FOXYCART_NOW;
                             $data['foxycart_customer_discovered_datafeed'] = $FOXYCART_FEED;
                             $data['foxycart_customer_user'] = $FOXYCART_USER;
                             // Call a hook to indicate a new customer has been found
                             $hook_data = array('customer' => $data);
                             $err = null;
                             $this->_callHooks(QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_HOOK_INSERTCUSTOMER, null, $FOXYCART_USER, null, $err, $hook_data);
                             break;
                         case QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_TABLE_TRANSACTION:
                             $data['foxycart_transaction_discovered_datetime'] = $FOXYCART_NOW;
                             $data['foxycart_transaction_discovered_datafeed'] = $FOXYCART_FEED;
                             $data['foxycart_transaction_user'] = $FOXYCART_USER;
                             // We need to set this flag so that we can call the order hook later
                             $hook_data = array('order' => $data);
                             $err = null;
                             $this->_callHooks(QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_HOOK_INSERTORDER, null, $FOXYCART_USER, null, $err, $hook_data);
                             break;
                     }
                     $Integrator->insert($table, $data, false);
                 }
             }
             // Delete any current line items (and line item options)
             $errnum = 0;
             $errmsg = '';
             $res = $Integrator->query("\n\t\t\t\t\tSELECT \n\t\t\t\t\t\t_id\n\t\t\t\t\tFROM \n\t\t\t\t\t\t" . QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_TABLE_TRANSACTIONDETAIL . " \n\t\t\t\t\tWHERE\n\t\t\t\t\t\ttransaction_id = " . (int) $Transaction->getChildDataAt('transaction id') . " AND\n\t\t\t\t\t\tfoxycart_transaction_detail_user = '******' ", $errnum, $errmsg);
             while ($arr = $Integrator->fetch($res)) {
                 // Delete the options
                 $Integrator->query("DELETE FROM " . QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_TABLE_TRANSACTIONDETAILOPTION . " WHERE transaction_detail__id = " . $arr['_id'], $errnum, $errmsg);
                 // Delete the detail item
                 $Integrator->query("DELETE FROM " . QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_TABLE_TRANSACTIONDETAIL . " WHERE _id = " . $arr['_id'], $errnum, $errmsg);
             }
             // Also delete any custom fields...
             $errnum = 0;
             $errmsg = '';
             $Integrator->query("\n\t\t\t\t\tDELETE FROM\n\t\t\t\t\t\t" . QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_TABLE_TRANSACTIONCUSTOMFIELD . "\n\t\t\t\t\tWHERE\n\t\t\t\t\t\ttransaction_id = " . (int) $Transaction->getChildDataAt('transaction id') . " AND \n\t\t\t\t\t\tfoxycart_transaction_customfield_user = '******' ", $errnum, $errmsg);
             // And delete any discounts
             $errnum = 0;
             $errmsg = '';
             $Integrator->query("\n\t\t\t\t\tDELETE FROM\n\t\t\t\t\t\t" . QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_TABLE_TRANSACTIONDISCOUNT . "\n\t\t\t\t\tWHERE\n\t\t\t\t\t\ttransaction_id = " . (int) $Transaction->getChildDataAt('transaction id') . " AND \n\t\t\t\t\t\tfoxycart_transaction_discount_user = '******' ", $errnum, $errmsg);
             // Now, process the transaction line details
             foreach ($Transaction->children() as $Node) {
                 if ($Node->name() == 'discounts') {
                     foreach ($Node->children() as $Discount) {
                         /*
                         <discount>
                         	<code>MM</code>
                         	<name>McMahon Medical</name>
                         	<amount>-149.99</amount>
                         	<display>-149.99</display>
                         	<coupon_discount_type>price_amount</coupon_discount_type>
                         	<coupon_discount_details>149.99-149.99, 99-0</coupon_discount_details>
                         </discount>
                         */
                         $discount = array('transaction_id' => $Transaction->getChildDataAt('transaction id'), 'discount_code' => $Discount->getChildDataAt('discount code'), 'discount_name' => $Discount->getChildDataAt('discount name'), 'discount_amount' => (double) $Discount->getChildDataAt('discount amount'), 'discount_display' => $Discount->getChildDataAt('discount display'), 'discount_coupon_discount_type' => $Discount->getChildDataAt('discount coupon_discount_type'), 'discount_coupon_discount_details' => $Discount->getChildDataAt('discount coupon_discount_details'), 'foxycart_transaction_discount_user' => $FOXYCART_USER);
                         //print_r($details);
                         $Integrator->insert(QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_TABLE_TRANSACTIONDISCOUNT, $discount, false);
                         $_id = $Integrator->last();
                     }
                 } else {
                     if ($Node->name() == 'custom_fields') {
                         foreach ($Node->children() as $CustomField) {
                             /*
                             <custom_field>
                             	<custom_field_name>Comments</custom_field_name>
                             	<custom_field_value>JO145</custom_field_value>
                             </custom_field>
                             */
                             $customfield = array('transaction_id' => $Transaction->getChildDataAt('transaction id'), 'customfield_custom_field_name' => $CustomField->getChildDataAt('custom_field custom_field_name'), 'customfield_custom_field_value' => $CustomField->getChildDataAt('custom_field custom_field_value'), 'foxycart_transaction_customfield_user' => $FOXYCART_USER);
                             //print_r($details);
                             $Integrator->insert(QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_TABLE_TRANSACTIONCUSTOMFIELD, $customfield, false);
                             $_id = $Integrator->last();
                         }
                     } else {
                         if ($Node->name() == 'transaction_details') {
                             foreach ($Node->children() as $TransactionDetail) {
                                 // Let's see if we've already seen this type of product before...
                                 $errnum = 0;
                                 $errmsg = '';
                                 $res_product = $Integrator->query("\n\t\t\t\t\t\t\t\tSELECT \n\t\t\t\t\t\t\t\t\t_id \n\t\t\t\t\t\t\t\tFROM \n\t\t\t\t\t\t\t\t\t" . QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_TABLE_PRODUCT . " \n\t\t\t\t\t\t\t\tWHERE \n\t\t\t\t\t\t\t\t\t_name = '" . $Integrator->escape($TransactionDetail->getChildDataAt('transaction_detail product_name')) . "' AND \n\t\t\t\t\t\t\t\t\tfoxycart_product_user = '******' ", $errnum, $errmsg);
                                 if ($arr_product = $Integrator->fetch($res_product)) {
                                     $product_id = $arr_product['_id'];
                                 } else {
                                     // Product doesn't exist yet, create it
                                     $tmp = array('_name' => $TransactionDetail->getChildDataAt('transaction_detail product_name'), 'foxycart_product_discovered_datetime' => $FOXYCART_NOW, 'foxycart_product_discovered_datafeed' => $FOXYCART_FEED, 'foxycart_product_user' => $FOXYCART_USER);
                                     $Integrator->insert(QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_TABLE_PRODUCT, $tmp, false);
                                     $product_id = $Integrator->last();
                                     // Call the hook to indicate we're adding a new line item
                                     $hook_data = array('product' => $tmp);
                                     $err = null;
                                     $this->_callHooks(QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_HOOK_INSERTPRODUCT, null, $FOXYCART_USER, null, $err, $hook_data);
                                 }
                                 $details = array('transaction_id' => $Transaction->getChildDataAt('transaction id'), 'product__id' => $product_id, 'product_name' => $TransactionDetail->getChildDataAt('transaction_detail product_name'), 'product_price' => $TransactionDetail->getChildDataAt('transaction_detail product_price'), 'product_quantity' => $TransactionDetail->getChildDataAt('transaction_detail product_quantity'), 'product_weight' => $TransactionDetail->getChildDataAt('transaction_detail product_weight'), 'product_code' => $TransactionDetail->getChildDataAt('transaction_detail product_code'), 'foxycart_transaction_detail_user' => $FOXYCART_USER);
                                 // Call the hook to indicate we're adding a new line item
                                 $hook_data = array('orderline' => $details);
                                 $err = null;
                                 $this->_callHooks(QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_HOOK_INSERTORDERLINE, null, $FOXYCART_USER, null, $err, $hook_data);
                                 //print_r($details);
                                 $Integrator->insert(QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_TABLE_TRANSACTIONDETAIL, $details, false);
                                 $_id = $Integrator->last();
                                 // Now, handle the options for each line item
                                 foreach ($TransactionDetail->children() as $Node2) {
                                     if ($Node2->name() == 'transaction_detail_options') {
                                         foreach ($Node2->children() as $TransactionDetailOption) {
                                             $details = array('transaction_detail__id' => $_id, 'product_option_name' => $TransactionDetailOption->getChildDataAt('transaction_detail_option product_option_name'), 'product_option_value' => $TransactionDetailOption->getChildDataAt('transaction_detail_option product_option_value'), 'price_mod' => $TransactionDetailOption->getChildDataAt('transaction_detail_option price_mod'), 'weight_mod' => $TransactionDetailOption->getChildDataAt('transaction_detail_option weight_mod'));
                                             $Integrator->insert(QUICKBOOKS_SERVER_INTEGRATOR_FOXYCART_TABLE_TRANSACTIONDETAILOPTION, $details, false);
                                         }
                                     }
                                 }
                             }
                         }
                     }
                 }
             }
         }
     }
     die('foxy');
 }
Пример #2
0
 public function oauthAccessWrite($key, $request_token, $token, $token_secret, $realm, $flavor)
 {
     $AES = QuickBooks_Encryption_Factory::create('aes');
     $encrypted_token = $AES->encrypt($key, $token);
     $encrypted_token_secret = $AES->encrypt($key, $token_secret);
     return $this->_oauthAccessWrite($request_token, $encrypted_token, $encrypted_token_secret, $realm, $flavor);
 }