Форма PayPal внутри формы ASP.NET - PullRequest
6 голосов
/ 01 декабря 2011

Приветствия

У меня проблема с интеграцией Paypal Shopping Cart в мой проект ASP.NET C #. Проблема в том, что Paypal Shopping Cart находится внутри тега 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, где нашел эту ссылку: Основы API пары имя-значение PayPal , но, честно говоря, для меня это не имеет никакого смысла, поскольку я не программист.

Спасибо!

Ответы [ 6 ]

10 голосов
/ 15 мая 2012

Самый простой способ решить эту проблему - использовать свойство PostBackUrl кнопки asp :.Используя этот метод, ASP генерирует ваш JavaScript для обработки внешнего поста.

Это позволяет правильно отображать форму и не требует обходных путей.Помните, что, поскольку ваш код уже находится в теге формы, ваши элементы PayPal не нужно заключать в дополнительный тег.

Например,

<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 голос
/ 18 октября 2013

Вот очень простой метод. Это то, что я использую исключительно, поэтому я знаю со 100% уверенностью, что это работает.

  1. Создание кнопки PayPal только для "ложного" изображения.
  2. Пользователь нажимает эту кнопку (это просто изображение)
  3. Это изображение имеет метод onclick, который вызывает 2-строчную функцию JavaScript (см. Ниже)
  4. Поместите свою «настоящую» форму кнопки PayPal в конце своей страницы ПОСЛЕ тега закрывающей формы.
  5. Заключите его в тег SPAN со стилем = "display: none;"
  6. Добавить ID = "ppsubmit" к вводу изображения "реальной" кнопки
  7. Когда пользователь нажимает кнопку false, метод onclick вызывает функцию javascript, которая выполняет только 2 действия: a) изменяет отображение диапазона на встроенный и 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>
    
1 голос
/ 01 декабря 2011

Технически, ваш пример не является допустимым HTML.В более долгосрочной перспективе вам лучше всего выполнить рефакторинг этого кода, чтобы убрать «технический долг».(См. «Не должно содержать других элементов формы» в разделе «Запреты элементов» на сайте W3C для 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>

У меня не было возможности проверить это, поэтому, пожалуйста, проверьте и дайте мне знать, работает ли он для вас.

0 голосов
/ 13 августа 2013

Почему бы вам не сделать страницу, на которой используется форма оплаты, используйте MasterPage с удаленным тегом.Я делаю это на всех сайтах, и это работает без проблем.

0 голосов
/ 03 мая 2012

Я обнаружил проблему с кнопкой PayPal, прежде чем обнаружил, что это проблема ASP.NET.В процессе создания кнопок и добавления на мою страницу, иногда они будут работать, а иногда нет.Тогда у меня было бы 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> 

Я понимаю, что это "исправление взлома", и я не уверен, почему это работает.Любопытно, если это работает для других.

0 голосов
/ 01 декабря 2011

Быстрое решение состоит в том, чтобы поместить форму PayPal в iframe.

В элементе формы измените target="_parent", чтобы он отправлялся обратно на родительскую страницу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...