/** * Handle the merchant-calculations-callback request from google. This is for calculating post checkout * adjustments to the order total such as tax, shipping , gift certificates and coupon codes * * @param Array $data The parsed array of data representing the google request * * @return void **/ private function HandleMerchantCallback($data) { $root = 'merchant-calculation-callback'; $this->LoadCart($data[$root]['shopping-cart']['merchant-private-data']['VALUE']); include_once dirname(__FILE__) . '/library/googlemerchantcalculations.php'; include_once dirname(__FILE__) . '/library/googleresult.php'; $currency = GetDefaultCurrency(); $merchant_calc = new GoogleMerchantCalculations($currency['currencycode']); $addresses = $this->get_arr_result($data[$root]['calculate']['addresses']['anonymous-address']); //mysql_query("INSERT INTO isc_orderlogs(ordervalue) VALUES ( 'addresses: ".print_r(count($addresses),true)."')"); foreach ($addresses as $curr_address) { $curr_id = $curr_address['id']; $country = $curr_address['country-code']['VALUE']; $city = $curr_address['city']['VALUE']; $region = $curr_address['region']['VALUE']; $postal_code = $curr_address['postal-code']['VALUE']; // Loop through each shipping method if merchant-calculated shipping // support is to be provided if (isset($data[$root]['calculate']['shipping']['method'])) { $shipping = $this->get_arr_result($data[$root]['calculate']['shipping']['method']); foreach ($shipping as $curr_ship) { $costs = $this->CalculateShippingCost($curr_address); $name = $curr_ship['name']; $zoneInfo = $costs['zone']; unset($costs['zone']); $merchant_result = new GoogleResult($curr_id); $costs = current($costs); $found = false; $price = 0; foreach ($costs as $key => $cost) { if ($zoneInfo['zoneid'] == 1) { $shipping_name = $cost['description']; } else { $shipping_name = $cost['description'] . ' (' . $zoneInfo['zonename'] . ')'; } if ($name != $shipping_name) { continue; } //Compute the price for this shipping method and address id if (isset($cost['price'])) { $price = $cost['price']; } $merchant_result->SetShippingDetails($name, $price, 'true'); $found = true; break; } if (!$found) { $merchant_result->SetShippingDetails($name, $price, 'false'); } if ($data[$root]['calculate']['tax']['VALUE'] == "true") { //Compute tax for this address id and shipping type $amount = $this->RecalculateTax($data, $price, $name); $merchant_result->SetTaxable(true); $merchant_result->SetTaxDetails($amount); } if (isset($data[$root]['calculate']['merchant-code-strings']['merchant-code-string'])) { $codes = $this->get_arr_result($data[$root]['calculate']['merchant-code-strings']['merchant-code-string']); foreach ($codes as $curr_code) { $giftcert = $this->ValidateGiftCertificate($curr_code['code'], $data); if ($giftcert === false) { $coupons = $this->ValidateCouponCode($curr_code['code'], $data, $cc_count = count($codes)); $merchant_result->AddCoupons($coupons); /*if( count($codes) > 1 ) { break; }*/ } else { $merchant_result->AddGiftCertificates($giftcert); } } } else { if (isset($data[$root]['calculate']['merchant-code-strings']) && !isset($data[$root]['calculate']['merchant-code-strings']['merchant-code-string'])) { $googlecheckoutflag = 0; $sescouponvalue = $GLOBALS['ISC_CLASS_CART']->api->GetAppliedCouponCodes(); //mysql_query("INSERT INTO isc_orderlogs(ordervalue) VALUES ( 'ses 1: ".print_r($sescouponvalue,true)."')"); if (!empty($sescouponvalue)) { foreach ($sescouponvalue as $ccid => $ccval) { if (array_key_exists('googlecheckout', $ccval)) { $GLOBALS['ISC_CLASS_CART']->api->RemoveCouponCode($ccval['couponid']); $googlecheckoutflag = 1; } } if ($googlecheckoutflag == 1) { $GLOBALS['ISC_CLASS_CART']->api->UpdateCartInformation(); } //$temp_products = $GLOBALS['ISC_CLASS_CART']->api->GetProductsInCart(); } } } $merchant_calc->AddResult($merchant_result); } } else { $merchant_result = new GoogleResult($curr_id); if ($data[$root]['calculate']['tax']['VALUE'] == "true") { //Compute tax for this address id and shipping type $amount = $this->RecalculateTax($data, 0, ''); $merchant_result->SetTaxable(true); $merchant_result->SetTaxDetails($amount); } if (isset($data[$root]['calculate']['merchant-code-strings']['merchant-code-string'])) { $codes = $this->get_arr_result($data[$root]['calculate']['merchant-code-strings']['merchant-code-string']); foreach ($codes as $curr_code) { $giftcert = $this->ValidateGiftCertificate($curr_code['code'], $data); if ($giftcert === false) { $coupons = $this->ValidateCouponCode($curr_code['code'], $data, $cc_count = count($codes)); $merchant_result->AddCoupons($coupons); /*if( count($codes) > 1 ) { break; }*/ } else { $merchant_result->AddGiftCertificates($giftcert); } } } else { if (isset($data[$root]['calculate']['merchant-code-strings']) && !isset($data[$root]['calculate']['merchant-code-strings']['merchant-code-string'])) { $sescouponvalue = $GLOBALS['ISC_CLASS_CART']->api->GetAppliedCouponCodes(); //mysql_query("INSERT INTO isc_orderlogs(ordervalue) VALUES ( 'ses 2: ".print_r($sescouponvalue,true)."')"); if (!empty($sescouponvalue)) { foreach ($sescouponvalue as $ccid => $ccval) { if (array_key_exists('googlecheckout', $ccval)) { $GLOBALS['ISC_CLASS_CART']->api->RemoveCouponCode($ccval['couponid']); $googlecheckoutflag = 1; } } if ($googlecheckoutflag == 1) { $GLOBALS['ISC_CLASS_CART']->api->UpdateCartInformation(); } //$temp_products = $GLOBALS['ISC_CLASS_CART']->api->GetProductsInCart(); } } } $merchant_calc->AddResult($merchant_result); } } $this->module->DebugLog($merchant_calc->GetXML()); $this->response->ProcessMerchantCalculations($merchant_calc); }
/** * Handle the merchant-calculations-callback request from google. This is for calculating post checkout * adjustments to the order total such as tax, shipping , gift certificates and coupon codes * * @param Array $data The parsed array of data representing the google request * * @return void **/ private function HandleMerchantCallback($data) { $root = 'merchant-calculation-callback'; $this->LoadCart($data[$root]['shopping-cart']['merchant-private-data']['VALUE']); include_once dirname(__FILE__) . '/library/googlemerchantcalculations.php'; include_once dirname(__FILE__) . '/library/googleresult.php'; $currency = GetDefaultCurrency(); $merchant_calc = new GoogleMerchantCalculations($currency['currencycode']); $addresses = $this->get_arr_result($data[$root]['calculate']['addresses']['anonymous-address']); foreach ($addresses as $curr_address) { $curr_id = $curr_address['id']; $country = $curr_address['country-code']['VALUE']; $city = $curr_address['city']['VALUE']; $region = $curr_address['region']['VALUE']; $postal_code = $curr_address['postal-code']['VALUE']; // Loop through each shipping method if merchant-calculated shipping // support is to be provided if (isset($data[$root]['calculate']['shipping']['method'])) { $shipping = $this->get_arr_result($data[$root]['calculate']['shipping']['method']); foreach ($shipping as $curr_ship) { $costs = $this->CalculateShippingCost($curr_address); $name = $curr_ship['name']; $zoneInfo = $costs['zone']; unset($costs['zone']); $merchant_result = new GoogleResult($curr_id); $costs = current($costs); $found = false; $price = 0; foreach ($costs as $key => $cost) { if ($zoneInfo['zoneid'] == 1) { $shipping_name = $cost['description']; } else { $shipping_name = $cost['description'] . ' (' . $zoneInfo['zonename'] . ')'; } if ($name != $shipping_name) { continue; } //Compute the price for this shipping method and address id if (isset($cost['price'])) { $price = $cost['price']; } $merchant_result->SetShippingDetails($name, $price, 'true'); $found = true; break; } if (!$found) { $merchant_result->SetShippingDetails($name, $price, 'false'); } if ($data[$root]['calculate']['tax']['VALUE'] == "true") { //Compute tax for this address id and shipping type $amount = $this->RecalculateTax($data, $price, $name); $merchant_result->SetTaxable(true); $merchant_result->SetTaxDetails($amount); } if (isset($data[$root]['calculate']['merchant-code-strings']['merchant-code-string'])) { $codes = $this->get_arr_result($data[$root]['calculate']['merchant-code-strings']['merchant-code-string']); foreach ($codes as $curr_code) { $giftcert = $this->ValidateGiftCertificate($curr_code['code'], $data); if ($giftcert === false) { $coupons = $this->ValidateCouponCode($curr_code['code'], $data); $merchant_result->AddCoupons($coupons); } else { $merchant_result->AddGiftCertificates($giftcert); } } } $merchant_calc->AddResult($merchant_result); } } else { $merchant_result = new GoogleResult($curr_id); if ($data[$root]['calculate']['tax']['VALUE'] == "true") { //Compute tax for this address id and shipping type $amount = $this->RecalculateTax($data, 0, ''); $merchant_result->SetTaxable(true); $merchant_result->SetTaxDetails($amount); } if (isset($data[$root]['calculate']['merchant-code-strings']['merchant-code-string'])) { $codes = $this->get_arr_result($data[$root]['calculate']['merchant-code-strings']['merchant-code-string']); foreach ($codes as $curr_code) { $giftcert = $this->ValidateGiftCertificate($curr_code['code'], $data); if ($giftcert === false) { $coupons = $this->ValidateCouponCode($curr_code['code'], $data); $merchant_result->AddCoupons($coupons); } else { $merchant_result->AddGiftCertificates($giftcert); } } } $merchant_calc->AddResult($merchant_result); } } $this->module->DebugLog($merchant_calc->GetXML()); $this->response->ProcessMerchantCalculations($merchant_calc); }