Update: I've gotten as far as getting error messages from the SagePayments gateway asking for the correct C_NAME which I understand to be the name on the customer's credit card. I know this info can be called with paymentInfo.CreditCardName, but the PostProcessPayment method cannot be overloaded to work with the checkout process without changing every other payment option as well (please tell me I'm wrong). Here's the relevant code in the likely event this makes no sense:
namespace NopSolutions.NopCommerce.Payment.Methods.SagePayments
{
public class SagePaymentsProcessor : IPaymentMethod
{
.
.
//blah blah tons of variables declared
.
.
public void ProcessPayment(PaymentInfo paymentInfo, Customer customer, Guid orderGuid, ref ProcessPaymentResult processPaymentResult)
{
processPaymentResult.PaymentStatus = PaymentStatusEnum.Pending;
C_NAME = paymentInfo.CreditCardName;
C_CVV = paymentInfo.CreditCardCvv2;
C_CARDNUMBER = paymentInfo.CreditCardNumber;
C_EXP = paymentInfo.CreditCardExpireMonth.ToString() + paymentInfo.CreditCardExpireYear.ToString();
}
//TRIED TO OVERLOAD HERE
public string PostProcessPayment(Order order, PaymentInfo paymentInfo)
{
C_NAME = paymentInfo.CreditCardName;
C_CVV = paymentInfo.CreditCardCvv2;
C_CARDNUMBER = paymentInfo.CreditCardNumber;
C_EXP = paymentInfo.CreditCardExpireMonth.ToString() + paymentInfo.CreditCardExpireYear.ToString();
return "blah";
}
public string PostProcessPayment(Order order)
{
M_ID = "************";
M_KEY = "**************";
//C_NAME = order.CardName;
C_ADDRESS = order.BillingAddress1;
C_CITY = order.BillingCity;
C_STATE = order.BillingStateProvince;
C_ZIP = order.BillingZipPostalCode;
C_COUNTRY = order.BillingCountry;
C_EMAIL = order.BillingEmail;
//C_CARDNUMBER = order.CardNumber;
//C_EXP = order.CardExpirationMonth + order.CardExpirationYear;
//C_CVV = order.CardCvv2;
T_CUSTOMER_NUMBER = order.CustomerId.ToString();
T_AMT = order.OrderTotal.ToString();
T_SHIPPING = order.OrderShippingExclTaxInCustomerCurrency.ToString();
T_TAX = order.PaymentMethodAdditionalFeeExclTaxInCustomerCurrency.ToString();
T_ORDERNUM = order.OrderId.ToString();
C_TELEPHONE = order.BillingPhoneNumber;
C_FAX = order.BillingFaxNumber;
C_SHIP_NAME = order.ShippingFullName;
C_SHIP_ADDRESS = order.ShippingAddress1;
C_SHIP_CITY = order.ShippingCity;
C_SHIP_STATE = order.ShippingStateProvince;
C_SHIP_ZIP = order.ShippingZipPostalCode;
C_SHIP_COUNTRY = order.ShippingCountry;
Nop.Payment.SagePayments.net.sagepayments.www.TRANSACTION_PROCESSING sagepayments = new Nop.Payment.SagePayments.net.sagepayments.www.TRANSACTION_PROCESSING();
DataSet dataset = sagepayments.BANKCARD_AUTHONLY(M_ID, M_KEY, C_NAME, C_ADDRESS, C_CITY, C_STATE, C_ZIP, C_COUNTRY, C_EMAIL, C_CARDNUMBER, C_EXP, C_CVV,
T_CUSTOMER_NUMBER, T_AMT, T_SHIPPING, T_TAX, T_ORDERNUM, C_TELEPHONE, C_FAX, C_SHIP_NAME, C_SHIP_ADDRESS, C_SHIP_CITY, C_SHIP_STATE, C_SHIP_ZIP, C_SHIP_COUNTRY);
DataRow row = dataset.Tables[0].Rows[0];
string message = row[2].ToString();
string indicator = row[0].ToString(); //A = approved, E= front-end error, X= Gateway Error
string code = row[1].ToString();
string resp = "";
for (int i = 0; i < dataset.Tables[0].Columns.Count; i++)
{
resp += (dataset.Tables[0].Columns[i].ColumnName + ": " + row[i].ToString() + "<br />");
}
return resp;
}
Any help is much appreciated.