/** * marks an order as Paid, sends an invoice, and calls any specified callbacks * * @param int $id ID of the order * @param array $order details of the order * * @return null */ function OnlineStore_processOrder($id, $order = false) { if ($order === false) { $order = dbRow("SELECT * FROM online_store_orders WHERE id={$id}"); } $items = json_decode($order['items'], true); // { mark order as paid dbQuery("update online_store_orders set status='1' where id={$id}"); OnlineStore_updateProductSales($id, $items, $order['date_created']); if (!$order['invoice_num']) { $highest = dbOne('select invoice_num from online_store_orders order by invoice_num desc limit 1', 'invoice_num'); $order['invoice_num'] = $highest + 1; dbQuery('update online_store_orders set invoice_num=' . $order['invoice_num'] . ' where id=' . $id); } $order['status'] = 1; // } // { call the callback if it's supplied if ($order['callback']) { file($order['callback']); } // } Core_trigger('after-order-processed', array($order)); OnlineStore_sendInvoiceEmail($id, $order); OnlineStore_exportToFile($id, $order); }
function OnlineStoreEbay_adminImportOrders() { require_once 'eBaySession.php'; error_reporting(E_ALL); $rs = dbAll('select * from online_store_vars where name like "ebay%"'); $vs = array(); foreach ($rs as $r) { $vs[$r['name']] = $r['val']; } $production = (int) $vs['ebay_status']; if ($production) { $devID = $vs['ebay_devid']; $appID = $vs['ebay_appid']; $certID = $vs['ebay_certid']; $serverUrl = 'https://api.ebay.com/ws/api.dll'; // server URL different for prod and sandbox $userToken = $vs['ebay_usertoken']; } else { $devID = $vs['ebay_sandbox_devid']; $appID = $vs['ebay_sandbox_appid']; $certID = $vs['ebay_sandbox_certid']; $serverUrl = 'https://api.sandbox.ebay.com/ws/api.dll'; $userToken = $vs['ebay_sandbox_usertoken']; } $compatabilityLevel = 827; // eBay API version $siteToUseID = 205; $sess = new eBaySession($userToken, $devID, $appID, $certID, $serverUrl, $compatabilityLevel, $siteToUseID, 'GetOrders'); $xml = '<?xml version="1.0" encoding="utf-8"?>' . '<GetOrdersRequest xmlns="urn:ebay:apis:eBLBaseComponents">' . ' <RequesterCredentials>' . ' <eBayAuthToken>' . $userToken . '</eBayAuthToken>' . ' </RequesterCredentials>' . ' <NumberOfDays>10</NumberOfDays>' . ' <OrderRole>Seller</OrderRole>' . ' <OrderStatus>Completed</OrderStatus>' . ' <DetailLevel>ReturnAll</DetailLevel>' . ' <SortingOrder>Descending</SortingOrder>' . ' <WarningLevel>High</WarningLevel>' . '</GetOrdersRequest>'; $xmlstr = $sess->sendHttpRequest($xml); $reply = new SimpleXMLElement($xmlstr); if (isset($reply->Errors)) { return array('sent' => $xml, 'reply' => new SimpleXMLElement($xmlstr), 'errors' => $reply->Errors); } $imported = 0; foreach ($reply->OrderArray->Order as $order) { $order = json_decode(json_encode($order)); $ebayOrderId = $order->OrderID; $r = dbOne('select id from online_store_orders where ebayOrderId="' . $ebayOrderId . '"' . ' limit 1', 'id'); if ($r) { continue; } $address = $order->ShippingAddress; if ($address->PostalCode == '') { $address->PostalCode = 'na'; } $form_vals = array('FirstName' => preg_replace('/ .*/', '', $address->Name), 'Surname' => preg_replace('/.*? /', '', $address->Name), 'Phone' => $address->Phone, 'Email' => '*****@*****.**', 'Street' => $address->Street1, 'Street2' => $address->Street2, 'Town' => $address->CityName, 'County' => $address->StateOrProvince, 'PostCode' => $address->PostalCode, 'Country' => $address->CountryName, 'CountryCode' => $address->Country); $form_vals = json_encode($form_vals); $total = (double) $order->Total; $date_created = date('Y-m-d h:i:s', strtotime($order->CreatedTime)); $transactions = array(); $tArr = $order->TransactionArray->Transaction; if (!is_array($tArr)) { $transactions = array($tArr); } else { $transactions = $tArr; } $items = array(); foreach ($transactions as $transaction) { $item = $transaction->Item; if (isset($item->ApplicationData)) { $appData = json_decode(htmlspecialchars_decode($item->ApplicationData)); $itemId = $appData->productId; } else { $itemId = dbOne('select id from products where link="' . addslashes($item->Title) . '"', 'id'); } $key = 'products_' . $itemId; if (!isset($items[$key])) { $items[$key] = array(); $r = dbRow('select * from products where id=' . $itemId . ' limit 1'); $items[$key] = array('short_desc' => $r['name'], 'id' => $itemId, 'amt' => 0); } $items[$key]['amt'] += $transaction->QuantityPurchased; } $jitems = json_encode($items); // { create the order entry dbQuery('insert into online_store_orders set total="' . $total . '"' . ', items="' . addslashes($jitems) . '"' . ', ebayOrderId="' . $ebayOrderId . '"' . ', form_vals="' . addslashes($form_vals) . '"' . ', date_created="' . addslashes($date_created) . '"' . ', status=1'); $id = dbLastInsertId(); // } dbQuery('update online_store_orders set invoice_num=id where id=' . $id); Core_cacheClear('online_store_orders'); OnlineStore_updateProductSales($id, $items, $date_created); $imported++; } return array('imported' => $imported, 'reply' => new SimpleXMLElement($xmlstr)); }
function OnlineStore_adminUpdateAllProductSales() { dbQuery('delete from online_store_sales'); $rs = dbAll('select id,items,date_created from online_store_orders where status in (1, 2)'); $update = 0; foreach ($rs as $r) { OnlineStore_updateProductSales($r['id'], json_decode($r['items'], true), $r['date_created']); $updated++; } return $updated; }