jyotigoel

QuickBooks Desktop Integration using PHP

Dec 7th, 2017
45
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.58 KB | None | 0 0
  1. <?php
  2.  
  3. error_reporting(0);
  4.  
  5. if (function_exists('date_default_timezone_set')) {
  6. date_default_timezone_set('America/New_York');
  7. }
  8.  
  9. require_once '../../QuickBooks.php';
  10.  
  11. $user = 'quickbooks';
  12. $pass = 'password';
  13.  
  14. $map = array(
  15. QUICKBOOKS_QUERY_CUSTOMER => array( '_quickbooks_customer_query_request', '_quickbooks_customer_query_response' ),
  16. QUICKBOOKS_QUERY_INVENTORYITEM => array( '_quickbooks_inventoryitem_query_request', '_quickbooks_inventoryitem_query_response' ),
  17. QUICKBOOKS_ADD_CUSTOMER => array( '_quickbooks_customer_add_request', '_quickbooks_customer_add_response' ),
  18. QUICKBOOKS_ADD_INVENTORYITEM => array( '_quickbooks_inventoryitem_add_request', '_quickbooks_inventoryitem_add_response' ),
  19. QUICKBOOKS_ADD_INVOICE => array( '_quickbooks_invoice_add_request', '_quickbooks_invoice_add_response' )
  20. );
  21.  
  22. $errmap = array(
  23. 3070 => '_quickbooks_error_stringtoolong',
  24. 'CustomerQuery' => '_quickbooks_customer_query_error'
  25. );
  26.  
  27. $hooks = array();
  28.  
  29. $log_level = QUICKBOOKS_LOG_DEBUG;
  30.  
  31. $soapserver = QUICKBOOKS_SOAPSERVER_BUILTIN;
  32.  
  33. $soap_options = array();
  34.  
  35. $handler_options = array(
  36. 'deny_concurrent_logins' => false,
  37. 'deny_reallyfast_logins' => false
  38. );
  39.  
  40. $driver_options = array();
  41.  
  42. $callback_options = array();
  43.  
  44. $dsn = 'mysql://learning_db:weprl2oENxz]@localhost/learning_db';
  45.  
  46. if (!QuickBooks_Utilities::initialized($dsn)) {
  47. QuickBooks_Utilities::initialize($dsn);
  48.  
  49. QuickBooks_Utilities::createUser($dsn, $user, $pass);
  50.  
  51. $primary_key_of_your_customer_get = 011;
  52.  
  53. $Queue = new QuickBooks_WebConnector_Queue($dsn);
  54. $Queue->enqueue(QUICKBOOKS_QUERY_CUSTOMER, $primary_key_of_your_customer_get);
  55.  
  56. // $primary_key_of_your_inventoryitem_get = 012;
  57.  
  58. // $Queue = new QuickBooks_WebConnector_Queue($dsn);
  59. // $Queue->enqueue(QUICKBOOKS_QUERY_INVENTORYITEM, $primary_key_of_your_inventoryitem_get);
  60.  
  61. $primary_key_of_your_customer = 013;
  62. $Queue = new QuickBooks_WebConnector_Queue($dsn);
  63. $Queue->enqueue(QUICKBOOKS_ADD_CUSTOMER, $primary_key_of_your_customer);
  64.  
  65. // $primary_key_of_your_inventoryitem = 014;
  66. // $Queue = new QuickBooks_WebConnector_Queue($dsn);
  67. // $Queue->enqueue(QUICKBOOKS_ADD_INVENTORYITEM, $primary_key_of_your_inventoryitem);
  68.  
  69. // $primary_key_of_your_invoice = 015;
  70. // $Queue = new QuickBooks_WebConnector_Queue($dsn);
  71. // $Queue->enqueue(QUICKBOOKS_ADD_INVOICE, $primary_key_of_your_invoice);
  72. }
  73.  
  74. $Server = new QuickBooks_WebConnector_Server($dsn, $map, $errmap, $hooks, $log_level, $soapserver, QUICKBOOKS_WSDL, $soap_options, $handler_options, $driver_options, $callback_options);
  75. $response = $Server->handle(true, true);
  76.  
  77. function _quickbooks_customer_query_request($requestID, $user, $action, $ID, $extra, &$err, $last_action_time, $last_actionident_time, $version, $locale) {
  78. $record = mysql_fetch_array(mysql_query("SELECT * FROM tblOrderIndex WHERE ID = " . (int) $ID));
  79.  
  80. $xml = '<?xml version="1.0" encoding="utf-8"?>
  81. <?qbxml version="2.0"?>
  82. <QBXML>
  83. <QBXMLMsgsRq onError="stopOnError">
  84. <CustomerQueryRq requestID="' . $requestID . '">
  85. <FullName>'.$record['BillName'].'</FullName>
  86. </CustomerQueryRq>
  87. </QBXMLMsgsRq>
  88. </QBXML>';
  89.  
  90. return $xml;
  91. }
  92.  
  93. function _quickbooks_customer_query_response($requestID, $user, $action, $ID, $extra, &$err, $last_action_time, $last_actionident_time, $xml, $idents) {
  94. $syncRecord = mysql_fetch_array(mysql_query("SELECT count(*) AS num_rows FROM test_customer WHERE OrderId = " . (int) $ID));
  95. if($syncRecord['num_rows'] == 0) {
  96. mysql_query("INSERT INTO test_customer SET ListID = '" . mysql_escape_string($idents['ListID']) . "', OrderId = $ID, SyncStatus = 1");
  97. }
  98. }
  99.  
  100. function _quickbooks_customer_query_error($requestID, $user, $action, $ID, $extra, &$err, $xml, $errnum, $errmsg) {
  101. $syncRecord = mysql_fetch_array(mysql_query("SELECT count(*) AS num_rows FROM test_customer WHERE OrderId = " . (int) $ID));
  102. if($syncRecord['num_rows'] == 0) {
  103. mysql_query("INSERT INTO test_customer SET OrderId = $ID, SyncStatus = 0");
  104. }
  105. }
  106.  
  107. function _quickbooks_inventoryitem_query_request($requestID, $user, $action, $ID, $extra, &$err, $last_action_time, $last_actionident_time, $version, $locale) {
  108. $record = mysql_fetch_array(mysql_query("SELECT * FROM tblOrderItem WHERE ID = " . (int) $ID));
  109.  
  110. $xml = '<?xml version="1.0" ?>
  111. <?qbxml version="2.0" ?>
  112. <QBXML>
  113. <QBXMLMsgsRq onError="stopOnError">
  114. <ItemInventoryQueryRq requestID="' . $requestID . '">
  115. <FullName>'.substr($record['Title'], 0, 30).'</FullName>
  116. </ItemInventoryQueryRq>
  117. </QBXMLMsgsRq>
  118. </QBXML>';
  119.  
  120. return $xml;
  121. }
  122.  
  123. function _quickbooks_inventoryitem_query_response($requestID, $user, $action, $ID, $extra, &$err, $last_action_time, $last_actionident_time, $xml, $idents) {
  124. mysql_query("INSERT INTO test_item SET Name = '" . mysql_escape_string($idents['FullName']) . "', ListID = '" . mysql_escape_string($idents['ListID']) . "'");
  125. }
  126.  
  127. function _quickbooks_customer_add_request($requestID, $user, $action, $ID, $extra, &$err, $last_action_time, $last_actionident_time, $version, $locale) {
  128. $syncRecord = mysql_fetch_array(mysql_query("SELECT * FROM test_customer WHERE OrderId = " . (int) $ID));
  129.  
  130. if($syncRecord['SyncStatus'] == 0) {
  131. $record = mysql_fetch_array(mysql_query("SELECT * FROM tblOrderIndex WHERE ID = " . (int) $ID));
  132.  
  133. $xml = '<?xml version="1.0" encoding="utf-8"?>
  134. <?qbxml version="2.0"?>
  135. <QBXML>
  136. <QBXMLMsgsRq onError="stopOnError">
  137. <CustomerAddRq requestID="' . $requestID . '">
  138. <CustomerAdd>
  139. <Name>'.substr($record['BillName'],0,30).'</Name>
  140. <CompanyName>'.(($record['organization'])?$record['organization']:"NA").'</CompanyName>
  141. <FirstName>'.substr($record['BillName'],0,30).'</FirstName>
  142. <LastName></LastName>
  143. <BillAddress>
  144. <Addr1>'.$record['BillAddress01'].'</Addr1>
  145. <Addr2>'.$record['BillAddress02'].'</Addr2>
  146. <City>'.$record['BillCity'].'</City>
  147. <State>'.$record['BillProvince'].'</State>
  148. <PostalCode>'.$record['BillPostal'].'</PostalCode>
  149. <Country>'.$record['BillCountry'].'</Country>
  150. </BillAddress>
  151. <ShipAddress>
  152. <Addr1>'.$record['ShipAddress01'].'</Addr1>
  153. <Addr2>'.$record['ShipAddress02'].'</Addr2>
  154. <City>'.$record['ShipCity'].'</City>
  155. <State>'.$record['ShipProvince'].'</State>
  156. <PostalCode>'.$record['ShipPostal'].'</PostalCode>
  157. <Country>'.$record['ShipCountry'].'</Country>
  158. </ShipAddress>
  159. <Phone>'.$record['Phone'].'</Phone>
  160. <AltPhone> </AltPhone>
  161. <Fax></Fax>
  162. <Email>'.$record['Email'].'</Email>
  163. <Contact></Contact>
  164. </CustomerAdd>
  165. </CustomerAddRq>
  166. </QBXMLMsgsRq>
  167. </QBXML>';
  168.  
  169. return $xml;
  170. }
  171. }
  172.  
  173. function _quickbooks_customer_add_response($requestID, $user, $action, $ID, $extra, &$err, $last_action_time, $last_actionident_time, $xml, $idents) {
  174. mysql_query("UPDATE test_customer SET ListID = '" . mysql_escape_string($idents['ListID']) . "', SyncStatus = 1 WHERE OrderId = " . (int) $ID);
  175. }
  176.  
  177. function _quickbooks_inventoryitem_add_request($requestID, $user, $action, $ID, $extra, &$err, $last_action_time, $last_actionident_time, $version, $locale) {
  178. $record = mysql_fetch_array(mysql_query("SELECT * FROM tblOrderItem WHERE ID = " . (int) $ID));
  179.  
  180. $xml = '<?xml version="1.0" encoding="utf-8"?>
  181. <?qbxml version="2.0"?>
  182. <QBXML>
  183. <QBXMLMsgsRq onError="stopOnError">
  184. <ItemInventoryAddRq requestID="' . $requestID . '">
  185. <ItemInventoryAdd>
  186. <Name>'.substr($record['Title'], 0, 30).'</Name>
  187. <SalesDesc>'.substr($record['Title'], 0, 30).'</SalesDesc>
  188. <SalesPrice>'.$record['Price'].'</SalesPrice>
  189. <IncomeAccountRef>
  190. <FullName>Inventory Asset</FullName>
  191. </IncomeAccountRef>
  192. <COGSAccountRef>
  193. <FullName>Cost of Goods Sold</FullName>
  194. </COGSAccountRef>
  195. <AssetAccountRef>
  196. <FullName>Inventory Asset</FullName>
  197. </AssetAccountRef>
  198. <QuantityOnHand>1000</QuantityOnHand>
  199. </ItemInventoryAdd>
  200. </ItemInventoryAddRq>
  201. </QBXMLMsgsRq>
  202. </QBXML>';
  203.  
  204. return $xml;
  205. }
  206.  
  207. function _quickbooks_inventoryitem_add_response($requestID, $user, $action, $ID, $extra, &$err, $last_action_time, $last_actionident_time, $xml, $idents) {}
  208.  
  209. function _quickbooks_invoice_add_request($requestID, $user, $action, $ID, $extra, &$err, $last_action_time, $last_actionident_time, $version, $locale) {
  210. $xmlItem = "";
  211. $query = mysql_query("SELECT * FROM tblOrderItem WHERE OrderId = " . (int) $ID);
  212. while($record = mysql_fetch_array($query)) {
  213. $xmlItem .= '<InvoiceLineAdd>
  214. <ItemRef>
  215. <FullName>'.substr($record['Title'], 0, 30).'</FullName>
  216. </ItemRef>
  217. <Desc>'.substr($record['Title'], 0, 30).'</Desc>
  218. <Quantity>'.$record['Quantity'].'</Quantity>
  219. <Rate>'.$record['Price'].'</Rate>
  220. </InvoiceLineAdd>';
  221. }
  222.  
  223. $record = mysql_fetch_array(mysql_query("SELECT * FROM tblOrderIndex WHERE ID = " . (int) $ID));
  224.  
  225. $xml = '<?xml version="1.0" encoding="utf-8"?>
  226. <?qbxml version="2.0"?>
  227. <QBXML>
  228. <QBXMLMsgsRq onError="stopOnError">
  229. <InvoiceAddRq requestID="' . $requestID . '">
  230. <InvoiceAdd>
  231. <CustomerRef>
  232. <FullName>'.substr($record['BillName'],0,30).'</FullName>
  233. </CustomerRef>
  234. <TxnDate>'.date('Y-m-d', strtotime($record['Stamp'])).'</TxnDate>
  235. <BillAddress>
  236. <Addr1>'.substr($record['BillAddress01'],0,30).'</Addr1>
  237. <City>'.$record['BillCity'].'</City>
  238. <State>'.$record['BillProvince'].'</State>
  239. <PostalCode>'.$record['BillPostal'].'</PostalCode>
  240. <Country>'.$record['BillCountry'].'</Country>
  241. </BillAddress>
  242. ' . $xmlItem . '
  243. </InvoiceAdd>
  244. </InvoiceAddRq>
  245. </QBXMLMsgsRq>
  246. </QBXML>';
  247.  
  248. return $xml;
  249. }
  250.  
  251. function _quickbooks_invoice_add_response($requestID, $user, $action, $ID, $extra, &$err, $last_action_time, $last_actionident_time, $xml, $idents) {}
  252.  
  253. function _quickbooks_error_stringtoolong($requestID, $user, $action, $ID, $extra, &$err, $xml, $errnum, $errmsg) {
  254. mail('jyoti.goel@supraits.com',
  255. 'QuickBooks error occured!',
  256. 'QuickBooks thinks that ' . $action . ': ' . $ID . ' has a value which will not fit in a QuickBooks field...');
  257. }
Add Comment
Please, Sign In to add comment