2015-12-03 2 views
1

Я использую asp.net mvc 4 и 2Checkout, чтобы сделать онлайн-транзакционную систему. Я использую аккаунт sandware 2Checkout для тестирования системы и после тестирования their tutorial. По какой-то причине я получаю эту ошибку,Значение не может быть равно нулю. Имя параметра: s, ошибка в песочнице 2Chekout

Значение не может быть пустым. Имя параметра: s

Вот мои коды,

Контроллер

public ActionResult CheckOut() 
    { 
     return View(); 
    } 

    [ValidateAntiForgeryToken] 
    [HttpPost] 
    public ActionResult Process() 
    { 
     TwoCheckoutConfig.SellerID = "901299852"; 
     TwoCheckoutConfig.PrivateKey = "9E1A8B89-2A90-40D7-A7F5-CBF252B3B4A0"; 
     TwoCheckoutConfig.Sandbox = true; 

     try 
     { 
      var Billing = new AuthBillingAddress(); 
      Billing.addrLine1 = "123 test st"; 
      Billing.city = "Columbus"; 
      Billing.zipCode = "43123"; 
      Billing.state = "OH"; 
      Billing.country = "USA"; 
      Billing.name = "Testing Tester"; 
      Billing.email = "[email protected]"; 
      Billing.phoneNumber = "5555555555"; 
      Billing.phoneExt = "555"; 

      var Customer = new ChargeAuthorizeServiceOptions(); 
      Customer.total = (decimal)1.00; 
      Customer.currency = "USD"; 
      Customer.merchantOrderId = "123"; 
      Customer.billingAddr = Billing; 
      Customer.token = Request["token"]; 

      var Charge = new ChargeService(); 

      var result = Charge.Authorize(Customer); // Error getting in this line 
      ViewBag.Message = result.responseMsg; 
     } 
     catch (TwoCheckoutException e) 
     { 
      ViewBag.Message = e.Message.ToString(); 
     } 

     return View(); 
    } 

View (CheckOut)

<div class="container well"> 
    @using (Html.BeginForm("Process", "Home", FormMethod.Post, new { id = "myCCForm" })) 
    { 
    @Html.AntiForgeryToken() 
    @Html.ValidationSummary(true, "Error! Please provide valid information!") 

    <input id="token" name="token" type="hidden" value=""> 
    <div> 
     <label> 
      <span>Card Number</span> 
     </label> 
     <input id="ccNo" type="text" size="20" value="" autocomplete="off" required /> 
    </div> 
    <div> 
     <label> 
      <span>Expiration Date (MM/YYYY)</span> 
     </label> 
     <input type="text" size="2" id="expMonth" required /> 
     <span>/ </span> 
     <input type="text" size="2" id="expYear" required /> 
    </div> 
    <div> 
     <label> 
      <span>CVC</span> 
     </label> 
     <input id="cvv" size="4" type="text" value="" autocomplete="off" required /> 
    </div> 
    <input type="submit" value="Submit Payment"> 
} 
</div> 

<script src="~/Scripts/jquery-1.9.1.min.js"></script> 
<script src="https://www.2checkout.com/checkout/api/2co.min.js"></script> 

<script> 
    // Called when token created successfully. 
    var successCallback = function(data) { 
     var myForm = document.getElementById('myCCForm'); 

     // Set the token as the value for the token input 
     myForm.token.value = data.response.token.token; 

     // IMPORTANT: Here we call `submit()` on the form element directly instead of using jQuery to prevent and infinite token request loop. 
     myForm.submit(); 
    }; 

    // Called when token creation fails. 
    var errorCallback = function(data) { 
     if (data.errorCode === 200) {tokenRequest();} else {alert(data.errorMsg);} 
    }; 

    var tokenRequest = function() { 
     // Setup token request arguments 
     var args = { 
      sellerId: "901299852", 
      publishableKey: "F4AA3A98-B605-423E-ACAC-D70BCB50A7F7", 
      ccNo: $("#ccNo").val(), 
      cvv: $("#cvv").val(), 
      expMonth: $("#expMonth").val(), 
      expYear: $("#expYear").val() 
     }; 

     // Make the token request 
     TCO.requestToken(successCallback, errorCallback, args); 
    }; 

    $(function() { 
     // Pull in the public encryption key for our environment 
     TCO.loadPubKey('sandbox'); 

     $("#myCCForm").submit(function(e) { 
      // Call our token request function 
      tokenRequest(); 

      // Prevent form from submitting 
      return false; 
     }); 
    }); 
</script> 

View (Process)

Кто-нибудь знает, почему я получаю эту ошибку? Как я могу это решить? Нужна эта помощь плохо! Благодарю.

+0

Вы проверили стоимость запроса ["токен"]? –

+0

Проверено только по вашему совету. Я получаю null для токена. –

+0

Извините, мой плохой, я получаю значение токена. –

ответ

0

Пожалуйста, проверьте дамп стека, как правило, это происходит, когда System.IO.StringReader..ctor (String s) ожидает непустую строку, но вместо этого передается как null. Вы также должны проверить разрешения на исходные файлы, чтобы гарантировать, что процесс .Net имеет доступ к файлам. Достаточно читать доступ для чтения.

2

Была такая же проблема. Все, что вам нужно, это удалить пакет Nuget и загрузить dll из 2checkout Github. Вот и все - все будет работать. Как-то пакет Nuget устарел.

+0

Спасибо. Я проверю это позже. –

+0

HI, у меня такая же проблема. Я не понимаю, что мне делать? Пожалуйста, помогите мне решить эту проблему. заранее спасибо – dilipkumar1007

Смежные вопросы