ASP.NET表单中的Paypal表单

时间:2011-12-01 11:38:09

标签: asp.net paypal

干杯,

我将Paypal购物车集成到我的ASP.NET C#项目时遇到问题。 问题是Paypal购物车在FORM标签内,所以如果我把它放在我的服务器表单标签内,它将无法工作。

看起来像这样:

<body>
<form id="form1" runat="server">
<form target="_self" action="https://www.paypal.com/cgi-bin/webscr" method="post">
      <input type="hidden" name="cmd" value="_cart">
      <input type="hidden" name="business" value="MySecretEmail@hidden.com">
      <input type="hidden" name="display" value="1">
      <input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_viewcart_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
      <img alt="" border="0" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1">
      </form>
</form>
</body>

有什么方法可以阻止这种情况发生吗?我在google上搜索,在Stackoverflow上我找到了这个链接:PayPal Name-Value Pair API Basics,但老实说,这对我来说没有任何意义,因为我不是程序员。

谢谢!

6 个答案:

答案 0 :(得分:10)

解决此问题的最简单方法是使用asp:按钮的PostBackUrl属性。使用此方法,ASP生成您的JavaScript以处理外部帖子。

这样可以正确地呈现表单,并且不需要任何解决方法。请记住,由于您的代码已经在表单标记中,因此您的PayPal项目不需要包含在额外标记中。

e.g。

<input type='hidden' name='cmd' value='_cart'/>
<input type='hidden' name='upload' value='1'/>
<input type='hidden' name='business' value='business@business.com'/>
<input type='hidden' name='currency_code' value='aud'/>
<input type='hidden' name='item_number_1' value='item number_1'>
<input type='hidden' name='item_name_1' value='16x16 inch square canvas'>
<input type='hidden' name='amount_1' value='70'>
<input type='hidden' name='item_number_2' value='item number_2'>
<input type='hidden' name='item_name_2' value=' 48x20 rectangular canvas'>
<input type='hidden' name='amount_2' value='104'>
<asp:Button ID="Button1" PostBackUrl='https://www.paypal.com/cgi-bin/webscr' runat="server" />

希望这有帮助。

答案 1 :(得分:1)

从技术上讲,您的示例不是有效的HTML。从长远来看,您可能最好重构此代码以消除您的“技术债务”。 (请参阅W3C site对于XHTML 1.0的元素禁止下的“不得包含其他表单元素”)

与此同时,您可以尝试使用jQuery提交嵌套表单。

1。替换提交按钮

<button class="submit-button" id="submit-button">Submit Payment</button>

2。修改表格标签

<form id="nested-form" target="_self" action="https://www.paypal.com/cgi-bin/webscr" method="post"> 

3。使用jQuery提交表单

<script type="text/javascript">
$('#submit-button').live('click',function() {
    $('#nested-form').submit();
});
</script>

我没有机会测试这个,所以请测试并告诉我它是否适合您。

答案 2 :(得分:1)

这是一种非常简单的方法。这是我独家使用的,所以我100%确定它知道它有效。

  1. 仅创建“假”图像PayPal按钮。
  2. 用户点击此按钮(它只是一张图片)
  3. 此图片有一个onclick方法,它调用2行javascript函数(见下文)
  4. 在结束表单标记之后,将“真正的”PayPal按钮表单放在页面的末尾。
  5. 将其封装在带有style =“display:none;”
  6. 的SPAN标记中
  7. 将“ID =”ppsubmit“添加到”真实“按钮的图像输入
  8. 当用户点击false按钮时,onclick方法会调用一个只执行两项操作的javascript函数... a)将span显示更改为内联,b)自动点击真实的PayPal按钮。

    <form id="form1" runat="server">
    <!-- Here's the image only "false" paypal button -->
    <input type="image"
    src="https://www.sandbox.paypal.com/en_US/i/btn/btn_subscribeCC_LG.gif"
    border="0" name="submit" alt="PayPal - The safer, easier way to pay online!"
    onclick="javascript:doPPform();" />
    </form>  <!-- this closes your asp.net form -->
    
    <!-- Here's the hidden span with the real paypal button
         at the bottom of your webpage -->
    <span id="ppform" style="display: none;">
    <form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post"
     target="_top">
          <input type="hidden" name="cmd" value="_s-xclick">
          <input type="hidden" name="hosted_button_id" value="xxxxx">
          <input id="ppsubmit" type="image" 
              src="https://www.sandbox.paypal.com/en_US/i/btn/btn_subscribeCC_LG.gif"
              border="0" name="submit"
              alt="PayPal - The safer, easier way to pay online!">
          <img alt="" border="0"
               src="https://www.sandbox.paypal.com/en_US/i/scr/pixel.gif"
               width="1" height="1">
    </form>
    </span>
    
    <!-- Here's the 2 line javascript code when the user clicks the "false" button -->
    <script language="javascript" type="text/javascript">
    function doPPform() {
        document.getElementById("ppform").style.display = "inline";
        document.getElementById("ppsubmit").click();
    }
    </script>
    

答案 3 :(得分:0)

快速解决方案是将paypal表单放在iframe中。

在表单元素上,更改target="_parent",使其回发到父页面。

答案 4 :(得分:0)

为什么不在付款表格中使用已删除标签的MasterPage。我在所有网站上都这样做,它没有问题。

答案 5 :(得分:-1)

在我发现它是一个ASP.NET问题之前,我发现了PayPal按钮问题。 在创建按钮和添加到我的页面的过程中,有时他们会工作,有时他们不会。然后我将有2个相同的按钮,第二个将工作,第一个不会。删除第一个,然后删除工作的按钮。如果我在PayPal按钮之前添加了一个表单标签,Paypal按钮就可以正常运行。

<%-- simple form tag --%>
<form action="">
</form>

<form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post">
  <input type="hidden" name="cmd" value="_xclick">
  <input type="hidden" name="business" value="hughet_1335403121_biz@yahoo.com">
  <input type="hidden" name="lc" value="US">
  <input id="iptItemName" type="hidden" name="item_name" value="testBuyNow">
  <input type="hidden" name="amount" value="10.00">
  <input type="hidden" name="currency_code" value="USD">
  <input type="hidden" name="button_subtype" value="products">
  <input type="hidden" name="no_note" value="0">
  <input type="hidden" name="cn" value="Add special instructions to the seller">
  <input type="hidden" name="no_shipping" value="2">
  <input type="hidden" name="bn" 
    value="PP-BuyNowBF:btn_buynowCC_LG.gif:NonHosted">
  <input type="image" 
    src="https://www.sandbox.paypal.com/en_US/i/btn/btn_buynowCC_LG.gif"
    border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
  <img alt="" border="0" 
    src="https://www.sandbox.paypal.com/en_US/i/scr/pixel.gif"
    width="1" height="1">
</form> 

我理解这是一个“破解修复”,我不知道为什么会这样。好奇,如果这适用于其他人。