Значение не может быть нулевым. Имя параметра: s, 2Ошибка песочницы Checkout

Я использую asp.net mvc 4 и 2Checkout для создания системы онлайн-транзакций. Я использую песочницу 2Checkout для тестирования системы и следую их руководству для тестирования. По какой-то причине я получаю эту ошибку,

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

Вот мои коды,

Контроллер

    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();
    }

Просмотр (оформить заказ)

<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>

Просмотр (процесс)

<div class="container well">
    <h3 class="text-center">@ViewBag.Message</h3>
</div>

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


person Shihan Khan    schedule 03.12.2015    source источник
comment
Вы проверили значение Request[token]?   -  person    schedule 03.12.2015
comment
Только что проверил по вашему совету. Я получаю ноль для токена.   -  person Shihan Khan    schedule 03.12.2015
comment
Извините, мой плохой, я получаю значение токена.   -  person Shihan Khan    schedule 03.12.2015
comment
не могли бы вы опубликовать класс выставления счетов и класс клиентов?   -  person    schedule 03.12.2015
comment
Пожалуйста, проверьте ссылку на учебник, который я предоставил. Я просто перешел по этой ссылке. Упомянутые вами классы взяты из сборки TwoCheckout. Для этих функций нет отдельного определения.   -  person Shihan Khan    schedule 03.12.2015
comment
я обнаружил, что Customer.billingAddr = Billing; неверно.... вам нужно передать массив или список биллинга, а не объект биллинга.   -  person    schedule 04.12.2015
comment
не могли бы вы рассказать, как передать массив биллинга вместо объекта (формата), я столкнулся с той же проблемой, но не нашел решения   -  person Muhammad Ali Hassan    schedule 02.01.2016
comment
Я использую их стандартную кассу вместо API. Я так и не нашел решения.   -  person Shihan Khan    schedule 02.01.2016
comment
@PranavPatel Привет, дорогой, как вы говорите, чтобы передать массив или список биллинга классу клиентов, он будет недействительным. Класс клиента не будет принимать массив или список класса выставления счетов. Я столкнулся с той же проблемой. Если у кого-то есть решение, то помогите мне, пожалуйста.   -  person dilipkumar1007    schedule 02.05.2016


Ответы (3)


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

person EugeneK    schedule 24.04.2016
comment
Спасибо. Я проверю это позже. - person Shihan Khan; 25.04.2016
comment
Привет, у меня такая же проблема. Я не понимаю, что мне делать? Пожалуйста, помогите мне решить эту проблему. заранее спасибо - person dilipkumar1007; 30.04.2016

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

person wtrmLn    schedule 18.12.2015

я также столкнулся с той же проблемой.

я только что создал новый проект и написал тот же код в новом проекте. и теперь все работает нормально.

person Ramesh    schedule 12.06.2018
comment
Это не ответ. Пожалуйста, прочитайте Как ответить - person Hintham; 12.06.2018