如果我有这样的简单形式,我可以使用它将用户重定向到PayPal来完成付款:
<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_xclick" />
<input type="hidden" ...
<input type="hidden" name="custom" value="<%= someVariable %>" />
<input type="submit" value="ok" />
</form>
因为在将用户重定向到paypal之前我必须做一些动作,所以我需要做正常的事情
asp
按钮,在将用户重定向到PayPal之前会执行一些操作
我的问题是如何从c#代码隐藏中做到这一点?
重要的是,我可以从上面的表单中传递所有必需的隐藏字段,例如“custom
”。
答案 0 :(得分:3)
传统的ASP.Net不允许使用多个表单标记。
以下示例代码可让您从背后的代码中将表单发布到 PayPal 。
protected void BuyButton_Click(object sender, EventArgs e)
{
string url = TestMode ?
"https://www.sandbox.paypal.com/us/cgi-bin/webscr" :
"https://www.paypal.com/us/cgi-bin/webscr";
var builder = new StringBuilder();
builder.Append(url);
builder.AppendFormat("?cmd=_xclick&business={0}", HttpUtility.UrlEncode(Email));
builder.Append("&lc=US&no_note=0¤cy_code=USD");
builder.AppendFormat("&item_name={0}", HttpUtility.UrlEncode(ItemName));
builder.AppendFormat("&invoice={0}", TransactionId);
builder.AppendFormat("&amount={0}", Amount);
builder.AppendFormat("&return={0}", HttpUtility.UrlEncode(ReturnUrl));
builder.AppendFormat("&cancel_return={0}", HttpUtility.UrlEncode(CancelUrl));
builder.AppendFormat("&undefined_quantity={0}", Quantity);
builder.AppendFormat("&item_number={0}", HttpUtility.UrlEncode(ItemNumber));
Response.Redirect(builder.ToString());
}
以下是有关PayPal标准字段的更多信息 - HTML Variables for PayPal Payments Standard
答案 1 :(得分:0)
您可以动态制作表单并使用C#发布。下面的代码是这样做的 -
protected void Pay()
{
RemotePost myremotepost = new RemotePost();
myremotepost.Url = "https://www.paypal.com/cgi-bin/webscr";
myremotepost.Add("business", "merchantemail@gmail.com");
myremotepost.Add("cmd", "_xclick");
myremotepost.Add("item_name", "Hot Sauce-12oz Bottle");
myremotepost.Add("amount","5.95");
myremotepost.Add("currency_code","USD");
myremotepost.Post();
}
public class RemotePost
{
private System.Collections.Specialized.NameValueCollection Inputs = new System.Collections.Specialized.NameValueCollection();
public string Url = "";
public string Method = "post";
public string FormName = "form1";
public void Add(string name, string value)
{
Inputs.Add(name, value);
}
public void Post()
{
System.Web.HttpContext.Current.Response.Clear();
System.Web.HttpContext.Current.Response.Write("<html><head>");
System.Web.HttpContext.Current.Response.Write(string.Format("</head><body onload=\"document.{0}.submit()\">", FormName));
System.Web.HttpContext.Current.Response.Write(string.Format("<form name=\"{0}\" method=\"{1}\" action=\"{2}\" >", FormName, Method, Url));
for (int i = 0; i < Inputs.Keys.Count; i++)
{
System.Web.HttpContext.Current.Response.Write(string.Format("<input name=\"{0}\" type=\"hidden\" value=\"{1}\">", Inputs.Keys[i], Inputs[Inputs.Keys[i]]));
}
System.Web.HttpContext.Current.Response.Write("</form>");
System.Web.HttpContext.Current.Response.Write("</body></html>");
System.Web.HttpContext.Current.Response.End();
}
}
经过全面测试和工作!
答案 2 :(得分:-1)
您可以构建一个长URL并将所有内容作为URL参数放在那里。但是,由于您正在使用C#,我建议您使用该API。在这种情况下,我会看Express Checkout。