2016-05-25 5 views
1

Я пытаюсь реализовать решение для оплаты кредитной карты на своем веб-сайте, используя SagePay, где я могу оплатить на своем сайте. Я использую веб-формы ASP.NET и C#. Вот мой код:Интеграция прямых платежей SagePay C#

var objSagePay = new SagePayIntegration(); 
var request = objSagePay.DirectPaymentRequest(); 

if ((request != null)) { 
    request.Vendor = "testVendor"; 
    request.CardHolder = "Customer Name"; 
    request.CardNumber = "4900000000000"; 
    request.CardType = CardType.VISA; 
    request.ExpiryDate = "0119"; 
    request.Cv2 = "123"; 
    request.Currency = "GBP"; 
    request.Amount = 10.0; 
    request.BillingAddress1 = "Test Address 1"; 
    request.BillingAddress2 = ""; 
    request.BillingPostCode = "412"; 
    request.BillingCountry = ""; 
} 

var result = objSagePay.ProcessDirectPaymentRequest(request, "https://test.sagepay.com/gateway/service/vspdirect-register.vsp"); 

Когда выполняется вызов объекта результата, я получаю ссылку на объект Null.

Любая идея, где я делаю что-то неправильно?

Трассировка стека

[NullReferenceException: Ссылка на объект не указывает на экземпляр объекта.] SagePay.IntegrationKit.SagePayIntegration.GetPropertyTextValue (запрос объекта, строка PropertyName) в C: \ DEV \ DotNet \ VspDotNetKitAPI \ SagePayIntegration.cs: 93 SagePay.IntegrationKit.SagePayIntegration.ProcessDirectPaymentRequest (IDirectPayment paymentRequest, String directPaymentUrl) в C: \ DEV \ DotNet \ VspDotNetKitAPI \ SagePayIntegration.cs: 449 orders_payment_Default.btnProceedCreditCard_Click (отправитель объекта, EventArgs е) в Default.aspx.cs: 93 System.Web.UI.WebControls.Button.OnClick (EventArgs e) +9692746 System.Web.UI.WebControls.Button.RaisePostBackEvent (String eventArgument) +108 System.Web.UI.WebControls.Button.System.Web .UI.IPostBackEventHandler.RaisePostBackEvent (String eventArgument) +12 System.Web.UI.Page.RaisePostBackEvent (IPostBackEventHandler SourceControl, String eventArgument) +15 System.Web.UI.Page.RaisePostBackEvent (NameValueCollection PostData) +35 системы. Web.UI.Page.ProcessRequestMain (Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3562

+0

Можете ли вы опубликовать полную трассировку стека? – DavidG

+0

Я отредактировал вопрос и включил трассировку стека – dnts2012

+0

Похоже, вы не устанавливаете достаточно свойств. Можете ли вы также попробовать установить «VendorTxCode»? Это номер вашего заказа, например. – DavidG

ответ

2

Вы не устанавливая достаточно свойств по вашему запросу оплаты так беспересадочный крыло NullReferenceException при попытке встроить объект запроса.

Вы можете проверить, если вы установили по крайней мере, минимальные значения, вызвав Validation метод:

var errors = objSagePay.Validation(SagePay.IntegrationKit.ProtocolMessage.DIRECT_PAYMENT, 
    typeof(SagePay.IntegrationKit.Messages.IDirectPayment), 
    request, 
    SagePay.IntegrationKit.ProtocolVersion.V_300); 

Ошибки объекта в этом случае скажет вам, что вам не хватает следующее значение:

VendorTxCode

Это ваш идентификатор транзакции, например, номер заказа. Он должен быть уникальным для каждого платежа. Если вы установите это значение, ошибка должна исчезнуть.

Бонус: Если вы получаете действительно застрял с Интеграции Kit SagePay для .Net, вы можете увидеть исходный код для него в моем GitHub repository.

+0

Спасибо .. Мне нужно было установить еще несколько свойств. как только я сделал все свойства, ошибка исчезла. – dnts2012