/** * @deprecated Use QuickBooks_XML::extractTagContents() instead */ protected static function _extractTagContents($tag, $data) { $tmp = QuickBooks_XML::extractTagContents($tag, $data); return $tmp; }
/** * */ protected function _hasErrors($response) { // @todo This should first check for HTTP errors // ... // v3 errors if (false !== strpos($response, '<Error')) { $errcode = QuickBooks_XML::extractTagAttribute('code', $response); $errtext = QuickBooks_XML::extractTagContents('Message', $response); $errdetail = QuickBooks_XML::extractTagContents('Detail', $response); $this->_setError($errcode, $errtext, $errdetail); return true; // Yes, there's an error! } else { // Check for generic IPP XML node errors $errcode = QuickBooks_XML::extractTagContents('errcode', $response); $errtext = QuickBooks_XML::extractTagContents('errtext', $response); $errdetail = QuickBooks_XML::extractTagContents('errdetail', $response); if ($errcode != QuickBooks_IPP::OK) { // Has errors! $this->_setError($errcode, $errtext, $errdetail); return true; } // Check for IDS XML error codes $errorcode = QuickBooks_XML::extractTagContents('ErrorCode', $response); $errordesc = QuickBooks_XML::extractTagContents('ErrorDesc', $response); if ($errorcode) { $this->_setError($errorcode, $errordesc); return true; } // Does not have any errors return false; } }
protected function _parseIDS_v3($xml, $optype, $flavor, $version, &$xml_errnum, &$xml_errmsg, &$err_code, &$err_desc, &$err_db) { /* if ($optype == QuickBooks_IPP_IDS::OPTYPE_ENTITLEMENTS) { $xml = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?><EntitlementsResponse><QboCompany>true</QboCompany><PlanName>QBWEBVAR1MO</PlanName><MaxUsers>3</MaxUsers><CurrentUsers>1</CurrentUsers><DaysRemainingTrial>0</DaysRemainingTrial><Entitlement id="7"><name>PayPal</name><term>Off</term></Entitlement><Entitlement id="8"><name>Merchant Service</name><term>Off</term></Entitlement><Entitlement id="50"><name>Adjusted Trial Balance Report</name><term>Off</term></Entitlement><Entitlement id="51"><name>Adjusting Journal Entries</name><term>Off</term></Entitlement><Entitlement id="52"><name>Accountant Menu</name><term>Off</term></Entitlement><Entitlement id="53"><name>Reconciliation Troubleshooting</name><term>Off</term></Entitlement><Entitlement id="54"><name>Reclassify Transactions</name><term>Off</term></Entitlement><Entitlement id="55"><name>Write Off Invoices</name><term>Off</term></Entitlement><Entitlement id="1"><name>Class Tracking</name><term>Off</term></Entitlement><Entitlement id="3"><name>Expense Tracking by Customer</name><term>Off</term></Entitlement><Entitlement id="4"><name>Time Tracking</name><term>Off</term></Entitlement><Entitlement id="5"><name>Budgets</name><term>Off</term></Entitlement><Entitlement id="6"><name>Custom Invoice Styles</name><term>On</term></Entitlement><Entitlement id="9"><name>1099 Forms for Vendors</name><term>Off</term></Entitlement><Entitlement id="10"><name>Managing Bills to Pay Later</name><term>On</term></Entitlement><Entitlement id="11"><name>Complete Set of Reports</name><term>On</term></Entitlement><Entitlement id="12"><name>Enhanced Reporting</name><term>On</term></Entitlement><Entitlement id="13"><name>Exporting to Excel</name><term>On</term></Entitlement><Entitlement id="15"><name>Delayed Charges</name><term>On</term></Entitlement><Entitlement id="16"><name>Custom Sales Fields</name><term>On</term></Entitlement><Entitlement id="17"><name>More Users -- up to 20</name><term>On</term></Entitlement><Entitlement id="19"><name>Recurring Transactions</name><term>On</term></Entitlement><Entitlement id="20"><name>Closing the Books</name><term>On</term></Entitlement><Entitlement id="21"><name>Location Tracking</name><term>Off</term></Entitlement><Entitlement id="22"><name>More Names</name><term>On</term></Entitlement><Entitlement id="25"><name>Custom Home Page</name><term>On</term></Entitlement><Entitlement id="26"><name>Do-it-yourself Payroll</name><term>Off</term></Entitlement><Entitlement id="28"><name>Online Banking</name><term>On</term></Entitlement><Entitlement id="29"><name>Basic Sales</name><term>On</term></Entitlement><Entitlement id="30"><name>Basic Banking</name><term>On</term></Entitlement><Entitlement id="31"><name>Accounting</name><term>On</term></Entitlement><Entitlement id="33"><name>Reports Only User</name><term>Off</term></Entitlement><Entitlement id="35"><name>Estimates</name><term>On</term></Entitlement><Entitlement id="41"><name>Company Snapshot</name><term>On</term></Entitlement><Entitlement id="42"><name>Purchase Order</name><term>Off</term></Entitlement><Entitlement id="43"><name>Inventory</name><term>Off</term></Entitlement><Entitlement id="44"><name>Do-it-yourself Payroll (Paycycle)</name><term>Off</term></Entitlement><Entitlement id="45"><name>Multi-Currency</name><term>On</term></Entitlement><Entitlement id="46"><name>Trends</name><term>On</term></Entitlement><Entitlement id="47"><name>Hide Employee List</name><term>Off</term></Entitlement><Entitlement id="48"><name>Simple Report List</name><term>Off</term></Entitlement><Entitlement id="49"><name>Global Tax Model</name><term>On</term></Entitlement><Entitlement id="56"><name>Text Messaging</name><term>On</term></Entitlement><Entitlement id="58"><name>Vendor Collaboration</name><term>On</term></Entitlement></EntitlementsResponse>'; } */ // Parse it $Parser = new QuickBooks_XML_Parser($xml); // Initial to success $xml_errnum = QuickBooks_XML::ERROR_OK; $err_code = QuickBooks_IPP::ERROR_OK; // Try to parse the XML IDS response $errnum = QuickBooks_XML::ERROR_OK; $errmsg = null; if ($Doc = $Parser->parse($errnum, $errmsg)) { $Root = $Doc->getRoot(); switch ($optype) { case QuickBooks_IPP_IDS::OPTYPE_ENTITLEMENTS: $e = array('_i' => array(), '_e' => array()); $List = $Root->getChildAt('EntitlementsResponse'); foreach ($List->children() as $ObjList) { if ($ObjList->name() == 'Entitlement') { $Entitlement = new QuickBooks_IPP_Entitlement($ObjList->getAttribute('id'), $ObjList->getChildDataAt('Entitlement/name'), $ObjList->getChildDataAt('Entitlement/term')); $e['_e'][] = $Entitlement; } else { $e['_i'][$ObjList->name()] = $ObjList->data(); } } return $e; break; case QuickBooks_IPP_IDS::OPTYPE_CDC: $types = array(); $List = $Root->getChildAt('IntuitResponse CDCResponse'); foreach ($List->children() as $ObjList) { foreach ($ObjList->children() as $Child) { $type = $Child->name(); if (empty($types[$type])) { $types[$type] = array(); } $class = 'QuickBooks_IPP_Object_' . $Child->name(); $Object = new $class(); foreach ($Child->children() as $Data) { $this->_push($Data, $Object); } $types[$type][] = $Object; } } return $types; break; case QuickBooks_IPP_IDS::OPTYPE_ADD: // Parse an ADD type response return QuickBooks_IPP_IDS::buildIDType('', QuickBooks_XML::extractTagContents('Id', $xml)); case QuickBooks_IPP_IDS::OPTYPE_MOD: return true; // If we got this far, it was a success // If we got this far, it was a success case QuickBooks_IPP_IDS::OPTYPE_QUERY: $list = array(); $List = $Root->getChildAt('IntuitResponse QueryResponse'); $attrs = $List->attributes(); if (!array_key_exists('startPosition', $attrs) and array_key_exists('totalCount', $attrs)) { return $attrs['totalCount']; } else { foreach ($List->children() as $Child) { $class = 'QuickBooks_IPP_Object_' . $Child->name(); $Object = new $class(); foreach ($Child->children() as $Data) { $this->_push($Data, $Object); } $list[] = $Object; } return $list; } } } else { $xml_errnum = $errnum; $xml_errmsg = $errmsg; return false; } }
public function disconnect($app_username, $app_tenant, $force = false) { if ($arr = $this->_driver->oauthLoad($this->_key, $app_username, $app_tenant) and strlen($arr['oauth_access_token']) > 0 and strlen($arr['oauth_access_token_secret']) > 0) { $arr['oauth_consumer_key'] = $this->_consumer_key; $arr['oauth_consumer_secret'] = $this->_consumer_secret; $retr = $this->_request(QuickBooks_IPP_OAuth::METHOD_GET, QuickBooks_IPP_IntuitAnywhere::URL_CONNECT_DISCONNECT, array(), $arr['oauth_access_token'], $arr['oauth_access_token_secret']); // Extract the error code $code = (int) QuickBooks_XML::extractTagContents('ErrorCode', $retr); if ($code == 0 or $code == 270 or $force) { return $this->_driver->oauthAccessDelete($arr['app_username'], $arr['app_tenant']); } } return false; }
protected function _parseResponse($type, $path, $xml, &$errnum, &$errmsg) { static $look_trans = array('CreditCardTransID' => null, 'AuthorizationCode' => null, 'AVSStreet' => null, 'AVSZip' => null, 'CardSecurityCodeMatch' => null, 'ClientTransID' => null, 'MerchantAccountNumber' => null, 'ReconBatchID' => null, 'PaymentGroupingCode' => null, 'PaymentStatus' => null, 'TxnAuthorizationTime' => null, 'TxnAuthorizationStamp' => null, 'NetworkName' => null, 'NetworkNumber' => null, 'DebitCardTransID' => null); static $look_card = array('MaskedCreditCardNumber' => null, 'ExpirationMonth' => null, 'ExpirationYear' => null, 'NameOnCard' => null, 'CreditCardAddress' => null, 'CreditCardPostalCode' => null); if ($type == QuickBooks_MerchantService::TYPE_WALLETADD) { // This was a wallet add, return the wallet ID return QuickBooks_XML::extractTagContents('WalletEntryID', $xml); } else { if ($type == QuickBooks_MerchantService::TYPE_WALLETMOD or $type == QuickBooks_MerchantService::TYPE_WALLETDEL) { // These just return TRUE or FALSE based on error code return true; } else { if ($type == QuickBooks_MerchantService::TYPE_WALLETQUERY) { // This returns a single credit card object $Parser = new QuickBooks_XML_Parser($xml); if ($Doc = $Parser->parse($errnum, $errmsg)) { $Node = $Doc->getRoot(); $card = array(); foreach ($look_card as $node => $null) { $card[$node] = $Node->getChildDataAt($path . '/' . $node); } return new QuickBooks_MerchantService_CreditCard($card['NameOnCard'], str_replace('*', 'x', $card['MaskedCreditCardNumber']), $card['ExpirationYear'], $card['ExpirationMonth'], $card['CreditCardAddress'], $card['CreditCardPostalCode']); } } else { $Parser = new QuickBooks_XML_Parser($xml); if ($Doc = $Parser->parse($errnum, $errmsg)) { $Node = $Doc->getRoot(); $trans = array(); foreach ($look_trans as $node => $null) { $trans[$node] = $Node->getChildDataAt($path . '/' . $node); } // if ($trans['DebitCardTransID']) { $trans['CreditCardTransID'] = $trans['DebitCardTransID']; } return new QuickBooks_MerchantService_Transaction($type, $trans['CreditCardTransID'], $trans['ClientTransID'], $trans['AuthorizationCode'], $trans['MerchantAccountNumber'], $trans['ReconBatchID'], $trans['PaymentGroupingCode'], $trans['PaymentStatus'], $trans['TxnAuthorizationTime'], $trans['TxnAuthorizationStamp'], $trans['AVSStreet'], $trans['AVSZip'], $trans['CardSecurityCodeMatch'], $trans['NetworkName'], $trans['NetworkNumber']); } } } } return false; }
protected function _parseIDS_v3($xml, $optype, $flavor, $version, &$xml_errnum, &$xml_errmsg, &$err_code, &$err_desc, &$err_db) { // Parse it $Parser = new QuickBooks_XML_Parser($xml); // Initial to success $xml_errnum = QuickBooks_XML::ERROR_OK; $err_code = QuickBooks_IPP::ERROR_OK; // Try to parse the XML IDS response $errnum = QuickBooks_XML::ERROR_OK; $errmsg = null; if ($Doc = $Parser->parse($errnum, $errmsg)) { $Root = $Doc->getRoot(); switch ($optype) { case QuickBooks_IPP_IDS::OPTYPE_CDC: $types = array(); $List = $Root->getChildAt('IntuitResponse CDCResponse'); foreach ($List->children() as $ObjList) { foreach ($ObjList->children() as $Child) { $type = $Child->name(); if (empty($types[$type])) { $types[$type] = array(); } $class = 'QuickBooks_IPP_Object_' . $Child->name(); $Object = new $class(); foreach ($Child->children() as $Data) { $this->_push($Data, $Object); } $types[$type][] = $Object; } } return $types; break; case QuickBooks_IPP_IDS::OPTYPE_ADD: // Parse an ADD type response return QuickBooks_IPP_IDS::buildIDType('', QuickBooks_XML::extractTagContents('Id', $xml)); case QuickBooks_IPP_IDS::OPTYPE_MOD: return true; // If we got this far, it was a success // If we got this far, it was a success case QuickBooks_IPP_IDS::OPTYPE_QUERY: $list = array(); $List = $Root->getChildAt('IntuitResponse QueryResponse'); $attrs = $List->attributes(); if (!array_key_exists('startPosition', $attrs) and array_key_exists('totalCount', $attrs)) { return $attrs['totalCount']; } else { foreach ($List->children() as $Child) { $class = 'QuickBooks_IPP_Object_' . $Child->name(); $Object = new $class(); foreach ($Child->children() as $Data) { $this->_push($Data, $Object); } $list[] = $Object; } return $list; } } } else { $xml_errnum = $errnum; $xml_errmsg = $errmsg; return false; } }
<?php require_once '../QuickBooks.php'; $data = '<QBXML><something>stuff</something><CustomerQueryRs iteratorRemainingCount="364q34" iteratorID="{1234-1234-1234}">...</CustomerQueryRs></QBXML>'; print 'contents: ' . QuickBooks_XML::extractTagContents('something', $data) . "\n"; print 'attribute: ' . QuickBooks_XML::extractTagAttribute('iteratorRemainingCount', $data) . "\n"; $data = '<CustomerQueryRs iteratorRemainingCount="123" iteratorID="{1234-1234-1234}">'; print 'attribuets: ' . print_r(QuickBooks_XML::extractTagAttributes($data, true), true) . "\n";