2016-11-13 4 views
0

Это мой код:Отправка данных в PayPal; Подавать с PHP

<form action="" method="post"> 
<input class="payment_input" type="text" name="name" placeholder="Name"> 
<input class="payment_input" type="text" name="address" placeholder="Address"> 
<input class="payment_input" type="text" name="email" placeholder="E-mail"><br> 
<input class="payment_input" type="submit" name="submit_paypal" value="Go to PayPal"> 
</form> 

<?php 
$order_token = md5(uniqid($_POST['name'], true)); 

if (isset($_POST["submit_paypal"])) { 

$statement = $pdo->prepare("INSERT INTO customers (name, address, email, order_token) VALUES (:name, :address, :email, :order_token)"); 
$statement->execute(array(':name' => $_POST['name'], ':address' => $_POST['address'], ':email' => $_POST['email'], ':order_token' => $order_token)); 

echo " 
<form action=\"https://www.paypal.com/cgi-bin/webscr\" method=\"post\"> 
<input type=\"hidden\" name=\"cmd\" value=\"_xclick\"> 
<input type=\"hidden\" name=\"business\" value=\"[email protected]\"> 

<input type=\"hidden\" name=\"item_name\" value=\"eBook\"> 
<input type=\"hidden\" name=\"amount\" value=\"10\"> 
<input type=\"hidden\" name=\"return\" value=\"http://www.example.com/book.php?payment=success&orderToken=".$order_token."\"> 
<input type=\"hidden\" name=\"cancel_return\" value=\"http://example.com/book.php?payment=canceled\"> 
<input type=\"submit\"> 
</form> 
"; 
} 
?> 

Это ковшики следующим образом: Пользователь получает форму, чтобы вставить свои данные (имя, адрес электронной почты). Когда пользователь отправляет форму, должны произойти две вещи: данные пользователя будут храниться в моей базе данных случайным order_token. Этот order_token необходим для идентификации пользовательских данных при выполнении платежа. (Когда order_token, например, «5dcb567fb34805d45d55218995df12f5», обратная ссылка PayPal (при успешном платеже) равна «http://www.example.com/book.php?payment=success&orderToken=5dcb567fb34805d45d55218995df12f5»).

Но у меня есть две проблемы:

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

  2. Как предотвратить использование пользователем формы PayPal? В настоящее время пользователь может просто изменить сумму, например. От 10 до 1.

Надеюсь, у кого-то есть энергия, чтобы помочь мне, потому что я уже работаю над ней с ночей.

+0

Вы должны просто получить информацию от пользователя, а затем за экраном собрать вместе запрос PP и отправить его. Информация не должна быть в форме. Формы можно манипулировать, все это знают. – RST

+0

@RST Спасибо, за ваш ответ. Как вы это понимаете? Не могли бы вы показать небольшой пример, что вы имеете в виду? – David

ответ

0

С помощью некоторого JavaScript форма PayPal может быть автоматически отправлена.

Код:

<script type="text/javascript"> 
    document.myform.submit(); 
</script> 

Для этого вам нужно добавить name="myform" в форму PayPal.

Кроме того, у вас нет системы PayPal IPN, я бы предложил изучить ее, чтобы убедиться, что вы правильно настроили свой платежный шлюз.

В дополнение к тому, что пользователь не может изменять код формы PayPal, использование IPN остановит это. После получения платежа PayPal свяжется с вашим PHP-скриптом (IPN), и вы сможете проверить имя элемента, сколько было оплачено и т. Д.

0

Лучше инвертировать ваш PHP и HTML-код - так как вы не хотите показывать форму снова, когда отправляете.

(1) Один из подходов - отправить данные в Paypal с помощью строки запроса.

<?php 
$order_token = md5(uniqid($_POST['name'], true)); 

if (isset($_POST["submit_paypal"])) { 
    $statement = $pdo->prepare("INSERT INTO customers (name, address, email, order_token) VALUES (?, ?, ?, ?)"); 
    $statement->execute(array($_POST['name'], $_POST['address'], $_POST['email'], $order_token)); 

    if ($statement->rowCount()) { 
     $query = array(); 
     $query['cmd'] = '_xclick'; 
     $query['business'] = '[email protected]'; 
     $query['item_name'] = 'eBook'; 
     $query['amount'] = 10; 
     $query['return'] = 'http://www.example.com/book.php?payment=success&orderToken=' . $order_token; 
     $query['cancel_return'] = 'http://example.com/book.php?payment=canceled'; 

     header('Location: https://www.paypal.com/cgi-bin/webscr?' . http_build_query($query)); 
     exit(0); 
    } 
} 
?> 

<form action="" method="post"> 
    <input class="payment_input" type="text" name="name" placeholder="Name"> 
    <input class="payment_input" type="text" name="address" placeholder="Address"> 
    <input class="payment_input" type="text" name="email" placeholder="E-mail"><br> 
    <input class="payment_input" type="submit" name="submit_paypal" value="Go to PayPal"> 
</form> 

(2) Используя этот подход, я не думаю, что есть способ предотвратить изменение пользователем информации. Лучшее, что вы можете сделать, это добавить подтверждение перед отправкой. Вы также можете использовать Paypal IPN, чтобы уведомить вас о получении платежа. Вы создадите скрипт, который будет получать информацию о покупке, когда он будет сделан. Там вы можете добавить дополнительную проверку.