У меня очень простая онлайн-форма html. Пользователь заполняет форму, и когда они отправляют, он вставляет информацию в базу данных MySQL, а затем перенаправляет их в PayPal для завершения платежа. Проблема в том, что в базе данных нет никакой информации о том, действительно ли они завершили платеж.
Решением этого было использование IPN. У меня есть поиск в Интернете и you-tube для учебных пособий, но это было слишком сложно, и я не мог достичь IPN для подтверждения оплаты в MySQL.
Прошу прощения, если кто-нибудь может помочь мне собрать это вместе.
Это не слишком сложно.
У вас уже есть учетная запись для песочницы? Если нет, зарегистрируйтесь на тестовом счете продавца / покупателя на sandbox.paypal.com . Возможно, нужны разные адреса электронной почты для обоих, но не уверены.
1.) В форме отправки введите путь к вашему IPN-скрипту, например pp.notifiy.php
<input type="hidden" name="notify_url" value="http://my.test/pp.notifiy.php" />
Также в настройках вашей учетной записи PayPal для продавца / песочницы укажите URL-адрес вашего слушателя. Сценарий слушателя не должен быть межсетевым экраном. Он получит $ _POST из PayPal.
2.) После успешной оплаты,
VERIFIED
для обработки заказа и обновления вашего db. Я предпочитаю решение cURL, так как в последнее время у PayPal были изменения, что вызвало некоторые проблемы. Решение cURL отлично работало для меня, особенно при тестировании песочницы. Необходимо, чтобы расширение cURL было активным в PHP .
Для решения cURL, читайте больше о разработчике PayPal: как обрабатывать сообщения мгновенного уведомления о платежах (IPN) ; другое решение, которое я бы не рекомендовал использовать fsockopen .
Вот часть моего рабочего скрипта слушателя cURL (pp.notify.php)
#$pp_url = "https://www.paypal.com/cgi-bin/webscr"; $pp_url = "https://www.sandbox.paypal.com/cgi-bin/webscr"; // build the request / postback $req = 'cmd=_notify-validate'; foreach($_POST AS $k => $v) { $v=urlencode(stripslashes($v)); $req.="&$k=$v"; } // post back to PayPal system to validate using curl $ch = curl_init($pp_url); curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); curl_setopt($ch, CURLOPT_POSTFIELDS, $req); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); curl_setopt($ch, CURLOPT_FORBID_REUSE, 1); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Connection: Close')); if(!($res=curl_exec($ch))) { #error_log("Got " . curl_error($ch) . " when processing IPN data"); curl_close($ch); exit; } $res = trim($res); curl_close($ch); // inspect IPN validation result and act accordingly if(strcmp($res,"VERIFIED")==0) { // The IPN is verified // update your db/process order... } else if (strcmp($res,"INVALID")==0) { // IPN invalid, log for manual investigation }
Это тоже будет работать на песочнице. Поэтому лучше всего провести пару тестов. Вы должны получить VERIFIED
а затем обработать команду order / update db. Когда все работает нормально, переключитесь с песочницы на реальный PayPal и лучше всего проверите это, по крайней мере, один раз.
Надеюсь, это поможет начать!