Отправьте форму PayPal и обновите базу данных одновременно - PullRequest
2 голосов
/ 05 сентября 2011

Если я использую стандартную форму PayPal для платежей, могу ли я также обновить свою БД одновременно, слегка изменив код для включения деталей обновления?

Это стандартная форма оплаты PayPal, которую я хочуuse - будет меняться по мере необходимости ..

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

 <input type="hidden" name="item_number" value="01 - General Payment to FreelanceSwitch.com">
 <input type="hidden" name="cmd" value="_xclick">
 <input type="hidden" name="no_note" value="1">
 <input type="hidden" name="business" value="your@paypalaccount.com">
 <input type="hidden" name="currency_code" value="USD">
 <input type="hidden" name="return" value="http://freelanceswitch.com/payment-complete/">

 Item Details:<br /><input name="item_name" type="text" id="item_name"  size="45">
 <br /><br />
 Amount: <br /><input name="amount" type="text" id="amount" size="45">
 <br /><br />
 <input type="submit" name="Submit" value="Submit">

 </form>

Это моя кодировка обновления на моей странице:

 $editFormAction = $_SERVER['PHP_SELF'];
 if (isset($_SERVER['QUERY_STRING'])) {
   $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
 }

 if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "form")) {
   $updateSQL = sprintf("UPDATE db SET payment_page_completed=%s WHERE id=%s",
                   GetSQLValueString($_POST['payment_page_completed'], "text"),
                   GetSQLValueString($_POST['id'], "int"));

   mysql_select_db($database_connAdmin, $connAdmin);
   $Result1 = mysql_query($updateSQL, $connAdmin) or die(mysql_error());

   //$updateGoTo = "confirmation"; WILL NEED TO CHANGE AS NEEDS TO GO TO PAYPAL


   if (isset($_SERVER['QUERY_STRING'])) {
     $updateGoTo .= (strpos($updateGoTo, '?')) ? "&" : "?";
     $updateGoTo .= $_SERVER['QUERY_STRING'];
   }
   header(sprintf("Location: %s", $updateGoTo));
 }

Это моя текущая форма

 <form action="<?php echo $editFormAction; ?>" name="form" class="" id="form" method="POST" enctype="multipart/form-data">
 <input type="hidden" name="id" value="<?php echo $_SESSION['id']; ?>" readonly="readonly">
 <input type="hidden" name="payment_page_completed" value="yes" readonly="readonly">
 </form>

Спасибовы

Ответы [ 3 ]

2 голосов
/ 05 сентября 2011

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

РЕДАКТИРОВАТЬ 1:

В вашей форме добавьте две заявки, подобные этой:

<input type="submit" name="submit" class="btns" id="submit1" value="Save in DB" onclick="changeWhere('http://yourwebsite.com/savedata.php');" >

<input type="submit" name="submit" class="btns" id="submit2" value="Move to PayPal"
onclick="changeWhere('https://www.paypal.com/cgi-bin/webscr');" disabled="true">

и добавьте в свой скрипт:

<script type="text/javascript">

function changeWhere(place){

    document.form.action=place;   //use your forms name inplace of form

}

</script>

РЕДАКТИРОВАТЬ 2:

с использованием одной отправки для двух действий формы

добавьте это в форму:

<input type="button" value="Submit" onclick="submitTwice(this.form)">

и добавить в скрипт:

<script type="text/javascript">
 function submitTwice(form){
 form.action = 'https://www.paypal.com/cgi-bin/webscr';
 form.submit();
 form.action = 'savedata.php';
 form.submit();
}
</script>

Это работает для меня. : -)

РЕДАКТИРОВАТЬ 3:

saveata.php может содержать код, подобный;

<?php
$item_name   = $_POST['item_name'];
$item_price  = $_POST['item_price'];
$item_number = $_POST['item_number'];

$sql="Insert into sales (name, price, number) values ('$item_name', '$item_price', '$item_number')";
$result=mysql_query($sql);
?>

Надеюсь, это поможет.

1 голос
/ 05 сентября 2011

Идентичный вопрос был задан здесь и должен дать вам ответы, которые вам нужны. Если вам нужны разъяснения, пожалуйста, прокомментируйте.

Чтобы процитировать этот ответ, необходимо отправить данные в PHP, а затем с помощью запроса сокета отправить эти данные в PayPal:

function post($host, $path, $data) { 
$http_response = ''; 
$content_length = strlen($data); 
$fp = fsockopen($host, 80); 
fputs($fp, "POST $path HTTP/1.1\r\n"); 
fputs($fp, "Host: $host\r\n"); 
fputs($fp, "Content-Type: application/x-www-form-urlencoded\r\n"); 
fputs($fp, "Content-Length: $content_length\r\n"); 
fputs($fp, "Connection: close\r\n\r\n"); 
fputs($fp, $data); 
while (!feof($fp)) $http_response .= fgets($fp, 28); 
fclose($fp); 
return $http_response; 
}
$postdata = '?foo=bar'; 
foreach($_POST as $key => $val) $postdata .= '&'.$key.'='.$val;

Важные примечания: Я скопировал этот код из связанного потока, поэтому проверьте его для получения дополнительной информации. Кроме того, это будет отправлено на ваш PHP. Вам нужно будет перенаправить пользователя на этот запрос POST, если вы хотите, чтобы он действительно просматривал страницу PayPal.

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

0 голосов
/ 25 ноября 2015

У меня та же проблема, что я сделал, чтобы сделать Ajax, приостановив свою отправку и вызвав мой insert.php Мой insert.php в значительной степени сохраняет в базу данных. Я написал точные шаги здесь. Сохранение HTML-формы POST в базе данных перед перенаправлением на PayPal

<script>

 $(function () {

        $('#senrollnow').on('submit', function (e) {

      var form = $(this);

      if(!form.hasClass('pending')) {

          e.preventDefault();

          form.addClass('pending');

          $.ajax({

              type: 'post',

              url: 'insert.php',

              data: $('#senrollnow').serialize(),

              success: function () {

                form.submit();

                 alert('form was submitted'+data);

              }
          });
      }
});

  $('#freeform').on('submit', function (e) {

  //e.preventDefault(); //prevents the form to submit

          alert("Your request has been sent! Please check your email within 12 hours for my feedback. Thank you.");

        });

      });

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