Установка 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:<Br />Goldfish Flock BLG<br />" 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 ответов:
вы должны включить автоматический возврат в вашей учетной записи 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.
для дальнейшего чтение см. по следующим ссылкам;
- https://www.paypal.com/cgi-bin/webscr?cmd=p/pdn/howto_checkout-outside
- https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_html_Appx_websitestandard_htmlvariables
надеюсь, это поможет вам..:)
один из способов я нашел:
попробуйте вставить это поле в ваш сгенерированный код:
<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, которые уродливы!
вы можете найти полезное