PageRenderTime 49ms CodeModel.GetById 16ms RepoModel.GetById 1ms app.codeStats 0ms

/admin/gcallback.php

https://bitbucket.org/chadsaun/ifrogz-panel
PHP | 914 lines | 852 code | 8 blank | 54 comment | 142 complexity | 4264c3c4c3b4aaddb8d140d70fe3d6ca MD5 | raw file
  1. <?php
  2. //=========================================
  3. //This code is copyright (c) Internet Business Solutions SL, all rights reserved.
  4. //The contents of this file are protected under law as the intellectual property
  5. //of Internet Business Solutions SL. Any use, reproduction, disclosure or copying
  6. //of any kind without the express and written permission of Internet Business
  7. //Solutions SL is forbidden.
  8. //Author: Vince Reid, vince@virtualred.net
  9. function microtime_float() {
  10. list($usec, $sec) = explode(' ', microtime());
  11. return((float)$usec + (float)$sec);
  12. }
  13. ob_start();
  14. session_cache_limiter('none');
  15. session_start();
  16. include('init.php');
  17. include(APPPATH.'views/partials/admin/dbconnection.php');
  18. include(APPPATH.'views/partials/admin/includes.php');
  19. include(APPPATH.'views/pages/admin/email.php');
  20. include(APPPATH.'views/partials/admin/languagefile.php');
  21. include(APPPATH.'views/partials/admin/functions.php');
  22. include(APPPATH.'views/pages/admin/deliverydate.php');
  23. if(@$debugmode==TRUE) $time_start = microtime_float();
  24. $enableclientlogin=FALSE;
  25. if(@$dateadjust=='') $dateadjust=0;
  26. $usehst=FALSE;
  27. $maxcacheid=0;
  28. function sendNotificationEmail($orderID) {
  29. $to = "karen@reminderband.com";
  30. $subject = "Order Cancelled by Google Checkout";
  31. $message = "Order Number: $orderID\n";
  32. $message .= "This order was cancelled by Google Checkout please cancel this order in Fishbowl.";
  33. mail($to, $subject, $message, "From: Google Checkout");
  34. }
  35. function getgcsessionsql(){
  36. global $hasclientid,$thesessionid;
  37. return ($hasclientid ? 'cartClientID=' . $thesessionid : 'cartSessionID="' . $thesessionid . '"');
  38. }
  39. function getgcordersessionsql(){
  40. global $hasclientid,$thesessionid;
  41. return ($hasclientid ? 'ordClientID=' . $thesessionid : 'ordSessionID="' . $thesessionid . '"');
  42. }
  43. function writeresultstructure(){
  44. global $cpncodes,$cpnmessage,$shipmethod,$cacheaddress,$responsexml,$maxcacheid,$noshipping,$addressid,$countryCurrency,$shipping,$handling,$freeshipamnt,$cpncode,$gotcpncode,$totaldiscounts,$stateTax,$countryTax,$appliedcouponname,$appliedcouponamount;
  45. $responsexml2 = '<result' . ($noshipping ? '' : ' shipping-name="' . $shipmethod . '"') . ' address-id="' . $addressid . '">';
  46. if(! $noshipping) $responsexml2 .= '<shipping-rate currency="' . $countryCurrency . '">' . round(($shipping+$handling)-$freeshipamnt, 2) . '</shipping-rate>';
  47. $responsexml2 .= '<shippable>true</shippable>';
  48. if(count($cpncodes) > 0){
  49. $responsexml2 .= '<merchant-code-results>';
  50. foreach($cpncodes as $key => $value){
  51. if($value==$cpncode){
  52. $responsexml2 .= '<coupon-result><valid>' . ($gotcpncode ? 'true' : 'false') . '</valid>';
  53. if($totaldiscounts>0) $responsexml2 .= '<calculated-amount currency="' . $countryCurrency . '">' . $appliedcouponamount . '</calculated-amount>';
  54. $responsexml2 .= '<code>' . $cpncode . '</code>';
  55. if($cpnmessage != '')
  56. $responsexml2 .= '<message>' . xmlencodecharref(str_replace('<br />',"\r\n",$appliedcouponname)) . '</message>';
  57. $responsexml2 .= '</coupon-result>';
  58. }else{
  59. $responsexml2 .= '<coupon-result><valid>false</valid>';
  60. $responsexml2 .= '<code>' . $value . '</code>';
  61. $responsexml2 .= '<message>This coupon is not valid in conjunction with other coupons.</message>';
  62. $responsexml2 .= '</coupon-result>';
  63. }
  64. }
  65. $responsexml2 .= '</merchant-code-results>';
  66. }
  67. $responsexml2 .= '<total-tax currency="' . $countryCurrency . '">' . round($stateTax+$countryTax,2) . '</total-tax>';
  68. $responsexml2 .= '</result>';
  69. $responsexml .= $responsexml2;
  70. $cacheaddress[$maxcacheid][3] .= $responsexml2;
  71. }
  72. /*function release_stock($smOrdId){
  73. global $stockManage;
  74. if($stockManage != 0){
  75. $sSQL="SELECT cartID,cartProdID,cartQuantity,pStockByOpts FROM cart INNER JOIN products ON cart.cartProdID=products.pID WHERE cartCompleted=1 AND cartOrderID=" . $smOrdId;
  76. $result = mysql_query($sSQL) or print(mysql_error());
  77. while($rs = mysql_fetch_array($result)){
  78. if(((int)$rs['pStockByOpts'] <> 0)){
  79. $sSQL = "SELECT coOptID FROM cartoptions INNER JOIN options ON cartoptions.coOptID=options.optID INNER JOIN optiongroup ON options.optGroup=optiongroup.optGrpID WHERE optType IN (-2,-1,1,2) AND coCartID=" . $rs["cartID"];
  80. $result2 = mysql_query($sSQL) or print(mysql_error());
  81. while($rs2 = mysql_fetch_array($result2)){
  82. $sSQL = "UPDATE options SET optStock=optStock+" . $rs["cartQuantity"] . " WHERE optID=" . $rs2["coOptID"];
  83. mysql_query($sSQL) or print(mysql_error());
  84. }
  85. mysql_free_result($result2);
  86. }else{
  87. $sSQL = "UPDATE products SET pInStock=pInStock+" . $rs["cartQuantity"] . " WHERE pID='" . $rs["cartProdID"] . "'";
  88. mysql_query($sSQL) or print(mysql_error());
  89. }
  90. }
  91. mysql_free_result($result);
  92. }
  93. }*/
  94. $alreadygotadmin = getadminsettings();
  95. $success = getpayprovdetails(20,$googledata1,$googledata2,$googledata3,$googledemomode,$ppmethod);
  96. if(isset($HTTP_RAW_POST_DATA))
  97. $xmlResponse = $HTTP_RAW_POST_DATA;
  98. else
  99. $xmlResponse = implode("\r\n", file('php://input'));
  100. $xmlResponse2 = '<?xml version="1.0" encoding="UTF-8"?> <new-order-notification xmlns="http://checkout.google.com/schema/2" serial-number="8XXXXXX3-5641-4a2b-93d2-7XXXXXX3daa9"> <timestamp>2007-01-25T04:09:58.522Z</timestamp> <shopping-cart> <items> <item> <quantity>1</quantity> <unit-price currency="USD">amount</unit-price> <item-name>Payment request from Blue Rose Video Games</item-name> <item-description>Order #4846 @ Blue Rose Video Games</item-description> </item> </items> </shopping-cart> <order-adjustment> <merchant-codes /> <total-tax currency="USD">0.0</total-tax> <adjustment-total currency="USD">0.0</adjustment-total> </order-adjustment> <google-order-number>63486XXXXX55603</google-order-number> <buyer-shipping-address> <email>email address</email> <address1>address</address1> <address2></address2> <contact-name>name</contact-name> <company-name></company-name> <phone></phone> <fax></fax> <country-code>US</country-code> <city>city</city> <region>st</region> <postal-code>zip</postal-code> </buyer-shipping-address> <buyer-billing-address> <email>email address</email> <address1>address</address1> <address2></address2> <contact-name>name</contact-name> <company-name></company-name> <phone></phone> <fax></fax> <country-code>US</country-code> <city>city</city> <region>st</region> <postal-code>zip</postal-code> </buyer-billing-address> <buyer-marketing-preferences> <email-allowed>false</email-allowed> </buyer-marketing-preferences> <order-total currency="USD">amount</order-total> <fulfillment-order-state>NEW</fulfillment-order-state> <financial-order-state>REVIEWING</financial-order-state> <buyer-id>26489XXXXX70857</buyer-id> </new-order-notification>';
  101. // print str_replace("<","<br />&lt;",str_replace("</","&lt;/",$xmlResponse2)) . "<br />\n";
  102. $responsexml='';
  103. $standalonetestmode=FALSE;
  104. if($standalonetestmode) $xmlResponse=$xmlResponse2;
  105. if(@$disablebasicauth==TRUE){
  106. // Do Nothing
  107. }elseif($success){
  108. $http_auth = @$_SERVER['HTTP_AUTHORIZATION'];
  109. if($http_auth=='') $http_auth = @$_SERVER['HTTP_AUTHENTICATION'];
  110. if($http_auth==''){
  111. if($googledata1!=@$_SERVER['PHP_AUTH_USER'] || $googledata2!=@$_SERVER['PHP_AUTH_PW'] || $googledata1=='')
  112. $success=FALSE;
  113. }elseif(substr($http_auth, 0, 6)=='Basic '){
  114. $http_auth = substr($http_auth, 6);
  115. $http_auth = base64_decode($http_auth);
  116. if(strpos($http_auth, ':')===FALSE){
  117. $success=FALSE;
  118. }else{
  119. $auth_split = split(':',$http_auth);
  120. if($googledata1 != $auth_split[0] || $googledata2 != $auth_split[1]) $success=FALSE;
  121. }
  122. }else
  123. $success=FALSE;
  124. if($debugmode){
  125. if(@$_SERVER['PHP_AUTH_USER']=='' && @$_SERVER['PHP_AUTH_PW']=='' && @$_SERVER['HTTP_AUTHENTICATION']=='' && @$_SERVER['HTTP_AUTHORIZATION']==''){
  126. $responsexml .= 'Checking authentication. Basic auth sent by Google is blank.' . "\n";
  127. foreach($_SERVER as $key => $value){
  128. $responsexml .= $key . " : " . $value . "\n";
  129. }
  130. }
  131. }
  132. }
  133. if($standalonetestmode) $success=TRUE;
  134. if(! $success){
  135. // response.clear
  136. if(! $standalonetestmode){
  137. header('HTTP/1.1 401 Unauthorized');
  138. echo '<html><head><title>401 Unauthorized</title></head><body>';
  139. echo 'I\'m sorry, you are not authorized to view this page.<br>';
  140. echo '</body></html>';
  141. }else
  142. print 'auth failure<br>';
  143. }else{
  144. $gcXmlDoc = new vrXMLDoc($xmlResponse);
  145. $nodeList = $gcXmlDoc->nodeList->childNodes[0];
  146. $thismessage = $gcXmlDoc->nodeList->nodeName[0];
  147. switch ($thismessage) {
  148. case 'merchant-calculation-callback':
  149. $cartisincluded=TRUE;
  150. $cpncode='';
  151. $ordPayProvider=20;
  152. if($standalonetestmode) print '<html><body>';
  153. $responsexml = '<?xml version="1.0" encoding="UTF-8"?>';
  154. $responsexml .= '<merchant-calculation-results xmlns="http://checkout.google.com/schema/2">';
  155. $responsexml .= '<results>';
  156. $thesessionid = $nodeList->getValueByTagName('sessionid');
  157. if(substr($thesessionid,0,3)=='cid') $hasclientid=TRUE; else $hasclientid=FALSE;
  158. $thesessionid = str_replace("'",'',substr($thesessionid,3));
  159. $clientuser = trim($nodeList->getValueByTagName('clientuser'));
  160. $_SESSION['clientUser']='';
  161. if($hasclientid){
  162. $_SESSION['clientID']=$thesessionid;
  163. $sSQL = "SELECT clUserName,clActions,clLoginLevel,clPercentDiscount FROM customerlogin WHERE clID='" . mysql_real_escape_string($thesessionid) . "'";
  164. $result = mysql_query($sSQL) or print(mysql_error());
  165. if($rs = mysql_fetch_array($result)){
  166. $_SESSION['clientUser']=$rs['clUserName'];
  167. $_SESSION['clientActions']=$rs['clActions'];
  168. $_SESSION['clientLoginLevel']=$rs['clLoginLevel'];
  169. $_SESSION['clientPercentDiscount']=(100.0-(double)$rs['clPercentDiscount'])/100.0;
  170. }
  171. mysql_free_result($result);
  172. }
  173. include(APPPATH.'views/pages/admin/uspsshipping.php');
  174. include(APPPATH.'views/pages/admin/cart.php');
  175. $all_coupons='';
  176. for($i1 = 0; $i1 < $nodeList->length; $i1++){
  177. if($nodeList->nodeName[$i1]=='calculate'){
  178. $obj2=$nodeList->childNodes[$i1];
  179. $shipmethods=array();
  180. $cpncodes=array();
  181. $usestateabbrev=TRUE;
  182. $savehandling=$handling;
  183. $cpnmessage = '<br />';
  184. for($i2 = 0; $i2 < $obj2->length; $i2++){
  185. if($obj2->nodeName[$i2]=='shipping'){
  186. $obj3=$obj2->childNodes[$i2];
  187. for($i3 = 0; $i3 < $obj3->length; $i3++){
  188. if($obj3->nodeName[$i3]=='method'){
  189. $themethod = getattributes($obj3->attributes[$i3], 'name');
  190. array_push($shipmethods, $themethod);
  191. }
  192. }
  193. }elseif($obj2->nodeName[$i2]=='merchant-code-strings'){
  194. $obj3=$obj2->childNodes[$i2];
  195. for($i3 = 0; $i3 < $obj3->length; $i3++){
  196. if($obj3->nodeName[$i3]=='merchant-code-string'){
  197. $cpncode = getattributes($obj3->attributes[$i3], 'code'); // Because they arrive in NON reverse order
  198. array_push($cpncodes, $cpncode);
  199. $all_coupons.=$cpncode.' ';
  200. }
  201. }
  202. }
  203. }
  204. $saveshipmethods = $shipmethods;
  205. for($i2 = 0; $i2 < $obj2->length; $i2++){
  206. if($obj2->nodeName[$i2]=='addresses'){
  207. $obj3=$obj2->childNodes[$i2];
  208. for($i3 = 0; $i3 < $obj3->length; $i3++){
  209. if($obj3->nodeName[$i3]=='anonymous-address'){
  210. $shipmethods = $saveshipmethods;
  211. $numshipoptions=0;
  212. $totShipOptions=0;
  213. $freeshippingapplied=FALSE;
  214. $noshipping=($shipType==0);
  215. $totaldiscounts=0;
  216. $gotcpncode=FALSE;
  217. $cpnmessage = '<br />';
  218. $iTotItems = 0;
  219. $destinationsupported=TRUE;
  220. $addressid = getattributes($obj3->attributes[$i3], 'id');
  221. $obj4=$obj3->childNodes[$i3];
  222. for($i4 = 0; $i4 < $obj4->length; $i4++){
  223. if($obj4->nodeName[$i4]=='country-code'){
  224. $shipCountryCode = $obj4->nodeValue[$i4];
  225. }elseif($obj4->nodeName[$i4]=='region'){
  226. $shipstate = $obj4->nodeValue[$i4];
  227. }elseif($obj4->nodeName[$i4]=='postal-code'){
  228. $destZip = $obj4->nodeValue[$i4];
  229. }
  230. }
  231. // Firstly check in the cache
  232. $foundincache=-1;
  233. for($gindex3=0; $gindex3 < $maxcacheid; $gindex3++){
  234. if($cacheaddress[$gindex3][0]==$destZip && $cacheaddress[$gindex3][1]==$shipCountryCode) $foundincache=$gindex3;
  235. }
  236. if($foundincache >= 0){
  237. $responsexml .= str_replace($cacheaddress[$foundincache][2], $addressid, $cacheaddress[$foundincache][3]);
  238. }else{
  239. $cacheaddress[$maxcacheid][0] = $destZip;
  240. $cacheaddress[$maxcacheid][1] = $shipCountryCode;
  241. $cacheaddress[$maxcacheid][2] = $addressid;
  242. $cacheaddress[$maxcacheid][3] = '';
  243. $sSQL = "SELECT countryID,countryName,countryTax,countryCode,countryFreeShip,countryOrder,countryEnabled FROM countries WHERE countryCode='" . mysql_real_escape_string($shipCountryCode) . "'";
  244. $result = mysql_query($sSQL) or print(mysql_error());
  245. if($rs = mysql_fetch_array($result)){
  246. //if trim(Session("clientUser")) <> "" AND (Session("clientActions") AND 2)=2 then countryTaxRate=0 else countryTaxRate = $rs['countryTax")
  247. $shipCountryID = $rs['countryID'];
  248. $shipCountryCode = $rs['countryCode'];
  249. $freeshipapplies = ($rs['countryFreeShip']==1);
  250. $shiphomecountry = ($rs['countryOrder']==2);
  251. $shipcountry = $rs['countryName'];
  252. if($rs['countryEnabled']==0) $destinationsupported=FALSE;
  253. }
  254. if($shiphomecountry){
  255. $sSQL = "SELECT stateTax,stateAbbrev,stateFreeShip,stateEnabled FROM states WHERE stateAbbrev='" . mysql_real_escape_string($shipstate) . "'";
  256. $result = mysql_query($sSQL) or print(mysql_error());
  257. if($rs = mysql_fetch_array($result)){
  258. $stateTaxRate=$rs['stateTax'];
  259. $shipStateAbbrev=$rs['stateAbbrev'];
  260. $freeshipapplies=($freeshipapplies && ($rs['stateFreeShip']==1));
  261. if($rs['stateEnabled']==0) $destinationsupported=FALSE;
  262. }
  263. }
  264. if(! $destinationsupported){
  265. foreach($shipmethods as $key => $shipmethod){
  266. $responsexml .= '<result' . ($noshipping ? '' : ' shipping-name="' . $shipmethod . '"') . ' address-id="' . $addressid . '"><shipping-rate currency="' . $countryCurrency . '">0.00</shipping-rate><shippable>false</shippable><total-tax currency="' . $countryCurrency . '">0.00</total-tax></result>';
  267. }
  268. }else{
  269. initshippingmethods();
  270. $totalgoods=0;
  271. $alldata='';
  272. $index = 0;
  273. $sSQL = "SELECT cartID,cartProdID,cartProdName,cartProdPrice,cartQuantity,pWeight,pShipping,pShipping2,pExemptions,pSection,topSection,pDims,pTax," . getlangid('pDescription',2) . " FROM cart INNER JOIN products ON cart.cartProdID=products.pID LEFT OUTER JOIN sections ON products.pSection=sections.sectionID WHERE cartCompleted=0 AND " . getgcsessionsql();
  274. if($standalonetestmode) print $sSQL . "<br>";
  275. $allcart = mysql_query($sSQL) or print(mysql_error());
  276. if(($itemsincart = mysql_num_rows($allcart)) > 0){
  277. while($rsCart=mysql_fetch_array($allcart)){
  278. $index++;
  279. $sSQL = "SELECT SUM(coPriceDiff) AS coPrDff FROM cartoptions WHERE coCartID=". $rsCart["cartID"];
  280. $result = mysql_query($sSQL) or print(mysql_error());
  281. if($rs = mysql_fetch_array($result)){
  282. $rsCart["cartProdPrice"] += (double)$rs["coPrDff"];
  283. }
  284. mysql_free_result($result);
  285. $sSQL = "SELECT SUM(coWeightDiff) AS coWghtDff FROM cartoptions WHERE coCartID=". $rsCart["cartID"];
  286. $result = mysql_query($sSQL) or print(mysql_error());
  287. if($rs = mysql_fetch_array($result)){
  288. $rsCart["pWeight"] += (double)$rs["coWghtDff"];
  289. }
  290. mysql_free_result($result);
  291. $runTot=$rsCart["cartProdPrice"] * (int)($rsCart["cartQuantity"]);
  292. $totalquantity += (int)($rsCart["cartQuantity"]);
  293. $totalgoods += $runTot;
  294. $thistopcat=0;
  295. if(trim(@$_SESSION['clientUser']) != '') $rsCart['pExemptions'] = ((int)$rsCart['pExemptions'] | (int)$_SESSION['clientActions']);
  296. if(($shipType==2 || $shipType==3 || $shipType==4 || $shipType==6 || $shipType==7) && (double)$rsCart['pWeight']<=0.0)
  297. $rsCart['pExemptions'] = ($rsCart['pExemptions'] | 4);
  298. if(($rsCart['pExemptions'] & 1)==1) $statetaxfree += $runTot;
  299. if(@$perproducttaxrate==TRUE){
  300. if(is_null($rsCart['pTax'])) $rsCart['pTax'] = $countryTaxRate;
  301. if(($rsCart['pExemptions'] & 2) != 2) $countryTax += (($rsCart['pTax'] * $runTot) / 100.0);
  302. }else{
  303. if(($rsCart['pExemptions'] & 2)==2) $countrytaxfree += $runTot;
  304. }
  305. if(($rsCart['pExemptions'] & 4)==4) $shipfreegoods += $runTot;
  306. addproducttoshipping($rsCart, $index);
  307. }
  308. }else{
  309. $errormsg = "Error, couldn't find cart";
  310. $success=FALSE;
  311. }
  312. calculatediscounts($totalgoods, false, $cpncode);
  313. if($totaldiscounts > $totalgoods) $totaldiscounts = $totalgoods;
  314. if($success && calculateshipping()){
  315. $freeshipamnt=0;
  316. insuranceandtaxaddedtoshipping();
  317. calculateshippingdiscounts(false);
  318. $freeshipamnt=0;
  319. $cpnmessage = substr($cpnmessage, 6);
  320. if(count($shipmethods) == 0){
  321. $noshipping=TRUE;
  322. $handling=$savehandling;
  323. $shipping=0;
  324. calculatetaxandhandling();
  325. writeresultstructure();
  326. }else{
  327. if($shipType==1 || ! $somethingToShip){
  328. foreach($shipmethods as $key => $shipmethod){
  329. if(xmlencodecharref($xxShipHa) == $shipmethod){
  330. $handling=$savehandling;
  331. if($freeshippingapplied) $shipping=0;
  332. $freeshipamnt=0;
  333. calculatetaxandhandling();
  334. writeresultstructure();
  335. $shipmethods[$key]='';
  336. }
  337. }
  338. }elseif($shipType>=2 && $shipType<=7){
  339. if($shipType==2 || $shipType==5) $totShipOptions=$numshipoptions; else $totShipOptions=$maxshipoptions;
  340. for($gindex4=0; $gindex4 < $totShipOptions; $gindex4++){
  341. foreach($shipmethods as $key => $shipmethod){
  342. // print "matching: " . $intShipping[$gindex4][5] . " : " . $intShipping[$gindex4][4] . " : " . $shipmethod . "<br>";
  343. if($shipmethod==''){
  344. // Already matched
  345. }elseif($shipType==3){
  346. if($iTotItems==$intShipping[$gindex4][3]){
  347. if(xmlencodecharref($intShipping[$gindex4][5]) == $shipmethod){
  348. $handling=$savehandling;
  349. $isstandardship=0;
  350. for($gindex12=0;$gindex12<$numuspsmeths;$gindex12++){
  351. if(str_replace('-',' ',strtolower($shipmethod)) == str_replace('-',' ',strtolower($uspsmethods[$gindex12][2])))
  352. $isstandardship=(int)$uspsmethods[$gindex12][1];
  353. }
  354. if($freeshippingapplied && $isstandardship != 0) $shipping=0; else $shipping=$intShipping[$gindex4][2];
  355. calculatetaxandhandling();
  356. writeresultstructure();
  357. $shipmethods[$key]='';
  358. }
  359. }
  360. }elseif($shipType==4 || $shipType==6 || $shipType==7){
  361. if($intShipping[$gindex4][3]==TRUE){
  362. if(xmlencodecharref($intShipping[$gindex4][0]) == $shipmethod){
  363. $handling=$savehandling;
  364. if($freeshippingapplied && $intShipping[$gindex4][4] != 0) $shipping=0; else $shipping=$intShipping[$gindex4][2];
  365. calculatetaxandhandling();
  366. writeresultstructure();
  367. $shipmethods[$key]='';
  368. }
  369. }
  370. }else{
  371. // print "matching: " . $intShipping[$gindex4][0] . " : " . $intShipping[$gindex4][4] . " : " . $shipmethod . "<br>";
  372. if(xmlencodecharref($intShipping[$gindex4][0]) == $shipmethod){
  373. $handling=$savehandling;
  374. if($freeshippingapplied && $intShipping[$gindex4][4] != 0) $shipping=0; else $shipping=$intShipping[$gindex4][2];
  375. calculatetaxandhandling();
  376. writeresultstructure();
  377. $shipmethods[$key]='';
  378. }
  379. }
  380. }
  381. }
  382. }elseif($shipType==0){
  383. $handling=$savehandling;
  384. $shipping=0;
  385. calculatetaxandhandling();
  386. writeresultstructure();
  387. }
  388. if(@$willpickuptext != ''){
  389. $noshipping=FALSE;
  390. foreach($shipmethods as $key => $shipmethod){
  391. if(xmlencodecharref($willpickuptext) == $shipmethod){
  392. if(@$willpickupcost=='') $willpickupcost=0;
  393. $handling=$savehandling;
  394. $shipping=$willpickupcost;
  395. $freeshipamnt=0;
  396. calculatetaxandhandling();
  397. writeresultstructure();
  398. $shipmethods[$key]='';
  399. }
  400. }
  401. }
  402. foreach($shipmethods as $key => $shipmethod){
  403. if($shipmethod != ''){
  404. $responsexml2 = '<result' . ($noshipping ? '' : ' shipping-name="' . $shipmethod . '"') . ' address-id="' . $addressid . '"><shipping-rate currency="' . $countryCurrency . '">0.00</shipping-rate><shippable>false</shippable><total-tax currency="' . $countryCurrency . '">0.00</total-tax></result>';
  405. $responsexml .= $responsexml2;
  406. $cacheaddress[$maxcacheid][3] .= $responsexml2;
  407. }
  408. }
  409. }
  410. }else{
  411. $responsexml .= '<error-message>' . $errormsg . '</error-message>';
  412. }
  413. $maxcacheid++;
  414. }
  415. }
  416. }
  417. }
  418. }
  419. }
  420. }
  421. }
  422. $responsexml .= '</results></merchant-calculation-results>';
  423. if($standalonetestmode)
  424. print "<HR>" . str_replace("<","<br />&lt;",str_replace('</','&lt;/',$responsexml)) . "<br />\n";
  425. else{
  426. ob_end_clean();
  427. print $responsexml;
  428. }
  429. break;
  430. case 'new-order-notification':
  431. function get_google_address($xmlobj,&$gEmail,&$gName,&$gAddress,&$gAddress2,&$gCity,&$gState,&$gZip,&$gCountry,&$gPhone){
  432. for($index2=0; $index2 < $xmlobj->length; $index2++){
  433. switch($xmlobj->nodeName[$index2]){
  434. case "email":
  435. $gEmail=$xmlobj->nodeValue[$index2];
  436. break;
  437. case "contact-name":
  438. $gName=$xmlobj->nodeValue[$index2];
  439. break;
  440. case "address1":
  441. $gAddress=$xmlobj->nodeValue[$index2];
  442. break;
  443. case "address2":
  444. $gAddress2=$xmlobj->nodeValue[$index2];
  445. break;
  446. case "city":
  447. $gCity=$xmlobj->nodeValue[$index2];
  448. break;
  449. case "region":
  450. $gState=$xmlobj->nodeValue[$index2];
  451. break;
  452. case "postal-code":
  453. $gZip=$xmlobj->nodeValue[$index2];
  454. break;
  455. case "country-code":
  456. $gCountry=$xmlobj->nodeValue[$index2];
  457. break;
  458. case "phone":
  459. $gPhone=$xmlobj->nodeValue[$index2];
  460. break;
  461. }
  462. }
  463. }
  464. $totaldiscounts=0;
  465. $stateTax=0;
  466. $countryTax=0;
  467. $totalgoods=0;
  468. $handling=0;
  469. $shipping=0;
  470. $freeshipamnt=0;
  471. $cpnmessage='';
  472. $ordComLoc=0;
  473. $ordAddInfo='';
  474. $ordAffiliate='';
  475. $ordExtra1='';
  476. $ordExtra2='';
  477. $ordShipExtra1='';
  478. $ordShipExtra2='';
  479. $ordCheckoutExtra1='';
  480. $ordCheckoutExtra2='';
  481. $success=TRUE;
  482. for($i1 = 0; $i1 < $nodeList->length; $i1++){
  483. switch($nodeList->nodeName[$i1]){
  484. case "google-order-number":
  485. $ordAuthNumber=$nodeList->nodeValue[$i1];
  486. break;
  487. case "order-total":
  488. $ordTotal=$nodeList->nodeValue[$i1];
  489. break;
  490. case "shopping-cart":
  491. $hasclientid=FALSE;
  492. $thesessionid = '0';
  493. $thesessionid = $nodeList->childNodes[$i1]->getValueByTagName('sessionid');
  494. if(substr($thesessionid,0,3)=='cid') $hasclientid=TRUE;
  495. $thesessionid = str_replace("'", '', substr($thesessionid,3));
  496. $thissession=$thesessionid;
  497. if($thesessionid==''){
  498. $success=FALSE;
  499. $thesessionid = '0';
  500. }
  501. $ordAffiliate = $nodeList->childNodes[$i1]->getValueByTagName('partner');
  502. $obj2=$nodeList->childNodes[$i1];
  503. for($i2 = 0; $i2 < $obj2->length; $i2++){
  504. if($obj2->nodeName[$i2]=='items'){
  505. $obj3=$obj2->childNodes[$i2];
  506. for($i3 = 0; $i3 < $obj3->length; $i3++){
  507. if($obj3->nodeName[$i3]=='item'){
  508. $obj4=$obj3->childNodes[$i3];
  509. if(($objdisc = $obj4->getValueByTagName("discountflag")) != null){
  510. if($objdisc=='true'){
  511. $obj5 = $obj4->getValueByTagName("unit-price");
  512. $totaldiscounts -= $obj5;
  513. $obj5 = $obj4->getValueByTagName("item-description");
  514. $cpnmessage = str_replace(' - ', '<br />', $obj5) . '<br />' . $cpnmessage;
  515. }
  516. }
  517. }
  518. }
  519. }
  520. }
  521. break;
  522. case "total-tax":
  523. $countryTax=$nodeList->nodeValue[$i1];
  524. break;
  525. case "order-adjustment":
  526. $obj2=$nodeList->childNodes[$i1];
  527. for($i2 = 0; $i2 < $obj2->length; $i2++){
  528. if($obj2->nodeName[$i2]=='merchant-codes'){
  529. $obj3=$obj2->childNodes[$i2];
  530. for($i3 = 0; $i3 < $obj3->length; $i3++){
  531. if($obj3->nodeName[$i3]=='coupon-adjustment'){
  532. $obj4=$obj3->childNodes[$i3];
  533. for($i4 = 0; $i4 < $obj4->length; $i4++){
  534. if($obj4->nodeName[$i4]=='applied-amount')
  535. $totaldiscounts += $obj4->nodeValue[$i4];
  536. elseif($obj4->nodeName[$i4]=='message')
  537. $cpnmessage = $obj4->nodeValue[$i4] . '<br />' . $cpnmessage;
  538. }
  539. }
  540. }
  541. }elseif($obj2->nodeName[$i2]=='shipping'){
  542. $obj3=$obj2->childNodes[$i2];
  543. if(($obj4 = $obj3->getValueByTagName("shipping-name")) != null) $shipMethod=$obj4;
  544. if(($obj4 = $obj3->getValueByTagName("shipping-cost")) != null) $shipping=$obj4;
  545. }elseif($obj2->nodeName[$i2]=='total-tax'){
  546. $countryTax += $obj2->nodeValue[$i2];
  547. }
  548. }
  549. break;
  550. case "buyer-billing-address":
  551. get_google_address($nodeList->childNodes[$i1],$ordEmail,$ordName,$ordAddress,$ordAddress2,$ordCity,$ordState,$ordZip,$ordCountry,$ordPhone);
  552. break;
  553. case "buyer-shipping-address":
  554. get_google_address($nodeList->childNodes[$i1],$dummyEmail,$ordShipName,$ordShipAddress,$ordShipAddress2,$ordShipCity,$ordShipState,$ordShipZip,$ordShipCountry,$ordShipPhone);
  555. break;
  556. }
  557. }
  558. if($success){
  559. $sSQL = "SELECT cartID FROM cart WHERE cartCompleted=0 AND " . getgcsessionsql();
  560. $result = mysql_query($sSQL) or print(mysql_error());
  561. $thissql=$sSQL;
  562. $success = (mysql_num_rows($result) > 0);
  563. }
  564. if($success){
  565. $totalgoods = ($ordTotal - ($stateTax+$countryTax+$shipping+$handling)) + $totaldiscounts;
  566. $sSQL = "SELECT ordID FROM orders WHERE ordAuthNumber='' AND " . getgcordersessionsql();
  567. $result = mysql_query($sSQL) or print(mysql_error());
  568. if($rs = mysql_fetch_array($result))
  569. $orderid=$rs["ordID"];
  570. else
  571. $orderid="";
  572. mysql_free_result($result);
  573. if($ordShipName=='' && $ordShipAddress=='' && $ordShipAddress2=='' && $ordShipCity=='') $ordShipCountry='';
  574. if($orderid==""){
  575. if(stristr('AA,AE,AP',$ordState)) $ordPoApo=1;
  576. else $ordPoApo=0;
  577. if(stristr('AA,AE,AP',$ordShipState)) $ordShipPoApo=1;
  578. else $ordShipPoApo=0;
  579. $sSQL = "INSERT INTO orders (ordSessionID,ordName,ordAddress,ordAddress2,ordCity,ordState,ordZip,ordCountry,ordEmail,ordPhone,ordShipName,ordShipAddress,ordShipAddress2,ordShipCity,ordShipState,ordShipZip,ordShipCountry,ordPayProvider,ordAuthNumber,ordShipping,ordStateTax,ordCountryTax,ordHSTTax,ordHandling,ordShipType,ordTotal,ordDate,ordStatus,ordStatusDate,ordComLoc,ordIP,ordAffiliate,ordExtra1,ordExtra2,ordDiscount,ordDiscountText,ordAddInfo,ordPoApo,ordShipPoApo,ord_cert_amt,ordEID) VALUES (";
  580. $sSQL .= "'" . $thesessionid . "',";
  581. //if($hasclientid) $sSQL .= "'" . mysql_real_escape_string($thesessionid) . "',"; else $sSQL .= "'0',";
  582. $sSQL .= "'" . mysql_real_escape_string($ordName) . "',";
  583. $sSQL .= "'" . mysql_real_escape_string($ordAddress) . "',";
  584. $sSQL .= "'" . mysql_real_escape_string($ordAddress2) . "',";
  585. $sSQL .= "'" . mysql_real_escape_string($ordCity) . "',";
  586. $sSQL .= "'" . mysql_real_escape_string($ordState) . "',";
  587. $sSQL .= "'" . mysql_real_escape_string($ordZip) . "',";
  588. $sSQL .= "'" . mysql_real_escape_string($ordCountry) . "',";
  589. $sSQL .= "'" . mysql_real_escape_string($ordEmail) . "',";
  590. $sSQL .= "'" . mysql_real_escape_string($ordPhone) . "',";
  591. $sSQL .= "'" . mysql_real_escape_string($ordShipName) . "',";
  592. $sSQL .= "'" . mysql_real_escape_string($ordShipAddress) . "',";
  593. $sSQL .= "'" . mysql_real_escape_string($ordShipAddress2) . "',";
  594. $sSQL .= "'" . mysql_real_escape_string($ordShipCity) . "',";
  595. $sSQL .= "'" . mysql_real_escape_string($ordShipState) . "',";
  596. $sSQL .= "'" . mysql_real_escape_string($ordShipZip) . "',";
  597. $sSQL .= "'" . mysql_real_escape_string($ordShipCountry) . "',";
  598. $sSQL .= "'20',"; // ordPayProvider
  599. $sSQL .= "'" . $ordAuthNumber . "',";
  600. $sSQL .= "'" . mysql_real_escape_string($shipping-$freeshipamnt) . "',";
  601. if($usehst){
  602. $sSQL .= "0,";
  603. $sSQL .= "0,";
  604. $sSQL .= ($stateTax + $countryTax) . ",";
  605. }else{
  606. $sSQL .= "'" . mysql_real_escape_string($stateTax) . "',";
  607. $sSQL .= "'" . mysql_real_escape_string($countryTax) . "',";
  608. $sSQL .= "0,";
  609. }
  610. $sSQL .= "'" . mysql_real_escape_string($handling) . "',";
  611. $sSQL .= "'" . mysql_real_escape_string($shipMethod) . "',";
  612. /*if($adminIntShipping != 0 && $ordShipCountry != $origCountryCode)
  613. $sSQL .= "'" . mysql_real_escape_string($adminIntShipping) . "',";
  614. else
  615. $sSQL .= "'" . mysql_real_escape_string($shipType) . "',";*/
  616. $sSQL .= "'" . mysql_real_escape_string($totalgoods) . "',";
  617. $sSQL .= "'" . date("Y-m-d H:i:s", time() + ($dateadjust*60*60)) . "',";
  618. $sSQL .= "2,"; // Status
  619. $sSQL .= "'" . date("Y-m-d H:i:s", time() + ($dateadjust*60*60)) . "',";
  620. $sSQL .= "'" . $ordComLoc . "',";
  621. $sSQL .= "'',"; // IP
  622. $sSQL .= "'" . mysql_real_escape_string(trim($ordAffiliate)) . "',";
  623. $sSQL .= "'" . mysql_real_escape_string($ordExtra1) . "',";
  624. $sSQL .= "'" . mysql_real_escape_string($ordExtra2) . "',";
  625. /*$sSQL .= "'" . mysql_real_escape_string($ordShipExtra1) . "',";
  626. $sSQL .= "'" . mysql_real_escape_string($ordShipExtra2) . "',";
  627. $sSQL .= "'" . mysql_real_escape_string($ordCheckoutExtra1) . "',";
  628. $sSQL .= "'" . mysql_real_escape_string($ordCheckoutExtra2) . "',";*/
  629. $sSQL .= "'" . mysql_real_escape_string($totaldiscounts) . "',";
  630. $sSQL .= "'" . mysql_real_escape_string(trim(substr($cpnmessage,0,255))) . "',";
  631. $sSQL .= "'" . mysql_real_escape_string($ordAddInfo) . "',";
  632. $sSQL .= "'" . mysql_real_escape_string($ordPoApo) . "',";
  633. $sSQL .= "'" . mysql_real_escape_string($ordShipPoApo) . "',";
  634. $sSQL .= "'" . mysql_real_escape_string($ord_cert_amt) . "',";
  635. $sSQL .= "'" . mysql_real_escape_string($ordEID) . "')";
  636. mysql_query($sSQL) or $sqlerror=(mysql_error());
  637. $orderid = mysql_insert_id();
  638. if(!setNewLocation( 2 , $orderid ));
  639. }else{
  640. $sSQL = "UPDATE orders SET ";
  641. $sSQL .= "ordSessionID='" . mysql_real_escape_string($thesessionid) . "',";
  642. $sSQL .= "ordName='" . mysql_real_escape_string($ordName) . "',";
  643. $sSQL .= "ordAddress='" . mysql_real_escape_string($ordAddress) . "',";
  644. $sSQL .= "ordAddress2='" . mysql_real_escape_string($ordAddress2) . "',";
  645. $sSQL .= "ordCity='" . mysql_real_escape_string($ordCity) . "',";
  646. $sSQL .= "ordState='" . mysql_real_escape_string($ordState) . "',";
  647. $sSQL .= "ordZip='" . mysql_real_escape_string($ordZip) . "',";
  648. $sSQL .= "ordCountry='" . mysql_real_escape_string($ordCountry) . "',";
  649. $sSQL .= "ordEmail='" . mysql_real_escape_string($ordEmail) . "',";
  650. $sSQL .= "ordPhone='" . mysql_real_escape_string($ordPhone) . "',";
  651. $sSQL .= "ordShipName='" . mysql_real_escape_string($ordShipName) . "',";
  652. $sSQL .= "ordShipAddress='" . mysql_real_escape_string($ordShipAddress) . "',";
  653. $sSQL .= "ordShipAddress2='" . mysql_real_escape_string($ordShipAddress2) . "',";
  654. $sSQL .= "ordShipCity='" . mysql_real_escape_string($ordShipCity) . "',";
  655. $sSQL .= "ordShipState='" . mysql_real_escape_string($ordShipState) . "',";
  656. $sSQL .= "ordShipZip='" . mysql_real_escape_string($ordShipZip) . "',";
  657. $sSQL .= "ordShipCountry='" . mysql_real_escape_string($ordShipCountry) . "',";
  658. $sSQL .= "ordPayProvider='20',";
  659. $sSQL .= "ordAuthNumber='" . $ordAuthNumber . "',"; // Not yet authorized
  660. $sSQL .= "ordShipping='" . ($shipping - $freeshipamnt) . "',";
  661. if($usehst){
  662. $sSQL .= "ordStateTax=0,";
  663. $sSQL .= "ordCountryTax=0,";
  664. $sSQL .= "ordHSTTax=" . ($stateTax + $countryTax) . ",";
  665. }else{
  666. $sSQL .= "ordStateTax='" . $stateTax . "',";
  667. $sSQL .= "ordCountryTax='" . $countryTax . "',";
  668. $sSQL .= "ordHSTTax=0,";
  669. }
  670. $sSQL .= "ordHandling='" . $handling . "',";
  671. $sSQL .= "ordShipType='" . $shipMethod . "',";
  672. /*if($adminIntShipping != 0 && $ordShipCountry != $origCountryCode)
  673. $sSQL .= "ordShipCarrier='" . $adminIntShipping . "',";
  674. else
  675. $sSQL .= "ordShipCarrier='" . $shipType . "',";*/
  676. $sSQL .= "ordTotal='" . $totalgoods . "',";
  677. $sSQL .= "ordDate='" . date("Y-m-d H:i:s", time() + ($dateadjust*60*60)) . "',";
  678. $sSQL .= "ordComLoc=" . $ordComLoc . ",";
  679. $sSQL .= "ordIP='" . @$_SERVER["REMOTE_ADDR"] . "',";
  680. $sSQL .= "ordAffiliate='" . mysql_real_escape_string(trim($ordAffiliate)) . "',";
  681. /*$sSQL .= "ordExtra1='" . mysql_real_escape_string($ordExtra1) . "',";
  682. $sSQL .= "ordExtra2='" . mysql_real_escape_string($ordExtra2) . "',";
  683. $sSQL .= "ordShipExtra1='" . mysql_real_escape_string($ordShipExtra1) . "',";
  684. $sSQL .= "ordShipExtra2='" . mysql_real_escape_string($ordShipExtra2) . "',";
  685. $sSQL .= "ordCheckoutExtra1='" . mysql_real_escape_string($ordCheckoutExtra1) . "',";
  686. $sSQL .= "ordCheckoutExtra2='" . mysql_real_escape_string($ordCheckoutExtra2) . "',";*/
  687. $sSQL .= "ordDiscount='" . $totaldiscounts . "',";
  688. $sSQL .= "ordDiscountText='" . mysql_real_escape_string(trim(substr($cpnmessage,0,255))) . "',";
  689. $sSQL .= "ordAddInfo='" . mysql_real_escape_string($ordAddInfo) . "'";
  690. $sSQL .= " WHERE ordID='" . $orderid . "'";
  691. mysql_query($sSQL) or print(mysql_error());
  692. }
  693. $sSQL="UPDATE cart SET cartOrderID=". $orderid . ",cartCompleted=2 WHERE cartCompleted=0 AND " . getgcsessionsql();
  694. mysql_query($sSQL) or print(mysql_error());
  695. //split order if needed
  696. include(DOCROOT.'includes/splitorder.php');
  697. splitOrders($orderid);
  698. $cfurl='https://' . ($googledemomode ? 'sandbox' : 'checkout') . '.google.com' . ($googledemomode ? '/checkout' : '') . '/cws/v2/Merchant/' . $googledata1 . '/request';
  699. $acttext = '<add-merchant-order-number xmlns="http://checkout.google.com/schema/2" google-order-number="' . $ordAuthNumber . '"><merchant-order-number>' . $orderid . '</merchant-order-number></add-merchant-order-number>';
  700. if(@$pathtocurl != ""){
  701. exec($pathtocurl . ($cfcert != '' ? ' -E \'' . $cfcert . '\'' : '') . ' --data-binary \'' . str_replace("'","\'",'<?xml version="1.0" encoding="UTF-8"?>' . $acttext) . '\' ' . $cfurl, $cfres, $retvar);
  702. $cfres = implode("\n",$cfres);
  703. }else{
  704. if (!$ch = curl_init()) {
  705. print "cURL package not installed in PHP. Set \$pathtocurl parameter.";
  706. $success=FALSE;
  707. }else{
  708. curl_setopt($ch, CURLOPT_URL, $cfurl);
  709. $headers = array('Authorization: Basic ' . base64_encode($googledata1 . ":" . $googledata2), 'Content-Type: application/xml', 'Accept: application/xml');
  710. curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
  711. curl_setopt($ch, CURLOPT_POST, 1);
  712. curl_setopt($ch, CURLOPT_HEADER, 0);
  713. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
  714. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
  715. curl_setopt($ch, CURLOPT_POSTFIELDS, '<?xml version="1.0" encoding="UTF-8"?>' . $acttext);
  716. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  717. if(@$curlproxy!=''){
  718. curl_setopt($ch, CURLOPT_PROXY, $curlproxy);
  719. }
  720. $cfres = curl_exec($ch);
  721. if(curl_error($ch) == '')
  722. curl_close($ch);
  723. }
  724. }
  725. }
  726. print '<?xml version="1.0" encoding="UTF-8"?><notification-acknowledgment xmlns="http://checkout.google.com/schema/2"/>';
  727. break;
  728. case 'order-state-change-notification':
  729. $ordnumber = $nodeList->getValueByTagName('google-order-number');
  730. $sSQL = "SELECT ordID FROM orders WHERE ordAuthNumber='" . mysql_real_escape_string($ordnumber) . "' AND ordPayProvider=20";
  731. $result = mysql_query($sSQL) or print(mysql_error());
  732. if($rs = mysql_fetch_assoc($result))
  733. $ordID=$rs['ordID'];
  734. else
  735. $ordID='';
  736. $financialstate = str_replace("'",'',$nodeList->getValueByTagName('new-financial-order-state'));
  737. $oldfinancialstate = str_replace("'",'',$nodeList->getValueByTagName('previous-financial-order-state'));
  738. $fulfillmentstate = str_replace("'",'',$nodeList->getValueByTagName('new-fulfillment-order-state'));
  739. $oldfulfillmentstate = str_replace("'",'',$nodeList->getValueByTagName('previous-fulfillment-order-state'));
  740. if($ordID != ''){
  741. if($oldfinancialstate != $financialstate){
  742. $result = mysql_query("SELECT ordStatus FROM orders WHERE ordID='" . $ordID . "'") or print(mysql_error());
  743. if($rs = mysql_fetch_assoc($result)) $oldstatus=(int)$rs['ordStatus']; else $oldstatus=999;
  744. switch($financialstate){
  745. case "CHARGEABLE":
  746. if($oldstatus < 3) do_stock_management($ordID);
  747. mysql_query("UPDATE cart SET cartCompleted=1 WHERE cartOrderID=" . $ordID) or print(mysql_error());
  748. mysql_query("UPDATE orders SET ordStatus=5,ordStatusDate='" . date("Y-m-d H:i:s", time() + ($dateadjust*60*60)) . "' WHERE ordID=" . $ordID) or print(mysql_error());
  749. if(!setNewLocation( 5 , $ordID ,'Automatic', 'Google' ));
  750. do_order_success($ordID,$emailAddr,$sendEmail && ($oldstatus < 3),FALSE,($oldstatus < 3),FALSE,FALSE);
  751. break;
  752. case "CHARGING":
  753. break;
  754. case "CHARGED":
  755. if($oldstatus < 3) do_stock_management($ordID);
  756. mysql_query("UPDATE cart SET cartCompleted=1 WHERE cartOrderID=" . $ordID) or print(mysql_error());
  757. mysql_query("UPDATE orders SET ordStatus=3,ordStatusDate='" . date("Y-m-d H:i:s", time() + ($dateadjust*60*60)) . "' WHERE ordID=" . $ordID) or print(mysql_error());
  758. $sql_check="SELECT p.pDropship FROM cart c LEFT JOIN products p ON c.cartProdID=p.pID WHERE p.pDropship>0 AND c.cartOrderID=".$ordID;
  759. $result_check=mysql_query($sql_check);
  760. if(!$result_check)$num_rows=0;
  761. else $num_rows=mysql_num_rows($result_check);
  762. if(!setNewLocation( 3 , $ordID , 'Automatic','Google' ));
  763. if($num_rows>0) {
  764. if(!setNewLocation( 10 , $ordID , 'Automatic','Google Dropship' ));
  765. mysql_query("UPDATE orders SET ordStatus=10,ordStatusDate='" . date("Y-m-d H:i:s", time() + ($dateadjust*60*60)) . "' WHERE ordID=" . $ordID) or print(mysql_error());
  766. }
  767. do_order_success($ordID,$emailAddr,$sendEmail && ($oldstatus < 3),FALSE,($oldstatus < 3),TRUE,TRUE);
  768. break;
  769. case "PAYMENT_DECLINED":
  770. if($oldstatus >= 3) release_stock($ordID);
  771. mysql_query("UPDATE orders SET ordStatus=2,ordStatusDate='" . date("Y-m-d H:i:s", time() + ($dateadjust*60*60)) . "' WHERE ordID=" . $ordID) or print(mysql_error());
  772. if(!setNewLocation( 2 , $ordID , 'Automatic','Google' ));
  773. break;
  774. case "CANCELLED":
  775. if($oldstatus >= 3) release_stock($ordID);
  776. mysql_query("UPDATE orders SET ordStatus=0,ordStatusDate='" . date("Y-m-d H:i:s", time() + ($dateadjust*60*60)) . "' WHERE ordID=" . $ordID) or print(mysql_error());
  777. if(!setNewLocation( 0 , $ordID, 'Automatic','Google' ));
  778. //sendNotificationEmail($ordID);
  779. break;
  780. case "CANCELLED_BY_GOOGLE":
  781. if($oldstatus >= 3) release_stock($ordID);
  782. $sSQL = "SELECT ordStatusInfo FROM orders WHERE ordID=" . $ordID;
  783. $result = mysql_query($sSQL) or print(mysql_error());
  784. if($rs = mysql_fetch_array($result)) $currstatusinfo = $rs['ordStatusInfo']; else $currstatusinfo = '';
  785. mysql_query("UPDATE orders SET ordStatus=0,ordStatusDate='" . date("Y-m-d H:i:s", time() + ($dateadjust*60*60)) . "',ordStatusInfo='" . mysql_real_escape_string('Cancelled By Google.' . "\r\n" . $currstatusinfo) . "' WHERE ordID=" . $ordID) or print(mysql_error());
  786. if(!setNewLocation( 0 , $ordID ,'Automatic','Cancelled By Google.'));
  787. //sendNotificationEmail($ordID);
  788. break;
  789. }
  790. }
  791. if($oldfulfillmentstate != $fulfillmentstate){
  792. if($googledeliveredstate=='') $googledeliveredstate=11;
  793. switch($fulfillmentstate){
  794. case "DELIVERED":
  795. mysql_query("UPDATE orders SET ordStatus=" . $googledeliveredstate . ",ordStatusDate='" . date("Y-m-d H:i:s", time() + ($dateadjust*60*60)) . "' WHERE ordID=" . $ordID) or print(mysql_error());
  796. if(!setNewLocation( $googledeliveredstate , $ordID, 'Automatic','Google'));
  797. break;
  798. }
  799. }
  800. }
  801. print '<?xml version="1.0" encoding="UTF-8"?><notification-acknowledgment xmlns="http://checkout.google.com/schema/2"/>';
  802. break;
  803. case 'charge-amount-notification':
  804. print '<?xml version="1.0" encoding="UTF-8"?><notification-acknowledgment xmlns="http://checkout.google.com/schema/2"/>';
  805. break;
  806. case 'chargeback-amount-notification':
  807. $success=TRUE;
  808. $amount=0;
  809. $ordID=0;
  810. $ordnumber = $nodeList->getValueByTagName('google-order-number');
  811. $sSQL = "SELECT ordID,ordShipping,ordStateTax,ordCountryTax,ordHandling,ordTotal,ordDiscount,ordAuthNumber,ordStatus FROM orders WHERE ordAuthNumber='" . mysql_real_escape_string($ordnumber) . "' AND ordPayProvider=20";
  812. $result = mysql_query($sSQL) or print(mysql_error());
  813. if($rs = mysql_fetch_array($result)){
  814. $ordID = $rs['ordID'];
  815. $amount = ($rs['ordShipping']+$rs['ordStateTax']+$rs['ordCountryTax']+$rs['ordTotal']+$rs['ordHandling'])-$rs['ordDiscount'];
  816. $oldstatus = $rs['ordStatus'];
  817. }else
  818. $success = FALSE;
  819. $refundamount = $nodeList->getValueByTagName('total-chargeback-amount');
  820. if($success && $amount <= $refundamount){
  821. if($oldstatus >= 3) release_stock($ordID);
  822. mysql_query("UPDATE orders SET ordStatus=0,ordStatusDate='" . date("Y-m-d H:i:s", time() + ($dateadjust*60*60)) . "' WHERE ordID=" . $ordID);
  823. if(!setNewLocation( 0 , $ordID ,'Automatic','Chargeback By Google.'));
  824. }
  825. print '<?xml version="1.0" encoding="UTF-8"?><notification-acknowledgment xmlns="http://checkout.google.com/schema/2"/>';
  826. break;
  827. case 'refund-amount-notification':
  828. $success=TRUE;
  829. $amount=0;
  830. $ordID=0;
  831. $ordnumber = $nodeList->getValueByTagName('google-order-number');
  832. $sSQL = "SELECT ordID,ordShipping,ordStateTax,ordCountryTax,ordHandling,ordTotal,ordDiscount,ordAuthNumber,ordStatus FROM orders WHERE ordAuthNumber='" . mysql_real_escape_string($ordnumber) . "' AND ordPayProvider=20";
  833. $result = mysql_query($sSQL) or print(mysql_error());
  834. if($rs = mysql_fetch_array($result)){
  835. $ordID = $rs['ordID'];
  836. $amount = ($rs['ordShipping']+$rs['ordStateTax']+$rs['ordCountryTax']+$rs['ordTotal']+$rs['ordHandling'])-$rs['ordDiscount'];
  837. $oldstatus = $rs['ordStatus'];
  838. }else
  839. $success = FALSE;
  840. $refundamount = $nodeList->getValueByTagName('total-refund-amount');
  841. if($success && $amount <= $refundamount){
  842. if($oldstatus >= 3) release_stock($ordID);
  843. mysql_query("UPDATE orders SET ordStatus=0,ordStatusDate='" . date("Y-m-d H:i:s", time() + ($dateadjust*60*60)) . "' WHERE ordID=" . $ordID);
  844. if(!setNewLocation( 0 , $ordID ,'Automatic','Refund By Google.'));
  845. }
  846. print '<?xml version="1.0" encoding="UTF-8"?><notification-acknowledgment xmlns="http://checkout.google.com/schema/2"/>';
  847. break;
  848. case 'risk-information-notification':
  849. $ipaddress = '';
  850. $avs = '';
  851. $cvv = '';
  852. $iseligable = '';
  853. $partialcc = '';
  854. $acctage = 0;
  855. $ordnumber = $nodeList->getValueByTagName('google-order-number');
  856. for($i1 = 0; $i1 < $nodeList->length; $i1++){
  857. if($nodeList->nodeName[$i1]=='risk-information'){
  858. $obj2=$nodeList->childNodes[$i1];
  859. for($i2 = 0; $i2 < $obj2->length; $i2++){
  860. if($obj2->nodeName[$i2]=='ip-address'){
  861. $ipaddress = $obj2->nodeValue[$i2];
  862. }elseif($obj2->nodeName[$i2]=='avs-response'){
  863. $avs = $obj2->nodeValue[$i2];
  864. }elseif($obj2->nodeName[$i2]=='cvn-response'){
  865. $cvv = $obj2->nodeValue[$i2];
  866. }elseif($obj2->nodeName[$i2]=='buyer-account-age'){
  867. $acctage = $obj2->nodeValue[$i2];
  868. }elseif($obj2->nodeName[$i2]=='partial-cc-number'){
  869. $partialcc = $obj2->nodeValue[$i2];
  870. }elseif($obj2->nodeName[$i2]=='eligible-for-protection'){
  871. $iseligable = $obj2->nodeValue[$i2];
  872. if($iseligable=='false') $iseligable=$xxNo; else $iseligable=$xxYes;
  873. }
  874. }
  875. }
  876. }
  877. if($ordnumber != ''){
  878. $sSQL = "UPDATE orders SET ordIP='" . mysql_real_escape_string($ipaddress) . "',ordAVS='" . mysql_real_escape_string($avs) . "/" . $iseligable . "',ordCVV='" . mysql_real_escape_string($cvv) . '/' . $acctage . "',ordCNum='" . $partialcc . "' WHERE ordAuthNumber='" . $ordnumber . "' AND ordPayProvider=20";
  879. mysql_query($sSQL);
  880. }
  881. print '<?xml version="1.0" encoding="UTF-8"?><notification-acknowledgment xmlns="http://checkout.google.com/schema/2"/>';
  882. break;
  883. case 'request-received':
  884. print '<?xml version="1.0" encoding="UTF-8"?><notification-acknowledgment xmlns="http://checkout.google.com/schema/2"/>';
  885. break;
  886. case 'error':
  887. print '<?xml version="1.0" encoding="UTF-8"?><notification-acknowledgment xmlns="http://checkout.google.com/schema/2"/>';
  888. break;
  889. case 'diagnosis':
  890. print '<?xml version="1.0" encoding="UTF-8"?><notification-acknowledgment xmlns="http://checkout.google.com/schema/2"/>';
  891. break;
  892. default:
  893. }
  894. }
  895. if(@$debugmode==TRUE){
  896. $htmlemails=FALSE;
  897. $emlNl="\n";
  898. $headers = "MIME-Version: 1.0\n";
  899. $headers .= "From: ".$emailAddr." <".$emailAddr.">\n";
  900. $headers .= "Content-type: text/plain; charset=ISO-8859-1\n";
  901. $emailtxt = "ThisMessage: " . $xmlResponse . $emlNl . $emlNl . "Response: " . $responsexml . $emlNl;
  902. $emailtxt .= "Callback took: " . (microtime_float() - $time_start) . " seconds" . $emlNl;
  903. mail($emailAddr, "/admin/gcallback.php debug", $emailtxt.'Coupons='.$all_coupons, $headers);
  904. }
  905. ?>