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);
/** * 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) { 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); }
/** * 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); }
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; ## }