Установка URL-адреса возврата PayPal и его автоматическое возвращение?


это следующий вопрос:PHP: простой способ начать проверку PayPal?

Итак, моя проблема заключается в том, что я указываю url-адрес возврата. Однако, после оплаты с PayPal, я в конечном итоге на экране, который говорит:

вы только что завершили ваш платеж. ХХХХ, вы только что завершили оплату. Ваш идентификатор транзакции для этого платежа: XXXXXXXXXXXXX.

мы отправим подтверждение по электронной почте XX@XXXX.com. эта транзакция появится на вашем заявлении как PAYPAL.

Go to PayPal account overview

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

  • установите переменную "return"
  • установите переменную" rm " в: 2 (которая согласно руководству ="браузер покупателя перенаправляется на URL-адрес возврата с помощью метода POST, и все переменные оплаты включены")

на самом деле, вот весь мой форма:

<form method="post" action="https://www.sandbox.paypal.com/cgi-bin/webscr">
  <input type="hidden" value="_xclick" name="cmd">
  <input type="hidden" value="onlinestore@thegreekmerchant.com" name="business">
  <!-- <input type="hidden" name="undefined_quantity" value="1" /> -->
  <input type="hidden" value="Order at The Greek Merchant:&lt;Br /&gt;Goldfish Flock BLG&lt;br /&gt;" name="item_name">
  <input type="hidden" value="NA" name="item_number">
  <input type="hidden" value="22.16" name="amount">
  <input type="hidden" value="5.17" name="shipping">
  <input type="hidden" value="0" name="discount_amount">        
  <input type="hidden" value="0" name="no_shipping">
  <input type="hidden" value="No comments" name="cn">
  <input type="hidden" value="USD" name="currency_code">
  <input type="hidden" value="http://XXX/XXX/XXX/paypal/return" name="return">
  <input type="hidden" value="2" name="rm">      
  <input type="hidden" value="11255XXX" name="invoice">
  <input type="hidden" value="US" name="lc">
  <input type="hidden" value="PP-BuyNowBF" name="bn">
  <input type="submit" value="Place Order!" name="finalizeOrder" id="finalizeOrder" class="submitButton">
</form>

есть идеи, как я могу заставить его автоматически вернуться? Кроме того, как мне получить результат оплаты обратно на мой сайт, чтобы я мог обновить базу данных? Что такое ИПН?

6 120

6 ответов:

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

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

<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
    <input type="hidden" name="cmd" value="_cart">
    <input type="hidden" name="upload" value="1">
    <input type="hidden" name="business" value="you@youremail.com">

    <input type="hidden" name="item_name_' . $x . '" value="' . $product_name . '">
    <input type="hidden" name="amount_' . $x . '" value="' . $price . '">
    <input type="hidden" name="quantity_' . $x . '" value="' . $each_item['quantity'] . '"> 
    <input type="hidden" name="custom" value="' . $product_id_array . '">
    <input type="hidden" name="notify_url" value="https://www.yoursite.com/my_ipn.php">
    <input type="hidden" name="return" value="https://www.yoursite.com/checkout_complete.php">
    <input type="hidden" name="rm" value="2">
    <input type="hidden" name="cbt" value="Return to The Store">
    <input type="hidden" name="cancel_return" value="https://www.yoursite.com/paypal_cancel.php">
    <input type="hidden" name="lc" value="US">
    <input type="hidden" name="currency_code" value="USD">
    <input type="image" src="http://www.paypal.com/en_US/i/btn/x-click-but01.gif" name="submit" alt="Make payments with PayPal - its fast, free and secure!">
</form>

пожалуйста, пройдите через поля notify_url, return, cancel_return

пример кода для обработки ipn (my_ipn.php), который запрашивается paypal после оплаты.

для получения дополнительной информации о создании IPN, пожалуйста, обратитесь к этой ссылка.

<?php
// Check to see there are posted variables coming into the script
if ($_SERVER['REQUEST_METHOD'] != "POST")
    die("No Post Variables");
// Initialize the $req variable and add CMD key value pair
$req = 'cmd=_notify-validate';
// Read the post from PayPal
foreach ($_POST as $key => $value) {
    $value = urlencode(stripslashes($value));
    $req .= "&$key=$value";
}
// Now Post all of that back to PayPal's server using curl, and validate everything with PayPal
// We will use CURL instead of PHP for this for a more universally operable script (fsockopen has issues on some environments)
//$url = "https://www.sandbox.paypal.com/cgi-bin/webscr";
$url = "https://www.paypal.com/cgi-bin/webscr";
$curl_result = $curl_err = '';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $req);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/x-www-form-urlencoded", "Content-Length: " . strlen($req)));
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
$curl_result = @curl_exec($ch);
$curl_err = curl_error($ch);
curl_close($ch);

$req = str_replace("&", "\n", $req);  // Make it a nice list in case we want to email it to ourselves for reporting
// Check that the result verifies
if (strpos($curl_result, "VERIFIED") !== false) {
    $req .= "\n\nPaypal Verified OK";
} else {
    $req .= "\n\nData NOT verified from Paypal!";
    mail("you@youremail.com", "IPN interaction not verified", "$req", "From: you@youremail.com");
    exit();
}

/* CHECK THESE 4 THINGS BEFORE PROCESSING THE TRANSACTION, HANDLE THEM AS YOU WISH
  1. Make sure that business email returned is your business email
  2. Make sure that the transaction�s payment status is �completed�
  3. Make sure there are no duplicate txn_id
  4. Make sure the payment amount matches what you charge for items. (Defeat Price-Jacking) */

// Check Number 1 ------------------------------------------------------------------------------------------------------------
$receiver_email = $_POST['receiver_email'];
if ($receiver_email != "you@youremail.com") {
//handle the wrong business url
    exit(); // exit script
}
// Check number 2 ------------------------------------------------------------------------------------------------------------
if ($_POST['payment_status'] != "Completed") {
    // Handle how you think you should if a payment is not complete yet, a few scenarios can cause a transaction to be incomplete
}

// Check number 3 ------------------------------------------------------------------------------------------------------------
$this_txn = $_POST['txn_id'];
//check for duplicate txn_ids in the database
// Check number 4 ------------------------------------------------------------------------------------------------------------
$product_id_string = $_POST['custom'];
$product_id_string = rtrim($product_id_string, ","); // remove last comma
// Explode the string, make it an array, then query all the prices out, add them up, and make sure they match the payment_gross amount
// END ALL SECURITY CHECKS NOW IN THE DATABASE IT GOES ------------------------------------
////////////////////////////////////////////////////
// Homework - Examples of assigning local variables from the POST variables
$txn_id = $_POST['txn_id'];
$payer_email = $_POST['payer_email'];
$custom = $_POST['custom'];
// Place the transaction into the database
// Mail yourself the details
mail("you@youremail.com", "NORMAL IPN RESULT YAY MONEY!", $req, "From: you@youremail.com");
?>

изображение ниже поможет вам в понимании процесса paypal. Paypal process flow

для дальнейшего чтение см. по следующим ссылкам;

надеюсь, это поможет вам..:)

один из способов я нашел:

попробуйте вставить это поле в ваш сгенерированный код:

<input type='hidden' name='rm' value='2'>

rm означает обратный метод;

2 означает (пост)

чем после покупки пользователем и возврата к url вашего сайта, то этот url получает параметры POST, а также

p. s. при использовании php, попробуйте вставить var_dump($_POST); в вашем возвращении url (скрипт), затем сделайте тестовую покупку, и когда вы вернетесь на свой сайт, вы увидите, какие переменные есть на вашем url.

Я думаю, что идея установки значений автоматического возврата, как описано выше Кевином, немного странная!

input type="hidden" name="return" value="https://www.yoursite.com/checkout_complete.php"

где вы устанавливаете индивидуальное возвращаемое значение. Почему он должен быть установлен вообще, в разделе профиля, а также?!?!

кроме того, поскольку вы можете установить только одно значение в разделе профиля, это означает (AFAIK), что вы не можете использовать автоматический возврат на сайте с несколькими действиями.

комментарии, пожалуйста??

совместное использование этого, как я недавно столкнулся с проблемами похоже на этот поток

долгое время мой скрипт работал хорошо (базовая форма оплаты) и возвращал переменные POST к моему успеху.php-страница и данные IPN в качестве переменных POST также. Однако в последнее время я заметил обратную страницу (успех.php) больше не получал никаких POST vars. Я тестировал в песочнице и живу, и я уверен, что PayPal что-то изменил !

notify_url все еще получает правильные данные IPN позволяют мне обновлять БД, но я не смог отобразить сообщение об успехе на моем URL-адресе возврата (успех.PHP-страница.

несмотря на попытки многих комбинаций для включения и выключения параметров в настройках оплаты веб-сайта PayPal и IPN, мне пришлось внести некоторые изменения в свой скрипт, чтобы убедиться, что я все еще могу обрабатывать сообщение. Я достиг этого, включив PDT и Auto Return,после этого отличное руководство.

теперь все работает хорошо, но единственная проблема заключается в том, что URL-адрес возврата содержит все переменные PDT, которые уродливы!

вы можете найти полезное

на странице оформления заказа найдите скрытый элемент формы ' cancel_return:

установите значение элемента формы cancel_return в URL, к которому вы хотите вернуться: