将价格传递给Paypal时出错
本文关键字:Paypal 出错 | 更新日期: 2023-09-27 18:20:52
每当我试图将价格传递给贝宝时,我都会收到以下错误。我该怎么办才能解决这个问题?
mscorlib.dll中发生System.FormatException类型的异常,但未在用户代码中处理
附加信息:输入字符串的格式不正确。
protected void MakePPLPayment(string itemInfo, string qty)
{
redirecturl += "https://www.paypal.com/cgi-bin/webscr?cmd=_xclick&business=" + ConfigurationManager.AppSettings["paypalemail"].ToString();
redirecturl += "&first_name=" + Session["name"];
redirecturl += "&city=" + Session["city"];
redirecturl += "&state=" + Session["state"];
var itemInfos = itemInfo.Split('|');
var qtys = qty.Split('|');
var amounts = amount.Split('|');
for (int i = 0; i < itemInfos.Count(); i++)
{
if (itemInfos[i] != "" && qtys[i] != "" && qtys[i] != "0")
{
redirecturl += "&item_name_" + (i + 1) + "=" + itemInfos[i];
redirecturl += "&quantity_" + (i + 1) + "=" + qtys[i];
redirecturl += "&amount_" + (i + 1) + "=" + Math.Round(CalculateThis(amounts[i]), 2);
redirecturl += "&tax_" + (i + 1) + "=" + Math.Round(CalculateThis(amounts[i]) * Convert.ToDecimal(0.07), 2);
}
}
redirecturl += "&night_phone_a=" + Session["phone"];
redirecturl += "&address1=" + Session["email"];
redirecturl += "&business=er321224@hotmail.com";
redirecturl += "&shipping=0";
redirecturl += "&handling=0";
redirecturl += "&tax=" + tax;
redirecturl += "¤cy=" + Session["currency"];;
redirecturl += "&return=" +
ConfigurationManager.AppSettings["SuccessURL"].ToString();
redirecturl += "&cancel_return=" +
ConfigurationManager.AppSettings["FailedURL"].ToString();
Response.Redirect(redirecturl);
}
private decimal CalculateThis(object p)
{
if (p == null)
return 0;
else if (p == "")
return 0;
return Convert.ToInt16(p);
}
在这一行return Convert.ToInt16(p);
上抛出错误,抛出错误时p
的值为9.7000
。
编辑
这是显示字符串值是如何实现的语法,也许这将有助于解决我的问题:
protected void PPLSelected_Click(object sender, EventArgs e)
{
var qtys = CalculateThis(dropdowncount.SelectedItem.Text) + "|" + CalculateThis(dropdowncount1.SelectedItem.Text) + "|" + CalculateThis(dropdowncount2.SelectedItem.Text) + "|" + CalculateThis(dropdowncount3.SelectedItem.Text) + "|" + CalculateThis(dropdowncount4.SelectedItem.Text) + "|" + CalculateThis(dropdowncount5.SelectedItem.Text) + "|" + CalculateThis(dropdowncount6.SelectedItem.Text);
var items = dropdownitem.SelectedItem.Text + "|" + dropdownitem1.SelectedItem.Text + "|" + dropdownitem2.SelectedItem.Text + "|" + dropdownitem3.SelectedItem.Text + "|" + dropdownitem4.SelectedItem.Text + "|" + dropdownitem5.SelectedItem.Text + "|" + dropdownitem6.SelectedItem.Text;
var amounts = dropdownamt.SelectedItem.CalculateThisue + "|" + dropdownamt1.SelectedItem.CalculateThisue + "|" + dropdownamt2.SelectedItem.CalculateThisue + "|" + dropdownamt3.SelectedItem.CalculateThisue + "|" + dropdownamt4.SelectedItem.CalculateThisue + "|" + dropdownamt5.SelectedItem.CalculateThisue + "|" + dropdownamt6.SelectedItem.CalculateThisue;
MakePPLPayment(items, qtys);
}
Convert.ToInt16(object)
方法默认使用CurrentCulture
。
我认为你的CurrentCulture
的NumberDecimalSeparator
不是.
,但NumberGroupSeparator
是.
,这就是为什么这个方法认为这是97000
,而不是9.7
。
可以将具有.
的区域性提供为类似InvariantCulture
的NumberDecimalSeparator
。
return Convert.ToInt16(p, CultureInfo.InvariantCulture);
作为一个完整的代码;
public static void Main(string[] args)
{
object o = 9.7000;
CalculateThis(o);
}
public static decimal CalculateThis(object p)
{
if (p == null)
return 0;
else if (p == "")
return 0;
return Convert.ToInt16(p, CultureInfo.InvariantCulture);
}
此处为demonstration
。
在您的情况下,更好的方法是int.TryParse()
。
示例:
int example = 0;
int.TryParse("9.7000", out example);