/// <summary> /// Process the Xml Message /// </summary> /// <param name="CallbackXML">The Callback message to process</param> /// <returns>The <see cref="AutoGen.MerchantCalculationResults"/> /// that is returned to Google Checkout</returns> public byte[] Process(string CallbackXML) { // Deserialize the callback request. AutoGen.MerchantCalculationCallback Callback = (AutoGen.MerchantCalculationCallback) EncodeHelper.Deserialize (CallbackXML, typeof(AutoGen.MerchantCalculationCallback)); // Create the callback response. AutoGen.MerchantCalculationResults RetVal = new AutoGen.MerchantCalculationResults(); // Create the order. Order ThisOrder = new Order(Callback); // Are there shipping methods? string[] ShippingMethods = new string[1] { "" }; if (Callback.calculate.shipping != null && Callback.calculate.shipping.Length > 0) { ShippingMethods = new string[Callback.calculate.shipping.Length]; for (int s = 0; s < ShippingMethods.Length; s++) { ShippingMethods[s] = Callback.calculate.shipping[s].name; } } RetVal.results = new AutoGen.Result [Callback.calculate.addresses.Length * ShippingMethods.Length]; int ResultIndex = 0; for (int a = 0; a < Callback.calculate.addresses.Length; a++) { for (int s = 0; s < ShippingMethods.Length; s++) { AutoGen.Result ThisResult = new AutoGen.Result(); ThisResult.addressid = Callback.calculate.addresses[a].id; AnonymousAddress ThisAddress = new AnonymousAddress(Callback.calculate.addresses[a]); // Check shipping, if requested. if (ShippingMethods[s] != string.Empty) { ThisResult.shippingname = ShippingMethods[s]; ShippingResult SResult = _Rules.GetShippingResult (ShippingMethods[s], ThisOrder, ThisAddress); ThisResult.shippableSpecified = true; ThisResult.shippable = SResult.Shippable; ThisResult.shippingrate = new AutoGen.ResultShippingrate(); ThisResult.shippingrate.currency = _currency; ThisResult.shippingrate.Value = SResult.ShippingRate; } // Check tax, if requested. if (Callback.calculate.tax) { ThisResult.totaltax = new AutoGen.ResultTotaltax(); ThisResult.totaltax.currency = _currency; ThisResult.totaltax.Value = _Rules.GetTaxResult (ThisOrder, ThisAddress, (ThisResult.shippingrate != null ? ThisResult.shippingrate.Value : 0)); } // Check merchant codes. if (Callback.calculate.merchantcodestrings != null) { ThisResult.merchantcoderesults = new AutoGen.ResultMerchantcoderesults(); ThisResult.merchantcoderesults.Items = new object[Callback.calculate.merchantcodestrings.Length]; ArrayList UsedMerchantCodes = new ArrayList(); for (int c = 0; c < Callback.calculate.merchantcodestrings.Length; c++) { MerchantCodeResult MCR; string CurrentMerchantCode = Callback.calculate.merchantcodestrings[c].code; if (UsedMerchantCodes.Contains(CurrentMerchantCode.ToUpper())) { AutoGen.CouponResult CouponResult = new AutoGen.CouponResult(); CouponResult.calculatedamount = new AutoGen.CouponResultCalculatedamount(); CouponResult.calculatedamount.currency = _currency; CouponResult.calculatedamount.Value = 0; CouponResult.code = CurrentMerchantCode; CouponResult.message = "Code already used."; CouponResult.valid = false; ThisResult.merchantcoderesults.Items[c] = CouponResult; } else { MCR = _Rules.GetMerchantCodeResult (ThisOrder, ThisAddress, CurrentMerchantCode, (ThisResult.shippingrate != null ? ThisResult.shippingrate.Value : 0)); if (MCR.Type == MerchantCodeType.GiftCertificate) { AutoGen.GiftCertificateResult GCResult = new AutoGen.GiftCertificateResult(); GCResult.calculatedamount = new AutoGen.GiftCertificateResultCalculatedamount(); GCResult.calculatedamount.currency = _currency; GCResult.calculatedamount.Value = MCR.Amount; GCResult.code = CurrentMerchantCode; GCResult.message = MCR.Message; GCResult.valid = MCR.Valid; ThisResult.merchantcoderesults.Items[c] = GCResult; UsedMerchantCodes.Add(CurrentMerchantCode.ToUpper()); } else { AutoGen.CouponResult CouponResult = new AutoGen.CouponResult(); CouponResult.calculatedamount = new AutoGen.CouponResultCalculatedamount(); CouponResult.calculatedamount.currency = _currency; CouponResult.calculatedamount.Value = MCR.Amount; CouponResult.code = CurrentMerchantCode; CouponResult.message = MCR.Message; CouponResult.valid = MCR.Valid; ThisResult.merchantcoderesults.Items[c] = CouponResult; UsedMerchantCodes.Add(CurrentMerchantCode.ToUpper()); } } } } RetVal.results[ResultIndex] = ThisResult; ResultIndex++; } } return(EncodeHelper.Serialize(RetVal)); }
public byte[] Process(string CallbackXML) { _Rules.LogXml(CallbackXML); // Deserialize the callback request. AutoGen.MerchantCalculationCallback Callback = (AutoGen.MerchantCalculationCallback) EncodeHelper.Deserialize (CallbackXML, typeof(AutoGen.MerchantCalculationCallback)); _Rules.MerchantPrivateData = Callback.shoppingcart.merchantprivatedata; // Create the callback response. AutoGen.MerchantCalculationResults RetVal = new AutoGen.MerchantCalculationResults(); // Create the order. Order ThisOrder = new Order(Callback); // Are there shipping methods? string[] ShippingMethods = new string[1] { "" }; if (Callback.calculate.shipping != null && Callback.calculate.shipping.Length > 0) { ShippingMethods = new string[Callback.calculate.shipping.Length]; for (int s = 0; s < ShippingMethods.Length; s++) { ShippingMethods[s] = Callback.calculate.shipping[s].name; } } RetVal.results = new AutoGen.Result [Callback.calculate.addresses.Length * ShippingMethods.Length]; int ResultIndex = 0; for (int s = 0; s < ShippingMethods.Length; s++) { for (int a = 0; a < Callback.calculate.addresses.Length; a++) { AutoGen.Result ThisResult = new AutoGen.Result(); ThisResult.addressid = Callback.calculate.addresses[a].id; AnonymousAddress ThisAddress = new AnonymousAddress(Callback.calculate.addresses[a]); // Check shipping, if requested. if (ShippingMethods[s] != "") { ThisResult.shippingname = ShippingMethods[s]; ShippingResult SResult = _Rules.GetShippingResult (ShippingMethods[s], ThisOrder, ThisAddress); ThisResult.shippableSpecified = true; ThisResult.shippable = SResult.Shippable; ThisResult.shippingrate = new AutoGen.Money(); ThisResult.shippingrate.currency = "USD"; ThisResult.shippingrate.Value = SResult.ShippingRate; } // Check tax, if requested. if (Callback.calculate.tax) { ThisResult.totaltax = new AutoGen.Money(); ThisResult.totaltax.currency = "USD"; ThisResult.totaltax.Value = _Rules.GetTaxResult (ThisOrder, ThisAddress, (ThisResult.shippingrate != null ? ThisResult.shippingrate.Value : 0)); } // Check merchant codes. if (Callback.calculate.merchantcodestrings != null) { ThisResult.merchantcoderesults = new AutoGen.ResultMerchantcoderesults(); ThisResult.merchantcoderesults.Items = new object[Callback.calculate.merchantcodestrings.Length]; ArrayList UsedMerchantCodes = new ArrayList(); for (int c = 0; c < Callback.calculate.merchantcodestrings.Length; c++) { MerchantCodeResult MCR; string CurrentMerchantCode = Callback.calculate.merchantcodestrings[c].code; if (UsedMerchantCodes.Contains(CurrentMerchantCode.ToUpper())) { AutoGen.CouponResult CouponResult = new AutoGen.CouponResult(); CouponResult.calculatedamount = new AutoGen.Money(); CouponResult.calculatedamount.currency = "USD"; CouponResult.calculatedamount.Value = 0; CouponResult.code = CurrentMerchantCode; CouponResult.message = "Code already used."; CouponResult.valid = false; ThisResult.merchantcoderesults.Items[c] = CouponResult; } else { MCR = _Rules.GetMerchantCodeResult (ThisOrder, ThisAddress, CurrentMerchantCode); if (MCR.Type == MerchantCodeType.GiftCertificate) { AutoGen.GiftCertificateResult GCResult = new AutoGen.GiftCertificateResult(); GCResult.calculatedamount = new AutoGen.Money(); GCResult.calculatedamount.currency = "USD"; GCResult.calculatedamount.Value = MCR.Amount; GCResult.code = CurrentMerchantCode; GCResult.message = MCR.Message; GCResult.valid = MCR.Valid; ThisResult.merchantcoderesults.Items[c] = GCResult; UsedMerchantCodes.Add(CurrentMerchantCode.ToUpper()); } else { AutoGen.CouponResult CouponResult = new AutoGen.CouponResult(); CouponResult.calculatedamount = new AutoGen.Money(); CouponResult.calculatedamount.currency = "USD"; CouponResult.calculatedamount.Value = MCR.Amount; CouponResult.code = CurrentMerchantCode; CouponResult.message = MCR.Message; CouponResult.valid = MCR.Valid; ThisResult.merchantcoderesults.Items[c] = CouponResult; UsedMerchantCodes.Add(CurrentMerchantCode.ToUpper()); } } } } RetVal.results[ResultIndex] = ThisResult; ResultIndex++; } } return EncodeHelper.Serialize(RetVal); }