值不能为空。参数名称:s,2Chekout沙箱错误

时间:2015-12-03 06:54:59

标签: asp.net-mvc 2checkout

我正在使用asp.net mvc 42Checkout来建立在线交易系统。我正在使用2Checkout沙箱帐户来测试系统并在their tutorial之后进行测试。出于某种原因,我收到了这个错误,

  

值不能为空。参数名称: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 = "example@2co.com";
            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();
    }

查看(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>

查看(流程)

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

任何人都知道我为什么会收到这个错误?我该如何解决?急需这个帮助!感谢。

3 个答案:

答案 0 :(得分:2)

有同样的问题。您只需要删除Nuget包并从2checkout Github下载DLL。这就是全部 - 一切都会奏效。 不知何故,Nuget包已经过时了。

答案 1 :(得分:0)

请检查堆栈转储,通常当System.IO.StringReader..ctor(String s)期望非空字符串但是传递为null时会发生这种情况。您还应检查源文件的权限,以确保.Net进程可以访问这些文件。读取权限就足够了。

答案 2 :(得分:0)

我也遇到了同样的问题。

我刚刚创建了新项目并在新项目中编写了相同的代码。现在一切正常。