in src/Foundation/CommerceServer/code/Managers/CartManager.cs [470:529]
public virtual ManagerResponse<CartResult, CommerceCart> SetPaymentMethods([NotNull] CommerceStorefront storefront, [NotNull] IVisitorContext visitorContext, [NotNull] PaymentInputModel inputModel)
{
Assert.ArgumentNotNull(storefront, "storefront");
Assert.ArgumentNotNull(visitorContext, "visitorContext");
Assert.ArgumentNotNull(inputModel, "inputModel");
var addPaymentResponse = new ManagerResponse<CartResult, CommerceCart>(new AddPaymentInfoResult { Success = true }, null);
var errorResponse = new AddPaymentInfoResult { Success = false };
var response = this.GetCurrentCart(storefront, visitorContext, true);
if (!response.ServiceProviderResult.Success || response.Result == null)
{
return new ManagerResponse<CartResult, CommerceCart>(errorResponse, response.Result);
}
var cart = (CommerceCart)response.ServiceProviderResult.Cart;
if (inputModel.CreditCardPayment != null && !string.IsNullOrEmpty(inputModel.CreditCardPayment.PaymentMethodID) && inputModel.BillingAddress != null)
{
var removeBillingResponse = this.RemoveAllBillingParties(storefront, visitorContext, cart);
if (!removeBillingResponse.ServiceProviderResult.Success)
{
errorResponse.SystemMessages.Add(removeBillingResponse.ServiceProviderResult.SystemMessages[0]);
return new ManagerResponse<CartResult, CommerceCart>(errorResponse, errorResponse.Cart as CommerceCart);
}
cart = removeBillingResponse.Result;
CommerceParty billingParty = inputModel.BillingAddress.ToNewBillingParty();
var addPartyResponse = this.AddPartyToCart(storefront, visitorContext, cart, billingParty);
if (!addPartyResponse.ServiceProviderResult.Success)
{
errorResponse.SystemMessages.Add(addPartyResponse.ServiceProviderResult.SystemMessages[0]);
return new ManagerResponse<CartResult, CommerceCart>(errorResponse, errorResponse.Cart as CommerceCart);
}
cart = addPartyResponse.Result;
var removePaymentResponse = this.RemoveAllPaymentMethods(storefront, visitorContext, cart);
if (!removePaymentResponse.ServiceProviderResult.Success)
{
errorResponse.SystemMessages.Add(removePaymentResponse.ServiceProviderResult.SystemMessages[0]);
return new ManagerResponse<CartResult, CommerceCart>(errorResponse, errorResponse.Cart as CommerceCart);
}
cart = removePaymentResponse.Result;
CommerceCreditCardPaymentInfo creditCardPayment = inputModel.CreditCardPayment.ToCreditCardPaymentInfo();
addPaymentResponse = this.AddPaymentInfoToCart(storefront, visitorContext, cart, creditCardPayment, billingParty, true);
if (!addPaymentResponse.ServiceProviderResult.Success)
{
errorResponse.SystemMessages.Add(addPaymentResponse.ServiceProviderResult.SystemMessages[0]);
return new ManagerResponse<CartResult, CommerceCart>(errorResponse, errorResponse.Cart as CommerceCart);
}
cart = addPaymentResponse.Result;
}
return addPaymentResponse;
}