private PaymentDetailsType CreatePayPalPaymentDetails(IInvoice invoice, ProcessorArgumentCollection args = null) { string articleBySkuPath = args.GetArticleBySkuPath(_settings.ArticleBySkuPath.IsEmpty() ? null : GetWebsiteUrl() + _settings.ArticleBySkuPath); var currencyCodeType = PayPalCurrency(invoice.CurrencyCode()); var currencyDecimals = CurrencyDecimals(currencyCodeType); decimal itemTotal = 0; decimal taxTotal = 0; decimal shippingTotal = 0; AddressType shipAddress = null; var paymentDetailItems = new List<PaymentDetailsItemType>(); foreach (var item in invoice.Items) { if (item.LineItemTfKey == Merchello.Core.Constants.TypeFieldKeys.LineItem.TaxKey) { taxTotal = item.TotalPrice; } else if (item.LineItemTfKey == Merchello.Core.Constants.TypeFieldKeys.LineItem.ShippingKey) { shippingTotal = item.TotalPrice; var address = item.ExtendedData.GetAddress(Merchello.Core.AddressType.Shipping); if (address != null) { shipAddress = new AddressType() { Name = address.Name, Street1 = address.Address1, Street2 = address.Address2, PostalCode = address.PostalCode, CityName = address.Locality, StateOrProvince = address.Region, CountryName = address.Country().Name, Country = (CountryCodeType)Enum.Parse(typeof(CountryCodeType), address.Country().CountryCode, true), Phone = address.Phone }; } } else if (item.LineItemTfKey == Merchello.Core.Constants.TypeFieldKeys.LineItem.DiscountKey) { var discountItem = new PaymentDetailsItemType { Name = item.Name, ItemURL = (articleBySkuPath.IsEmpty() ? null : articleBySkuPath + item.Sku), Amount = new BasicAmountType(currencyCodeType, PriceToString(item.Price*-1, currencyDecimals)), Quantity = item.Quantity, }; paymentDetailItems.Add(discountItem); itemTotal -= item.TotalPrice; } else { var paymentItem = new PaymentDetailsItemType { Name = item.Name, ItemURL = (articleBySkuPath.IsEmpty() ? null : articleBySkuPath + item.Sku), Amount = new BasicAmountType(currencyCodeType, PriceToString(item.Price, currencyDecimals)), Quantity = item.Quantity, }; paymentDetailItems.Add(paymentItem); itemTotal += item.TotalPrice; } } var paymentDetails = new PaymentDetailsType { PaymentDetailsItem = paymentDetailItems, ItemTotal = new BasicAmountType(currencyCodeType, PriceToString(itemTotal, currencyDecimals)), TaxTotal = new BasicAmountType(currencyCodeType, PriceToString(taxTotal, currencyDecimals)), ShippingTotal = new BasicAmountType(currencyCodeType, PriceToString(shippingTotal, currencyDecimals)), OrderTotal = new BasicAmountType(currencyCodeType, PriceToString(invoice.Total, currencyDecimals)), PaymentAction = PaymentActionCodeType.ORDER, InvoiceID = invoice.InvoiceNumberPrefix + invoice.InvoiceNumber.ToString("0"), SellerDetails = new SellerDetailsType { PayPalAccountID = _settings.AccountId }, PaymentRequestID = "PaymentRequest", ShipToAddress = shipAddress, NotifyURL = "http://IPNhost" }; return paymentDetails; }
private PaymentDetailsType CreatePayPalPaymentDetails(IInvoice invoice, ProcessorArgumentCollection args = null) { string articleBySkuPath = args.GetArticleBySkuPath(_settings.ArticleBySkuPath.IsEmpty() ? null : GetWebsiteUrl() + _settings.ArticleBySkuPath); var currencyCodeType = PayPalCurrency(invoice.CurrencyCode()); var currencyDecimals = CurrencyDecimals(currencyCodeType); decimal itemTotal = 0; decimal taxTotal = 0; decimal shippingTotal = 0; AddressType shipAddress = null; var paymentDetailItems = new List <PaymentDetailsItemType>(); foreach (var item in invoice.Items) { if (item.LineItemTfKey == Merchello.Core.Constants.TypeFieldKeys.LineItem.TaxKey) { taxTotal = item.TotalPrice; } else if (item.LineItemTfKey == Merchello.Core.Constants.TypeFieldKeys.LineItem.ShippingKey) { shippingTotal = item.TotalPrice; var address = item.ExtendedData.GetAddress(Merchello.Core.AddressType.Shipping); if (address != null) { shipAddress = new AddressType() { Name = address.Name, Street1 = address.Address1, Street2 = address.Address2, PostalCode = address.PostalCode, CityName = address.Locality, StateOrProvince = address.Region, CountryName = address.Country().Name, Country = (CountryCodeType)Enum.Parse(typeof(CountryCodeType), address.Country().CountryCode, true), Phone = address.Phone }; } } else if (item.LineItemTfKey == Merchello.Core.Constants.TypeFieldKeys.LineItem.DiscountKey) { var discountItem = new PaymentDetailsItemType { Name = item.Name, ItemURL = (articleBySkuPath.IsEmpty() ? null : articleBySkuPath + item.Sku), Amount = new BasicAmountType(currencyCodeType, PriceToString(item.Price * -1, currencyDecimals)), Quantity = item.Quantity, }; paymentDetailItems.Add(discountItem); itemTotal -= item.TotalPrice; } else { var paymentItem = new PaymentDetailsItemType { Name = item.Name, ItemURL = (articleBySkuPath.IsEmpty() ? null : articleBySkuPath + item.Sku), Amount = new BasicAmountType(currencyCodeType, PriceToString(item.Price, currencyDecimals)), Quantity = item.Quantity, }; paymentDetailItems.Add(paymentItem); itemTotal += item.TotalPrice; } } var paymentDetails = new PaymentDetailsType { PaymentDetailsItem = paymentDetailItems, ItemTotal = new BasicAmountType(currencyCodeType, PriceToString(itemTotal, currencyDecimals)), TaxTotal = new BasicAmountType(currencyCodeType, PriceToString(taxTotal, currencyDecimals)), ShippingTotal = new BasicAmountType(currencyCodeType, PriceToString(shippingTotal, currencyDecimals)), OrderTotal = new BasicAmountType(currencyCodeType, PriceToString(invoice.Total, currencyDecimals)), PaymentAction = PaymentActionCodeType.ORDER, InvoiceID = invoice.InvoiceNumberPrefix + invoice.InvoiceNumber.ToString("0"), SellerDetails = new SellerDetailsType { PayPalAccountID = _settings.AccountId }, PaymentRequestID = "PaymentRequest", ShipToAddress = shipAddress, NotifyURL = "http://IPNhost" }; return(paymentDetails); }