我正在使用asp.net mvc 4
和2Checkout
来建立在线交易系统。我正在使用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>
任何人都知道我为什么会收到这个错误?我该如何解决?急需这个帮助!感谢。
答案 0 :(得分:2)
有同样的问题。您只需要删除Nuget包并从2checkout Github下载DLL。这就是全部 - 一切都会奏效。 不知何故,Nuget包已经过时了。
答案 1 :(得分:0)
请检查堆栈转储,通常当System.IO.StringReader..ctor(String s)期望非空字符串但是传递为null时会发生这种情况。您还应检查源文件的权限,以确保.Net进程可以访问这些文件。读取权限就足够了。
答案 2 :(得分:0)
我也遇到了同样的问题。
我刚刚创建了新项目并在新项目中编写了相同的代码。现在一切正常。