Пример #1
0
             if ($data[$root]['calculate']['tax']['VALUE'] == "true") {
                 //Compute tax for this address id and shipping type
                 $amount = 15;
                 // Modify this to the actual tax value
                 $merchant_result->SetTaxDetails($amount, "USD");
             }
             $codes = get_arr_result($data[$root]['calculate']['merchant-code-strings']['merchant-code-string']);
             foreach ($codes as $curr_code) {
                 //Update this data as required to set whether the coupon is valid, the code and the amount
                 $coupons = new GoogleCoupons("true", $curr_code['code'], 5, "USD", "test2");
                 $merchant_result->AddCoupons($coupons);
             }
             $merchant_calc->AddResult($merchant_result);
         }
     }
     fwrite($message_log, sprintf("\n\r%s:- %s\n", date("D M j G:i:s T Y"), $merchant_calc->GetXML()));
     $response->ProcessMerchantCalculations($merchant_calc);
     break;
 case "new-order-notification":
     $response->SendAck();
     break;
 case "order-state-change-notification":
     $response->SendAck();
     $new_financial_state = $data[$root]['new-financial-order-state']['VALUE'];
     $new_fulfillment_order = $data[$root]['new-fulfillment-order-state']['VALUE'];
     switch ($new_financial_state) {
         case 'REVIEWING':
             break;
         case 'CHARGEABLE':
             //$response->SendProcessOrder($data[$root]['google-order-number']['VALUE'],
             //    $message_log);
Пример #2
0
 /**
  * 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);
 }
Пример #3
0
	/**
	 * 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)
	{
		include_once(dirname(__FILE__).'/library/googlemerchantcalculations.php');
		include_once(dirname(__FILE__).'/library/googleresult.php');
		include_once(dirname(__FILE__).'/class.merchantcalculationsrequest.php');

		$request = new GOOGLE_CHECKOUT_MERCHANT_CALCULATIONS_REQUEST($data);
		$merchantCalculations = new GoogleMerchantCalculations();

		// initialize the quote
		$this->LoadCart($request->getCartSessionId());
		$this->quote->removeAllGiftCertificates();
		$this->quote->setIsSplitShipping(false);

		foreach($request->getAnonymousAddresses() as $address) {
			$this->merchantCalculationsSetAddress($address);

			if(count($shippingMethods = $request->getShippingMethods()) > 0) {
				// have shipping methods, create a result for each one

				foreach($shippingMethods as $method) {
					$result = $this->merchantCalculationResult($request, $address, $method);
					$merchantCalculations->AddResult($result);
				}
			} else {
				$result = $this->merchantCalculationResult($request, $address);
				$merchantCalculations->AddResult($result);
			}

			$this->quote->removeAllAddresses();
		}

		$this->module->DebugLog($merchantCalculations->GetXML());
		$this->response->ProcessMerchantCalculations($merchantCalculations);
	}
Пример #4
0
 /**
  * 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);
 }
Пример #5
0
 function callback($in, &$paymentId, &$money, &$message)
 {
     ##chdir("..");
     define('RESPONSE_HANDLER_LOG_FILE', 'googlemessage.log');
     //Setup the log file
     if (!($message_log = fopen(RESPONSE_HANDLER_LOG_FILE, "a"))) {
         $message = "Cannot open " . RESPONSE_HANDLER_LOG_FILE . " file.";
         return PAY_ERROR;
     }
     // Retrieve the XML sent in the HTTP POST request to the ResponseHandler
     $xml_response = $HTTP_RAW_POST_DATA;
     if (get_magic_quotes_gpc()) {
         $xml_response = stripslashes($xml_response);
     }
     $headers = getallheaders();
     fwrite($message_log, sprintf("\n\r%s:- %s\n", date("D M j G:i:s T Y"), $xml_response));
     $merchant_key = $this->getConf($in["M_OrderId"], 'PrivateKey');
     //todo支付号没有
     // Create new response object
     //$merchant_id = "";  //Your Merchant ID
     //$merchant_key = "";  //Your Merchant Key
     $server_type = "checkout";
     $response = new GoogleResponse($merchant_id, $merchant_key, $xml_response, $server_type);
     $root = $response->root;
     $data = $response->data;
     fwrite($message_log, sprintf("\n\r%s:- %s\n", date("D M j G:i:s T Y"), $response->root));
     //Use the following two lines to log the associative array storing the XML data
     //$result = print_r($data,true);
     //fwrite($message_log, sprintf("\n\r%s:- %s\n",date("D M j G:i:s T Y"),$result));
     //Check status and take appropriate action
     $status = $response->HttpAuthentication($headers);
     /* Commands to send the various order processing APIs
      * Send charge order : $response->SendChargeOrder($data[$root]
      *    ['google-order-number']['VALUE'], <amount>, $message_log);
      * Send proces order : $response->SendProcessOrder($data[$root]
      *    ['google-order-number']['VALUE'], $message_log);
      * Send deliver order: $response->SendDeliverOrder($data[$root]
      *    ['google-order-number']['VALUE'], <carrier>, <tracking-number>,
      *    <send_mail>, $message_log);
      * Send archive order: $response->SendArchiveOrder($data[$root]
      *    ['google-order-number']['VALUE'], $message_log);
      *
      */
     switch ($root) {
         case "request-received":
             break;
         case "error":
             break;
         case "diagnosis":
             break;
         case "checkout-redirect":
             break;
         case "merchant-calculation-callback":
             // Create the results and send it
             $merchant_calc = new GoogleMerchantCalculations();
             // Loop through the list of address ids from the callback
             $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['region']['VALUE'];
                 // Loop through each shipping method if merchant-calculated shipping
                 // support is to be provided
                 if (isset($data[$root]['calculate']['shipping'])) {
                     $shipping = $this->get_arr_result($data[$root]['calculate']['shipping']['method']);
                     foreach ($shipping as $curr_ship) {
                         $name = $curr_ship['name'];
                         //Compute the price for this shipping method and address id
                         $price = 10;
                         // Modify this to get the actual price
                         $shippable = "true";
                         // Modify this as required
                         $merchant_result = new GoogleResult($curr_id);
                         $merchant_result->SetShippingDetails($name, $price, "USD", $shippable);
                         if ($data[$root]['calculate']['tax']['VALUE'] == "true") {
                             //Compute tax for this address id and shipping type
                             $amount = 15;
                             // Modify this to the actual tax value
                             $merchant_result->SetTaxDetails($amount, "USD");
                         }
                         $codes = $this->get_arr_result($data[$root]['calculate']['merchant-code-strings']['merchant-code-string']);
                         foreach ($codes as $curr_code) {
                             //Update this data as required to set whether the coupon is valid, the code and the amount
                             $coupons = new GoogleCoupons("true", $curr_code['code'], 5, "USD", "test2");
                             $merchant_result->AddCoupons($coupons);
                         }
                         $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 = 15;
                         // Modify this to the actual tax value
                         $merchant_result->SetTaxDetails($amount, "USD");
                     }
                     $codes = $this->get_arr_result($data[$root]['calculate']['merchant-code-strings']['merchant-code-string']);
                     foreach ($codes as $curr_code) {
                         //Update this data as required to set whether the coupon is valid, the code and the amount
                         $coupons = new GoogleCoupons("true", $curr_code['code'], 5, "USD", "test2");
                         $merchant_result->AddCoupons($coupons);
                     }
                     $merchant_calc->AddResult($merchant_result);
                 }
             }
             fwrite($message_log, sprintf("\n\r%s:- %s\n", date("D M j G:i:s T Y"), $merchant_calc->GetXML()));
             $response->ProcessMerchantCalculations($merchant_calc);
             break;
         case "new-order-notification":
             $response->SendAck();
             break;
         case "order-state-change-notification":
             $response->SendAck();
             $new_financial_state = $data[$root]['new-financial-order-state']['VALUE'];
             $new_fulfillment_order = $data[$root]['new-fulfillment-order-state']['VALUE'];
             switch ($new_financial_state) {
                 case 'REVIEWING':
                     break;
                 case 'CHARGEABLE':
                     //$response->SendProcessOrder($data[$root]['google-order-number']['VALUE'],
                     //    $message_log);
                     //$response->SendChargeOrder($data[$root]['google-order-number']['VALUE'],
                     //    '', $message_log);
                     break;
                 case 'CHARGING':
                     break;
                 case 'CHARGED':
                     break;
                 case 'PAYMENT_DECLINED':
                     break;
                 case 'CANCELLED':
                     break;
                 case 'CANCELLED_BY_GOOGLE':
                     //$response->SendBuyerMessage($data[$root]['google-order-number']['VALUE'],
                     //    "Sorry, your order is cancelled by Google", true, $message_log);
                     break;
                 default:
                     break;
             }
             switch ($new_fulfillment_order) {
                 case 'NEW':
                     break;
                 case 'PROCESSING':
                     break;
                 case 'DELIVERED':
                     break;
                 case 'WILL_NOT_DELIVER':
                     break;
                 default:
                     break;
             }
         case "charge-amount-notification":
             $response->SendAck();
             //$response->SendDeliverOrder($data[$root]['google-order-number']['VALUE'],
             //    <carrier>, <tracking-number>, <send-email>, $message_log);
             //$response->SendArchiveOrder($data[$root]['google-order-number']['VALUE'],
             //    $message_log);
             break;
         case "chargeback-amount-notification":
             $response->SendAck();
             break;
         case "refund-amount-notification":
             $response->SendAck();
             break;
         case "risk-information-notification":
             $response->SendAck();
             break;
         default:
             break;
     }
     return PAY_SUCCESS;
     ##
 }